Entry 295
Fidchell's spells drawn, its prediction's text and voice, the skills' names
Documented in Bosses - Fidchell.
Filescrates/piney-effect/src/fidchell.rscrates/piney-effect/src/boss.rscrates/piney-effect/src/lib.rscrates/piney-effect/examples/boss_probe.rscrates/piney-battle/src/boss/fidchell/eff.rscrates/piney-battle/src/boss/fidchell.rscrates/piney-world/src/combat/boss.rscrates/piney-world/src/field_world.rscrates/piney-desktop/src/anm.rscrates/piney-game/src/fx.rscrates/piney-game/src/area.rscrates/piney-game/src/session/tests/fidchell.rscrates/piney-gen/src/manifest.rstools/test_boss_effect_rs.pydocs/engine/boss-fidchell.mddocs/engine/boss.md
What 294 left named but not shown now shows and sounds: the four
spells' pictures, the prediction's text and voice, a skill's name in the
cinema, and a boss's effSkillStart. The reference is
docs/engine/boss-fidchell.md ("The
spells' pictures", "The prediction's text, its voice and the skills'
names").
One simulation, two drivers
The spells' rules draw every ccRand (the Fidchell harness runs them
natively and counts it), so the pictures must not draw again. The rules
(fidchell::eff) now keep what each Draw drew: a meteor moved this
Draw, a bolt's ten points, how many segments it drew, their
transparency and each sprite's pattern draw, a tower's place and
transparency before it moved. They run on a small eff::Host (ccRand,
the frame, ccGetDist, the calls). In the fight the boss's Cx is that
host and piney-effect's new fidchell draws each spell from the rules'
state after the boss's task (BossEffects::sync_spells). For the
harness, piney-effect's manager runs the same rules itself on its own
generators (Make::MeteoSworm etc.), making the calls beside in the
game's order. The pictures are the game's: a meteor is particle's
ANM_x300 and the glow CMP_x100 turning pi/30 a Draw; a segment is
CMP_x012 stretched to its length over 900 and laid along it, then an
EFF_x011 sprite; a tower is CMP_x101b ("abcd"[1] in its
constructor: always b). The swarm's light is an omni light at the last
meteor, full to nothing at 500.
ccSetColor has an HSV half
Outbreak's disc failed Skeith's own magic square in the boss effect
harness (frame 75, the light's colour 0.984 grey against the port's
black). Outbreak's ccBossEffLight::Draw turns its count into an
unsigned with an inline cvt.w.s where Infection and Mutation call
fptoui (0 for a negative): a count fallen below 0 keeps its high bits,
and ccSetColor (OUT main 0x00136f90) reads a colour with an alpha byte
as HSV (hue in sixths of the low byte, saturation, value). 0xfffb0000 is
value 251, saturation 0: grey. The meteors' light, 0x80ffffff, is hue
sector 5 at full value: red with 250/256 of the way to magenta, blue
0.023. Both are ported (boss::set_color, to_uint by volume), and the
light's modes 1 (the thunders' square: a ccRandF(0.5) tilt drawn and
lost, grey and orange by turns, its light moved one Draw in three) and 2
(the meteors': a tilt of -1.5393804, the turn falling behind after 15,
pulsing red), with magic squares 1 and 2 (their SEs by game.field,
rows 2 and 6, 5).
The text is on the screen
m_predTxt's pos and dirc are written in step 2 and never read
anywhere in boss04.cpp: ccAnm::Draw places ANM_ex41txtN by the
animation's own F_Camera records, on layer 254 (sysLayer's view) with
SetRenderState(CCRS_ZENABLE, 0). The world draws it with the desktop's
ccAnm (zenable added) set when Pic::Text first comes. The voice is
ccEvVoiceRequest(-40, n), which the audio driver already routes to the
field voice groups (-40 is Fidchell's).
A skill's name
OUT gcmn 0x00472550 is a switch on game.field (+0x24) and the skill:
fields 2, 4, 5, 6, 7 and 8 each have a table of CINEMASKILLNAME_T rows
(field 4: 157, 158, 160, 203, 219, 227, 259, rows 8-14 of x41's
TEX_fid_skl). piney-gen finds it as the first call of the function after
CinemaOn__19ccBossEffCinemaFadeFi (Outbreak's CinemaOn with a skill;
on Infection and Mutation CinemaOff follows, so nothing) and runs it in
eemu for fields 0-31 and skills under 512: cinema_skill_rows in the
combat group (data version 17). SetupSkillName is Infection's, with its
x01-x04 for fields 9-12.
Checks
tools/test_boss_effect_rs.py now hooks genrand (behind ccRand and
ccRandF) with a 32-bit LCG on both sides instead of a constant ccRand,
and ccSeOn; it builds no particle control, so the probe has no free
particle either (the tower's effSmoke first differed there: the port's
particle took a pattern rand() the game's never reached).
test_fidchells_spells (Outbreak): meteo 192, storm 312, tower 436,
square 1 288 (fields 4 and 2), square 2 184 frames agree on every draw,
sound, generator, light, slot, rand and genrand count. The Skeith
cases pass on Outbreak and Infection. The Skeith, Innis, Magus, Kyvia and
Fidchell battle harnesses pass. With the pictures' own rand() draws now
made in the field, the story pilot still ends Outbreak's 207 (120,000
frames) and Mutation's 108 (150,000, the gomoras' effSkillStart) done.
session::tests::fidchell::fidchell_spells_show brings event 207 to block
9 (area 73's WORLD_MAN, field 4 of town 3) and forces the prediction,
each spell and a skill from act 0: the text shows 420 frames, voice (-40,
- and (-40, 0) are asked, every spell's objects are drawn (
ANM_x300,CMP_x100,CMP_x012,EFF_x011,CMP_x101b,CMP_x201d,CMP_x033),effSkillStartmakes its rings at Fidchell, and the skill's cinema has its name.fidchell_shotswrote the frames to /mnt/data/claude/scratch/fidchell-fx: the text mid-screen under "Oracle: Ice Storm", the meteors falling and landing round Kite, the zig-zag bolts from the sky, the towers rising round him seen from above, the ice's photons, the skill's name. The first run forced acts in the middle of others (camera 3 left on from the prediction), which put the tower camera inside the rocks; forcing only from act 0 does not.
- In the fight a storm's magic square is made after the rules' pass, so its first
Drawis a frame late, and a picture's ownccRand(a mode 1 light's) comes in the effects' pass before the boss's, not in slot order: the field'sgenrandorder differs from the game's there. - The prediction's text and the skills' names are not run against the game's own drawing frame by frame;effSkillStart's end with the boss is still the rules' guess of [[294]]. - Quarantine'sccBossEffLightandccSetColorare taken to be Outbreak's (itscvt.w.sis seen); unchecked.