Skip to content

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_H
  • AOWL_BETA_BAR
  • AOWL_BETA_BG
  • AOWL_BETA_CH
  • AOWL_BETA_CW
  • AOWL_BETA_GAP
  • AOWL_BETA_PAD
  • AOWL_BETA_RES_EVERY
  • AOWL_BETA_RES_GIVEUP
  • AOWL_BETA_RGBA
  • AOWL_BETA_WARN
  • AOWL_BETA_WARN2

Types

  • struct AowlBetaState

Functions

SignatureLine
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

aoughwl — self-hosted platform for things n stuff. Contact / Support on Discord for access to the private backends.