Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Plugin drawing and world data: canvas painter v2, world markers and map data (tracking issue)

Open
#285 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
csharp
Domain
desktop, game-dev

Research direction

This is a tracking issue for a series of plugin canvas, world drawing, and world data changes; it does not name source files or tests. Start by reading the dependency map and the individual PR descriptions as they are linked. Done means the agreed PRs are opened in the listed order, with each PR carrying tests and passing the portable gate.

Written by the indexing model from the issue text.

Description

I have been building plugin HUDs, maps and overlays on my fork (mainly for my Aethrix plugin) and would like to offer the work upstream. It is a lot, and most of it builds on earlier pieces, so I want to send it the way you prefer: one topic per pull request. This issue is the map: what the work adds, what depends on what, and the order the PRs would come in.

Everything here has run on my fork for several weeks against a local ACE server, on macOS with a Retina display. Each PR will carry its own tests and pass the portable gate.

What it adds for plugins

  • A fuller canvas painter. Correct alpha, fonts the plugin brings, anti-aliased shapes, image regions and nine-slice, sharp drawing on high-density displays, canvas layers, and keyboard input.
  • More canvas placement. A canvas can read the screen size, hear presses outside itself, sit inside a markup window, and have the host remember where the player left it.
  • Drawing in the world. Icons over objects and spots (debuffs over a monster, for example), ground shapes (rings, discs and arcs that follow the land), and see-through filled triangles. These add to the existing WorldLines and WorldLabels.
  • World data. Any landblock's outdoor terrain, the doorways of indoor cells, and a dungeon floorplan with floor heights, doorway kinds and object floors such as bridges.

Order and dependencies

flowchart LR
  subgraph Fixes
    F1[F1 world lines on high-density displays]
    F2[F2 world labels come down on logoff]
  end
  subgraph Painter
    P0[P0 canvas alpha] --> P1[P1 fonts]
    P0 --> P2[P2 shapes]
    P1 --> P4[P4 high-density canvases]
    P2 --> P4
    P3[P3 image regions]
    P5[P5 layers]
    P6[P6 keyboard]
  end
  subgraph Canvas
    P5 --> C1[C1 screen size + outside press]
    P4 --> C2[C2 canvas in a markup window]
    C1 --> C2 --> C3[C3 remembered canvas position]
  end
  subgraph World
    P4 --> W1[W1 world icons]
    W1 --> W2[W2 ground shapes]
    W2 --> W3[W3 world triangles]
  end
  subgraph Data
    D1[D1 landblock terrain]
    D2[D2 cell doorways] --> D3[D3 floorplan heights + doorway kinds] --> D4[D4 object floors]
  end

Anything without an arrow into it can be reviewed at any time. Where there is an arrow, the later PR is opened against main but says which PR it is stacked on, and I will rebase it once that one merges (as with #236, #238 and #239).

The pull requests

Links are added here as each PR opens.

Fixes (independent, in your existing code)

  • F1 World lines cover the whole world pass on high-density displays. Today the world-lines viewport uses window points, so on a Retina display plugin world lines are drawn into a quarter of the screen.
  • F2 World labels come down when the character leaves the world. They currently stay up after logoff.

Canvas painter v2

  • P0 Canvas alpha: translucent canvas content shows at the alpha it was painted with (the interface renderer paints into premultiplied targets). (base for P1 and P2)
  • P1 Fonts a plugin can draw canvas text with. (after P0)
  • P2 Anti-aliased shapes on the canvas painter. (after P0)
  • P3 Image regions and nine-slice. (independent)
  • P4 Plugin canvases on high-density displays, including the pixel scale on the interface render context. (after P1 and P2)
  • P5 Canvas layers and banded order among a plugin's canvases. (independent)
  • P6 Canvas keyboard input. (builds on #208)

Canvas placement

  • C1 Canvases can read the screen size and hear presses outside them. (after P5)
  • C2 A plugin canvas can sit inside a markup window. (after P4 and C1)
  • C3 The host remembers the position of canvases that opt in. (after C2)

Drawing in the world

  • W1 Plugin icons over objects and positions in the world, with a demo plugin. (after P4)
  • W2 Ground shapes: rings, discs and arcs that follow the land, culled to the view. (after W1)
  • W3 See-through filled triangles in the world, drawn with the ground-shape batch. (after W2)

World data

  • D1 A plugin can read any landblock's outdoor terrain. (independent)
  • D2 Indoor cells list their doorways. (independent)
  • D3 Dungeon floorplan floor heights, doorway kinds and floor-reaching walls. (after D2)
  • D4 Dungeon floorplan object floors (bridges and platforms). (after D3)

Not included

Fork-only work that changes the client's look (the modern plugin theme, dock redesign and extra themes) stays out of this series. If you want it, I can offer it separately.

If you would rather see any of this split, grouped or ordered differently, or would like some of it to stay out of the client, tell me here before I open the PRs.

Dominant language
C#
Stars
21
Forks
11
Avg merge
1d 2h
Merged PRs (30d)
70

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from eriknihlen/OpenAC

All issues in eriknihlen/OpenAC

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.