Entry 105
Data Drain's movie: the stream by the target, its resident files, and the enemy drawn into it
Filescrates/piney-fieldui/src/menus/drain.rscrates/piney-fieldui/src/lib.rscrates/piney-fieldui/src/world.rscrates/piney-fieldui/examples/fieldui_probe.rscrates/piney-battle/src/drain.rscrates/piney-world/src/foe.rscrates/piney-world/src/field_world.rscrates/piney-world/src/combat/mod.rscrates/piney-stream/src/lib.rscrates/piney-stream/src/event.rscrates/piney-stream/src/draw.rscrates/piney-game/src/stream.rscrates/piney-game/src/area.rscrates/piney-game/src/world.rscrates/piney-game/src/session.rstools/test_fieldui_rs.pydocs/engine/field-ui.mddocs/engine/stream.md
102 left the drain movie out: the port went on as with drainDemo off.
A new game has it on, and a boss's movie plays whatever the option says.
Skeith's drain at the end of the game is stream 18.
What the game does
The details are on the field UI page.
- The stream.
- An enemy's is chosen by its size (
ccCheckObjectSize, its row's +0x70): 109, 110 or 111. It plays only withdrainDemoon. - Any other target's is chosen by
base->id, Skeith's being 18. - The menu starts
ccThExecuteStreamand breathes without itsDispuntil the stream's param goes to -1. - A boss's
EntryAffect(21)comes before the movie, not with the rules after it.
- An enemy's is chosen by its size (
- The models are not in the streams.
str8100drew nothing in the port: its#objects are defined inDATA.BIN'sstr8000eandstr8001e. A field's and a dungeon's file lists (strcmnFileList,datadrainFileList) keep those in memory. ccThDrainEnemy. It draws the target into the stream's scene, on its layer and through its draw environment: the enemy's clump on animation slot 6, at (0, -900, 130), turned half about z, from stream frame 30 to 229.
The port
- The menu (
drain.rs) runsmovie(),movie_wait()andrules():Request::Affect(21) for a boss;Request::DrainMovie(num);- two frames later,
Request::DrainEnemy(handle)for an enemy; - then it waits for
FieldUi::drain_movie_done.
CharInfo::object_sizeis new. The runtime fills it withpiney_battle::drain::check_object_size.piney_stream::Stream::with_residentloads files the place holds.Stream::step_with(andEventStream's andStreamPlayer's) lets another task draw into the scene.draw::to_screengives the scene's camera.StreamPlayer::drainplays the stream over the two resident files.piney_world::foe::DrainEnemyis the enemy task.Model::draw_withtakes another environment's lights (the stream's).area.rsruns the movie, thendrain_movie_done, and hides the minimap with the world. The town answers a movie at once, since no drain happens there.
Checked
tools/test_fieldui_rs.py test_drain_movie.- The stream is faked, ending 40 frames after it starts, and
ccCheckObjectSizeis answered per character. - It covers sizes 4, 3 and 1 with
drainDemoon (109, 110, 111), and a boss with it off (itsEntryAffect(21), then 111 for id 14). - It compares the stream, the enemy task's start, the frames and the rest of the drain with the game's.
- A boss with id 0 changed the harness's own target window, so the test keeps id 14.
- The stream is faked, ending 40 frames after it starts, and
session::tests::data_drain_movie_in_a_fight. After event 3, withdrainDemoon, the goblin's drain plays stream 109 over the field for more than 60 frames, and the enemy task is made. Then come the rules and the drop.data_drain_in_a_fightstill plays none with it off.drain_movie_shots(ignored). It writes every 40th frame to /mnt/data/claude/scratch/drainmovie: Kite, the bracelet's petals, the beams, the orb, and the goblin small and far below Kite, as placed.- The rest. All six field UI suites, the workspace's tests, clippy, fmt and the docs check pass.
Func_str8000, the drain streams' effect task (noise, fades, the feedback, a sprite), is not ported. - The enemy's look is not compared with the game's pictures: its lights are the stream's, worked out at its matrix as for the scene's own models. - The race's base formccThDrainEnemybuilds is for a state 2 that no caller sets. What uses it is not known. - Streams 37, 44, 67, 69 and 100 (a character's drain by id) were not played.