polymod still broken
[awish.git] / asm / game.awa
blob4eba1b061726e9dd58ccf3736cee27cea20c3735
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 ; used in fanchecks
16 deftvar: game_fan_left_v   ; have left working fan?
17 deftvar: game_fan_right_v  ; have right working fan?
18 deftvar: game_fan_dx_v     ; !0: some fan in effect
20 ; used in 'monster death'
21 deftvar: monster_tid
24 const: PSPR_STANDING = 0
25 const: PSPR_WALKING_LAST = 9
26 const: PSPR_TURNING = 10
27 const: PSPR_FACING = 11
28 const: PSPR_JUMPING = 12
29 const: PSPR_TAKING0 = 13
30 const: PSPR_TAKING1 = 14
31 const: PSPR_USING = 15
32 const: PSPR_CLOSED_EYES = 16
33 const: PSPR_LYING_DEAD = 19
34 const: PSPR_DRILLING0 = 20
35 const: PSPR_DRILLING1 = 21
36 const: PSPR_HARRY_EATS_PROF_START = 33
37 const: PSPR_HARRY_EATS_PROF_END = 38
40 const: PDIR_LEFT   = -1
41 const: PDIR_RIGHT  =  1
42 const: PDIR_FACING =  0
45 game_load_level:
46   bsr kill_all_threads
47   ;
48   set [item_id], 0
49   set [spr_bank], BANK_PROF
50   set [spr_num], PSPR_FACING
51   set [spr_dir], DIR_LEFT
52   ;
53   jlt .bad_level, [cur_level], 0
54   jge .bad_level, [cur_level], [max_level]
55   jmp .do_load
56 .bad_level:
57   set [cur_level], 0
58 .do_load:
59   bsr entry_get_level_code, [cur_level]
60   ;
61   psh avish_level_loader
62   rst FRST_GET_LEVEL_LOADER
63   jlt .no_custom_loader, [rst_result], 0
64   drp
65   psh [rst_result]
66 .no_custom_loader:
67   psh [cur_level]
68   swp
69   bsr ; call level loader
70   ; call local initializer (if any)
71   rst FRST_GET_LEVEL_INITER
72   jlt .no_custom_init, [rst_result], 0
73   bsr [rst_result]
74 .no_custom_init:
75   ;
76   rst FRST_SET_LEVEL_CODE, [level_code_ofs], [level_code_len]
77   bsr prof_fix_position
78   ret
81 entry_game_initialize:
82   rst FRST_ML_GAME
83   set [cur_level], [start_level]
84   /*
85   set [cur_level], 11
86   set [cur_level], 16
87   set [cur_level], 13
88   set [cur_level], 12
89   */
91 entry_game_restart_level:
92   rst FRST_ML_GAME
93   bsr clear_stack
94   bsr kill_all_threads
95   ;
96   set [game_state], GAME_STATE_STARTED
97   brk
98   ;
99   set [key_quit], 0
100   set [key_start], 0
101   ;
102   set [key_left], 0
103   set [key_right], 0
104   set [key_up], 0
105   set [key_down], 0
106   set [key_take], 0
107   set [key_use], 0
108   set [key_minimap], 0
109   set [key_restart], 0
110   ;
111   set [key_fall_cheat], 0
112   set [key_walk_cheat], 0
113   set [key_plev_cheat], 0
114   set [key_nlev_cheat], 0
115   ;
116   ;set [prof_fall_count], 0
117   set [pos_tx], 0
118   set [pos_ty], 0
119   set [prof_item], 0
120   set [monster_tid], -666
121   ;
122   set [spr_item], -1
123   set [item_name_ofs], 0
124   set [item_name_len], 0
125   rst FRST_SET_ITEM_NAME, [item_name_ofs], [item_name_len]
126   ;
127   bsr game_load_level
128   set [game_state], GAME_STATE_PLAYING
129   brk ; give all threads a chance to initialize themselves
130   ;
131   jmp game_facing_loop_w2f
134 include: game/utils.awa
135 include: game/walkcheck.awa
136 include: game/falling.awa
137 include: game/fanchecks.awa
138 include: game/dodie.awa
139 include: game/scrolls.awa
140 include: game/doors.awa
141 include: game/sidemove.awa
142 include: game/loops_main.awa
143 include: game/jumps.awa
144 include: game/nono.awa
145 include: game/check_do_earth.awa
146 include: game/frame_common.awa