43#include "text/msg_ids.h"
148#define ROCK_PUZZLE ((struct RockPuzzle *)&gSceneState[1])
160 __attribute__((nocommon, aligned(4)));
203 }
else if (level == 1) {
207 }
else if (level == 2) {
211 }
else if (level == 3) {
215 }
else if (level == 4) {
314 s32 blendControl = 0x3f42;
318 s32 blendAlpha = 0xc04;
371 if (replacement != 0) {
386 if (actor->
x.
fixed >> 20 == 30 && actor->
z.
fixed >> 20 == 20) {
399 StagedActor_AdvancePair();
470 components[2].
part.pixel);
483 if (StagedActor_FindClearPosition(&probe) != 0) {
484 SceneActor_MoveAndRedraw(probe);
509 s32 *position = coordinates;
511 position[0] = centreX;
512 position[2] = centreHeight;
514 light->
x.
fixed = position[0];
515 light->
y.
fixed = position[2];
541 if (wheel->
speed > 0xbff) {
546 if (wheel->
ticks == 30) {
551 if (wheel->
speed <= 0x2ff) {
557 if ((
unsigned int)(((
u32)(wheel->
angle - chosenAngle) << 16) +
558 0xc2ff0000) <= 0x5fe0000) {
559 wheel->
angle = chosenAngle + 0x4000;
680 puzzleState[0] = state;
683 u8 rounds = ++puzzleState[-1];
725 }
while (radius > 0);
801 actor->sprite->rotation = 0;
804 for (i = 0; i < 30; i++) {
805 actor->sprite->image.priority = 0;
807 actor->sprite->image.priority = 2;
820 actor->sprite->flags = 0;
1070 for (eva = 0, evb = 16; eva <= 16; eva++, evb--) {
1072 s32 control = 0x3f42;
1380 for (eva = 0, evb = 16; eva <= 16; eva++, evb--) {
1382 s32 control = 0x3f42;
1506 if (leader !=
NULL) {
1513 if (leader !=
NULL) {
1520 if (leader !=
NULL) {
1657 line = MsgAltmillerSaidCouldntMove;
1782 leader->
z.
part.pixel);
1790 leader->
z.
part.pixel);
1811 question = MsgAltmillerForgetOrderRock;
1874 if (actor !=
NULL) {
1876 actor->sprite->image.priority =
1935 actor->sprite->image.priority = 1;
1936 actor->sprite->flags = 2;
1937 actor->sprite->rotation = 0x4000;
2044 phase = (
u8 *)&fragment->
state;
2045 currentPhase = *(
s8 *)phase;
2046 if (currentPhase == 0) {
2054 fragment->
targetX = position[0];
2055 fragment->
targetZ = position[2];
2062 }
else if (currentPhase == 1) {
2064 s32 nextPhase = *phase;
2068 }
else if (currentPhase == 2) {
2089 fragment = work->
slots;
2090 for (fragmentIndex = 23; fragmentIndex >= 0; fragmentIndex--) {
2099 fragment->
scaleY = scale;
2100 fragment->
scaleX = scale;
2115 for (fragmentIndex = 23; fragmentIndex >= 0; fragmentIndex--) {
2118 *stateCursor =
mode;
2129#define DIRECTION_STEP(dx, dz) (((u32)(dx) << 16) | ((dz) & 0xffff))
2141 207, 205, 228, 229, 298, 297,
2145 -32, -8, 32, 8, -8, -32, 8, 32, -32, -16, 32, 0,
2146 -8, -32, 8, 32, -32, -8, 32, 8, -8, -32, 8, 32,
2152 {0,
CONDITION_ALWAYS, 172, 0, 149,
FACING_SOUTH, 0, -1, -1, -1, -1, 0},
2153 {1,
CONDITION_ALWAYS, 456, 0, 504,
FACING_NORTH, 0, 0, 0, 544, 528, 0},
2154 {2,
CONDITION_ALWAYS, 280, 0, 360,
FACING_SOUTH, 0, 0, 0, 544, 528, 0},
2155 {3,
CONDITION_ALWAYS, 120, 0, 696,
FACING_NORTH, 0, 0, 552, 240, 720, 0},
2156 {4,
CONDITION_ALWAYS, 120, 0, 600,
FACING_SOUTH, 0, 0, 552, 240, 720, 0},
2157 {10,
CONDITION_ALWAYS, 392, 0, 504,
FACING_SOUTH, 0, 48, 16, 496, 672, 0},
2158 {11,
CONDITION_ALWAYS, 136, 0, 104,
FACING_SOUTH, 0, 48, 16, 496, 672, 0},
2159 {20,
CONDITION_ALWAYS, 232, 0, 216,
FACING_SOUTH, 0, 64, 48, 592, 576, 0},
2160 {21,
CONDITION_ALWAYS, 328, 0, 264,
FACING_SOUTH, 0, 64, 48, 592, 576, 0},
2161 {30,
CONDITION_ALWAYS, 200, 0, 424,
FACING_SOUTH, 0, 48, 80, 576, 480, 0},
2162 {31,
CONDITION_ALWAYS, 520, 0, 328,
FACING_SOUTH, 0, 48, 80, 576, 480, 0},
2163 {40,
CONDITION_ALWAYS, 680, 0, 152,
FACING_SOUTH, 0, 0, 0, 768, 512, 0},
2164 {41,
CONDITION_ALWAYS, 40, 0, 248,
FACING_SOUTH, 0, 0, 0, 768, 512, 0},
2165 {50,
CONDITION_ALWAYS, 296, 0, 392,
FACING_SOUTH, 0, 160, 304, 576, 704, 0},
2166 {51,
CONDITION_ALWAYS, 424, 0, 392,
FACING_SOUTH, 0, 160, 304, 576, 704, 0},
2167 {52,
CONDITION_ALWAYS, 504, 0, 232,
FACING_NORTH, 0, 384, 64, 624, 240, 0},
2168 {53,
CONDITION_ALWAYS, 504, 0, 152,
FACING_SOUTH, 0, 384, 64, 624, 240, 0},
2169 {54,
CONDITION_ALWAYS, 184, 0, 216,
FACING_NORTH, 0, 64, 64, 304, 240, 0},
Ability numbers, named from the English release.
void Object_RefreshSelectorById(u32 objectId)
Waits, at most 300 frames, for an actor's script to reach its end (command 0x10).
struct FieldActor * Object_GetById(s32 actor)
Returns an actor, or NULL if it does not exist.
struct ScenePlacement gAltmillerCave_Placements2[]
static void AltmillerCave_PlaceLights(s32 angle)
Spaces the five lights evenly around the ring, the first at the given angle.
struct SceneEvent gAltmillerCave_EventsOther[]
static __inline__ void AltmillerCave_RedrawObstacleFootprints(void)
Redraws the three obstacles' cells where they stand.
const struct ScenePlacement * AltmillerCave_GetPlacements(void)
s32 AltmillerCave_Initialize(void)
Sets up the room being entered: an entry from outside the cave takes the room's first entrance; room ...
static void AltmillerCave_PlaceLight(s32 actorId, s32 radius, s32 angle)
Puts a light on the ring, radius pixels from its center above the rocks, at the given angle.
struct LightWheel gAltmillerCave_LightWheelState
static void AltmillerCave_SetFadeLevel(s32 level)
Keeps room 1's darkness level, and shows it unless Reveal is lighting the room.
static void AltmillerCave_EndReveal(void)
Reveal's light ends: the cave darkens again and room 6's rocks lose their colors.
struct SceneEvent gAltmillerCave_Events3[]
const struct SceneEntrance * AltmillerCave_GetEntrances(void)
The six rooms share one entrance table.
struct ScenePlacement gAltmillerCave_PlacementsOther[]
s32 gStagedActor_DirectionSteps[]
Pixel step by direction: X in the upper halfword, Z in the lower.
static void AltmillerCave_InitializeDarkness(void)
Darkens the cave on entry: room 1 by its levels, the other dark rooms evenly.
@ PUZZLE_LEFT_ROCK_TURNED
static void AltmillerCave_StartDjinnBattle(void)
Talking to the Djinni in room 4 starts the battle for Djinni 65.
struct SceneEvent gAltmillerCave_Events5[]
static void AltmillerCave_RepeatRockOrder(void)
Talking to Babi again before the draught is found: he asks whether the party forgot the order of the ...
static void AltmillerCave_PulseLight(union FieldObject *fieldObject)
Update callback of the light at the top of the stopped ring: it pulses through four sizes.
static void AltmillerCave_AdvanceObstacleAndCheckPassage(void)
Walking east into room 4's block pushes it a cell.
static void AltmillerCave_SpinLights(void)
Scheduler task that spins the ring of lights: it speeds up, coasts, slows and stops with the chosen l...
u32 gAltmillerCave_Exits[]
static void AltmillerCave_MeetInvisibleBabi(void)
Talking to the invisible Babi the first time: he can be heard but not seen, cannot move,...
static void AltmillerCave_UpdateMovedObstacle(void)
After Move on room 4's block: in its cell at (30, 20) it settles and opens the way beside it (remembe...
static void AltmillerCave_DarkenToLevel1(void)
static void AltmillerCave_BabiCallsPartyBack(void)
Walking away from Babi once: the party is told where the draught is.
static void AltmillerCave_DarkenToLevel2(void)
const u32 * AltmillerCave_GetExits(void)
static void AltmillerCave_RestoreBabiAndInviteParty(void)
Bringing Babi the Mystic Draught: he drinks it and appears, startling the party; Ivan reads his mind ...
static void AltmillerCave_DarkenToLevel0(void)
Room 1's darkness boundaries: crossing one sets its level.
static void AltmillerCave_DarkenToLevel4(void)
struct ScenePlacement gAltmillerCave_Placements4[]
static void AltmillerCave_MatchLeaderPriority(union FieldObject *fieldObject)
Update callback of room 6's obstacles: drawn on the leader's sprite priority.
s32 gAltmillerCave_GuardsArrivePath[]
The two soldiers walk in to Babi.
static void AltmillerCave_CheckFrostTargetCollision(void)
Frost's first phase on room 4's puddle: notes whether its place is blocked, which keeps it from freez...
static void AltmillerCave_FreezePuddle(void)
Frost on room 4's puddle, unless blocked: it freezes and its cell takes the frozen attributes kept at...
static void AltmillerCave_BeginRetreat(void)
Retreat's first phase: the Psynergy's first actor faces south, and its object is copied into a new on...
struct SceneEvent gAltmillerCave_Events2[]
static void AltmillerCave_MoveStagedActorToClearPosition(void)
Walking into one of the three obstacles pushes it, if there is room.
s32 gStagedActor_FootprintBounds[]
static void AltmillerCave_HopSelectedActor(void)
Walking into room 4's puddle while it is not frozen: the leader hops 32 pixels over it,...
#define DIRECTION_STEP(dx, dz)
Pixel step by direction: X in the upper halfword, Z in the lower.
const struct SceneRegion * AltmillerCave_GetRegions(void)
struct SceneEvent gAltmillerCave_Events4[]
@ FLAG_BLOCK_IN_PLACE
Room 4's block stands where Move opens the passage.
@ FLAG_DARK
The cave is dark: set on entry everywhere but rooms 4 and 6.
@ FLAG_GRADED_DARKNESS
Room 1 darkens by steps as the party walks in.
const struct SceneEvent * AltmillerCave_GetEvents(void)
u32 gAltmillerCave_PulseScales[]
The sizes the light at the top pulses through.
s32 gAltmillerCave_BabiLeavePath[]
static void AltmillerCave_ReleaseWallBurst(void)
The wall bursts: 24 pieces fly out from the ring's center, the wall's cells open to the passage,...
static void AltmillerCave_DarkenToLevel3(void)
static void AltmillerCave_ApplyFadeBlend(void)
Darkens room 1 to its current level: the brighter blend at level 0, each level one step darker.
static void AltmillerCave_StartReveal(void)
Reveal's light: room 1 is lit and room 6's rocks show their colors.
struct ScenePlacement gAltmillerCave_Placements6[]
struct SceneEntrance gAltmillerCave_Entrances[]
u32 gStagedActor_FootprintKinds[]
s32 gAltmillerCave_SecondGuardLeavePath[]
Babi and the soldiers walk out of the room, each by his own path.
static void AltmillerCave_UpdateWallFragment(struct EffectSlot *fragment)
Update callback of a piece of the burst wall: it flies off to a random point 120 pixels away,...
static void AltmillerCave_TurnRock(s32 rock)
Talking to one of room 6's rocks rotates it.
static __inline__ void AltmillerCave_FacePartyNorth(void)
The party turns north, toward Babi.
struct LightWheel * gAltmillerCave_LightWheel
s32 gAltmillerCave_FirstGuardLeavePath[]
struct SceneEvent gAltmillerCave_Events6[]
s32 Math_DivideUnsigned(s32 value, s32 divisor)
Divides the nonnegative random value for wall-fragment scaling.
static void AltmillerCave_DarkenToLevel5(void)
Calls through a function pointer, by argument count.
void Shop_RestoreFieldPalette(void)
Fades back to the colours Shop_SaveAndTintFieldPalette saved, over 16 frames.
void Shop_SaveAndTintFieldPalette(s32 layer)
Saves the field colours in event work and fades to layer over 16 frames.
The engine calls the debug menus import, and their palette swatch tiles.
The display transition's frames, windows and state.
Djinn numbers, named from the English release.
void BattleFx_InitializeSlots(void)
Allocates and clears the effect slots (heap block 56) and starts their update callback.
void BattleFx_ClearActiveSlotsAndScheduleUpdates(void)
Stops the effect slots: removes their callback, frees every slot still in use and releases their heap...
DMA channel registers, and the DMA and CPU fills.
static __inline__ void Dma_Set(const volatile void *source, volatile void *destination, u32 control, volatile u32 *channel)
Starts a DMA transfer: stores the source, destination and control words into channel's registers with...
#define Dma_Fill32(value, destination, size)
Fills size bytes at destination with the word value by DMA3.
The edition's language, for C to compare (LANGUAGE == LANGUAGE_GERMAN).
u32 EffectSlot_HasPendingTarget(struct EffectSlot *effect)
Returns nonzero while an effect slot that stops at its target still has one (it has not arrived),...
void BattleFx_ClearOwnedSlot(struct EffectSlot *slot)
Frees an effect slot and its sprite.
void EffectSlot_Initialize(struct EffectSlot *effect, s32 kind, s32 x, s32 z)
Fills an effect slot with a new sprite of kind at (x, z): stopping at its target, top speed 2,...
void EffectSlot_SetCallback(struct EffectSlot *effect, EffectCallback callback)
Gives an effect slot its per-frame callback, starting at state 0.
void EffectSlot_SetObjectMode(struct EffectSlot *effect, s32 mode)
Sets the animation of an effect slot's sprite.
Effect slots: the particles Psynergy effects move and draw.
static s32 FieldObject_CheckMovementCollision(struct FieldActor *actor, struct FieldPosition *position)
void Animation_ApplyChildValues(struct DispatchObject *object, u32 param)
Sets the draw parameter of a one-sprite object's layers (see ObjectGroup_SetChildValueUnlessFifteen).
void Engine_ActorFollow(s32 actor, s32 leader)
s32 Engine_PartyRemoveItem(s32 item)
The scene script layer: the engine services a scene's events call, declared once (Engine_EventBegin,...
static s32 Event_OpenMessage(s32 speaker, s32 flags)
void Engine_ActorFaceActor(s32 actor, s32 target, s32 frames)
static void Actor_SetDestination(s32 actor, s32 x, s32 z)
static void Actor_FaceDirection(s32 actor, s32 facing, s32 frames)
void Engine_ActorSetAnimationAndWait(s32 actor, s32 animation)
void Object_SetMode(struct FieldActor *object, s32 animation)
void Engine_ActorWalkByAndWait(s32 actor, s32 dx, s32 dz)
void Engine_PsynergyBegin(s32 ability, s32 flags)
s32 Engine_EventChooseYesNo(s32 actor, s32 flags)
static void Actor_WalkToAndWait(s32 actor, s32 x, s32 z)
void Engine_PsynergyRaiseHands(void)
s32 Engine_TaskRemoveCallback(void(*callback)(void))
void Engine_PsynergyLowerHands(void)
void Engine_CameraMoveToActor(s32 actor, s32 pan)
void Engine_ActorJump(s32 actor, s32 height, s32 frames)
void Engine_ActorFaceDirection(s32 actor, s32 facing, s32 frames)
void Engine_ActorSetDestination(s32 actor, s32 x, s32 z)
static void Actor_FaceActor(s32 actor, s32 target, s32 frames)
static void Actor_ShowEmote(s32 actor, s32 emote, s32 frames)
static void Actor_WalkByAndWait(s32 actor, s32 dx, s32 dz)
static s32 Math_Divide(s32 dividend, s32 divisor)
s32 Engine_EventOpenMessage(s32 speaker, s32 flags)
void Engine_MapWaitWorkValuesBelow256(void)
void Engine_GameFlagSet(s32 flag)
void Engine_GameFlagClear(s32 flag)
void Engine_CameraWaitForMove(void)
static void Actor_SetActionScript(s32 actor, const s32 *script)
The engine encodes either a built-in action or an action-script address.
void Engine_ActorWaitForMove(s32 actor)
void Engine_CameraFollowActor(s32 actor, s32 keep_position)
static void Map_CopyCellAttributes(s32 srcX, s32 srcY, s32 width, s32 height, s32 destX, s32 destY)
void Engine_ActorStop(s32 actor)
void Engine_ActorRunRepeatedMotion(s32 actor, s32 repeats)
static void Event_ShowMessage(s32 speaker, s32 flags)
static void Event_PlayCue(s32 cue)
void Engine_ActorSetChildValue(s32 actor, s32 value)
static void Map_SetShake(s32 horizontal, s32 vertical, s32 decay)
Sets shake amplitudes in fixed-point pixels and the per-frame decay factor.
s32 Engine_GameFlagIsSet(s32 flag)
void Engine_PsynergyPlayEffect(s32 effect)
void Engine_ActorStartRepeatedMotion(s32 actor, s32 repeats)
static void Actor_WalkBy(s32 actor, s32 dx, s32 dz)
static void Actor_SetSpeed(s32 actor, s32 speed, s32 acceleration)
void Engine_ObjectMotionSetPositionAndCommit(s32 actor, s32 x, s32 z)
static s32 Random_Next(void)
static void Camera_MoveTo(s32 fixed_x, s32 fixed_y, s32 fixed_z, s32 pan)
static void Actor_SetPosition(s32 actor, s32 fixed_x, s32 fixed_z)
static void Map_CopyCellsLayered(s32 srcX, s32 srcY, s32 destX, s32 destY, s32 width, s32 height)
void Engine_ActorFaceEachOther(s32 actor, s32 other, s32 frames)
void Engine_EventWait(s32 frames)
static void Actor_SetAttachedEffect(s32 actor, s32 effect)
void Engine_PsynergySetTarget(s32 caster, s32 target)
static struct FieldActor * Actor_Get(s32 actor)
@ TRANSITION_BACKDROP_FADE
@ ACTOR_PRIORITY_UNDERFOOT
The depth sort treats it as 320 pixels higher on the screen.
#define SCENE_TRANSITION(style, variant)
@ ACTOR_FACES_MOTION
turns toward its velocity, 1/16 turn a frame
The field's runtime work: map cells, scene records and regions, map markers and FieldWork.
The scene table formats: entrances, exits, placements and events, and the macros that write them.
#define PSYNERGY_PHASE_ON_ACTOR(ability, phase)
A Psynergy event on an actor at one phase of the cast, as PSYNERGY_IN_AREA is for an area.
#define SCENE_EXITS(scene)
#define PSYNERGY_IN_AREA(ability, phase)
#define SCENE_EXIT(exit, scene, entrance)
#define PSYNERGY_ON_ACTOR(ability)
#define EVENT_SCRIPT(script)
#define EVENT_TOUCH_WALKING
#define TOUCH_WALKING_INTO(facing)
The scene service layer: one typed inline for each engine service a scene calls by its own name,...
static void Event_End(void)
static s32 Task_AddCallback(void(*callback)(void), s32 priority)
Calls the main-image scheduler through engine_call.h.
static void Task_Wait(s32 frames)
static void Event_Begin(void)
static void FieldMotion_LaunchFromFocusedObject(s32 actor, s32 dx, s32 dz, s32 facing)
static void Event_SetMessage(s32 message)
16.16 fixed-point constants, sine and cosine, and the library division.
#define Q16_ONE
One in the engine's signed 16.16 fixed-point format.
Game flags, named where their meaning is shown.
#define FLAG_ALTMILLER_CAVE_VIAL
room 3's chest
#define FLAG_BABI_SAVED
The party has saved Babi in Altmiller Cave with his Mystic Draught; Tolbi then holds the Colosso fina...
#define FLAG_DJINNI_0
the flag of Djinni 0, set once it is caught
#define FLAG_SCENE_TEMP_12
#define FLAG_MET_INVISIBLE_BABI
Babi has asked for his draught.
#define FLAG_ALTMILLER_CAVE_COOKIE
room 5's chest
#define FLAG_SCENE_TEMP_00
#define FLAG_ALTMILLER_CAVE_MYSTIC_DRAUGHT
behind the rocks' wall
#define FLAG_SCENE_TEMP_11
#define FLAG_BABI_CALLED_PARTY_BACK
Babi has called the party back once as it made to leave without him.
#define FLAG_KEEP_PARTY_POSITION
#define FLAG_SCENE_TEMP_01
The frame loop's globals: lag counts, the CPU load display and the VBlank flags.
u32 gFrameTick
Counted up by every VBlank.
BattleFxScene, the work of a battle or field Psynergy effect scene, and its arc objects.
GameState, the game's state: play time, coins, the scene and the leader's position,...
struct GameState gGameState
The work slots of gWorkSlot, read through their own names.
struct DisplayTransitionState * gDisplayTransition
Slot 31.
void * gEffectWork
Slot 56: points to a scene-specific structure.
The screen blend's globals and the graphics routines.
The main-image routines scene overlays import.
The hardware's I/O registers and their bits, as pret names them.
Io_Write16, a 16-bit write to a register or memory.
#define Io_Write16(v, reg)
Writes a value to a 16-bit register or memory location.
Item numbers, named from the English release.
void Vector_AddPolarOffset(s32 radius, s32 angle, void *position)
Moves the point position by radius in direction angle on the ground plane: x by the cosine,...
The reel game's title lettering.
Field object scripts: one s32 command word, then its operands, as gScriptObject_CommandTable runs the...
#define SC_SYNC
Wait for arrival.
#define SC_END
Return to the main script.
#define SC_MOVE_BY(x, y, z)
Move by a relative offset.
void Battle_ResetEffectCounter(void)
Clears the field's busy flag and, while Reveal is active, ends it: Reveal used with ACT_PACKED runs i...
void DisplayTransition_InitializeBattleEffectState(s32 mode)
Starts window transition mode at value 0, with no duration: the caller moves it.
void Camera_WorldToScreen(struct EffectVector *position)
Converts a world position (16.16 pixels) to the screen: x and z receive the screen's x and y and y be...
The object dispatcher's scripts: key checks, the player, the world map and the camera.
void Field_RequestDjinnBattle(s32 flag, s32 no)
Sets up the battle with Djinni number no.
void Audio_PlayCueFromEventWork(void)
Starts the current scene's field music, chosen by Scene_ResolveInteractionResult.
Scene numbers, named after their places.
char SceneId_AltmillerCave6
char SceneId_AltmillerCave1
char SceneId_AltmillerCave2
char SceneId_AltmillerCave5
char SceneId_AltmillerCave4
char SceneId_AltmillerCave3
Declares nothing of its own: it only includes types.h.
Song and sound effect ids, indices into gSound_SongTable.
#define MUS_PUZZLE_SOLVED
#define SE_JUMP
An actor jumps: ObjectMotion_Launch plays the high jump above 5 pixels a frame.
void ObjectGroup_SetChildValueUnlessFifteen(void *rawSprite, u32 value)
Sets the draw parameter of each of a sprite's layers to value, except layers whose parameter is 15,...
void Engine_ActorSetAnimation()
struct EventWork * gEventWork
void Engine_ActorSetPosition(u32 actor, s32 x, s32 z)
void Engine_EventEnd(void)
void Engine_AudioPlayCue()
void Engine_EventBegin(void)
void Engine_ActorShowEmote()
void Engine_EventSetMessage()
void Engine_EventShowMessage()
The pushable actors' movement probes and footprint bounds.
#define offsetof(type, member)
The work of a Psynergy effect scene: its caster and target, where it takes place, the map state it re...
u8 mode
where the effect runs; MODE_WORLD_MAP on the world map
s16 firstObjectId
the caster's object id
s8 childOption
Set by some scenes before an effect; Carry, Frost, Force and Reveal treat the target differently with...
struct EffectSlot slots[24]
s8 childMode
set by some scenes: Frost and Force leave the target be
void * mainObject
the caster's object
s8 active
set at the start: the ability's name is announced
A field object as the object dispatcher's far calls take it.
The display transition state (heap block 31): two pages of window edges for every line,...
u16 value
The progress, moved from start to end over duration frames: bit 5 says whether the transition opens o...
s16 active
WININ, or WINOUT by mode: 1 when a transition starts.
s16 mask
WINOUT, or WININ by mode: 0x3f3f or 63 when a transition starts.
A particle a Psynergy effect moves and draws: its sprite, its position and target,...
s32 scaleY
16.16 fixed point, 0x10000 full size
s8 state
the callback's own step; 0 when it is given
void * object
the slot's sprite, released with the slot
s32 originX
16.16 fixed-point pixels; where the slot started
s32 z
16.16 fixed-point pixels
s32 x
16.16 fixed-point pixels
s8 limitTurnStep
Clamp steering to maxTurnStep; zero faces the target directly.
s32 originZ
16.16 fixed-point pixels; where the slot started
s32 targetZ
16.16 fixed-point pixels; EFFECT_NO_TARGET at rest
s32 scaleX
16.16 fixed point, 0x10000 full size
s32 targetX
16.16 fixed-point pixels; EFFECT_NO_TARGET at rest
s32 maxSpeed
16.16 fixed-point pixels per frame
s32 acceleration
16.16 fixed-point pixels per frame, each frame
A world position, as Camera_WorldToScreen converts it to the screen.
s32 y
16.16 fixed-point pixels
s32 z
16.16 fixed-point pixels
s32 x
16.16 fixed-point pixels
The running scene's event work: its placement and event tables, its actors, the triggers and exit it ...
s32 startTransition
SCENE_TRANSITION(style, variant).
s32 transitionFrames
frames
A field actor: a person or thing on the field with a position, motion toward a target,...
s16 timer
The parameter its action script reads (a follow distance or an angle to face), the player's frames to...
s32 speed
speed limit, 16.16 fixed-point pixels per frame
u16 radius
Collision radius in pixels: 16, or half the sprite metadata's boxY, when created; the overlap checks ...
u8 motionFlags
ActorMotionFlag bits; zero is free flight in 3D, and 3 is set on creation.
union FieldCoordinate x
16.16 fixed-point pixels
union FieldCoordinate y
16.16 fixed-point pixels
u8 priorityFlags
ActorPriorityFlag bits, read by the scrolling camera.
s32 terrainHeight
16.16 fixed-point pixels
s32 velocityY
16.16 fixed-point pixels per frame
u8 spriteStorageKind
Zero hides sprites; one draws a single sprite, two draws a group.
union FieldCoordinate z
16.16 fixed-point pixels
s32 acceleration
Added toward the target each frame, or taken off the speed when there is none, in 16....
s32 scaleX
16.16 fixed point, 0x10000 full size
s32 scaleY
16.16 fixed point, 0x10000 full size
void(*) update(union FieldObject *object)
Called each frame before the object's script, while the object is live.
u16 work
The side of the player's next footprint (2 after a stop), or scene scratch.
u8 collisionFlags
bits: 7 refuses to move into a solid object | 4 nearer for Psynergy targets | 3 never a talk or Psyne...
s32 z
16.16 fixed-point pixels
Full event work allocated by Field_RunScene (heap slot 27).
s16 revealActive
nonzero while Reveal is active
s32 selectedActor
the leader: its unit and its actor
The ring of five lights above room 6's rocks as it spins to its next light: angles are 16-bit turns,...
u16 travel
How far the ring has turned since its last click.
Room 6's rock puzzle, kept in gSceneState: the rounds of lights matched in byte 0,...
A scene entrance: where and facing which way the party arrives, and the camera's bounds there (-1 for...
A scene event: its kind and detail, the trigger it answers, its condition and its value (a message or...
An actor a scene places: its sprite, the condition for placing it, how it behaves,...
A scene's exit region: the box that, while its condition holds, takes the party leader out through it...
Where a large thing ahead of the leader would roll to: its footprint, its actor, that position,...
The system's routines and globals: interrupts, BIOS sound bias, random numbers and sleep.
The integer types, TRUE, UNUSED and the fixed-address macros.
A field coordinate, read whole or as its fraction and its whole pixels.
struct FieldCoordinate::@024321007066302143002254325121164243234242211074 part
s32 fixed
16.16 fixed-point pixels
An object on the field, read as an actor or as an effect.
The patch levels: our groups of the measured changes from the Japanese release.