Merge upstream benilla main (b396bbf6) into everwood-graphics

105 upstream commits (v0.2.0 ba7fe6e2 -> b396bbf6) onto the graphics programme.

Conflicts resolved, keeping both sides:
- OptionsFrame.xml: upstream renamed every layer global (Options* -> BenillaOptions*,
  OPTIONS_* -> BENILLA_OPTIONS_*, KeyBindings* -> BenillaKeyBindings*, ...) and moved handlers
  to `this`; the Advanced Graphics page (rows, strings, presets) is carried over onto the new
  names, and upstream's Click-to-Move / Spell Detail rows and nameplate store are kept.
- cvars.rs -> cvars/{mod,table}.rs split: our REGISTERED rows go into table.rs, the preset
  ladder + tests into mod.rs beside upstream's ffx/gxMaximize tests.
- video.rs: lighting arms + upstream gxMaximize/ffx arms; VideoConfig keeps both field sets.
- ffx_glow.rs: SkyDither and FfxSwitches both registered/extracted; dither lane on
  upstream's switched player state.
- dest_fx.rs: our AreaLightPlan radius + upstream's spellEffectLevel shard scale.
- fixtures.rs: seed_perf_crowd + upstream's set_enemy_plates.
- options_tests.rs: tipped/described counts 100/99 (upstream 80 + ours 20/19); our Advanced
  Graphics tests use the renamed globals and `this`.
