'flying' cheat now works
[awish.git] / asm / game / loops_main.awa
blobba4bb21d3cf89c33dc255efa234f1599bede8f91
1 /* cheat: fly up */
2 game_cheat_up:
3   set [pos_ty], -3
4   bsr game_next_frame
5   set [pos_ty], -6
6   bsr game_next_frame
7   set [pos_ty], 0
8   sub [pos_y], 1
9   bsr prof_fix_position
10   bsr game_do_scrolls
11   ret
13 /* cheat: fly down */
14 game_cheat_down:
15   set [pos_ty], 3
16   bsr game_next_frame
17   set [pos_ty], 6
18   bsr game_next_frame
19   set [pos_ty], 0
20   add [pos_y], 1
21   bsr prof_fix_position
22   bsr game_do_scrolls
23   ret
26 /* stand facing, wait 2 frames before any action */
27 game_facing_loop_w2f:
28   set [spr_num], PSPR_FACING
29   set [spr_dir], DIR_LEFT
30   set [prof_dir], PDIR_FACING
31   bsr game_next_frame
32   bsr game_next_frame
34 game_facing_loop:
35   deflvar: .tid
36   ;
37   bsr clear_stack
38   set [spr_num], PSPR_FACING
39   set [spr_dir], DIR_LEFT
40   set [prof_dir], PDIR_FACING
41   bsr game_do_scrolls
42   bsr game_check_fall
43   ;
44   ; fans?
45   mgf [pos_x], [pos_y]
46   jne .nofan, FTILE_ICE
47   bsr game_check_fans
48   jeq .nofan, [game_fan_dx_v], 0
49   set [prof_dir], [game_fan_dx_v]
50   bsr prof_turn_to_dir
51   jmp game_check_do_slide_move
52 .nofan:
53   ;
54 .facing_loop:
55   bsr game_do_scrolls
56   bsr game_check_fall
57   bsr game_is_on_exit
58   jne game_do_door_exit, 0
59   bsr game_check_monster_eating
60   bsr game_next_frame
61   ; if we are still here, there was no falling
62   jne .pick_facing, [key_take], 0
63   ;
64   jeq .nouse, [prof_item], 0
65   jne .use_facing, [key_use], 0
66 .nouse:
67   ;
68   jeq .nowc, [key_walk_cheat], 0
69   psh game_facing_loop
70   jne game_cheat_up, [key_up], 0
71   jne game_cheat_down, [key_down], 0
72   drp
73   ;
74 .nowc:
75   mgf [pos_x], [pos_y]
76   jne .no_lift, FTILE_LIFT
77   jne .lift_up, [key_up], 0
78   jne .lift_down, [key_down], 0
79   ;
80 .no_lift:
81   jne game_turning_right, [key_right], 0
82   jne game_turning_left, [key_left], 0
83   jmp .facing_loop
84   ;
85 .lift_up:
86   jle .no_lift, [pos_y], 4
87   ; have space at up?
88   psh [pos_x]
89   psh [pos_y]
90   psh 5
91   sub
92   mgf
93   jne .no_lift, 0
94   ;
95   new entry_lift, [.tid]
96   set pos_x, [pos_x], [.tid]
97   set pos_y, [pos_y], [.tid]
98   set pos_ty, -2, [.tid]
99   ; move prof
100   set [pos_ty], -2
101   bsr game_next_frame
102   set [pos_ty], -4
103   bsr game_next_frame
104   set [pos_ty], -6
105   bsr game_next_frame
106   set [pos_ty], -8
107   bsr game_next_frame
108   set [pos_ty], 0
109   sub [pos_y], 1
110   msf [pos_x], [pos_y], FTILE_LIFT
111   jmp .facing_loop
112   ;
113 .lift_down:
114   set [.tid], [map_height]
115   sub [.tid], 1
116   jge .no_lift, [pos_y], [.tid]
117   ; have space at bottom?
118   psh [pos_x]
119   psh [pos_y]
120   psh 1
121   add
122   mgf
123   jne .no_lift, 0
124   ;
125   new entry_lift, [.tid]
126   set pos_x, [pos_x], [.tid]
127   set pos_y, [pos_y], [.tid]
128   set pos_ty, 2, [.tid]
129   ; move prof
130   set [pos_ty], 2
131   bsr game_next_frame
132   set [pos_ty], 4
133   bsr game_next_frame
134   set [pos_ty], 6
135   bsr game_next_frame
136   set [pos_ty], 8
137   bsr game_next_frame
138   set [pos_ty], 0
139   add [pos_y], 1
140   msf [pos_x], [pos_y], FTILE_LIFT
141   jmp .facing_loop
142   ;
143 .use_facing:
144   get [prof_item], item_id
145   jne .nouse, ITEM_DRILL
146   ; use drill
147   mgf [pos_x], [pos_y]
148   jeq game_no_no, FTILE_LIFT
149   mgf [pos_x], [pos_y]
150   jge game_no_no, FTILE_STEEL
151   ;
152   new entry_drill, [.tid]
153   set pos_x, [pos_x], [.tid]
154   set pos_y, [pos_y], [.tid]
155   ;
156 .loop:
157   set [spr_num], PSPR_DRILLING0
158   bsr game_next_frame
159   set [spr_num], PSPR_DRILLING1
160   bsr game_next_frame
161   sta [.tid]
162   jeq .loop, 0
163   set [spr_num], PSPR_FACING
164   jmp .facing_loop
165   ;
166 .pick_facing:
167   bsr game_do_pick
168   jmp .facing_loop
171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172 game_do_pick_lr:
173   psh [prof_dir]
174   bsr prof_turn_to_player
175   bsr game_do_pick
176   pop [prof_dir]
177   bsr prof_turn_to_dir
178   ret
181 game_turning_left:
182   set [prof_dir], PDIR_LEFT
183   jmp game_do_turnings
184 game_turning_right:
185   set [prof_dir], PDIR_RIGHT
186 game_do_turnings:
187   bsr prof_turn_to_dir
190 game_lr_stand_loop:
191   deflvar: .type
192   ;
193   bsr game_do_scrolls
194   bsr game_check_fall
195   bsr game_is_on_exit
196   jne game_do_door_exit, 0
197   bsr game_check_monster_eating
198   bsr game_next_frame
199   ; if we are still here, there was no falling
200   jeq .nopickup, [key_take], 0
201   bsr game_do_pick_lr
202   jmp game_lr_stand_loop
203 .nopickup:
204   ;
205   jeq .nouse, [prof_item], 0
206   jne .use_item, [key_use], 0
207 .nouse:
208   ;
209   jeq .nowc, [key_walk_cheat], 0
210   psh game_lr_stand_loop
211   jne game_cheat_up, [key_up], 0
212   jne game_cheat_down, [key_down], 0
213   drp
214   ;
215 .nowc:
216   jeq .nojump, [key_up], 0
217   bsr game_do_jump
218   ; returns? can't jump
219 .nojump:
220   jeq .noturnface, [key_down], 0
221   set [prof_dir], PDIR_FACING
222   bsr prof_turn_to_dir
223   jmp game_facing_loop
224 .noturnface:
225   jne .walk_right, [key_right], 0
226   jne .walk_left, [key_left], 0
227 .nowalk:
228   bsr game_next_frame
229   jmp game_lr_stand_loop
230   ;
231 .walk_right:
232   jeq .walk, [prof_dir], PDIR_RIGHT
233   set [prof_dir], PDIR_RIGHT
234   bsr prof_turn_to_dir
235   jmp game_lr_stand_loop
236   ;
237 .walk_left:
238   jeq .walk, [prof_dir], PDIR_LEFT
239   set [prof_dir], PDIR_LEFT
240   bsr prof_turn_to_dir
241   jmp game_lr_stand_loop
242   ;
243 .walk:
244   bsr game_can_walk
245   jeq .nowalk, 0
246   jmp game_do_side_move
248 include: use.awa