level scroller
[awish.git] / asm / game.awa
blob1cd2b2944496f61af19ac6e80dd7757d6958ed3d
1 deftvar: prof_dir
4 entry_game_start:
5   set [key_quit], 0
6   set [key_start], 0
7   ;
8   set [key_left], 0
9   set [key_right], 0
10   set [key_up], 0
11   set [key_down], 0
12   set [key_take], 0
13   set [key_use], 0
14   set [key_minimap], 0
15   ;
16   set [key_fall_cheat], 0
17   set [key_walk_cheat], 0
18   set [key_plev_cheat], 0
19   set [key_nlev_cheat], 0
20   ;
21   set [prof_fall_count], 0
22   set [prof_item], 0
23   set [prof_dir], DIR_FACING
24   ;
25   rst FRST_ML_GAME
27   ;
28   set [cur_level], 0
29   bsr game_load_level
31   jmp game_facing_loop
34 game_do_scrolls:
35   deflvar: .ex, .sy
37   jgr .nolshift, [pos_x], [scr_x]
38   ; shift screen
39   sub [scr_x], [VIS_WIDTH]
40   add [scr_x], 1
41 .nolshift:
43   set [.ex], [scr_x]
44   add [.ex], [VIS_WIDTH]
45   sub [.ex], 1
46   jls .norshift, [pos_x], [.ex]
47   ; shift screen
48   add [scr_x], [VIS_WIDTH]
49   sub [scr_x], 1
50 .norshift:
52   ;if (profY == scrY+3) scrY -= VIS_HEIGHT-4;
53   ;if (profY == scrY+VIS_HEIGHT) if ((scrY += VIS_HEIGHT-4) > 24) scrY = 24;
55   set [.sy], [scr_y]
56   add [.sy], 3
57   jgr .noushift, [pos_y], [.sy]
58   sub [scr_y], [VIS_HEIGHT]
59   add [scr_y], 4
60 .noushift:
62   set [.sy], [scr_y]
63   add [.sy], VIS_HEIGHT
64   jls .nodshift, [pos_y], [.sy]
65   add [scr_y], [VIS_HEIGHT]
66   sub [scr_y], 4
67   jle .nodshift, [scr_y], 24
68   set [scr_y], 24
69 .nodshift:
70   ret
73 game_facing_loop_w2f:
74   set [spr_num], 11
75   set [spr_dir], DIR_LEFT
76   bsr game_next_frame
77   bsr game_next_frame
79 game_facing_loop:
80   bsr game_frame_keys
81   jne game_turning_right, [key_right], 0
82   jne game_turning_left, [key_left], 0
83   ;
84   bsr game_next_frame
85   jmp game_facing_loop
87 game_turning_left:
88   bsr game_next_frame
89   bsr game_next_frame
90   set [prof_dir], DIR_LEFT
91   set [spr_dir], DIR_LEFT
92   set [spr_num], 10
93   bsr game_next_frame
94   bsr game_next_frame
95   set [spr_num], 0
96   bsr game_next_frame
97   bsr game_next_frame
99 game_left_stand_loop:
100   bsr game_do_scrolls
101   bsr game_frame_keys
102   jne game_turning_from_left, [key_right], 0
103   jne game_jump_left, [key_up], 0
104   bsr game_next_frame
105   jmp game_left_stand_loop
107 game_turning_from_left:
108   bsr game_next_frame
109   bsr game_next_frame
110   set [prof_dir], DIR_FACING
111   set [spr_dir], DIR_LEFT
112   set [spr_num], 10
113   bsr game_next_frame
114   bsr game_next_frame
115   jmp game_facing_loop_w2f
117 game_turning_right:
118   bsr game_next_frame
119   bsr game_next_frame
120   set [prof_dir], DIR_RIGHT
121   set [spr_dir], DIR_RIGHT
122   set [spr_num], 10
123   bsr game_next_frame
124   bsr game_next_frame
125   set [spr_num], 0
126   bsr game_next_frame
127   bsr game_next_frame
129 game_right_stand_loop:
130   bsr game_do_scrolls
131   bsr game_frame_keys
132   jne game_turning_from_right, [key_left], 0
133   jne game_jump_right, [key_up], 0
134   bsr game_next_frame
135   jmp game_right_stand_loop
137 game_turning_from_right:
138   bsr game_next_frame
139   bsr game_next_frame
140   set [prof_dir], DIR_FACING
141   set [spr_dir], DIR_RIGHT
142   set [spr_num], 10
143   bsr game_next_frame
144   bsr game_next_frame
145   jmp game_facing_loop_w2f
148 game_jump_left:
149   set [spr_num], 12
150   set [pos_tx], -2
151   set [pos_ty], -4
152   bsr game_next_frame
153   set [pos_tx], -4
154   set [pos_ty], -6
155   bsr game_next_frame
156   set [pos_tx], -6
157   set [pos_ty], -8
158   bsr game_next_frame
159   set [pos_tx], -8
160   set [pos_ty], -10
161   bsr game_next_frame
162   set [pos_tx], -10
163   set [pos_ty], -12
164   bsr game_next_frame
165   set [pos_tx], -12
166   set [pos_ty], -14
167   bsr game_next_frame
168   set [pos_tx], -14
169   set [pos_ty], -16
170   bsr game_next_frame
171   set [pos_tx], -16
172   set [pos_ty], -14
173   bsr game_next_frame
174   set [pos_tx], -18
175   set [pos_ty], -12
176   bsr game_next_frame
177   set [pos_tx], -20
178   set [pos_ty], -10
179   bsr game_next_frame
180   set [pos_tx], 0
181   set [pos_ty], 0
182   sub [pos_x], 1
183   sub [pos_y], 1
184   set [spr_num], 0
185   bsr prof_fix_position
186   jmp game_left_stand_loop
188 game_jump_right:
189   set [spr_num], 12
190   set [pos_tx], 2
191   set [pos_ty], -4
192   bsr game_next_frame
193   set [pos_tx], 4
194   set [pos_ty], -6
195   bsr game_next_frame
196   set [pos_tx], 6
197   set [pos_ty], -8
198   bsr game_next_frame
199   set [pos_tx], 8
200   set [pos_ty], -10
201   bsr game_next_frame
202   set [pos_tx], 10
203   set [pos_ty], -12
204   bsr game_next_frame
205   set [pos_tx], 12
206   set [pos_ty], -14
207   bsr game_next_frame
208   set [pos_tx], 14
209   set [pos_ty], -16
210   bsr game_next_frame
211   set [pos_tx], 16
212   set [pos_ty], -14
213   bsr game_next_frame
214   set [pos_tx], 18
215   set [pos_ty], -12
216   bsr game_next_frame
217   set [pos_tx], 20
218   set [pos_ty], -10
219   bsr game_next_frame
220   set [pos_tx], 0
221   set [pos_ty], 0
222   add [pos_x], 1
223   sub [pos_y], 1
224   set [spr_num], 0
225   bsr prof_fix_position
226   jmp game_right_stand_loop
228 game_load_level:
229   bsr kill_all_threads
230   ;
231   set [item_id], 0
232   set [spr_bank], BANK_PROF
233   set [spr_num], 11
234   set [spr_dir], DIR_LEFT
235   ;
236   set [prof_x], 0
237   set [prof_y], 0
238   ;
239   rst FRST_LOAD_LEVEL, [cur_level]
240   jne quit_program, [rst_result], 0
241   ;
242   bsr prof_fix_position
243   ;
244   ret
247 game_frame_keys:
248   jne .minimap, [key_minimap], 0
249   ret
250 .minimap:
251   set [key_minimap], 0
252   rst FRST_MINIMAP
253   brk
254   ret
257 game_next_frame:
258   jne quit_program, [key_quit], 0
259   brk
260   ret
263 prof_fix_position:
264   set [prof_x], [pos_x]
265   set [prof_y], [pos_y]
266   ret