ScummVM API documentation
effect.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef NUVIE_CORE_EFFECT_H
23#define NUVIE_CORE_EFFECT_H
24
25
26#include "ultima/nuvie/misc/call_back.h"
27#include "ultima/nuvie/core/map.h"
28#include "ultima/nuvie/core/obj_manager.h"
29#include "ultima/nuvie/core/anim_manager.h"
30
31namespace Ultima {
32namespace Nuvie {
33
34//class Actor;
35class EffectManager;
36class Game;
37class MapWindow;
38class NuvieAnim;
39class Screen;
40class TimedAdvance;
41class TimedCallback;
42class ObjManager;
43
44// Effects add themselves to EffectManager and most start immediately.
45
46/* Effects: * = unwritten or untested
47 * Quake - earthquake from cyclops or volcanos
48 * Hit - hit actor anim + sfx
49 * Explosive - explosion caused by powder keg, volcanos, or cannonball hit
50 * ThrowObject - any thrown object or tile
51 * Cannonball (FIX: change to UseCodeThrow)
52 * Missile - throw object to ground or actor; optionally cause damage
53 * *Boomerang - spin Missile and return to sender
54 * Drop - throw obj from inventory to ground
55 * Sleep - pause game & advance time quickly
56 * Fade - fade the mapwindow in or out
57 * GameFadeIn - blocks user-input until Fade is complete
58 * *Palette - do something with the color palette
59 * Vanish - fade from an image of the mapwindow to the real mapwindow
60 * *FadeObject - might not need this since Vanish can be used
61 * U6WhitePotion - will probably make PaletteEffect to do this
62 */
63
64
65/* Control animation and sounds in the game world.
66 */
67class Effect : public CallBack {
68protected:
69 Game *game;
70 EffectManager *effect_manager;
71 bool defunct;
72
73 uint32 retain_count;
74
75public:
76 Effect();
77 ~Effect() override;
78
79 void retain() {
80 retain_count++;
81 }
82 void release() {
83 if (retain_count > 0) retain_count--;
84 }
85 bool is_retained() const {
86 return retain_count == 0 ? false : true;
87 }
88
89 void delete_self() {
90 defunct = true;
91 }
92 void add_anim(NuvieAnim *anim);
93
94 bool is_defunct() const {
95 return defunct;
96 }
97 uint16 callback(uint16, CallBack *, void *) override {
98 return 0;
99 }
100};
101
102/* Toss a cannon ball from one actor to another, or from an object towards
103 * a numbered direction.
104 */
105class CannonballEffect : public Effect {
106 UseCode *usecode;
107 NuvieAnim *anim;
108// *sfx;
109 Obj *obj;
110 MapCoord target_loc; // where cannonball will hit
111
112 void start_anim();
113
114public:
115 CannonballEffect(Obj *src_obj, sint8 direction = -1);
116// CannonballEffect(Actor *src_actor, Actor *target_actor); from a ship
117
118 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
119};
120
121class ProjectileEffect : public Effect {
122protected:
123 uint16 tile_num;
124
125 MapCoord start_loc; // where explosion will start
127 uint8 anim_speed;
128 bool trail;
129 uint16 initial_tile_rotation;
130 uint16 rotation_amount;
131 uint8 src_tile_y_offset;
132 uint16 finished_tiles;
133
134 Common::Array<MapEntity> hit_entities;
135
136 virtual void start_anim();
137
138public:
139 ProjectileEffect() : tile_num(0), anim_speed(0), trail(false),
140 initial_tile_rotation(0), rotation_amount(0), src_tile_y_offset(0),
141 finished_tiles(0) {
142 }
143 ProjectileEffect(uint16 tileNum, MapCoord start, MapCoord target, uint8 speed, bool trailFlag, uint16 initialTileRotation, uint16 rotationAmount, uint8 src_y_offset);
144 ProjectileEffect(uint16 tileNum, MapCoord start, const Common::Array<MapCoord> &t, uint8 speed, bool trailFlag, uint16 initialTileRotation);
145
146 void init(uint16 tileNum, MapCoord start, const Common::Array<MapCoord> &t, uint8 speed, bool trailFlag, uint16 initialTileRotation, uint16 rotationAmount, uint8 src_y_offset);
147
148 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
149
150 Common::Array<MapEntity> *get_hit_entities() {
151 return &hit_entities;
152 }
153};
154
156 //UseCode *usecode;
157 NuvieAnim *anim;
158
159 //Obj *obj;
160 uint16 exp_tile_num;
161
162protected:
163 void start_anim() override;
164public:
165 ExpEffect(uint16 tileNum, const MapCoord &location);
166
167};
168
169/* Use to add an effect with timed activity. Self-contained timer must be
170 * stopped/started with the included methods.
171 */
172class TimedEffect : public Effect {
173protected:
174 TimedCallback *timer;
175public:
176 TimedEffect() {
177 timer = nullptr;
178 }
179 TimedEffect(uint32 delay) {
180 timer = nullptr;
181 start_timer(delay);
182 }
183 ~TimedEffect() override {
184 stop_timer();
185 }
186
187 void start_timer(uint32 delay);
188 void stop_timer();
189
190 void delete_self() {
191 stop_timer();
192 Effect::delete_self();
193 }
194
195 uint16 callback(uint16 msg, CallBack *caller, void *data) override {
196 if (msg == MESG_TIMED) delete_self(); //= 0;
197 return 0;
198 }
199};
200
201
202/* Shake the visible play area around.
203 */
204class QuakeEffect : public TimedEffect {
205 MapWindow *map_window;
206 static QuakeEffect *current_quake; // do nothing if already active
207 sint32 sx, sy; // last map_window movement amount
208 MapCoord orig; // map_window location at start
209 Actor *orig_actor; // center map_window on actor
210 uint32 stop_time;
211 uint8 strength; // magnitude
212
213public:
214 QuakeEffect(uint8 magnitude, uint32 duration, Actor *keep_on = nullptr);
215 ~QuakeEffect() override;
216 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
217
218 void init_directions();
219 void recenter_map();
220 void stop_quake();
221};
222
223
224/* Hit target actor.
225 */
226class HitEffect : public Effect {
227public:
228 HitEffect(Actor *target, uint32 duration = 300);
229 HitEffect(const MapCoord &location);
230 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
231};
232
233/* Print text to MapWindow for a given duration
234 */
235class TextEffect : public Effect {
236
237public:
239 TextEffect(Common::String text, const MapCoord &location);
240 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
241};
242
243
244/* Create explosion animation and sounds from the source location out to
245 * specified radius. Hit actors and objects for `dmg'.
246 */
247class ExplosiveEffect : public Effect {
248protected:
249 NuvieAnim *anim;
250// *sfx;
251 MapCoord start_at;
252 uint32 radius;
253 uint16 hit_damage; // hp taken off actors hit by explosion
254
255 void start_anim();
256
257public:
258 ExplosiveEffect(uint16 x, uint16 y, uint32 size, uint16 dmg = 0);
259 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
260
261 // children can override
262 virtual void delete_self() {
263 Effect::delete_self();
264 }
265 virtual bool hit_object(Obj *obj) {
266 return false; // explosion hit something
267 }
268 // true return=end effect
269};
270
271
272/* Explosion that sends usecode event to an object on completion.
273 */
275 Obj *obj; // explosion came from this object (can be nullptr)
276 Obj *original_obj; // don't hit this object (chain-reaction avoidance hack)
277
278public:
279 UseCodeExplosiveEffect(Obj *src_obj, uint16 x, uint16 y, uint32 size, uint16 dmg = 0, Obj *dont_hit_me = nullptr)
280 : ExplosiveEffect(x, y, size, dmg), obj(src_obj), original_obj(dont_hit_me) {
281 }
282 void delete_self() override;
283 bool hit_object(Obj *hit_obj) override; // explosion hit something
284
285
286
287};
288
289
290/* Toss object tile from one location to another with a TossAnim, and play a
291 * sound effect. The ThrowObjectEffect is constructed with uninitialized
292 * parameters and isn't started until start_anim() is called.
293 */
294class ThrowObjectEffect : public Effect {
295protected:
296 ObjManager *obj_manager;
297 NuvieAnim *anim; // TossAnim
298// *sfx;
299 MapCoord start_at, stop_at; // start_at -> stop_at
300 Obj *throw_obj; // object being thrown
301 const Tile *throw_tile; // graphic to use (default is object's tile)
302 uint16 throw_speed; // used in animation
303 uint16 degrees; // rotation of tile
304 uint8 stop_flags; // TossAnim blocking flags
305
306public:
308 ~ThrowObjectEffect() override { }
309
310 void hit_target(); // stops effect
311 void start_anim();
312
313 uint16 callback(uint16 msg, CallBack *caller, void *data) override = 0;
314};
315
316
317/* Drop an object from an actor's inventory. Object is removed from the actor
318 * after starting the effect, and added to the map when the effect is complete.
319 * Effect speed is gametype-defined.
320 */
322 Actor *drop_from_actor;
323public:
324 DropEffect(Obj *obj, uint16 qty, Actor *actor, MapCoord *drop_loc);
325
326 void hit_target();
327
328 void get_obj(Obj *obj, uint16 qty);
329 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
330};
331
332#define MISSILE_DEFAULT_SPEED 200
333#define MISSILE_HIT_TARGET TOSS_TO_BLOCKING
334#define MISSILE_HIT_OBJECTS (TOSS_TO_BLOCKING|TOSS_TO_OBJECT)
335#define MISSILE_HIT_ACTORS (TOSS_TO_BLOCKING|TOSS_TO_ACTOR)
336#define MISSILE_HIT_ALL (TOSS_TO_BLOCKING|TOSS_TO_OBJECT|TOSS_TO_ACTOR)
337
338/* Throw a missile towards a target location. If the target is an actor or
339 * object, it will be hit for the requested damage. If the target is an empty
340 * map location, the object will be added to the map. The missile always stops
341 * if hitting a blocking tile.
342 *
343 * Decide in the attack logic, before constructing this, whether or not it was
344 * successful, and use the appropriate constructor. You can set the effect to
345 * hit any actors or objects in the way if the attack missed.
346 */
348 ActorManager *actor_manager;
349
350 uint16 hit_damage; // hp taken off actor/object hit by missile
351 Actor *hit_actor;
352 Obj *hit_obj;
353
354public:
355 MissileEffect(uint16 tile_num, uint16 obj_n, const MapCoord &source,
356 const MapCoord &target, uint8 dmg, uint8 intercept = MISSILE_HIT_TARGET, uint16 speed = MISSILE_DEFAULT_SPEED);
357
358 void init(uint16 tile_num, uint16 obj_n, const MapCoord &source,
359 const MapCoord &target, uint32 dmg, uint8 intercept, uint32 speed);
360 void hit_target();
361 void hit_blocking();
362 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
363};
364
365#if 0
366/* Throw an object and bring it back.
367 */
368class BoomerangEffect : public ThrowObjectEffect {
369// I might even add an arc from the center line for a cool effect.
370};
371
372
373/* Cycle or modify the game palette in some way.
374 */
375class PaletteEffect : public TimedEffect {
376// palette effects are created from child classes (new BlackPotionEffect();)
377// ...and these can include SFX like any other effect
378// but PaletteEffect is not abstract (new PaletteEffect(timing & color params...);)
379};
380
381
382#endif
383
384
385/* For sleeping at inns. Fade-out, advance time, and fade-in.
386 */
387class SleepEffect : public Effect {
388 TimedAdvance *timer; // timed event
389 uint8 stop_hour, stop_minute; // sleep until this time
390 Common::String stop_time;
391public:
393 SleepEffect(uint8 to_hour);
394 ~SleepEffect() override;
395
396 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
397 void delete_self();
398};
399
400
401typedef enum { FADE_PIXELATED, FADE_CIRCLE, FADE_PIXELATED_ONTOP } FadeType;
402typedef enum { FADE_IN, FADE_OUT } FadeDirection;
403
404/* Manipulate the MapWindow for two types of fades. One is a stippled-like fade
405 * that draws pixels to random locations on the screen until completely flooded
406 * with a set color. The other changes the ambient light until fully black.
407 */
408class FadeEffect : public TimedEffect {
409protected:
410 static FadeEffect *current_fade; // do nothing if already active
411
412 MapWindow *map_window;
413 Screen *screen; // for PIXELATED, the overlay is blitted to the screen...
414 Common::Rect *viewport; // ...at the MapWindow coordinates set here
415 Graphics::ManagedSurface *overlay; // this is what gets blitted
416
417 FadeType fade_type; // PIXELATED[_ONTOP] or CIRCLE
418 FadeDirection fade_dir; // IN (removing color) or OUT (adding color)
419 uint32 fade_speed; // meaning of this depends on fade_type
420 uint8 pixelated_color; // color from palette that is being faded to/from
421 Graphics::ManagedSurface *fade_from; // image being faded from or to (or nullptr if coloring)
422 uint16 fade_x, fade_y; // start fade from this point (to fade_from size)
423
424 uint32 evtime, prev_evtime; // time of last message to callback()
425 uint32 pixel_count, colored_total; // number of pixels total/colored
426 uint16 fade_iterations; // number of times we've updated the fade effect
427
428public:
429 FadeEffect(FadeType fade, FadeDirection dir, uint32 color = 0, uint32 speed = 0);
430 FadeEffect(FadeType fade, FadeDirection dir, Graphics::ManagedSurface *capture, uint32 speed = 0);
431 FadeEffect(FadeType fade, FadeDirection dir, Graphics::ManagedSurface *capture, uint16 x, uint16 y, uint32 speed = 0);
432 ~FadeEffect() override;
433 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
434
435 bool pixelated_fade_out();
436 bool pixelated_fade_in();
437 bool circle_fade_out();
438 bool circle_fade_in();
439
440 void delete_self();
441
442protected:
443 void init(FadeType fade, FadeDirection dir, uint32 color, Graphics::ManagedSurface *capture, uint16 x, uint16 y, uint32 speed);
444 void init_pixelated_fade();
445 void init_circle_fade();
446
447 inline bool find_free_pixel(uint32 &rnum, uint32 pixel_count);
448 uint32 pixels_to_check();
449 bool pixelated_fade_core(uint32 pixels_to_check, sint16 fade_to);
450// inline uint32 get_random_pixel(uint16 center_thresh = 0);
451};
452
453
454/* Front-end to FadeEffect that fades in, and resumes game.
455 */
457public:
458 GameFadeInEffect(uint32 color);
459 ~GameFadeInEffect() override;
460 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
461};
462
463
464/* Captures an image of the MapWindow without an object, then places the object
465 * on the map and fades to the new image. (or the opposite if FADE_OUT is used)
466 */
467class FadeObjectEffect : public Effect {
468 ObjManager *obj_manager;
469 Obj *fade_obj;
470 FadeDirection fade_dir;
471public:
472 FadeObjectEffect(Obj *obj, FadeDirection dir);
473 ~FadeObjectEffect() override;
474 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
475};
476
477
478/* Do a blocking fade-to (FADE_OUT) from a captured image of the game area, to
479 * the active game area. (transparent) This is used for vanish or morph effects.
480 */
481#define VANISH_WAIT true
482#define VANISH_NOWAIT false
483class VanishEffect : public Effect {
484 bool input_blocked;
485public:
486 VanishEffect(bool pause_user = VANISH_NOWAIT);
487 ~VanishEffect() override;
488 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
489};
490
492 //TileAnim *anim;
493 //Tile *to_tile;
494 //Tile *anim_tile;
495 Actor *actor;
496 //uint8 color_from, color_to;
497 bool inc_reverse;
498 uint16 spd;
499
500 uint16 num_anim_running;
501public:
502 TileFadeEffect(const MapCoord &loc, Tile *from, Tile *to, FadeType type, uint16 speed);
503 //TileFadeEffect(MapCoord loc, Tile *from, uint8 color_from, uint8 color_to, bool reverse, uint16 speed);
504 TileFadeEffect(Actor *a, uint16 speed);
505 ~TileFadeEffect() override;
506 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
507
508protected:
509 void add_actor_anim();
510 void add_fade_anim(const MapCoord &loc, Tile *tile);
511 void add_tile_anim(const MapCoord &loc, Tile *tile);
512 void add_obj_anim(Obj *obj);
513};
514
516 Actor *actor;
517 Obj *obj;
518 uint8 color;
519 bool reverse;
520 uint16 fade_speed;
521
522 uint16 num_anim_running;
523public:
524 TileBlackFadeEffect(Actor *a, uint8 fade_color, uint16 speed);
525 TileBlackFadeEffect(Obj *o, uint8 fade_color, uint16 speed);
526 ~TileBlackFadeEffect() override;
527 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
528protected:
529 void init(uint8 fade_color, uint16 speed);
530 void add_actor_anim();
531 void add_obj_anim(Obj *o);
532 void add_tile_anim(const MapCoord &loc, Tile *tile);
533};
534
535/* Briefly modify the mapwindow colors, disable map-blacking and player
536 * movement for a few seconds, then enable both.
537 */
538class XorEffect : public TimedEffect {
539 MapWindow *map_window;
540 uint32 length;
541 Graphics::ManagedSurface *capture; // this is what gets blitted
542
543 void xor_capture(uint8 mod);
544 void init_effect();
545
546public:
547 /* eff_ms=length of visual effect */
548 XorEffect(uint32 eff_ms);
549 ~XorEffect() override { }
550
551 /* Called by the timer between each effect stage. */
552 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
553};
554
555/* Briefly modify the mapwindow colors, disable map-blacking and player
556 * movement for a few seconds, then enable both.
557 */
559 MapWindow *map_window;
560 uint8 state; // 0=start, 1=eff1, 2=eff2, 3=x-ray, 4=complete
561 uint32 start_length, eff1_length, eff2_length, xray_length;
562 Graphics::ManagedSurface *capture; // this is what gets blitted
563 Obj *potion; // allows effect to call usecode and delete object
564
565 void xor_capture(uint8 mod);
566 void init_effect();
567
568public:
569 /* eff_ms=length of visual effect; delay_ms=length of x-ray effect */
570 U6WhitePotionEffect(uint32 eff_ms, uint32 delay_ms, Obj *callback_obj = nullptr);
571 ~U6WhitePotionEffect() override { }
572
573 /* Called by the timer between each effect stage. */
574 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
575};
576
577
578class XRayEffect : public TimedEffect {
579 uint32 xray_length;
580 void init_effect();
581
582public:
583 /* eff_ms=length of x-ray effect */
584 XRayEffect(uint32 eff_ms);
585 ~XRayEffect() override { }
586
587 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
588};
589
590/* Pause the game, create an effect, and wait for user input to continue. */
591class PauseEffect: public Effect {
592public:
593 /* Called by the Effect handler when input is available. */
594 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
595 virtual void delete_self() {
596 Effect::delete_self();
597 }
598 PauseEffect();
599 ~PauseEffect() override { }
600};
601
602/* Gather text from scroll input then continue. */
603class TextInputEffect: public Effect {
604 Common::String input;
605public:
606 /* Called by the Effect handler when input is available. */
607 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
608 TextInputEffect(const char *allowed_chars, bool can_escape);
609 ~TextInputEffect() override { }
610 Common::String get_input() {
611 return input;
612 }
613};
614
615class WizardEyeEffect: public Effect {
616public:
617 /* Called by the Effect handler when input is available. */
618 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
619 virtual void delete_self() {
620 Effect::delete_self();
621 }
622 WizardEyeEffect(const MapCoord &location, uint16 duration);
623 ~WizardEyeEffect() override { }
624};
625
626/* colors for PeerEffect */
627const uint8 peer_tilemap[4] = {
628 0x0A, // GROUND/PASSABLE
629 0x09, // WATER
630 0x07, // WALLS/BLOCKED
631 0x0C // DANGER/DAMAGING
632};
633
634#define PEER_TILEW 4
635const uint8 peer_tile[PEER_TILEW * PEER_TILEW] = {
636 0, 1, 0, 1,
637 1, 0, 1, 0,
638 0, 1, 0, 1,
639 1, 0, 1, 0
640};
641
642/* Display an overview of the current area in the MapWindow. Any new actions
643 * cancel the effect and return to the prompt.
644 * (area is 48x48 tiles around the player, regardless of MapWindow size)
645 */
646class PeerEffect : public PauseEffect {
647 MapWindow *map_window;
648 Graphics::ManagedSurface *overlay; // this is what gets blitted
649 Obj *gem; // allows effect to call usecode and delete object
650 MapCoord area; // area to display (top-left corner)
651 uint8 tile_trans; // peer_tile transparency mask (0 or 1)
652 uint16 map_pitch;
653
654 inline void blit_tile(uint16 x, uint16 y, uint8 c);
655 inline void blit_actor(Actor *actor);
656 inline uint8 get_tilemap_type(uint16 wx, uint16 wy, uint8 wz);
657 void fill_buffer(uint8 *mapbuffer, uint16 x, uint16 y);
658 void peer();
659
660public:
661 PeerEffect(uint16 x, uint16 y, uint8 z, Obj *callback_obj = 0);
662 ~PeerEffect() override { }
663 void init_effect();
664 void delete_self() override;
665};
666
667class WingStrikeEffect : public Effect {
668protected:
669
670 Actor *actor;
671
672public:
673 WingStrikeEffect(Actor *target_actor);
674
675 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
676};
677
678class HailStormEffect : public Effect {
679public:
680 HailStormEffect(const MapCoord &target);
681
682 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
683};
684
685#define EFFECT_PROCESS_GUI_INPUT true
686
687/* Run an effect asynchronously and keep updating the world until the effect completes. */
688class AsyncEffect : public Effect {
689protected:
690 Effect *effect;
691 bool effect_complete;
692
693public:
695 ~AsyncEffect() override;
696 void run(bool process_gui_input = false);
697 uint16 callback(uint16 msg, CallBack *caller, void *data) override;
698};
699
700} // End of namespace Nuvie
701} // End of namespace Ultima
702
703#endif
Definition: array.h:52
Definition: str.h:59
Definition: managed_surface.h:51
Definition: actor.h:174
Definition: actor_manager.h:42
Definition: effect.h:688
Definition: call_back.h:50
Definition: effect.h:105
Definition: effect.h:321
Definition: effect.h:67
Definition: effect_manager.h:34
Definition: effect.h:155
Definition: effect.h:247
Definition: effect.h:408
Definition: effect.h:467
Definition: effect.h:456
Definition: game.h:72
Definition: effect.h:678
Definition: effect.h:226
Definition: map.h:84
Definition: map_window.h:70
Definition: effect.h:347
Definition: anim_manager.h:108
Definition: obj.h:84
Definition: obj_manager.h:74
Definition: effect.h:591
Definition: effect.h:646
Definition: effect.h:121
Definition: effect.h:204
Definition: screen.h:41
Definition: effect.h:387
Definition: effect.h:235
Definition: effect.h:603
Definition: effect.h:294
Definition: effect.h:515
Definition: effect.h:491
Definition: timed_event.h:231
Definition: timed_event.h:209
Definition: effect.h:172
Definition: effect.h:558
Definition: usecode.h:151
Definition: effect.h:483
Definition: effect.h:667
Definition: effect.h:615
Definition: effect.h:578
Definition: effect.h:538
Definition: rect.h:536
Definition: atari-screen.h:58
Definition: tile_manager.h:113