Alchemy
Loading...
Searching...
No Matches

hail.c

Go to the documentation of this file.
1/// @file
2/// Hail and Ground.
3/// Part of effect.c, the battle effect object, compiled only through it.
4
6
7#define HAIL_CHIP_COUNT 64 ///< ice chips
8
9#define HAIL_CHIP_CELLS 0x400 ///< the ice chips, after the 32x32 wave
10#define HAIL_DJINNI_CELLS 0x65c0 ///< the small Mercury Djinni
11
12#define HAIL_FRAMES 64
13
14/// Water burst: after a Mercury Djinni enters, ice chips burst out of the first
15/// target and waves rise along the bottom of the screen; the canvas fades out
16/// over the last 16 of its 64 frames.
17///
18/// Abilities: Hail (kind 207).
19///
20/// The 64 chips start together and are let go four a frame from frame 4,
21/// alternately mirrored; the battle shows the damage on frame 8. The chips live
22/// in PARTICLES, since work holds the waves' sheet.
23///
24/// The Djinni entrance plays whatever the prelude. Writes REG_BLDALPHA and
25/// the first 128 bytes of BG palette RAM (the water spray's, then the ice
26/// chips' on frame 1), sets work->shakeFrames on frame 8, and ends with the
27/// transfer callback removed, the blitters freed and the canvas layer closed.
28///
29/// effect: the user and the targets; prelude 1 keeps the Djinni circling.
31 void **slots;
32 void **cursor;
33 struct BattleEffectWork *work;
34 void *canvas;
35 struct EffectPosition origin;
36 s32 screenY;
37 s32 screenX;
38 BlitterPair draw;
39 struct EffectStep *chip;
40 s32 i;
41 s32 frame;
42 s32 rise;
43
44 EFFECT_GET_SLOTS(slots, cursor, work, canvas);
45 work->effect = effect;
47 BattleFx_RunDjinniEntrance(effect, 1, work->effect->side, 2, &screenX,
48 &screenY);
51 1);
54
55 // The chips burst up from the first target, in the upper half turn of
56 // directions, eight times as fast up as across; z picks each chip's
57 // picture and velocityZ turns it. variant is set but never read.
58 for (i = 0; i != HAIL_CHIP_COUNT; i++) {
59 s32 angle;
60 s32 speed;
61
62 angle = (Random16() & 0x7fff) + 0x4000;
63 speed = (Random16() & 0x1ff) + 0x80;
64 PARTICLES[i].x = ((origin.x / 2 + (Random16() & 0xf)) - 8) << 16;
65 PARTICLES[i].y = (origin.y + 8) << 16;
66 PARTICLES[i].velocityX = (Trig_Sin(angle) * speed) >> 9;
67 PARTICLES[i].velocityY = (Trig_Cos(angle) * speed) >> 6;
68 PARTICLES[i].z = Random16() & 0x7f;
69 PARTICLES[i].velocityZ = Random16() & 0x7f;
70 PARTICLES[i].variant = (Random16() & 0xf) + 32;
71 }
72
73 for (frame = 0; frame != HAIL_FRAMES; frame++) {
74 // Fade out over the last 16 frames.
75 if (frame > 47)
76 REG_BLDALPHA = BLEND_ALPHA(64 - frame, 16);
77 // The chips and the Djinni load on frame 1, so on frame 0 the prelude
78 // draws whatever the sheet holds at HAIL_DJINNI_CELLS.
79 if (frame == 1) {
81 work->sheet + HAIL_CHIP_CELLS, 1, 1);
83 work->sheet + HAIL_DJINNI_CELLS, 1, 0);
84 }
85
86 // Prelude: the small Djinni circles, drawn twice on the first 4 frames.
87 if (work->effect->prelude == 1) {
88 s32 orbit;
89 s32 x;
90 s32 y;
91
92 orbit = frame << 11;
93 x = (((-Trig_Sin(orbit) * 4)) >> 16) + screenX / 2 - 10;
94 y = (((Trig_Cos(orbit) * 2)) >> 16) + screenY - 22;
95 // Never true: the effect ends after 64 frames.
96 if (frame > 69)
97 y = (y - frame * 2) + 138;
98 draw[1](canvas, work->sheet + HAIL_DJINNI_CELLS, x, y, 20, 40);
99 if (frame <= 3)
100 draw[1](canvas, work->sheet + HAIL_DJINNI_CELLS, x, y, 20, 40);
101 }
102
103 // The chips, four more each frame from frame 4, odd ones mirrored; they
104 // fall under gravity and are never retired.
105 for (i = 0, chip = PARTICLES; i != HAIL_CHIP_COUNT; i++, chip++) {
106 if (frame >= i / 4 + 4) {
107 s32 cell;
108 s32 width;
109 s32 height;
110
111 cell = (chip->z / 128) & 3;
112 // UB: width is assigned in one argument and read in another.
113#ifdef UBFIX
114 width = gHail_CellWidths[cell];
115 height = gHail_CellHeights[cell];
116 draw[i & 1](canvas, work->sheet + HAIL_CHIP_CELLS + gHail_Cells[cell],
117 Q_16_16_TO_INT(chip->x) - width / 2,
118 Q_16_16_TO_INT(chip->y) - height / 2, width, height);
119#else
120 draw[i & 1](
121 canvas, work->sheet + HAIL_CHIP_CELLS + gHail_Cells[cell],
122 Q_16_16_TO_INT(chip->x) - (width = gHail_CellWidths[cell]) / 2,
123 Q_16_16_TO_INT(chip->y) - (height = gHail_CellHeights[cell]) / 2,
124 width, height);
125#endif
126 EffectStep_AdvanceWithGravity3D(chip, 63, 0x1000);
127 }
128 }
129
130 // Frame 8: the first target is hit, and the screen shakes for 8 frames
131 // (shakeFrames takes the frame number).
132 if (frame == 8) {
133 work->shakeFrames = frame;
136 POSE_DAMAGE, 0, 16);
138 }
139
140 // Waves rise along the bottom, 4 pixels a frame up to 32, drifting
141 // away from the user a pixel every 4 frames: five 32-pixel waves, the
142 // row wrapping every 32 pixels.
143 rise = frame * 4;
144 if (rise > 32)
145 rise = 32;
146 if (work->effect->side == 0) {
147 for (i = 0; i != 5; i++)
148 draw[0](canvas, work->sheet, (i << 5) - (frame / 4 & 31), 120 - rise,
149 32, 32);
150 } else {
151 for (i = 0; i != 5; i++)
152 draw[0](canvas, work->sheet, ((i << 5) + (frame / 4 & 31)) - 32,
153 120 - rise, 32, 32);
154 }
155
156 Camera_ApplyShake(4, 8);
157 EFFECT_END_FRAME(work);
158 }
159
161}
162
163/// The small Venus Djinni in the rock toss's sheet.
164#define GROUND_DJINNI_CELLS 0x65c0
165
166#define GROUND_FRAMES 96
167#define GROUND_LAUNCHED 8 ///< rocks launched
168#define GROUND_CHIPS 32 ///< chip slots
169#define GROUND_ROCKS 6 ///< rocks thrown
170#define GROUND_CHIPS_PER_ROCK 4 ///< chips each rock sheds
171
172/// Venus Djinni rock toss: after a Venus Djinni enters, six rocks rise from the
173/// user shedding chips, swirl, and home in on the first target, each hitting it
174/// as it lands.
175///
176/// Abilities: Ground (kind 203).
177///
178/// A rock's variant is 1 while it flies and 0 once it has hit; the chips are
179/// particles 32 to 63, four for each rock, each with its picture in velocityX
180/// and its blitter flags in velocityY. The Djinni entrance plays whatever the
181/// prelude. From frame 17 the BG palette steps towards the portal sheet's
182/// (BattleFx_StepPaletteToResource). Writes REG_BLDALPHA, sets
183/// work->shakeFrames on each hit, and ends with the transfer callback
184/// removed, the blitter freed and the canvas layer closed.
185///
186/// effect: the user and the targets; prelude 1 keeps the Djinni circling.
188 struct BattleEffectWork *work;
189 void *canvas;
190 s32 i;
191 s32 frame;
192 BlitterPair draw;
193 struct BattleCamera *camera;
194 struct MotionObject *target;
195 struct MotionObject *user;
196 struct EffectPosition position;
197 s32 screenX;
198 s32 screenY;
199 s32 j;
200
203 camera = WORK_SLOT(HEAP_SLOT_CAMERA);
204 work->effect = effect;
206 BattleFx_RunDjinniEntrance(effect, 0, work->effect->side, 2, &screenX,
207 &screenY);
208 REG_BLDALPHA = BLEND_ALPHA(16, 16);
209 if (work->effect->side == 1)
212 else
217 work->sheet + GROUND_DJINNI_CELLS, 1, 1);
220 target = GetBattleObjectSlotFar(work->effect->actors[0])->object;
221 // The rocks leave the user 66 pixels up, fanning out towards the middle
222 // of the field, rock i at 2.5 i pixels a frame across. Eight are launched,
223 // the first six drawn.
224 for (i = 0; i != GROUND_LAUNCHED; i++) {
225 struct EffectStep *rock = &work->particles[i];
226
227 SET_POSITION(rock, user->x, 0x420000, user->z);
228 SET_VELOCITY(rock, (i * 0x500000) >> 5,
229 (s32)(((Random16() & 127) - 64) << 16) >> 6,
230 (s32)(((Random16() & 255) - 127) << 16) >> 5);
231 if (rock->x > 0)
232 rock->velocityX = -rock->velocityX;
233 rock->variant = 1;
234 }
235 for (frame = 0; frame != GROUND_FRAMES; frame++) {
236 if (frame > 16)
238 // Prelude: the Djinni circles above the user and from frame 17 rises 2
239 // pixels a frame. For its first four frames it is drawn additively
240 // first, so it flashes in.
241 if (work->effect->prelude == 1) {
242 s32 angle = frame << 11;
243 s32 x = (((-Trig_Sin(angle) * 4)) >> 16) + screenX / 2 - 10;
244 s32 y = (((Trig_Cos(angle) * 2)) >> 16) + screenY - 22;
245
246 if (frame > 16)
247 y = y - frame * 2 + 32;
248 if (work->effect->side == 1)
252 else
255 if (frame <= 3)
257 canvas, work->sheet + GROUND_DJINNI_CELLS, x, y, 20, 40);
259 draw[0](canvas, work->sheet + GROUND_DJINNI_CELLS, x, y, 20, 40);
260 }
261 // Every 2 frames each chip takes a random picture (velocityX, chips 3
262 // to 8) and flip (velocityY: gHail_ChipFlips, bit 2 across, bit 3 down).
263 if ((frame & 1) == 0) {
264 for (i = 0; i != GROUND_CHIPS; i++) {
265 struct EffectStep *chip = &work->particles[32 + i];
266
267 chip->velocityX = Random16() % 6 + 3;
268 chip->velocityY = gHail_ChipFlips[Random16() & 3];
269 }
270 }
272 // The rocks, one more every 2 frames.
273 for (i = 0; i != GROUND_ROCKS; i++) {
274 struct EffectStep *rock = &work->particles[i];
275
276 if (rock->variant == 1) {
277 if (frame > i * 2) {
278 s32 x;
279 s32 y;
280
281 EffectPosition_ProjectPoint(&rock->x, &position);
282 position.x >>= 1;
283 x = position.x - 12;
284 y = position.y - 24;
285 draw[0](canvas, work->sheet, x, y, 24, 48);
286 // The rock's crust flickers between chips 1 and 2 every 2 frames.
287 if ((frame & 3) <= 1)
288 draw[0](canvas, work->sheet + gHail_ChipCells[1],
291 else
292 draw[0](canvas, work->sheet + gHail_ChipCells[2],
295 // The four loose chips: each loads a blitter with its own flip,
296 // and a flipped chip is placed from the rock's opposite edge so it
297 // stays on the rock.
298 for (j = 0; j != GROUND_CHIPS_PER_ROCK; j++) {
299 struct EffectStep *chip = &work->particles[32 + i * 4 + j];
300 s32 chipX;
301 s32 chipY;
302
306 if (chip->velocityY & 4)
307 chipX = x - gHail_ChipWidths[chip->velocityX] -
308 gHail_ChipX[chip->velocityX] + 24;
309 else
310 chipX = x + gHail_ChipX[chip->velocityX];
311 if (chip->velocityY & 8)
312 chipY = y - gHail_ChipHeights[chip->velocityX] -
313 gHail_ChipY[chip->velocityX] + 48;
314 else
315 chipY = y + gHail_ChipY[chip->velocityX];
316 draw[1](canvas, work->sheet + gHail_ChipCells[chip->velocityX],
317 chipX, chipY, gHail_ChipWidths[chip->velocityX],
320 }
321 rock->x += rock->velocityX;
322 rock->y += rock->velocityY;
323 rock->z += rock->velocityZ;
324 }
325 // After 16 frames the rock homes in on a point 20 pixels above the
326 // target, 1/256 of the distance a frame, damped to 60/64 until 85
327 // frames after it launched; it hits once below that height.
328 if (frame > i * 2 + 16) {
329 rock->velocityX += (target->x - rock->x) >> 8;
330 rock->velocityY += (0x140000 - rock->y) >> 8;
331 rock->velocityZ += (target->z - rock->z) >> 8;
332 if (frame < i * 2 + 85) {
333 SET_VELOCITY(rock, rock->velocityX * 60 / 64,
334 rock->velocityY * 60 / 64, rock->velocityZ * 60 / 64);
335 }
336 if (rock->y < 0x140000) {
337 work->shakeFrames = 8;
338 rock->variant = 0;
340 EFFECT_STRIKE_TARGET(work->effect, 0, 4, 4);
341 }
342 }
343 }
344 }
345 Camera_ApplyShake(16, 16);
346 EFFECT_END_FRAME(work);
347 }
349}
350
351/// Shakes the battle view while gBattleFxWork's shakeFrames lasts, moving
352/// BG1 and the projection centre by a random offset; once the shake runs
353/// out, BG1 returns to its saved position and the centre to (120, 120). It
354/// takes two random numbers each shaking frame, x first.
355///
356/// Called once a frame by nearly every effect, before it presents the frame.
357/// Writes gBgScroll[1] and gProjection.centerX and centerY, and counts down
358/// work->shakeFrames. The x offset is centred on half of rangeY too, so with
359/// rangeX smaller (Hail's 4 and 8) the x offset is never positive.
360///
361/// rangeX: the horizontal range, a power of two.
362/// rangeY: the vertical range, a power of two; both offsets are centred on
363/// half of it.
364void Camera_ApplyShake(s32 rangeX, u32 rangeY) {
366
367 if (work->shakeFrames > 0) {
368 s32 randomX = (rangeX - 1) & Random16();
369 s32 halfRange = (s32)rangeY / 2;
370 s32 offsetY = ((rangeY - 1) & Random16()) - halfRange;
371 s32 offsetX = randomX - halfRange;
372
373 gBgScroll[1].x = offsetX;
374 gBgScroll[1].y = offsetY + 32;
375 gProjection.centerX = 120 - offsetX;
376 gProjection.centerY = 120 - offsetY;
377 work->shakeFrames--;
378 return;
379 }
380 gBgScroll[1].x = work->savedBg1X;
381 gBgScroll[1].y = work->savedBg1Y;
382 gProjection.centerX = 120;
383 gProjection.centerY = 120;
384}
385
386#undef HAIL_CHIP_COUNT
387#undef HAIL_CHIP_CELLS
388#undef HAIL_DJINNI_CELLS
389#undef HAIL_FRAMES
390#undef GROUND_DJINNI_CELLS
391#undef GROUND_FRAMES
392#undef GROUND_LAUNCHED
393#undef GROUND_CHIPS
394#undef GROUND_ROCKS
395#undef GROUND_CHIPS_PER_ROCK
@ SPRITE_COLOR_WHITE
solid colour 15, white
Definition animspr.h:26
@ POSE_DAMAGE
taking damage
Definition battle.h:176
@ COMPOSITE_FLIP_X
@ COMPOSITE_ADDITIVE
@ COMPOSITE_MAX
BattleEffectDrawRectangle DrawRectangle
void BattleFx_BeginCanvasLayer(s32 bgControl)
Opens the canvas layer: starts the background palette fade, makes BG2 the canvas, alpha-blended over ...
Definition canvas.c:314
void BattleFx_StepPaletteToResource(s32 resourceId)
Moves each RGB555 channel of background colours 0 to 63 one level towards the resource palette.
void Resource_LoadAndDecompress(s32 id, void *dst, s32 skipPalette, s32 copyPalette)
Decompresses a resource whose first 128 bytes may be a palette.
void ObjectGroup_UpdateMembers(s32 actorId, s32 palette, s32 animation, s32 timerSlot, s32 timerFrames)
Updates every animation group of one battler's object.
Definition dispatch.c:254
What every part of the battle effect object shares: its includes, macros and frame-loop helpers.
@ CANVAS_COPY_AND_FADE
copy, keeping 50% or 75% (transferValue) of each pixel in the canvas for the next frame
#define EFFECT_FINISH_CANVAS()
The usual end of a canvas effect: stops the transfer callback before freeing what it reads,...
#define EFFECT_FINISH_CANVAS_ONE_BLITTER()
The same for an effect that drew through one blitter.
#define EFFECT_SHOW_DAMAGE(hitSound)
Lets the battle show the damage: resumes its paused playback, which plays hitSound (an SE_ id; 0 keep...
#define EFFECT_START_TRANSFER(work, mode, value)
Sets the transfer, then starts copying the canvas to VRAM once a frame.
#define EFFECT_LOAD_BLITTER(slot, flags, mode)
Builds a blitter for the 128x128 canvas (1 << 7 pixels each way) in work slot slot: BattleFx_BuildBli...
#define EFFECT_GET_SLOTS(slots, cursor, work, canvas)
Starts at the effect's entry in the whole work-slot array.
#define EFFECT_END_FRAME(work)
The usual end of an effect frame: counts down the targets' flash timers (ObjectGroup_TickMemberTimers...
#define EFFECT_VIEW_FROM_CAMERA(camera)
Starts a frame's 3D projection from the battle camera: resets the transform, then looks from camera->...
#define EFFECT_STRIKE_TARGET(effect, i, frames, motion)
Strikes target i: it flashes white in its damage pose for frames frames and plays battle motion motio...
u8 gHail_ChipWidths[]
u16 gHail_Cells[]
u8 gHail_CellWidths[]
u8 gHail_ChipFlips[]
The composite flips a chip may take.
u8 gHail_ChipHeights[]
u8 gHail_CellHeights[]
u8 gHail_ChipY[]
u16 gHail_ChipCells[]
u8 gHail_ChipX[]
struct BattleObj * GetBattleObjectSlotFar(s32 objectId)
Far call to BattleObjGet.
void BattleMotion_ApplyVariantMotionFar(s32 id, s32 variant)
void AudioCommand_PlayFar(s32 id)
s32 Trig_Cos(s32 angle)
s32 Trig_Sin(s32 angle)
#define HAIL_CHIP_COUNT
ice chips
Definition hail.c:7
void BattleFx_RunHail(struct BattleEffectArgument *effect)
Water burst: after a Mercury Djinni enters, ice chips burst out of the first target and waves rise al...
Definition hail.c:30
#define GROUND_DJINNI_CELLS
The small Venus Djinni in the rock toss's sheet.
Definition hail.c:164
#define HAIL_DJINNI_CELLS
the small Mercury Djinni
Definition hail.c:10
#define GROUND_CHIPS
chip slots
Definition hail.c:168
#define GROUND_LAUNCHED
rocks launched
Definition hail.c:167
#define GROUND_ROCKS
rocks thrown
Definition hail.c:169
#define GROUND_CHIPS_PER_ROCK
chips each rock sheds
Definition hail.c:170
void BattleFx_RunGround(struct BattleEffectArgument *effect)
Venus Djinni rock toss: after a Venus Djinni enters, six rocks rise from the user shedding chips,...
Definition hail.c:187
void Camera_ApplyShake(s32 rangeX, u32 rangeY)
Shakes the battle view while gBattleFxWork's shakeFrames lasts, moving BG1 and the projection centre ...
Definition hail.c:364
#define HAIL_FRAMES
Definition hail.c:12
#define HAIL_CHIP_CELLS
the ice chips, after the 32x32 wave
Definition hail.c:9
#define GROUND_FRAMES
Definition hail.c:166
@ HEAP_SLOT_BATTLE_EFFECT
Definition heap_state.h:42
@ HEAP_SLOT_BLITTER_ALTERNATE
Definition heap_state.h:47
@ HEAP_SLOT_CAMERA
Definition heap_state.h:38
@ HEAP_SLOT_BLITTER
Definition heap_state.h:46
@ HEAP_SLOT_BATTLE_CANVAS
Definition heap_state.h:43
#define WORK_SLOT(n)
Reads slots through their own addresses; adjacent slots are reached by offsets.
Definition heap_state.h:14
#define BLEND_ALPHA(top, bottom)
A REG_BLDALPHA value: top and bottom are the two targets' weights, out of 16.
Definition io_reg.h:145
#define REG_BLDALPHA
Definition io_reg.h:142
#define SET_VELOCITY(p, vx, vy, vz)
Definition macros.h:18
#define SET_POSITION(p, px, py, pz)
Sets the position or the velocity of a particle, a piece of debris or an object in one statement.
Definition macros.h:16
struct BgScroll gBgScroll[]
u32 Random16(void)
Advances the game's random number generator (the C library's classic linear congruential one),...
Definition math.c:10
void Runtime_ReleaseHeapBlock(s32 slot)
void BattleFx_FetchRectangleBlitters(s32 flip, BlitterPair out)
Builds the two usual routines that draw onto the 128x128 canvas, both clipped on both axes.
void EffectPosition_ProjectBattler(s32 id, struct EffectPosition *position)
The screen position of a battler, 16 pixels higher.
Definition positions.c:100
void EffectStep_AdvanceWithGravity3D(struct EffectStep *step, s32 damping, s32 gravity)
Moves a particle one frame in three dimensions: adds its velocity, then gravity to its vertical speed...
Definition positions.c:29
s32 EffectPosition_ProjectPoint(const void *point, struct EffectPosition *position)
Projects a point in the current transform onto the screen, 16 pixels higher, and returns the projecti...
Definition positions.c:64
struct Projection gProjection
void BattleFx_RunDjinniEntrance(struct BattleEffectArgument *effect, s32 mode, s32 side, s32 anchor, s32 *outX, s32 *outY)
Djinni entrance: sparks swirl around a point that travels from the user to the goal and gather into t...
Definition projectiles.c:29
char ResourceId_VenusDjinnSmallSheet
char ResourceId_MercuryDjinnSmallSheet
char ResourceId_PortalSheet
char ResourceId_IceChipSheet
char ResourceId_WaterSpraySheet
#define SE_HEAVY_IMPACT
Definition songs.h:127
void * gWorkSlot[]
The battle camera: its eye, the focus it turns about, and its pitch, yaw and distance.
The command shared by an effect's caller, dispatcher and handlers.
s32 actor
the user's unit id
s32 side
1 when the targets are the party, 0 for enemies
s16 actors[8]
the targets' unit ids, count of them
s32 prelude
1 plays a prelude: in some effects a Djinni appears
The running battle effect's work: its canvas image, 64 particles, the display registers it stages and...
s32 frame
frame counter some effects keep, from 0
s32 savedBg1Y
BG1 scroll restored when a shake ends.
s32 savedBg1X
BG1 scroll restored when a shake ends.
s32 shakeFrames
shake frames left; Camera_ApplyShake counts down
struct BattleEffectArgument * effect
the command being run
struct EffectStep particles[64]
free while variant is -1
struct MotionObject * object
NULL once released.
u16 y
pixels
Definition map_scroll.h:65
A point projected onto the screen, with its depth.
Definition effect_step.h:46
s32 y
screen pixels
Definition effect_step.h:59
s32 x
screen pixels
Definition effect_step.h:58
A moving point of an effect: its position, its velocity and a value each effect uses its own way (a s...
Definition effect_step.h:13
s32 velocityX
16.16 fixed-point pixels per frame
Definition effect_step.h:28
s32 z
16.16 fixed-point pixels
Definition effect_step.h:26
s32 variant
each effect's own: a size, a countdown, -1 for idle
Definition effect_step.h:31
s32 x
16.16 fixed-point pixels
Definition effect_step.h:24
s32 y
16.16 fixed-point pixels
Definition effect_step.h:25
s32 velocityY
16.16 fixed-point pixels per frame
Definition effect_step.h:29
s32 velocityZ
16.16 fixed-point pixels per frame
Definition effect_step.h:30
An effect object that moves and draws one sprite: its position, scale, velocity and target,...
Definition motobj.h:20
s32 z
16.16 fixed-point pixels
Definition motobj.h:25
s32 x
16.16 fixed-point pixels
Definition motobj.h:23
s32 centerX
screen pixels
Definition project.h:16
s32 centerY
screen pixels
Definition project.h:17
signed int s32
Definition types.h:14
unsigned int u32
Definition types.h:15
#define EFFECT_CLIP_BOUNDS
Clips overflow on all four sides.
Definition effect.h:224
#define Q_16_16_TO_INT(v)
Definition effect.h:231
#define PARTICLES
The map cell buffer (gMapCellBuffer), which the effects borrow, has two views here: Ram_MapCellBuffer...
Definition effect.h:221
DrawRectangle BlitterPair[2]
A blitter pair: [0] built in HEAP_SLOT_BLITTER and [1] in HEAP_SLOT_BLITTER_ALTERNATE (BattleFx_Fetch...
Definition effect.h:244