Appearance
aowlspt_betanotice.h
Source: abi/aowlspt_betanotice.h — 385 lines, 14 file-scope functions.
What this header owns
Reproduced verbatim from the header's own banner comment — these notes are frequently the only written record of why the subsystem is shaped the way it is.
text
aowlspt_betanotice.h -- THE MAIN-MENU BETA NOTICE, DRAWN ON THE OVERLAY.
What this is, and why it is not the other thing
-----------------------------------------------
The first attempt at a beta notice REPURPOSED the game's own seasons banner
(`Common UI/MenuScreen/SeasonsButton`) by rewriting its labels through
`LocalizedText::SetLabelText`. That write fully SUCCEEDED -- the host log
recorded "6 of 6 non-empty labels written" -- and the result still looked
wrong, because the labels it had written were the banner's PROGRESS widget
(`[Battlepass] [SeasonWidget/Progress] [12 / 40]`), so our caption rendered
to the right of a logo that is an Image and therefore could never be removed
by writing text. That is the canonical shape of a check that cannot fail: it
asserted a property of OUR OWN WRITE instead of a property of the finished
screen.
So the banner is simply HIDDEN now (`uxHideSeasons`), and the notice is
DRAWN, on the D3D11 overlay, where the position and the colour are ours and
are not negotiated with a BSG prefab every eighteen seconds.
How it draws without a second detour and without owning a hook
--------------------------------------------------------------
It is a PARTICIPANT of the shared per-frame region (`aowlspt_region.h`),
registered with a DRAW mask. That buys, for free and without one line of new
hook code:
- the Unity main thread, as a rider on the EXISTING
`EFT.UI.PreloaderUI::Update` detour -- no second detour is installed;
- ONE `aowl_p_p_seh` opened by the dispatcher around our callback. This
file therefore opens NO GUARD OF ITS OWN: `aowl_p_p_seh` is not
re-entrant, and a guard here would NEST and thereby DISARM the
dispatcher's;
- fault isolation: three faults and the region disables THIS participant
BY NAME, in the host log, while every other participant keeps running;
- a per-participant microsecond budget;
- rasterisation: `aowl_ov_region_append` in `abi/aowlspt_overlay.h` already
drains every published region command every frame and draws it with the
panel's own primitives, whether or not the F12 panel is open. Nothing in
the overlay had to change for this file to appear on screen.
NO PER-FRAME ALLOCATION. Every string is a file-scope `static const char[]`
built by the compiler; the region copies text INLINE into its command
(`AowlRegionCmd::text`), so there is no lifetime question and no heap.
The whole draw is a handful of integer/float stores into a fixed array.
MAIN MENU ONLY. `aowl_beta_set_menu` is driven from the host's existing
raid-state signal -- the same `gInRaidLast` the graphics post-process gates
on -- and the callback returns immediately when it is not in the menu. It
never reads input and never submits anything but FILL and TEXT commands, so
it cannot steal a click: the overlay's region append is pure rasterisation
with no hit testing.
WHERE IT DRAWS, and the one honest gap
--------------------------------------
Placement is a fraction of the back-buffer, so it survives a resolution
change. The back-buffer size is not published to the region by the overlay
(`aowl_region_set_screen` exists in the header but no one calls it), so this
file asks UNITY instead: `UnityEngine.Screen::get_width/get_height`, both
already in the byte-verified `aowl_mi2_targets` table of
`abi/aowlspt_invoke2.h`, resolved through `aowl_mi2_fn` which refuses on an
uncommitted page or a prologue mismatch. It is re-read once every
AOWL_BETA_RES_EVERY frames, not every frame. If the resolve refuses, this
feature DRAWS NOTHING and says so once -- it does not invent a resolution and
put the notice in a plausible-looking wrong place.
COLOUR. `AOWL_BETA_WARN` is byte-identical to the overlay's own house token
`AOWL_OV_WARN` = RGBA(226,170,80) -- the amber the manager panel already uses
for every warning. It is deliberately NOT the accent blue and deliberately
not the stock banner's green: this is a warning, and green is exactly what
the user rejected. The value is duplicated rather than included so this file
does not drag the 7,000-line overlay header into the host translation unit.Constants
AOWLSPT_BETANOTICE_HAOWL_BETA_BARAOWL_BETA_BGAOWL_BETA_CHAOWL_BETA_CWAOWL_BETA_GAPAOWL_BETA_PADAOWL_BETA_RES_EVERYAOWL_BETA_RES_GIVEUPAOWL_BETA_RGBAAOWL_BETA_WARNAOWL_BETA_WARN2
Types
struct AowlBetaState
Functions
| Signature | Line |
|---|---|
void aowl_beta_sayf(const char* fmt, ...) | 148 |
int32_t aowl_beta_target(const char* name) | 161 |
int32_t aowl_beta_resolution(void) | 172 |
void aowl_beta_tick(void* user, int64_t frame) | 212 |
void aowl_beta_draw(void* user, int64_t frame) | 234 |
void aowl_beta_set_menu(int32_t on) | 299 |
int32_t aowl_beta_set_pos(float cx, float ty) | 304 |
int32_t aowl_beta_set_pos_str(const char* s) | 317 |
int32_t aowl_beta_register(void) | 330 |
int32_t aowl_beta_unregister(void) | 362 |
int32_t aowl_beta_handle(void) | 376 |
int64_t aowl_beta_draws(void) | 377 |
int32_t aowl_beta_scr_w(void) | 378 |
int32_t aowl_beta_scr_h(void) | 379 |

