Menu screens: rock background, centred frame, logo, 3D hero
- Spielen hero panel shows the selected hero in 3D (cUI_NetGranny, game/ui/granny.h). - All menu screens draw on the options' rock wall; the main menu's 1024 frame is drawn centred over it, mouse and cursor shifted to match. - The main menu's and options' own pictures and the main menu's 3D scene are left out (textures hidden by surface, scene call redirected). - Logo top left: FX_SACREDLOGO.TGA, drawn added. - Game textures by name (game/ui/texture.h), textured and added quads. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
34a119433a
commit
db87e276bf
16 files changed
+620
-69
No files matched your search
+11
-3
@@ -189,8 +189,16 @@ below; our own background). Built on the shared screen kit
|
||||
Its entries are only needed for the load.
|
||||
- Left: the characters, newest save first (name, class, level; "im Spiel" for
|
||||
the one being played). Click selects, double click plays.
|
||||
- Middle: name, class and level, the world played last with its date. (A
|
||||
render of the hero is planned.)
|
||||
- Middle: name, class and level, the world played last with its date, and
|
||||
the hero in 3D with its equipment (2026-10-20): the game's cUI_NetGranny
|
||||
(game/ui/granny.h), the control the export screen and the multiplayer
|
||||
lobby showed heroes with. The character's hero file goes to
|
||||
`_workpreview.pax`, LoadHeroFile (path, 0, info) reads its hero info
|
||||
(class, equipment looks) without touching the player hero. Drawn without
|
||||
its name label, with the white light set, size factor 3.8 (game 2.5); its
|
||||
x is moved by (1365 - 1024) / 2, as it centres the model as in a 1024
|
||||
layout. Migrated characters without the shared hero show none until
|
||||
played.
|
||||
- Right: a grid campaigns x difficulties. A cell shows the save's date,
|
||||
"+ Autosave" when the autosave is newer, "Story abgeschlossen", "Neu" for a
|
||||
difficulty that is open but has no world, "–" when closed. Open: Bronze and
|
||||
@@ -306,5 +314,5 @@ kept, the newest file overall is the shared hero.
|
||||
## Open
|
||||
|
||||
- Quickload (row 0) does not know characters (not needed, user 2026-10-20).
|
||||
- Spielen screen: a render of the hero; scrolling the list beyond 9 characters.
|
||||
- Spielen screen: scrolling the list beyond 9 characters.
|
||||
- Multiplayer (see `todo.md`).
|
||||
+43
-5
@@ -2,8 +2,12 @@
|
||||
|
||||
Request (2026-10-20): the game's menu screens are laid out for 1024x768; we
|
||||
design our own UIs for them. There is no 16:9 artwork for the game, so the
|
||||
background is our own (option 3 of the ones discussed: dark, no picture), and
|
||||
the approach is shared by all menu screens. Target: 16:9, 1920x1080, which is
|
||||
background is our own, and the approach is shared by all menu screens. The
|
||||
background (user, 2026-10-20: "textured dark", the flat gradient looked
|
||||
black): the options window's rock wall, `GUI_OPTION_BACKGROUND<row><column>.TGA`
|
||||
(4 x 3 tiles of 256), scaled to cover the render target, tinted down,
|
||||
shaded towards the bottom and the sides. Game textures by name:
|
||||
`game/ui/texture.h`, drawn with `game::DrawTextured` (game/ui/draw.h). Target: 16:9, 1920x1080, which is
|
||||
1365x768 in UI units; wider screens only get more background at the sides
|
||||
(not designed for ultrawide).
|
||||
|
||||
@@ -16,9 +20,7 @@ the approach is shared by all menu screens. Target: 16:9, 1920x1080, which is
|
||||
layer's offset machinery with `Anchor::Canvas`; drawing, the cursor and the
|
||||
window's hit tests shifted alike). Mouse events go through `screen::Handle`
|
||||
(`hud::HandleCanvas`). Keys stay the window's.
|
||||
- In the main menu the game renders a classic 1024x768 frame (presented 4:3).
|
||||
While a screen's window is shown, `widescreen::SetWideMenuScreen` makes the
|
||||
menu thread render and present the full width.
|
||||
- The main menu thread renders the full width (no 4:3 frame any more).
|
||||
- Parts: `screen::Panel` (dark backdrop and the game's frame, `cUI_Frame`,
|
||||
game/ui/frame.h, made anew when its rect changes), `screen::Button` (a
|
||||
button of the game's with the look of one of the window's,
|
||||
@@ -33,6 +35,42 @@ the approach is shared by all menu screens. Target: 16:9, 1920x1080, which is
|
||||
- Inside the canvas scope the HUD layer does not stretch "full 1024 layout"
|
||||
quads (`g_canvasScope`).
|
||||
|
||||
## Main menu frame (2026-10-20)
|
||||
|
||||
Request: the background on all screens, the main menu's and the options
|
||||
window's own pictures removed.
|
||||
|
||||
- cUI_Manager's UI render (`0x7587b0`, hooked in mods/screen.cpp) on the
|
||||
menu thread: the background first, then `hud::RenderMenuFrame` runs the
|
||||
render with drawing shifted by (render width - 1024) / 2 and a viewport on
|
||||
the frame (3D parts). Windows inside draw in frame coordinates (their own
|
||||
HUD scopes are nested, so they do nothing).
|
||||
- Mouse positions are given to the game in frame coordinates: the
|
||||
borderless mod's `ToGame` subtracts `hud::MenuFrameOffsetX`. The cursor
|
||||
sprite (`cMouseCursor::DrawItem` 0x6555e0, drawn after the UI) is shifted
|
||||
by drawing only.
|
||||
- While a 16:9 screen is shown the frame is not shifted (offset 0): the
|
||||
screen draws itself across the width.
|
||||
- Full-screen windows in a game (options, `hud::RenderFramed`) get the
|
||||
background beside the frame instead of black.
|
||||
- The windows' pictures are left out by texture: the HUD layer tracks the
|
||||
texture bound to stage 0 (`SetTexture`, device vtable 35) and skips quads
|
||||
drawn with a hidden one (`hud::SetHiddenTextures`). Logged on the menu
|
||||
thread (texture ids requested from the cache, by caller; names by trying
|
||||
the names in the texture pak): main menu GUI_UW_OPTION1..12 + UI_MAIN_SKY,
|
||||
options UW_OPTION_1_01..12. This install uses the Underworld versions; the
|
||||
Ancaria ones (GUI_OPTION1..12, ...) were not seen and are not listed.
|
||||
- The main menu's 3D scene (sky UI_UW_MAIN_CENTER, water with the SACRED
|
||||
logo UI_MAIN_REF; render 0x75e620 on the scene object 0x75df10) is called
|
||||
from cUI_MainMenu::Render (0x7122c0) at 0x712bd9; that call is redirected
|
||||
to an empty function. cUI_Character (0x70f41b) still draws it.
|
||||
- Logo top left (2026-10-21), 48 from the edges, 124 high: FX_SACREDLOGO.TGA,
|
||||
the emblem (horns around a ring of runes) glowing blue on black without
|
||||
alpha, drawn added (blend ONE/ONE, `game::DrawTexturedAdded`) as the
|
||||
game's effects draw it. Other candidates: GUI_MAIN_LOGO (plain golden
|
||||
lettering), SACREDSYMBOL01/02 (model atlases), the emblem on the loading
|
||||
pictures (PAK\loading*.bmp, not in the paks). Screens may overlap it.
|
||||
|
||||
## Screens
|
||||
|
||||
- Spielen (the load window, cUI_Savegame): docs/characters.md, "Spielen
|
||||
|
||||
+11
-3
@@ -211,7 +211,15 @@ space far better. No 16:9 artwork exists for the game (user, 2026-10-20):
|
||||
we design our own UIs, using the width beyond the 1024 frame (now drawn in
|
||||
a centred 1024x768 viewport with black sides, hud.cpp FrameScope). Design
|
||||
for 16:9 (1920x1080, 1365x768 UI units), not ultrawide (user). Screen done
|
||||
2026-10-20 (docs/characters.md, "Spielen screen"; docs/screens.md). Open:
|
||||
the render of the selected hero (the hero panel shows text only; reuse
|
||||
cUI_Character's 3D hero?), list scrolling beyond 9 characters, larger
|
||||
2026-10-20 (docs/characters.md, "Spielen screen"; docs/screens.md). Hero
|
||||
in 3D done 2026-10-20. Open: list scrolling beyond 9 characters, larger
|
||||
heading font.
|
||||
|
||||
## Fine-tuning the Spielen and options screens (2026-10-21)
|
||||
|
||||
The user is very satisfied with the menu rework for now (rock background on
|
||||
all menu screens, centred menu frame, logo, Spielen screen with the 3D
|
||||
hero), but both the Spielen screen and the options window still need a lot
|
||||
of fine-tuning. Details to be collected when we get to it; known so far:
|
||||
list scrolling beyond 9 characters, larger heading font, the options
|
||||
window's layout in the width beyond its 1024 frame.
|
||||
+4
-2
@@ -67,9 +67,11 @@ Elsewhere (unknown / UI, leave alone for now): `0x40694a`, `0x4ec036`,
|
||||
| `0x006469d0` | loading screen: GDI BitBlt of bitmap + progress bar + text into the back buffer (fixed 1024x768) | render thread |
|
||||
| `0x006a0c60` | video/intro playback (unexamined) | |
|
||||
|
||||
The widescreen mod gives these frames a 1024x768 D3D viewport (set at
|
||||
The widescreen mod gives the loading screen a 1024x768 D3D viewport (set at
|
||||
`BeginScene` when the scene depth `+0x1d8` is 0) and the borderless mod
|
||||
presents only that area, scaled to the monitor.
|
||||
presents only that area, scaled to the monitor. The main menu thread renders
|
||||
the full width since 2026-10-20: its 1024x768 frame is drawn centred on the
|
||||
menu screens' background (docs/screens.md, "Main menu frame").
|
||||
|
||||
## Direct3D 7 render target limit
|
||||
|
||||
|
||||
Reference in new issue
Block a user