A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 109 lines 2.6 kB view raw
1/* 2 * xrick/e_box.c 3 * 4 * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). 5 * Copyright (C) 2008-2014 Pierluigi Vicinanza. 6 * All rights reserved. 7 * 8 * The use and distribution terms for this software are contained in the file 9 * named README, which can be found in the root of this distribution. By 10 * using this software in any fashion, you are agreeing to be bound by the 11 * terms of this license. 12 * 13 * You must not remove this notice, or any other, from this software. 14 */ 15 16#include "xrick/e_box.h" 17 18#include "xrick/game.h" 19#include "xrick/ents.h" 20#include "xrick/e_bullet.h" 21#include "xrick/e_bomb.h" 22#include "xrick/e_rick.h" 23#include "xrick/maps.h" 24#include "xrick/util.h" 25 26/* 27 * FIXME this is because the same structure is used 28 * for all entities. Need to replace this w/ an inheritance 29 * solution. 30 */ 31#define cnt c1 32 33/* 34 * Constants 35 */ 36#define SEQ_INIT 0x0A 37 38/* 39 * Prototypes 40 */ 41static void explode(U8); 42 43/* 44 * Entity action 45 * 46 * ASM 245A 47 */ 48void 49e_box_action(U8 e) 50{ 51 static U8 sp[] = {0x24, 0x25, 0x26, 0x27, 0x28}; /* explosion sprites sequence */ 52 53 if (ent_ents[e].n & ENT_LETHAL) { 54 /* 55 * box is lethal i.e. exploding 56 * play sprites sequence then stop 57 */ 58 ent_ents[e].sprite = sp[ent_ents[e].cnt >> 1]; 59 if (--ent_ents[e].cnt == 0) { 60 ent_ents[e].n = 0; 61 map_marks[ent_ents[e].mark].ent |= MAP_MARK_NACT; 62 } 63 } else { 64 /* 65 * not lethal: check to see if triggered 66 */ 67 if (e_rick_boxtest(e)) { 68 /* rick: collect bombs or bullets and stop */ 69#ifdef ENABLE_SOUND 70 syssnd_play(soundBox, 1); 71#endif 72 if (ent_ents[e].n == 0x10) 73 game_bombs = GAME_BOMBS_INIT; 74 else /* 0x11 */ 75 game_bullets = GAME_BULLETS_INIT; 76 ent_ents[e].n = 0; 77 map_marks[ent_ents[e].mark].ent |= MAP_MARK_NACT; 78 } 79 else if (e_rick_state_test(E_RICK_STSTOP) && 80 u_fboxtest(e, e_rick_stop_x, e_rick_stop_y)) { 81 /* rick's stick: explode */ 82 explode(e); 83 } 84 else if (E_BULLET_ENT.n && u_fboxtest(e, e_bullet_xc, e_bullet_yc)) { 85 /* bullet: explode (and stop bullet) */ 86 E_BULLET_ENT.n = 0; 87 explode(e); 88 } 89 else if (e_bomb_lethal && e_bomb_hit(e)) { 90 /* bomb: explode */ 91 explode(e); 92 } 93 } 94} 95 96 97/* 98 * Explode when 99 */ 100static void explode(U8 e) 101{ 102 ent_ents[e].cnt = SEQ_INIT; 103 ent_ents[e].n |= ENT_LETHAL; 104#ifdef ENABLE_SOUND 105 syssnd_play(soundExplode, 1); 106#endif 107} 108 109/* eof */