# RuneWaker media batch plan Generated by `npm run effects:rom:plan` from the current primary-five spell manifest and decoded ROS archive. It groups remaining controller and timing work. The manifest generator already attaches source direct audio events at supported phase boundaries. The archive has 170 unique models: 74 ready, 1 partial original, 0 fully decoded but unverified, 95 blocked, and 0 failed. 125 of 129 source spell entries have at least one packaged audio cue. ## Shared controller blockers Counts overlap when a model has several controller families. A family should be ported and verified once against representative models before its other users are considered for promotion. | Controller family | Models | Source spell IDs using those models | | --- | ---: | ---: | | CRuController_EventTrigger | 148 | 124 | | CRuController_GlobalAlpha | 47 | 49 | | CRuEntity_Particle_Visualizer_Entity | 35 | 44 | | CRuController_Particle_Visualizer_Entity | 34 | 43 | | CRuController_GlobalColor | 26 | 26 | | RuneWaker browser emitter geometry mode | 18 | 21 | | CRuController_Decal | 17 | 17 | | CRuController_GhostTrail | 11 | 15 | | CRuController_Hierarchy | 11 | 12 | | CRuController_Entity | 5 | 4 | | RuneWaker browser sprite mode | 5 | 5 | | CRuController_UVFX | 3 | 3 | | CRuController_MaterialTexture | 1 | 1 | | CRuController_PolyLine | 1 | 1 | ## Fully decoded models awaiting visual review | Source model | Spell-phase references | Sprite layers | Blockers | | --- | ---: | ---: | --- | ## Event-only models still blocked These models have sprite data but include an event callback outside the validated visual-only set. Effect-spawning and projectile-flight callbacks require browser behavior before their visuals can be promoted. | Source model | Spell-phase references | Sprite layers | Blockers | | --- | ---: | ---: | --- | | model/fx/skill/ice/act_cone01_c_hand.ros | 3 | 12 | CRuController_EventTrigger | | model/fx/skill/fire/act_fireball02_t_hit_point.ros | 1 | 5 | CRuController_EventTrigger | | model/fx/skill/holy/act_armorup_c_top.ros | 1 | 8 | CRuController_EventTrigger | | model/fx/skill/physical/act_concentration_t_top.ros | 1 | 3 | CRuController_EventTrigger | | model/fx/skill/physical/act_focus_c_top.ros | 1 | 4 | CRuController_EventTrigger | | model/fx/skill/physical/act_fracture01_t_freeze_hit.ros | 1 | 6 | CRuController_EventTrigger | There are 6 event-only models. The archive also exposes 3 model/phase audio-event candidates missing from the current packaged manifest. They need delayed timing or a later lifecycle phase; an ROS motion name alone is insufficient. Full per-model evidence is in `docs/ROM_MEDIA_BATCH_PLAN.json`. ## Largest blocker combinations | Controller signature | Models | Source spell IDs | Example model | | --- | ---: | ---: | --- | | CRuController_EventTrigger + CRuController_Particle_Visualizer_Entity + CRuEntity_Particle_Visualizer_Entity | 13 | 20 | model/fx/skill/earth/act_casting_c_hand.ros | | CRuController_EventTrigger | 9 | 11 | model/fx/skill/fire/act_fireball02_t_hit_point.ros | | CRuController_Decal + CRuController_EventTrigger + CRuController_GlobalAlpha + CRuController_GlobalColor | 8 | 8 | model/fx/skill/earth/act_vriusinfection_t_freeze_down_e.ros | | CRuController_EventTrigger + CRuController_GlobalAlpha | 6 | 7 | model/fx/skill/fire/act_fireball01_c_hand_i.ros | | CRuController_EventTrigger + CRuController_GlobalAlpha + CRuController_Particle_Visualizer_Entity + CRuEntity_Particle_Visualizer_Entity | 5 | 6 | model/fx/skill/holy/act_chain_t_down.ros | | CRuController_EventTrigger + CRuController_Particle_Visualizer_Entity + CRuEntity_Particle_Visualizer_Entity + RuneWaker browser emitter geometry mode | 5 | 5 | model/fx/skill/holy/act_moist_t_down.ros | | CRuController_EventTrigger + RuneWaker browser emitter geometry mode | 5 | 8 | model/fx/skill/physical/act_deep_thought_c_down_e.ros | | CRuController_Particle_Visualizer_Entity + CRuEntity_Particle_Visualizer_Entity | 4 | 10 | model/fx/skill/dark/act_dark_hand_wave_c_hand_e.ros | | CRuController_Decal + CRuController_Entity + CRuController_EventTrigger + CRuController_GlobalAlpha + CRuController_GlobalColor | 2 | 1 | model/fx/skill/holy/act_scrifice_healing_c_freeze_down_e.ros | | CRuController_Entity + CRuController_EventTrigger | 2 | 2 | model/fx/skill/holy/act_judgement_t_hit_point.ros | | CRuController_EventTrigger + CRuController_GhostTrail + CRuController_GlobalAlpha | 2 | 4 | model/fx/skill/fire/act_fireball02_f.ros | | CRuController_EventTrigger + CRuController_GhostTrail + CRuController_GlobalAlpha + CRuController_GlobalColor + CRuController_Hierarchy | 2 | 2 | model/fx/skill/physical/act_deflecting_shot_f.ros | | CRuController_EventTrigger + CRuController_GhostTrail + CRuController_Particle_Visualizer_Entity + CRuEntity_Particle_Visualizer_Entity | 2 | 2 | model/fx/skill/ice/act_icearrow_f.ros | | CRuController_EventTrigger + RuneWaker browser emitter geometry mode + RuneWaker browser sprite mode | 2 | 2 | model/fx/skill/physical/act_attackspeedup_c_down.ros | | CRuController_Decal + CRuController_Entity + CRuController_GlobalAlpha + CRuController_GlobalColor + RuneWaker browser emitter geometry mode + RuneWaker browser sprite mode | 1 | 1 | model/fx/skill/physical/act_beckon_holy_c_freeze_down_e.ros | ## Batch workflow 1. Run `npm run effects:rom:batch` to refresh source links, package audio and ROS graphs, attach verified phases, and rebuild this plan. 2. Review the remaining event timing candidates and largest shared blocker families above. 3. Port one controller family in the exporter/WebGL runtime and add a parser check that every promoted graph is renderable. 4. Regenerate the manifest and media audit, replay representative graphs in the RuneWaker preview, then spot-check distinct motion and attachment patterns in live combat.