Alchemy
Loading...
Searching...
No Matches

tiamat.c

Go to the documentation of this file.
1/// @file
2/// Dragon Driver and the Tiamat summon.
3/// Part of effect.c, the battle effect object, compiled only through it.
4
6
7/// The rising embers from the user's side, in the LightningBolt colours.
8///
9/// Abilities: Dragon Driver (kind 385).
12}
13/// The rising embers with a formation of eight objects that sweeps in and
14/// explodes at the end.
15///
16/// Abilities: Tiamat (scene kind 7).
19}
20#define PALETTE_PARTICLES_FRAMES 208
21/// Falling streaks, work->particles 24 to 39.
22#define PALETTE_PARTICLES_STREAKS 16
23/// The first streak in work->particles.
24#define PALETTE_PARTICLES_FIRST_STREAK 24
25#define PALETTE_PARTICLES_FIRST_SPARK 40 ///< the first spark in work->particles
26#define PALETTE_PARTICLES_EMBERS 512 ///< embers in PARTICLES
27#define PALETTE_PARTICLES_FLASHES 24 ///< flashes, work->particles 0 to 23
28#define PALETTE_PARTICLES_SPARKS 24 ///< sparks, work->particles 40 to 63
29/// The streak pictures in the sheet.
30#define PALETTE_PARTICLES_STREAK_IMAGES 0x3000
31
32/// A 208-frame effect of embers rising from the ground; pressing A or B
33/// during frames 49 to 159 skips to frame 160. The targets reel on frame
34/// 138, the screen flares white over frames 160 to 175 and fades out after,
35/// and the battle shows the damage on frame 178.
36/// mode : 0 also brings in a formation of eight objects that sweeps in and,
37/// at the end, explodes with BattleFx_RunImpactBurst;
38/// 1 throws the sparks and flashes from the user's side
39/// (effect->side), in the LightningBolt colours.
40/// Four kinds of particle, in canvas coordinates with y growing downwards:
41/// PARTICLES[0..511] embers: rise from y 112, speeding up; one a frame
42/// over frames 33 to 103, eight a frame over 104 to 175
43/// particles[40..63] sparks: one on each odd frame from 41 to 127,
44/// thrown up at a slant
45/// particles[0..23] flashes: one a frame over 129 to 175, thrown across
46/// particles[24..39] streaks: fall at a slant from the top and, below
47/// y 55, play their images over and over
48/// An idle particle's variant is -1; a live one's counts its age up until it
49/// goes out (a streak's counts down its wait first).
50///
51/// Called by BattleFx_RunTiamat (mode 0) and BattleFx_RunDragonDriver
52/// (mode 1). Sets REG_BLDALPHA and REG_BG2CNT (the canvas in front, priority
53/// 0), loads the flash and later the streak palette (or the lightning bolt's)
54/// into the first 64 background colours and brightens them over frames 160
55/// to 175, sets work->shakeFrames, and tints and shakes the targets. Mode 0
56/// spawns the eight formation objects and releases them after the impact
57/// burst.
59 s32 mode) {
60 struct EffectPosition origin;
61 void **cursor;
62 void *canvas;
63 struct BattleCamera *camera;
64 struct BattleEffectWork *work;
65 BlitterPair draw;
66 s32 frame;
67 u8 *sheet;
68 struct Point2D focus;
69 s32 dir;
70 u8 *palette;
71 s32 i;
72
74 canvas = cursor[0];
78 work->effect = effect;
80 REG_BLDALPHA = BLEND_ALPHA(16, 16);
84 draw[0] = CANVAS_SLOT(cursor, HEAP_SLOT_BLITTER);
88
89 // The flashes from FlashBurst, the streaks from EmberStreak (at sheet +
90 // 0x3000).
92 Iwram_CopyWords((void *)BG_PLTT, palette, 128);
93 palette += 128;
94 Resource_DecodeType01(palette, work->sheet);
96 palette += 128;
100 if (mode == 1)
101 Iwram_CopyWords((void *)BG_PLTT,
103 128);
104 // Trails keep 75% of each pixel a frame.
106
107 // Mode 1 mirrors everything when the user is on the right (side 1).
108 if (mode == 0)
109 dir = 1;
110 else if (work->effect->side == 1)
111 dir = -1;
112 else
113 dir = 1;
114 // Mode 1's sparks and flashes start at a fixed point on the user's side:
115 // the user's projected x is overwritten.
116 if (mode == 1) {
118 origin.x /= 2;
119 origin.y = 66;
120 if (work->effect->side == 1)
121 origin.x = 76;
122 else
123 origin.x = 44;
124 }
125
126 // The formation's centre starts at (212, -60).
127 focus.x = 212 << 16;
128 focus.y = -(60 << 16);
129 EFFECT_FREE_PARTICLES(i, work->particles, 64);
130 for (i = 0; i != PALETTE_PARTICLES_STREAKS; i++) {
131 struct EffectStep *streak =
133
134 if (dir == 1)
135 streak->x = (Random16() & 127) + 128;
136 else
137 streak->x = (Random16() & 127) - 128;
138 streak->y = (Random16() & 7) - 72;
139 // Frames to wait before falling.
140 streak->variant = -(Random16() & 31);
141 }
143 if (mode == 0) {
145 WaitFrames(1);
146 BattleFx_SpawnObjects(8, 377, 2);
147 }
148
149 for (frame = 0; frame != PALETTE_PARTICLES_FRAMES; frame++) {
150 // A or B skips to frame 160.
151 if ((gKeysRepeat & (KEY_A | KEY_B)) && frame > 48 && frame <= 159) {
152 // What frames 128 and 138 would have done.
153 if (mode == 0) {
158 }
163 }
164 frame = 160;
165 }
167 if (frame == 178)
169
170 // From frame 128 the trails keep only half; over frames 160 to 175 the
171 // canvas is filled each frame and the palette brightens; from 176 the
172 // pixels fade 2 a frame.
173 if (frame == 128)
174 work->transferValue = 50;
175 if (frame == 176) {
178 Iwram_CopyWords((void *)BG_PLTT, palette, 128);
179 } else if (frame >= 160 && frame <= 175) {
181 if (frame > 173)
182 work->transferValue = 0x3f3f3f3f;
184 }
185
186 // Start new particles.
187
188 // Embers: from y 112, moving up; their speeds take a base from
189 // gTiamat_DropSpeeds by index.
190 if (frame >= 33 && frame <= 175) {
191 s32 spawned = 0;
192 s32 limit = 1;
193
194 if (frame > 103)
195 limit = 8;
196 for (i = 0; i != PALETTE_PARTICLES_EMBERS; i++) {
197 struct EffectStep *grain = &PARTICLES[i];
198
199 if (grain->variant == -1) {
200 grain->x = ((Random16() & 255) - 32) << 16;
201 grain->y = 112 << 16;
202 grain->velocityX = ((Random16() & 127) + gTiamat_DropSpeeds[i & 3])
203 << 9;
204 grain->velocityY = -((Random16() & 127) + gTiamat_DropSpeeds[i & 3])
205 << 11;
206 grain->variant = 0;
207 spawned++;
208 if (spawned == limit)
209 break;
210 }
211 }
212 }
213 // Sparks: one on each odd frame, thrown up at a slant.
214 if (frame >= 41 && frame <= 127) {
215 s32 spawned = 0;
216
217 if (frame & 1) {
218 for (i = 0; i != PALETTE_PARTICLES_SPARKS; i++) {
219 struct EffectStep *spark =
221
222 if (spark->variant == -1) {
223 s32 speed = (Random16() & 255) + 128;
224 s32 angle = (Random16() & 0x1fff) + 20000;
225
226 if (mode == 0) {
227 spark->x = ((Random16() & 7) + 78) << 16;
228 spark->y = 70 << 16;
229 } else {
230 spark->x = ((Random16() & 7) + origin.x - 8) << 16;
231 spark->y = origin.y << 16;
232 }
233 spark->velocityX = speed * Trig_Sin(angle) >> 9;
234 spark->velocityY = speed * Trig_Cos(angle) >> 9;
235 spawned++;
236 spark->variant = 0;
237 if (spawned == 1)
238 break;
239 }
240 }
241 }
242 }
243 if (frame == 48)
245 if (frame == 128)
247 // Flashes: one a frame, thrown across.
248 if (frame >= 129 && frame <= 175) {
249 s32 spawned = 0;
250
251 for (i = 0; i != PALETTE_PARTICLES_FLASHES; i++) {
252 struct EffectStep *flash = &work->particles[i];
253
254 if (flash->variant == -1) {
255 s32 speed = (Random16() & 255) + 128;
256 s32 angle = (Random16() & 0x1fff) - 20000;
257
258 if (mode == 0) {
259 flash->x = 68 << 16;
260 flash->y = 64 << 16;
261 } else {
262 flash->x = origin.x << 16;
263 flash->y = origin.y << 16;
264 }
265 flash->velocityX = speed * Trig_Sin(angle) >> 6;
266 flash->velocityY = speed * Trig_Cos(angle) >> 6;
267 flash->variant = 0;
268 spawned++;
269 if (spawned == 1)
270 break;
271 }
272 }
273 }
274
275 // Draw and move the particles.
276
277 // Flashes: a new image every 4 frames; gone after 24 frames.
278 if (frame <= 175) {
279 for (i = 0; i != PALETTE_PARTICLES_FLASHES; i++) {
280 struct EffectStep *flash = &work->particles[i];
281
282 if (flash->variant >= 0) {
283 draw[0](canvas, work->sheet + ((flash->variant >> 2) << 11),
284 Q_16_16_TO_INT(flash->x) - 16, Q_16_16_TO_INT(flash->y) - 32,
285 32, 64);
286 flash->x += flash->velocityX * dir;
287 flash->y += flash->velocityY;
288 flash->variant++;
290 flash->variant = -1;
291 }
292 }
293 }
294
295 // Sparks: 1x2 dots that speed upwards; gone after 48 frames.
296 for (i = 0; i != PALETTE_PARTICLES_SPARKS; i++) {
297 struct EffectStep *spark =
299 s32 size = 1;
300
301 if (spark->variant >= 0) {
302 draw[1](canvas, gTiamat_SparkPixels, Q_16_16_TO_INT(spark->x),
303 Q_16_16_TO_INT(spark->y) - size, size, size * 2);
304 spark->x += spark->velocityX * dir;
305 spark->y += spark->velocityY;
306 spark->velocityY += -0x400;
307 spark->variant++;
308 if (spark->variant == 48)
309 spark->variant = -1;
310 }
311 }
312
313 // Embers: speed upwards until frame 128, then keep their climb and curve
314 // away to the left (to the right when dir is -1), the odd ones harder;
315 // gone after 256 frames.
316 if (frame <= 175) {
317 for (i = 0; i != PALETTE_PARTICLES_EMBERS; i++) {
318 struct EffectStep *grain = &PARTICLES[i];
319
320 if (grain->variant >= 0) {
321 u8 size = gTiamat_DropSizes[i & 3];
322 s32 height = size * 2;
323
324 draw[0](canvas, sheet + gBattleFx_MoteCells[size - 1],
325 Q_16_16_TO_INT(grain->x) - size / 2,
326 Q_16_16_TO_INT(grain->y) - size, size, height);
327 grain->x += grain->velocityX * dir;
328 grain->y += grain->velocityY;
329 if (frame > 128) {
330 if (i & 1)
331 grain->velocityX += -0x8000;
332 else
333 grain->velocityX += -0x2000;
334 } else {
335 grain->velocityY += -0x400;
336 }
337 grain->variant++;
338 if (grain->variant == 256)
339 grain->variant = -1;
340 }
341 }
342 }
343
344 // The shake and the formation.
345 if (frame == 128)
346 work->shakeFrames = 48;
347 if (mode == 0 && frame == 48)
348 work->shakeFrames = 8;
349
350 // Over frames 40 to 47 the formation moves 8 pixels left and 16 down a
351 // frame; from 128 to 175 four of its objects play animations 8 to 11.
352 if (frame >= 40 && frame <= 47) {
353 focus.x += -(8 << 16);
354 focus.y += 16 << 16;
355 }
356 if (mode == 0) {
357 if (frame == 128) {
362 }
363 if (frame == 176) {
368 }
369 BattleFx_PlaceFormationObjects(3, focus.x, focus.y);
370 }
371 if (frame == 138) {
376 }
377 }
378
379 // Streaks: after their wait, fall 6 pixels across and 6 down a frame;
380 // below y 55 they play six images, two frames each, over and over.
381 if (frame <= 175) {
382 for (i = 0; i != PALETTE_PARTICLES_STREAKS; i++) {
383 struct EffectStep *streak =
385
386 if (streak->y > 55) {
387 if (streak->variant >= 0 && streak->variant <= 11) {
388 s32 cell = streak->variant / 2;
389
390 draw[0](canvas,
391 work->sheet + gTiamat_StreakOffsets[cell] +
393 streak->x - gTiamat_StreakWidths[cell] / 2,
394 streak->y + gTiamat_StreakDrops[cell],
396 }
397 streak->variant++;
398 if (streak->variant == 12)
399 streak->variant = 0;
400 } else if (streak->variant == 0) {
401 s32 size = 10;
402
403 streak->x -= dir * 6;
404 streak->y += 6;
405 if (frame <= 47 && streak->y > 55)
407 draw[0](canvas, sheet + gBattleFx_MoteCells[size - 1],
408 streak->x - size / 2, streak->y + 30, size, size * 2);
409 } else {
410 streak->variant++;
411 }
412 }
413 }
414 Camera_ApplyShake(8, 8);
415 EFFECT_END_FRAME(work);
416 }
417
418 // The impact burst builds its own blitters and transfer.
421 if (mode == 0) {
422 BattleFx_RunImpactBurst(3, focus.x, focus.y);
423 for (i = 0; i != 8; i++)
425 }
427}
428
429#undef PALETTE_PARTICLES_FRAMES
430#undef PALETTE_PARTICLES_STREAKS
431#undef PALETTE_PARTICLES_FIRST_STREAK
432#undef PALETTE_PARTICLES_FIRST_SPARK
433#undef PALETTE_PARTICLES_EMBERS
434#undef PALETTE_PARTICLES_FLASHES
435#undef PALETTE_PARTICLES_SPARKS
436#undef PALETTE_PARTICLES_STREAK_IMAGES
@ SPRITE_COLOR_RED_TINT
red raised to full
Definition animspr.h:28
@ POSE_DAMAGE
taking damage
Definition battle.h:176
@ COMPOSITE_ADDITIVE
@ COMPOSITE_MAX
#define EFFECT_FOR_EACH_TARGET(i, effect)
Loops i over the effect's targets, effect->actors[0] to effect->actors[effect->count - 1]: the loops ...
void BattleFx_ProcessPendingGraphicsTransfer(void)
Copies the canvas to VRAM once the effect has finished drawing a frame (transferPending): the 128x128...
Definition canvas.c:103
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_EndCanvasLayer(void)
Closes the canvas layer: plays the closing sound, restores BG1's scroll and the projection centre,...
Definition canvas.c:490
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
void BattleFx_SelectLivingTargets(struct BattleEffectArgument *effect)
Shows the battle objects of every unit with HP left on the targets' side: the enemies (units 128 to 1...
Definition dispatch.c:184
What every part of the battle effect object shares: its includes, macros and frame-loop helpers.
#define EFFECT_RELEASE_BLITTERS()
Frees the two blitters, the alternate first.
#define EFFECT_SET_TRANSFER(work, mode, value)
Sets how the canvas transfer treats what is left in the canvas after each copy: mode with value (see ...
@ CANVAS_COPY_AND_CLEAR
copy, then fill the canvas with transferValue
@ CANVAS_COPY_AND_DARKEN
copy, then darken the canvas by transferValue
@ CANVAS_COPY_AND_FADE
copy, keeping 50% or 75% (transferValue) of each pixel in the canvas for the next frame
#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_FREE_PARTICLES(i, particles, count)
Marks particles[0] to particles[count - 1] free: a particle whose variant is -1 is not drawn or moved...
#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 CANVAS_SLOT(slots, slot)
A work slot read through a pointer to the canvas slot, gWorkSlot[HEAP_SLOT_BATTLE_CANVAS],...
#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->...
u8 gTiamat_DropSpeeds[]
Ember speeds, by ember index & 3.
u16 gBattleFx_MoteCells[]
Mote cells: particle sheets hold ten, cell n (from 0) n + 1 pixels wide and twice that tall.
u8 gTiamat_StreakDrops[]
u8 gTiamat_StreakWidths[]
u16 gTiamat_StreakOffsets[]
u8 gTiamat_DropSizes[]
Ember sizes, by ember index & 3.
u8 gTiamat_SparkPixels[]
A spark's 1x2 picture.
u8 gTiamat_StreakHeights[]
void BattleFx_SpawnObjects(s32 entryCount, s32 source, u32 priority)
Creates the effect's animation objects in gBattleFxWork's objects.
Definition eruption.c:220
void BattleMotion_ApplyVariantMotionFar(s32 id, s32 variant)
s32 AnimationObjects_SelectAnimationFar(struct AnimationObject *state, s32 flags)
void ResourceObject_ReleaseFar(struct AnimationObject *sprite)
void AudioCommand_PlayFar(s32 id)
s32 Trig_Cos(s32 angle)
s32 Trig_Sin(s32 angle)
void WaitFrames(s32 frames)
The game's frame loop: runs frames frames and returns.
Definition frame.c:97
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
@ HEAP_SLOT_BATTLE_EFFECT
Definition heap_state.h:42
@ HEAP_SLOT_BLITTER_ALTERNATE
Definition heap_state.h:47
@ HEAP_SLOT_BATTLE_SHEET
Definition heap_state.h:44
@ 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
void BattleFx_RunImpactBurst(s32 formation, s32 x, s32 y)
Opens an impact flash and scatters sparks and fragments, keeping the effect's objects in formation fo...
void BattleFx_PlaceFormationObjects(s32 formation, s32 x, s32 z)
Arranges work->objects in a formation; x and z are its origin in 16.16 pixels.
#define BGCNT_CHAR_BASE(block)
Definition io_reg.h:25
#define BGCNT_256_COLORS
Definition io_reg.h:27
#define BGCNT_PRIORITY(n)
Definition io_reg.h:24
@ KEY_B
Definition io_reg.h:244
@ KEY_A
Definition io_reg.h:243
#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 BGCNT_SCREEN_BASE(block)
Definition io_reg.h:28
#define REG_BG2CNT
Definition io_reg.h:21
#define REG_BLDALPHA
Definition io_reg.h:142
#define BG_PLTT
Definition io_reg.h:157
static s32 Iwram_CopyWords(volatile void *destination, const volatile void *source, s32 size)
Definition iwram_call.h:85
volatile u32 gKeysRepeat
Pressed keys, repeating while held: after 19 frames, then every 6.
u32 Random16(void)
Advances the game's random number generator (the C library's classic linear congruential one),...
Definition math.c:10
void Palette_BrightenBgEntries(s32 blueStep, s32 greenStep, s32 redStep)
Adds per-channel steps to background colours 1 to 63, capped at 31.
void EffectPosition_ProjectScaledBattler(s32 id, struct EffectPosition *position)
The screen position of a battler, scaled for the battle view, 16 pixels higher.
Definition positions.c:88
char ResourceId_LightningBoltSheet
char ResourceId_ParticleSpritesA
char ResourceId_FlashBurstSheet
char ResourceId_EmberStreakSheet
s32 Resource_DecodeType01(const void *source, void *destination)
Decodes a type-01 resource and returns its unpacked byte count.
Definition decompress.c:31
s32 Scheduler_RemoveCallback(SchedulerCallback callback)
Unschedules the task running callback: clears its routine and gives it order 0x7fff,...
Definition scheduler.c:146
#define SE_136
Definition songs.h:129
#define SE_141
Definition songs.h:134
#define SE_HEAVY_IMPACT
Definition songs.h:127
#define SE_145
Definition songs.h:138
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
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 shakeFrames
shake frames left; Camera_ApplyShake counts down
struct AnimationObject * objects[16]
the effect's animation objects
s32 transferValue
The transfer mode's argument: the fill value, the share kept (50 or 75 percent) or the darken or brig...
struct BattleEffectArgument * effect
the command being run
struct EffectStep particles[64]
free while variant is -1
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 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
Two-dimensional {x, y} pair for position or velocity, a local of the summon scenes (Nereid,...
Definition effect.h:236
s32 y
16.16 pixels
Definition effect.h:238
s32 x
16.16 pixels in every scene that uses it
Definition effect.h:237
void * Resource_GetTableEntry(s32 index)
Returns the ROM address of resource index from the resource directory.
Definition system.c:150
#define PALETTE_PARTICLES_EMBERS
embers in PARTICLES
Definition tiamat.c:26
#define PALETTE_PARTICLES_FRAMES
Definition tiamat.c:20
#define PALETTE_PARTICLES_FIRST_SPARK
the first spark in work->particles
Definition tiamat.c:25
void BattleFx_RunTiamat(struct BattleEffectArgument *effect)
The rising embers with a formation of eight objects that sweeps in and explodes at the end.
Definition tiamat.c:17
void BattleFx_RunDragonDriver(struct BattleEffectArgument *effect)
The rising embers from the user's side, in the LightningBolt colours.
Definition tiamat.c:10
#define PALETTE_PARTICLES_FLASHES
flashes, work->particles 0 to 23
Definition tiamat.c:27
#define PALETTE_PARTICLES_SPARKS
sparks, work->particles 40 to 63
Definition tiamat.c:28
#define PALETTE_PARTICLES_STREAKS
Falling streaks, work->particles 24 to 39.
Definition tiamat.c:22
void BattleFx_RunPaletteParticles(struct BattleEffectArgument *effect, s32 mode)
A 208-frame effect of embers rising from the ground; pressing A or B during frames 49 to 159 skips to...
Definition tiamat.c:58
#define PALETTE_PARTICLES_FIRST_STREAK
The first streak in work->particles.
Definition tiamat.c:24
#define PALETTE_PARTICLES_STREAK_IMAGES
The streak pictures in the sheet.
Definition tiamat.c:30
signed int s32
Definition types.h:14
unsigned char u8
Definition types.h:11
#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