- game_plugins.rs: Update actionable ceiling 4,999 = upstream 4,980 + 19 ours (measured).
- docs/MAP.md regenerated with scripts/genmap.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
pkuzic
2026-10-02 22:35:23 +01:00
co-authored by Claude Opus 5.5
534 changed files with 61657 additions and 18181 deletions
+25 -8
View File
@@ -2,8 +2,8 @@
benilla is a faithful 1.12.1 client. It is the foundation people build on, not the place to get
creative: a change is accepted when it makes benilla more like 1.12.1 or fixes a bug, with
evidence from the reference, in one small piece, with the gates green. Everything else is a
fork, and forks are welcome.
evidence from the reference, in one small piece, with the gates green. Everything else lives on
top of benilla, in a crate of its own or a fork, and both are welcome.
## Where to start
@@ -20,16 +20,32 @@ taken.
- A step closer to 1.12.1: a missing packet, verb, window, effect or behaviour, done the way
the real client does it.
- A correction where benilla and the reference disagree, with the reference fact stated.
- Whatever the stock 1.12.1 client loads from a patch, benilla loads: models, textures or data
rows that 1.12.1 shows and benilla does not are a bug.
## What does not
- Features 1.12.1 does not have, and behaviour changed because it seems better. A deviation
from the reference is the maintainer's call and is recorded where it lives; a pull request is
not the place to propose one.
- Anything from a WoW install: art, models, sounds, maps, data. The one exception is interface
code (FrameXML and GlueXML), and only through the migration recipe in `docs/METHOD.md`.
- Features 1.12.1 does not have, including what 1.12 client mods add (a new key binding, a spell
queue, new Lua functions, graphics past 1.12's), and behaviour changed because it seems better.
They live on top of benilla ("Building on top"), so that what benilla does is what 1.12.1 does,
for everyone who builds on it. A deviation from the reference is the maintainer's call and is
recorded where it lives; a pull request is not the place to propose one.
- Anything from a WoW install: art, models, sounds, maps, data, and interface code (FrameXML and
GlueXML), which runs off the player's own install (`docs/METHOD.md`).
- Big or mixed changes. One change per pull request, small enough to read in one sitting.
## Building on top
A feature 1.12.1 does not have lives in a crate of its own that adds its Bevy plugins through
`benilla_app::run_with`, as `crates/benilla-app/examples/extended_launcher.rs` shows, or in a
fork. A client started through `run_with` says `extended` in its build line, so its reports read
apart from stock benilla's. The crate keeps its own settings, never rows in benilla's CVar table,
which every addon reads.
benilla opens a piece of itself to such a crate only when its own 1.12.1 work creates that piece,
never for the crate alone, and promises no stable API: a crate pins the benilla revision it
builds on. What a crate cannot reach stays a fork's.
## How a change is judged
1. `scripts/gates.sh` is green: fmt, clippy with warnings denied, the workspace tests (once
@@ -95,7 +111,8 @@ out of scope is closed with the reason.
`series` and `hotspot`.
- **The loop.** `cargo play` builds and runs the play profile. `scripts/check.sh` verifies a
round of work; `scripts/gates.sh` is the full chain, and it opens a window for the engine boot
checks, so it needs a display. Work on a branch.
checks, so it needs a display. `WOW_STOCK_UI=1` boots a dev build on the stock interface
alone, without benilla's layer. Work on a branch.
## Reporting a bug
+55 -25
View File
@@ -101,17 +101,17 @@
## Modules (top-level, per crate)
- **benilla-adt** (lib.rs): combined_alpha
- **benilla-app** (lib.rs): addon_harness area area_poi area_trigger asset_churn aura_visual bindings blob_shadow bowstring camera_shake capture char_create char_select character_shadow chat_bubble chr_classes cinematic combat_log combat_text console crash creature_anim cursor cvars death debug_panel dev doodad_events dynamic_interior entities fishing_line footprints game_plugins game_tip glue glue_strings go_anim go_templates hover_log items loading_screen local_state login minimap monkey_gfx name_persist nameplates names net npc_text opaque2d pending_item_ops perf pipe_warm player poi_marker portrait preflight probe_shield query_cache quest_markers raid_marks ranged_flex realm_select realmlist run_mode screen_fade screenshot shaders shadow_core shutdown smart_rect sound spell swing_refusal target test_support text_filter text_reshape textinput torch_shadow transport tutorial ui_action ui_auction ui_aura ui_bank ui_battlefield ui_battlefield_positions ui_battlefield_score ui_bind_confirm ui_binder ui_cast ui_char ui_chat ui_craft ui_dialog_verbs ui_dressup ui_duel ui_follow ui_gamma ui_gm_ticket ui_gossip ui_guild ui_hide ui_honor ui_inspect ui_instance ui_item_text ui_items ui_layout ui_logout ui_loot ui_loot_roll ui_macro ui_mail ui_merchant ui_mirror ui_models ui_net ui_party ui_pass ui_pet ui_pet_book ui_pet_doll ui_pet_stats ui_petition ui_quest ui_quest_log ui_quest_share ui_reputation ui_saved ui_script ui_session ui_shapeshift ui_social ui_spellbook ui_stable ui_summon ui_tabard ui_talent ui_talent_wipe ui_taxi ui_text ui_tooltip ui_trade ui_tradeskill ui_trainer ui_unit ui_world_map video volumetric_fog vplates weapon_trail world_backdrop world_shadow world_state world_state_ui
- **benilla-assets** (lib.rs): adt anim_rng blp column_grid coords gpu_blp m2 materials minimap_grid model spatial_cache terrain tex_filter trace water_depth wdt wmo world_assets
- **benilla-formats** (lib.rs): anim_data area_poi area_sound area_table area_trigger auction_house bank_bag_slot_prices camera_shakes cfg_categories chain characters chat_channels chr_classes cinematics creature_families creature_sound creature_types creatures dbc death_thud durability elevators emit_timing emote_text emotes environmental_damage exhaustion factions fire_light footsteps game_tips gameobjects garble gm_ticket_category ground_effects install item_random_properties item_sounds item_visuals itembagfamily itemclass items itemsets itemsubclass languages light liquid loading_screen lock lock_type macro_icons maps material minimap_translate models npc_greeting page_text_material particles pet_stats quest_headers quest_info race_pvp_team race_sound ribbons room_claim server_messages sheathe skill_lines sound_entries sound_provider sound_water spell_focus spell_mechanic spell_visual spells stable_slot_prices stationery talents taxi taxi_nodes taxi_path terrain text_filter_lists tga transport_period transports unit_blood value_track vocal_ui_sounds wdl weapon_impact weapon_swing wmo_area world_map_area world_map_continent world_map_overlay world_state_ui wow_ini zone_map
- **benilla-m2** (lib.rs): error model skin tests track
- **benilla-mpq** (lib.rs): crypto
- **benilla-protocol** (lib.rs): auth events guid messages wire world
- **benilla-srp** (lib.rs): vanilla_header
- **benilla-ui** (lib.rs): bindings_xml civil framexml justify layout loader markup messages order script source strings toc widget
- **benilla-visual** (lib.rs): relight
- **benilla-world** (lib.rs): art_scope assets bgwin billboard boot build_id clouds clutter collision decal dev_state doodad_anim entity_shade exterior_cull ffx_glow final_pass frame_pace ground_fx instance_tint interact interior lighting liquid log_ring mac_quit map_proj mat_anim_table mesh_tag model_fade model_forms model_render modkeys particles ribbons ride_frame rig_anim rig_palette rig_rider schedule shaders sky sky_order skybox static_gx static_merge straddle sun surface terrain_stream thread_qos view vis_chain water_fx wdl weather wmo_portal world_census world_map world_plugins world_point world_unit worldview zfill
- **benilla-adt** (lib.rs): combined_alpha
- **benilla-app** (lib.rs): addon_harness area area_poi area_trigger asset_churn aura_visual bindings blob_shadow bowstring camera_shake capture char_create char_select character_shadow chat_bubble chr_classes cinematic combat_log combat_text console crash creature_anim creature_type cursor cvars death debug_panel dev doodad_events dynamic_interior entities fishing_line footprints game_plugins game_tip glue glue_strings go_anim go_templates hover_log items loading_screen local_state login minimap monkey_gfx name_persist nameplates names net npc_text opaque2d pending_item_ops perf pipe_warm player poi_marker portrait post preflight probe_shield query_cache quest_markers raid_marks ranged_flex realm_select realmlist run_mode screen_fade screenshot script_calls shaders shadow_core shutdown sky_quality smart_rect sound spell ssao swing_refusal target test_support text_filter text_reshape textinput torch_shadow transport tutorial ui_action ui_auction ui_aura ui_bank ui_battlefield ui_battlefield_positions ui_battlefield_score ui_bind_confirm ui_binder ui_cast ui_char ui_chat ui_craft ui_dialog_verbs ui_dressup ui_duel ui_follow ui_gamma ui_gm_ticket ui_gossip ui_guild ui_honor ui_inspect ui_instance ui_item_text ui_items ui_layout ui_logout ui_loot ui_loot_roll ui_macro ui_mail ui_merchant ui_mirror ui_models ui_net ui_party ui_pass ui_pet ui_pet_book ui_pet_doll ui_pet_stats ui_petition ui_quest ui_quest_log ui_quest_share ui_reputation ui_saved ui_script ui_session ui_shapeshift ui_social ui_spellbook ui_stable ui_summon ui_tabard ui_talent ui_talent_wipe ui_taxi ui_text ui_tooltip ui_trade ui_tradeskill ui_trainer ui_unit ui_world_map video volumetric_fog volumetric_light vplates weapon_trail world_backdrop world_shadow world_state world_state_ui zone_skybox
- **benilla-assets** (lib.rs): adt anim_rng blp column_grid coords gpu_blp m2 materials minimap_grid model spatial_cache terrain tex_filter trace water_depth wdt wmo world_assets
- **benilla-formats** (lib.rs): anim_data area_poi area_sound area_table area_trigger auction_house bank_bag_slot_prices camera_shakes cfg_categories chain characters chat_channels chr_classes cinematics creature_families creature_sound creature_types creatures dbc death_thud durability elevators emit_timing emote_text emotes environmental_damage exhaustion factions fire_light footsteps game_tips gameobjects garble gm_ticket_category ground_effects install item_random_properties item_sounds item_visuals itembagfamily itemclass items itemsets itemsubclass languages light liquid loading_screen lock lock_type macro_icons maps material minimap_translate models monkey_zone_grade npc_greeting packages page_text_material particles pet_stats quest_headers quest_info race_creature_type race_pvp_team race_sound ribbons room_claim server_messages sheathe skill_lines sound_entries sound_provider sound_water spell_focus spell_mechanic spell_visual spells stable_slot_prices stationery talents taxi taxi_nodes taxi_path terrain text_filter_lists tga transport_period transports unit_blood value_track vocal_ui_sounds wdl weapon_impact weapon_swing wmo_area world_map_area world_map_continent world_map_overlay world_state_ui wow_ini zone_map
- **benilla-m2** (lib.rs): error model skin tests track
- **benilla-mpq** (lib.rs): crypto
- **benilla-protocol** (lib.rs): auth events guid messages wire world
- **benilla-srp** (lib.rs): vanilla_header
- **benilla-ui** (lib.rs): bindings_xml civil framexml justify layout loader markup messages order script source status strings toc widget
- **benilla-visual** (lib.rs): relight
- **benilla-world** (lib.rs): art_scope assets bgwin billboard boot build_id clouds clutter collision decal dev_state doodad_anim entity_shade exterior_cull ffx_glow final_pass frame_pace ground_fx instance_tint interact interior layout_keys lighting liquid log_ring mac_quit map_proj mat_anim_table mesh_tag model_fade model_forms model_render modkeys particles ribbons ride_frame rig_anim rig_palette rig_rider schedule shaders sky sky_fx sky_order skybox skybox_anim static_gx static_merge straddle sun surface terrain_stream thread_qos view vis_chain water_fx wdl weather wind wmo_portal world_census world_map world_plugins world_point world_unit worldview zfill
## CLI binaries
@@ -125,23 +125,29 @@
- `embedded://benilla_app/shaders/shadow_caster.wgsl`
- `embedded://benilla_app/shaders/shadow_caster_cutout_prepass.wgsl`
- `embedded://benilla_app/shaders/ssao.wgsl`
- `embedded://benilla_app/shaders/ui_add.wgsl`
- `embedded://benilla_app/shaders/ui_gamma.wgsl`
- `embedded://benilla_app/shaders/ui_node_gamma.wgsl`
- `embedded://benilla_app/shaders/ui_quad.wgsl`
- `embedded://benilla_app/shaders/ui_slice_gamma.wgsl`
- `embedded://benilla_assets/shaders/emissive_hook.wgsl`
- `embedded://benilla_assets/shaders/enhanced_water.wgsl`
- `embedded://benilla_assets/shaders/fog_hook.wgsl`
- `embedded://benilla_assets/shaders/liquid.wgsl`
- `embedded://benilla_assets/shaders/monkey_frame.wgsl`
- `embedded://benilla_assets/shaders/moonlight_hook.wgsl`
- `embedded://benilla_assets/shaders/shadow_hook.wgsl`
- `embedded://benilla_assets/shaders/terrain.wgsl`
- `embedded://benilla_assets/shaders/wdl.wgsl`
- `embedded://benilla_assets/shaders/wet_hook.wgsl`
- `embedded://benilla_assets/shaders/wind_hook.wgsl`
- `embedded://benilla_assets/shaders/wow_model.wgsl`
- `embedded://benilla_world/shaders/celestial.wgsl`
- `embedded://benilla_world/shaders/cloud.wgsl`
- `embedded://benilla_world/shaders/ffx_glow.wgsl`
- `embedded://benilla_world/shaders/sky.wgsl`
- `embedded://benilla_world/shaders/sky_fx.wgsl`
- `embedded://benilla_world/shaders/sky_vertex.wgsl`
- `embedded://benilla_world/shaders/star.wgsl`
- `embedded://benilla_world/shaders/static_gx.wgsl`
@@ -162,7 +168,9 @@
- `WOW_AMBIGUITY_DUMP_POST` — benilla-app/src/game_plugins.rs
- `WOW_ANIM_COST` — benilla-app/src/creature_anim/driver.rs
- `WOW_ANIM_PARK_ALL` — benilla-app/src/creature_anim/lod.rs
- `WOW_ANISO` — benilla-app/src/cvars.rs, benilla-assets/src/tex_filter.rs
- `WOW_ANISO` — benilla-app/src/cvars/mod.rs, benilla-assets/src/tex_filter.rs
- `WOW_AO` — benilla-app/src/ssao.rs
- `WOW_AO_DEBUG` — benilla-app/src/ssao.rs
- `WOW_API_DUMP` — benilla-app/tests/world_api_wall.rs
- `WOW_ARCH_CENSUS` — benilla-app/src/perf/mod.rs
- `WOW_ART_RADIUS` — benilla-world/src/art_scope.rs
@@ -183,16 +191,21 @@
- `WOW_BUBBLE_TRACE` — benilla-app/src/chat_bubble.rs
- `WOW_CAM_CHANGED` — benilla-app/src/perf/mod.rs
- `WOW_CAM_DUMP` — benilla-app/src/player/camera.rs
- `WOW_CAPTURE` — benilla-app/src/capture/mod.rs, benilla-app/src/capture/scenarios.rs, benilla-app/src/char_select/addons.rs, benilla-app/src/cvars.rs, benilla-app/src/lib.rs, benilla-app/src/local_state.rs, benilla-app/src/login/mod.rs, benilla-app/src/name_persist.rs, benilla-app/src/net.rs, benilla-app/src/player/camera_saved.rs, benilla-app/src/run_mode.rs, benilla-app/src/sound/mod.rs, benilla-app/src/ui_chat/settings.rs, benilla-app/src/ui_chat/tests.rs, benilla-app/src/ui_macro/tests.rs, benilla-app/src/ui_saved.rs, benilla-app/src/ui_script/addons.rs, benilla-app/src/ui_script/mod.rs, benilla-app/src/ui_script/world_entry_tests.rs, benilla-app/src/video.rs, benilla-app/src/volumetric_fog.rs, benilla-world/src/bgwin.rs, benilla-world/src/clouds/mod.rs, benilla-world/src/dev_state.rs, benilla-world/src/liquid/surface.rs
- `WOW_CAPTURE` — benilla-app/src/capture/mod.rs, benilla-app/src/capture/scenarios.rs, benilla-app/src/char_select/addons.rs, benilla-app/src/cvars/mod.rs, benilla-app/src/dynamic_interior.rs, benilla-app/src/lib.rs, benilla-app/src/local_state.rs, benilla-app/src/login/mod.rs, benilla-app/src/name_persist.rs, benilla-app/src/net.rs, benilla-app/src/player/camera_saved.rs, benilla-app/src/run_mode.rs, benilla-app/src/sound/mod.rs, benilla-app/src/ui_chat/settings.rs, benilla-app/src/ui_chat/tests.rs, benilla-app/src/ui_macro/tests.rs, benilla-app/src/ui_saved.rs, benilla-app/src/ui_script/addons.rs, benilla-app/src/ui_script/layer_tests.rs, benilla-app/src/ui_script/mod.rs, benilla-app/src/ui_script/world_entry_tests.rs, benilla-app/src/video.rs, benilla-app/src/volumetric_fog.rs, benilla-app/src/volumetric_light.rs, benilla-world/src/bgwin.rs, benilla-world/src/clouds/mod.rs, benilla-world/src/dev_state.rs, benilla-world/src/liquid/surface.rs, benilla-world/src/sky_fx.rs, benilla-world/src/terrain_stream/queries.rs, benilla-world/src/wind/mod.rs
- `WOW_CAPTURE_AGE` — benilla-app/src/capture/mod.rs
- `WOW_CAPTURE_CVARS` — benilla-app/src/cvars/mod.rs
- `WOW_CAPTURE_DEADLINE` — benilla-app/src/capture/mod.rs
- `WOW_CAPTURE_OUT` — benilla-app/src/capture/mod.rs
- `WOW_CAPTURE_REHOVER` — benilla-app/src/ui_script/mod.rs
- `WOW_CAPTURE_SKY_T` — benilla-world/src/sky_fx.rs
- `WOW_CAPTURE_STABLE` — benilla-app/src/capture/mod.rs
- `WOW_CAPTURE_UI` — benilla-app/src/capture/scenarios.rs, benilla-app/src/ui_script/mod.rs, benilla-app/src/video.rs
- `WOW_CAPTURE_WATER_T` — benilla-world/src/liquid/surface.rs, benilla-world/src/liquid/waves.rs
- `WOW_CAPTURE_WIND_T` — benilla-world/src/wind/mod.rs
- `WOW_CAST_TRACE` — benilla-app/src/net.rs
- `WOW_CHAR` — benilla-app/src/capture/probe_mail.rs, benilla-app/src/char_select/mod.rs, benilla-app/src/cvars.rs, benilla-app/src/login/mod.rs, benilla-app/src/net.rs, benilla-app/src/realm_select/smoke.rs, benilla-app/src/run_mode.rs
- `WOW_CENSUS_PLACE` — benilla-world/src/lighting/daylight/census.rs
- `WOW_CENSUS_WMO` — benilla-world/src/lighting/daylight/census.rs
- `WOW_CHAR` — benilla-app/src/capture/probe_mail.rs, benilla-app/src/char_select/mod.rs, benilla-app/src/cvars/mod.rs, benilla-app/src/login/mod.rs, benilla-app/src/net.rs, benilla-app/src/realm_select/smoke.rs, benilla-app/src/run_mode.rs
- `WOW_CHARCREATE_DIALS` — benilla-app/src/char_create/mod.rs
- `WOW_CHARCREATE_NAME` — benilla-app/src/char_create/mod.rs
- `WOW_CHARCREATE_PICK` — benilla-app/src/capture/mod.rs, benilla-app/src/char_create/mod.rs
@@ -200,7 +213,7 @@
- `WOW_CHARCREATE_SHOT_OUT` — benilla-app/src/char_create/mod.rs
- `WOW_CHARSELECT_ADDONS` — benilla-app/src/char_select/mod.rs
- `WOW_CHARSELECT_DIALOG` — benilla-app/src/char_select/mod.rs
- `WOW_CHARSELECT_PICK` — benilla-app/src/char_select/mod.rs, benilla-app/src/cvars.rs
- `WOW_CHARSELECT_PICK` — benilla-app/src/char_select/mod.rs, benilla-app/src/cvars/mod.rs
- `WOW_CHARSELECT_SHOT` — benilla-world/src/bgwin.rs
- `WOW_CHARSELECT_SHOT_AT` — benilla-app/src/char_select/mod.rs
- `WOW_CHARSELECT_SHOT_OUT` — benilla-app/src/char_select/mod.rs
@@ -212,7 +225,7 @@
- `WOW_CLOUD_DUMP` — benilla-world/src/clouds/mod.rs
- `WOW_CLUSTERS` — benilla-app/src/player/setup.rs
- `WOW_CLUTTER_ALPHA` — benilla-world/src/clutter.rs
- `WOW_CLUTTER_DENSITY` — benilla-app/src/cvars.rs, benilla-app/src/lib.rs, benilla-world/src/clutter.rs
- `WOW_CLUTTER_DENSITY` — benilla-app/src/cvars/mod.rs, benilla-app/src/lib.rs, benilla-world/src/clutter.rs
- `WOW_CLUTTER_FADE` — benilla-world/src/clutter.rs
- `WOW_COLUMN_COST` — benilla-assets/src/column_grid.rs
- `WOW_CPU_CENSUS` — benilla-app/src/perf/census.rs
@@ -222,7 +235,7 @@
- `WOW_CULLDUMP` — benilla-world/src/wmo_portal/mod.rs
- `WOW_CULL_TRACE` — benilla-world/src/exterior_cull.rs
- `WOW_CURSOR_TRACE` — benilla-app/src/cursor.rs
- `WOW_DATA` — benilla-app/src/local_state.rs, benilla-formats/src/install.rs, benilla-formats/tests/wow_data_env.rs, benilla-formats/tests/wow_data_none.rs
- `WOW_DATA` — benilla-app/src/local_state.rs, benilla-formats/src/install.rs, benilla-formats/tests/project_folder.rs, benilla-formats/tests/wow_data_env.rs, benilla-formats/tests/wow_data_none.rs, benilla-world/src/lighting/daylight/census.rs
- `WOW_DAYLIGHT` — benilla-world/src/lighting/daylight.rs
- `WOW_DAYLIGHT_SEAM_EPS` — benilla-world/src/lighting/daylight.rs
- `WOW_DEMO_BOTTOM_BARS` — benilla-app/src/ui_script/mod.rs
@@ -241,13 +254,14 @@
- `WOW_EMIT_DUMP` — benilla-world/src/particles/emitdump.rs
- `WOW_ENTITY_CENSUS` — benilla-app/src/capture/probes/world_census.rs, benilla-app/src/dev.rs
- `WOW_FADE_NEAR` — benilla-world/src/terrain_stream/spawn/mod.rs
- `WOW_FARCLIP` — benilla-app/src/cvars.rs, benilla-world/src/view.rs
- `WOW_FARCLIP` — benilla-app/src/cvars/mod.rs, benilla-world/src/view.rs
- `WOW_FEED_COST` — benilla-app/src/ui_items/feed.rs
- `WOW_FEED_GATE_CHECK` — benilla-app/src/ui_script/gate.rs, benilla-world/src/bgwin.rs
- `WOW_FEED_GATE_TRACE` — benilla-app/src/ui_script/gate.rs, benilla-world/src/bgwin.rs
- `WOW_FIXED_DT` — benilla-world/src/frame_pace.rs
- `WOW_FOGMODEL` — benilla-world/src/lighting/fog_model.rs
- `WOW_FOG_DUMP` — benilla-world/src/lighting/resolve.rs, benilla-world/src/liquid/query.rs
- `WOW_FOLIAGE_WIND` — benilla-world/src/wind/mod.rs
- `WOW_FOLLOW_TRACE` — benilla-app/src/player/follow.rs
- `WOW_FORCE_SUB` — benilla-world/src/liquid/mod.rs
- `WOW_FPS_` — benilla-world/src/bgwin.rs
@@ -287,17 +301,19 @@
- `WOW_GX_FADE_TRACE` — benilla-world/src/static_gx/cull.rs
- `WOW_GX_PERF` — benilla-world/src/static_gx/mod.rs
- `WOW_HIT_COST` — benilla-app/src/ui_script/input.rs
- `WOW_HOST` — benilla-app/src/cvars.rs, benilla-app/src/realmlist.rs
- `WOW_HOST` — benilla-app/src/cvars/mod.rs, benilla-app/src/realmlist.rs
- `WOW_HOVER_LOG` — benilla-app/src/hover_log.rs
- `WOW_HOVER_LOG_REPORT` — benilla-app/src/lib.rs
- `WOW_HOVER_PROBE` — benilla-app/src/target/hover_probe.rs
- `WOW_INDIRECT` — benilla-world/src/world_plugins.rs
- `WOW_INTERIOR_COST` — benilla-world/src/interior.rs
- `WOW_INTERIOR_DAYLIGHT` — benilla-app/src/dynamic_interior.rs
- `WOW_INTERIOR_LOG` — benilla-world/src/entity_shade.rs, benilla-world/src/interior.rs, benilla-world/src/model_fade.rs
- `WOW_IO_BUFFER` — benilla-app/src/sound/mixer.rs
- `WOW_JITTER` — benilla-app/src/capture/probes/jitter.rs, benilla-app/src/dev.rs
- `WOW_JITTER_RAW` — benilla-app/src/capture/probes/jitter.rs
- `WOW_LAMPFOG` — benilla-app/src/volumetric_fog.rs
- `WOW_LAMP_SCAN` — benilla-world/src/lighting/daylight/census.rs
- `WOW_LAYOUT_DERIVE_TRACE` — benilla-ui/src/script/model.rs
- `WOW_LAYOUT_PROF` — benilla-ui/src/script/layout.rs
- `WOW_LAYOUT_TOUCH_TRACE` — benilla-ui/src/script/model.rs
@@ -339,7 +355,7 @@
- `WOW_MOVE_SPEED` — benilla-app/src/player/setup.rs
- `WOW_MOVE_TRACE` — benilla-assets/src/trace.rs
- `WOW_MOVE_TRACE_TAGS` — benilla-assets/src/trace.rs
- `WOW_MSAA` — benilla-app/src/cvars.rs, benilla-world/src/view.rs
- `WOW_MSAA` — benilla-app/src/cvars/mod.rs, benilla-world/src/view.rs
- `WOW_MT_EXTRACT` — benilla-app/src/lib.rs
- `WOW_MT_POSTUPDATE` — benilla-app/src/lib.rs
- `WOW_MT_UPDATE` — benilla-app/src/lib.rs
@@ -379,6 +395,7 @@
- `WOW_PARTICLE_NODEPTH` — benilla-world/src/particles/render.rs
- `WOW_PART_CHURN` — benilla-app/src/perf/mod.rs
- `WOW_PASS` — benilla-app/src/login/mod.rs, benilla-app/src/net.rs, benilla-app/src/run_mode.rs, benilla-protocol/examples/login_refusal_probe.rs, benilla-protocol/examples/park_probe.rs
- `WOW_PERF_CROWD` — benilla-app/src/capture/fixtures.rs
- `WOW_PERF_HUD` — benilla-app/src/perf/hud.rs
- `WOW_PHASE` — benilla-app/src/capture/phase_probe.rs, benilla-app/src/dev.rs, benilla-world/src/bgwin.rs
- `WOW_PHASE_AT` — benilla-app/src/capture/phase_probe.rs
@@ -452,13 +469,14 @@
- `WOW_PROBE_UNCAP` — benilla-app/src/capture/mod.rs
- `WOW_PROBE_VENDOR_SWAP` — benilla-app/src/dev.rs
- `WOW_PROBE_VSYNC` — benilla-app/src/capture/mod.rs
- `WOW_RAIN_SURFACES` — benilla-world/src/weather/wetness.rs
- `WOW_REALM` — benilla-app/src/realm_select/mod.rs
- `WOW_REALM_SMOKE` — benilla-app/src/realm_select/smoke.rs
- `WOW_REFUSE_LOGIN` — benilla-app/src/net/io.rs
- `WOW_REMOTE_FLAT` — benilla-app/src/net/motion/remote.rs
- `WOW_REMOTE_IDLE_GATE` — benilla-app/src/net/motion/remote.rs
- `WOW_REMOTE_SNAP` — benilla-app/src/net/motion/remote.rs
- `WOW_RENDER_SCALE` — benilla-app/src/cvars.rs, benilla-app/src/world_backdrop.rs
- `WOW_RENDER_SCALE` — benilla-app/src/cvars/mod.rs, benilla-app/src/world_backdrop.rs
- `WOW_RESIZE` — benilla-app/src/capture/mod.rs
- `WOW_RES_CENSUS` — benilla-app/src/perf/census.rs
- `WOW_REVEAL` — benilla-app/src/capture/probes/reveal.rs, benilla-app/src/dev.rs
@@ -472,9 +490,12 @@
- `WOW_SHADOW_TRACE` — benilla-app/src/shadow_core.rs
- `WOW_SHOT_REQUIRE` — benilla-app/src/capture/live_shot.rs
- `WOW_SHOT_REQUIRE_DIST` — benilla-app/src/capture/live_shot.rs
- `WOW_SKYBOX_T` — benilla-world/src/skybox.rs
- `WOW_SKY_DEPTH` — benilla-assets/src/materials.rs
- `WOW_SKY_QUALITY` — benilla-world/src/sky_fx.rs
- `WOW_SOUND_PROBE` — benilla-app/src/sound/probe.rs
- `WOW_SPELL_LIGHT` — benilla-app/src/entities/spell_fx/lifecycle.rs
- `WOW_STAGE1` — benilla-assets/src/materials.rs
- `WOW_STALL` — benilla-app/src/capture/probes/stall.rs, benilla-app/src/dev.rs
- `WOW_STALL_INJECT` — benilla-app/src/perf/stall.rs
- `WOW_STALL_SAMPLE` — benilla-app/src/perf/stall.rs
@@ -483,6 +504,7 @@
- `WOW_STATIC_GX_PROP` — benilla-world/src/static_gx/mod.rs
- `WOW_STATIC_GX_WMO` — benilla-world/src/static_gx/mod.rs
- `WOW_STATIC_MERGE` — benilla-world/src/terrain_stream/merge.rs
- `WOW_STOCK_UI` — benilla-app/src/ui_script/manifest.rs
- `WOW_STREAM_TRACE` — benilla-app/src/perf/mod.rs
- `WOW_TABHOVER` — benilla-app/src/capture/fixtures.rs
- `WOW_TAB_TRACE` — benilla-app/src/target/scan.rs
@@ -493,9 +515,10 @@
- `WOW_TILE_TRACE` — benilla-app/src/ui_models/mod.rs
- `WOW_TILE_UNLOAD` — benilla-world/src/assets/mod.rs
- `WOW_TINT_PROBE` — benilla-app/src/aura_visual.rs
- `WOW_TORCH_TERRAIN` — benilla-app/src/torch_shadow.rs
- `WOW_TORCH_TRACE` — benilla-app/src/torch_shadow.rs, benilla-world/src/static_gx/torch_depth.rs
- `WOW_TRAIL_CENSUS` — benilla-app/src/capture/probes/trail_census.rs, benilla-app/src/dev.rs
- `WOW_TRILINEAR` — benilla-app/src/cvars.rs, benilla-assets/src/tex_filter.rs
- `WOW_TRILINEAR` — benilla-app/src/cvars/mod.rs, benilla-assets/src/tex_filter.rs
- `WOW_TWIST_GAP` — benilla-app/src/player/body_pose.rs
- `WOW_UISCRIPT_DUMP` — benilla-app/tests/ui_script_wall.rs
- `WOW_UI_COST` — benilla-app/src/ui_script/extract/mod.rs
@@ -504,15 +527,13 @@
- `WOW_UI_HANDLERS` — benilla-ui/src/script/handler_prof.rs
- `WOW_UI_PICK` — benilla-app/src/ui_script/extract/mod.rs
- `WOW_UI_PROBE` — benilla-app/src/ui_pass.rs
- `WOW_UI_SCALE` — benilla-app/src/cvars.rs, benilla-app/src/ui_script/mod.rs
- `WOW_UI_SCALE` — benilla-app/src/cvars/mod.rs, benilla-app/src/ui_script/mod.rs
- `WOW_UI_SPLICE_VERIFY` — benilla-app/src/ui_script/extract/mod.rs
- `WOW_UNATTENDED` — benilla-app/src/login/mod.rs, benilla-app/src/net.rs, benilla-app/src/run_mode.rs, benilla-world/src/bgwin.rs
- `WOW_UNIT_VISUALS` — benilla-app/src/capture/probes/visual_census.rs, benilla-app/src/dev.rs
- `WOW_UNIT_VISUALS_RADIUS` — benilla-app/src/capture/probes/visual_census.rs
- `WOW_UPLOAD_BUDGET` — benilla-world/src/world_plugins.rs
- `WOW_USER` — benilla-app/src/login/mod.rs, benilla-app/src/net.rs, benilla-app/src/run_mode.rs, benilla-protocol/examples/login_refusal_probe.rs, benilla-protocol/examples/park_probe.rs
- `WOW_VIS_DUMP` — benilla-app/src/capture/probes/live_fps.rs
- `WOW_VIS_TRACE` — benilla-world/src/model_render/visibility.rs
- `WOW_VISTA_AT` — benilla-app/src/capture/mod.rs
- `WOW_VISTA_FACE` — benilla-app/src/capture/mod.rs
- `WOW_VISTA_MIN` — benilla-app/src/capture/mod.rs
@@ -521,13 +542,21 @@
- `WOW_VIS_TRACE` — benilla-world/src/model_render/visibility.rs
- `WOW_VOLFOG` — benilla-app/src/volumetric_fog.rs
- `WOW_VOLFOG_SHAFT_GAIN` — benilla-app/src/volumetric_fog.rs
- `WOW_VOLLIGHT` — benilla-app/src/volumetric_light.rs
- `WOW_VOLLIGHT_DEBUG` — benilla-app/src/volumetric_light.rs
- `WOW_VOLLIGHT_DENSITY` — benilla-app/src/volumetric_light.rs
- `WOW_VOLLIGHT_GAIN` — benilla-app/src/volumetric_light.rs
- `WOW_VOLLIGHT_HEIGHT` — benilla-app/src/volumetric_light.rs
- `WOW_VPLATE_TRACE` — benilla-app/src/vplates.rs
- `WOW_WARM_SLICE` — benilla-app/src/pipe_warm/mod.rs
- `WOW_WATER` — benilla-world/src/liquid/scene_depth.rs
- `WOW_WATER_CLIP` — benilla-assets/src/materials.rs
- `WOW_WATER_PROBE` — benilla-world/src/liquid/surface.rs
- `WOW_WAVE_DUMP` — benilla-world/src/ffx_glow.rs
- `WOW_WEATHER` — benilla-world/src/weather/mod.rs
- `WOW_WEATHER_DUMP` — benilla-world/src/weather/mod.rs
- `WOW_WETNESS` — benilla-world/src/weather/wetness.rs
- `WOW_WET_T` — benilla-world/src/weather/wetness.rs
- `WOW_WFX_AGE` — benilla-app/src/capture/mod.rs
- `WOW_WFX_AT` — benilla-app/src/capture/mod.rs
- `WOW_WFX_AZ` — benilla-app/src/capture/mod.rs
@@ -545,6 +574,7 @@
- `WOW_WORLDVIEW_SHOT` — benilla-world/src/worldview.rs
- `WOW_WORLDVIEW_SHOT_AT` — benilla-world/src/worldview.rs
- `WOW_WORLDVIEW_SURVEY` — benilla-world/src/worldview.rs
- `WOW_ZONE_SKYBOXES` — benilla-app/src/zone_skybox.rs
## Scripts (`scripts/`)
+14 -9
View File
@@ -10,7 +10,9 @@ not build a server or simulate the game. The reference client is the spec: benil
A change is right when it makes benilla more like 1.12.1 or fixes a bug, with evidence from the
reference, in one small piece, with the gates green. A deviation from the reference is the
maintainer's call alone, and each one is written down where it lives: a CVar's `Deviates` row, a
comment naming the reference fact and why we differ. Anything else is a fork.
comment naming the reference fact and why we differ. Anything else lives on top of benilla, in a
crate of its own or a fork, and benilla opens a piece of itself to such a crate only when its own
1.12.1 work creates that piece (`docs/CONTRIBUTING.md`, "Building on top").
## The loop
@@ -36,19 +38,22 @@ comment naming the reference fact and why we differ. Anything else is a fork.
## Hard rules
- **Never commit anything from the install.** Art, models, sounds, maps, data: the install is
read at runtime from a gitignored path, and everyone provides their own. The one exception is
interface code: FrameXML and GlueXML run off the player's own patch chain, and our own
counterparts under `assets/ui` stay until they retire.
read at runtime from a gitignored path, and everyone provides their own. Interface code is no
exception: FrameXML and GlueXML run off the player's own patch chain, and `assets/ui` holds
only benilla's own files.
- **The install is read-only.** benilla never writes into the WoW folder: no screenshot, log,
cache or scratch file. `scripts/smoke.sh` fails a run that leaves the install changed.
- **Local state lives in one folder**, `benilla-config/`, at the repo root in a dev build and
beside the binary in the player build; every path to it resolves through `crate::local_state`.
Player settings are CVars persisted as a diff in `benilla-config/config.toml`.
- **UI is stock-first: a window is migrated, not authored.** The end state is the stock 1.12
FrameXML executed off the player's own chain. `assets/ui` does not grow: a test names its
files and fails on a new one. A window is built by pointing `benilla.toc` at the stock file,
deleting ours and building the engine verbs it calls, never stubbing one to make the file
load.
- **The core UI is the stock UI; benilla's own is one layer on top.** The core loads the stock
1.12 FrameXML off the player's own chain, byte for byte, and builds the engine verbs those
files call, never stubbing one to make a file load. benilla's own interface (its options
window, its game-menu look, its fixes to the stock Lua) is one layer that loads after the
stock files and before third-party addons, the way an addon does: written against the 1.12 API
alone, listed in no addon list and always on, and offering nothing another addon can build on.
Anything that changes what the stock UI does or shows lives in the layer, and the layer does
not grow: a test names its files and fails on a new one.
- **A setting's default is the reference's default.** Every option boots at the stock 1.12
value. Shipping another value costs an explicit `Deviates` row with the reason, and a test
fails a row that drifts either way.