added messages for death, level win and game win
[awish.git] / asm / game / dodie.awa
blob7ffb2975b617f2c4306336b50d2d74457cdc9aca
1 /*
2  * This program is free software: you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
14  */
15 ; in:
16 ;  monster_tid: monster tid
17 game_do_die_monster:
18   set [rst_result], entry_die_monster
19   jmp game_do_die
22 game_do_die_fall:
23   set [monster_tid], -1
24   set [rst_result], entry_die_fall
25   jmp game_do_die
28 ; in:
29 ;  monster_tid: monster thread id or -1
30 ;  rst_result: new thread PC
32 proc: game_do_die
33 locals: .tid
34   ; create and init animation thread
35   new [rst_result], [.tid]
36   set monster_tid, [monster_tid], [.tid]
37   set pos_x, [pos_x], [.tid]
38   set pos_y, [pos_y], [.tid]
39   set spr_bank, [spr_bank], [.tid]
40   set spr_num, [spr_num], [.tid]
41   set spr_dir, [spr_dir], [.tid]
42   ;
43   set [spr_num], -1 ; hide 'original' prof
44   ;
45 .waitthread:
46   bsr game_next_frame
47   sta [.tid]
48   jeq .waitthread, THREAD_STATE_RUNNING
49   ;
50   set [game_state], GAME_STATE_DEAD
51   set [endgame_layer_proc], endgame_layer_dead
52   jmp game_wait_and_restart
53 endp: game_do_die
56 proc: game_wait_and_restart
57   bsr clear_stack
58   set [key_use], 0
59   set [key_start], 0
60   set [key_take], 0
61   ;
62 .waitrestart:
63   bsr [endgame_layer_proc]
64   bsr game_next_frame
65   jne .dorestart, [key_use], 0
66   jne .dorestart, [key_start], 0
67   jne .dorestart, [key_take], 0
68   jmp .waitrestart
69   ;
70 .dorestart:
71   jmp entry_game_restart_level
72 endp: game_wait_and_restart
75 /* thread: prof blinks and falls dead */
76 proc: entry_die_fall
77 locals: .f
78   jeq .facing, [spr_num], PSPR_FACING
79   ; turnning
80   set [spr_num], PSPR_TURNING
81   brk
82   brk
83   set [spr_dir], DIR_LEFT
84   set [spr_num], PSPR_FACING
85   brk
86   brk
87 .facing:
88   ; blinking
89   set [.f], 2
90 .deadloop:
91   set [spr_num], PSPR_CLOSED_EYES
92   psh 10
93   bsr wait_some_frames
94   set [spr_num], PSPR_FACING
95   psh 10
96   bsr wait_some_frames
97   sub [.f], 1
98   jgt .deadloop, [.f], 0
99   ;
100   set [spr_num], PSPR_CLOSED_EYES
101 .animloop:
102   brk
103   brk
104   add [spr_num], 1
105   jle .animloop, [spr_num], PSPR_LYING_DEAD
106   ;
107   set spr_num, PSPR_LYING_DEAD, 0
108   rst FRST_PLAY_SOUND, SND_PROF_FALLS_DEAD
109   end
110 endp: entry_die_fall
113 /* thread: prof eaten by Harry */
114 proc: entry_die_monster
115   rst FRST_PLAY_SOUND, SND_HARRY_EATS_PROF
116   jeq .facing, [spr_num], PSPR_FACING
117   ; turnning
118   set [spr_num], PSPR_TURNING
119   brk
120   brk
121   set [spr_dir], DIR_LEFT
122   set [spr_num], PSPR_FACING
123   brk
124   brk
125 .facing:
126   ; suspend monster thread (so Harry will not be drawn)
127   sus [monster_tid]
128   ;
129   set [spr_num], PSPR_HARRY_EATS_PROF_START
130 .animloop:
131   brk
132   brk
133   brk
134   add [spr_num], 1
135   jle .animloop, [spr_num], PSPR_HARRY_EATS_PROF_END
136   ; resume monster thread (so Harry will be drawn again)
137   res [monster_tid]
138   end
139 endp: entry_die_monster
142 proc: wait_some_frames
143 arg: .cnt
144 .loop:
145   jlt .done, [.cnt], 1
146   brk
147   sub [.cnt], 1
148   jmp .loop
149 .done:
150   ret
151 endp: wait_some_frames