Source code for the GlobalGameJam 2016 game project.
@@ -73,14 +73,13 @@ | ||
73 | 73 | _BufferPicture3 .dsb 8000 |
74 | 74 | _BufferPicture4 .dsb 8000 |
75 | 75 | |
76 | +_Font6x6 .dsb LOADER_FONT_6x6_SIZE ;96*6 ; 576 bytes | |
76 | 77 | |
77 | 78 | *=$9800+256 |
78 | 79 | |
79 | 80 | _StdCharset |
80 | 81 | |
81 | - *=$9c00 | |
82 | 82 | |
83 | -_Font6x6 .dsb 96*6 ; 576 bytes | |
84 | 83 | |
85 | 84 | |
86 | 85 | ; *=$200 |
@@ -21,7 +21,7 @@ | ||
21 | 21 | DefineDisk 2 42 17 ; 2 sides, 42 tracks, 17 sectors |
22 | 22 | |
23 | 23 | OutputLayoutFile floppy_description.h |
24 | -OutputFloppyFile ..\build\GlobalGameJam2015.dsk | |
24 | +OutputFloppyFile ..\build\GlobalGameJam2016.dsk | |
25 | 25 | |
26 | 26 | ;AddDefine LOADER_SHOW_DEBUGINFO 1 |
27 | 27 | ;AddDefine ENABLE_TIMING_DEBUGGING 1 |
@@ -72,6 +72,7 @@ | ||
72 | 72 | |
73 | 73 | AddFile ..\build\files\Font6x6.hir |
74 | 74 | AddDefine LOADER_FONT_6x6 {FileIndex} |
75 | +AddDefine LOADER_FONT_6x6_SIZE {FileSize} | |
75 | 76 | |
76 | 77 | ; |
77 | 78 | ; The pictures |
@@ -79,74 +80,6 @@ | ||
79 | 80 | AddFile ..\build\files\GlobalGameJamOslo.hir ; The 240x200 Global Game Jam Oslo logo |
80 | 81 | AddDefine LOADER_GAMEJAM_LOGO {FileIndex} |
81 | 82 | |
82 | -AddFile ..\build\files\oslo_map.hir [description:Where do you want to go now?] [name:Map of Oslo] | |
83 | -AddDefine LOADER_OSLO_MAP {FileIndex} | |
84 | - | |
85 | 83 | AddFile ..\build\files\title_screen.hir |
86 | 84 | AddDefine LOADER_TITLE_SCREEN {FileIndex} |
87 | 85 | |
88 | -AddFile ..\build\files\ending_giveup.hir | |
89 | -AddDefine LOADER_ENDING_GIVEUP {FileIndex} | |
90 | - | |
91 | -AddFile ..\build\files\ending_out_of_money.hir | |
92 | -AddDefine LOADER_ENDING_OUT_OF_MONEY {FileIndex} | |
93 | - | |
94 | -AddFile ..\build\files\ending_out_of_time.hir | |
95 | -AddDefine LOADER_ENDING_OUT_OF_TIME {FileIndex} | |
96 | - | |
97 | -AddFile ..\build\files\ending_victory.hir | |
98 | -AddDefine LOADER_ENDING_VICTORY {FileIndex} | |
99 | - | |
100 | -AddFile ..\build\files\how_to_play.hir | |
101 | -AddDefine LOADER_HOW_TO_PLAY {FileIndex} | |
102 | - | |
103 | -; | |
104 | -; Locations, 174x180 pictures | |
105 | -; | |
106 | -AddFile ..\build\files\location_vigeland.hir [description:The Vigeland Park is the worlds largestsculpture park made by a single artist one of Norway most popular attractions] [name:Vigeland Park] | |
107 | -AddDefine LOADER_LOCATION_FIRST {FileIndex} | |
108 | -AddDefine LOADER_LOCATION_VIGELAND {FileIndex} | |
109 | - | |
110 | -AddFile ..\build\files\location_opera.hir [description:The Opera is a weirdly shaped thing in the Oslo harbor] [name:Oslo Opera] | |
111 | -AddDefine LOADER_LOCATION_OPERA {FileIndex} | |
112 | - | |
113 | -AddFile ..\build\files\location_holmenkolen.hir [description:See the famous ski jump] [name:Holmenkolen] | |
114 | -AddDefine LOADER_LOCATION_HOLMENKOLEN {FileIndex} | |
115 | - | |
116 | -AddFile ..\build\files\location_jernbanetorget.hir [description:The Oslo train station is really the city hub] [name:Oslo Sentralstajon] | |
117 | -AddDefine LOADER_LOCATION_OSLOS {FileIndex} | |
118 | - | |
119 | -AddFile ..\build\files\location_akerbrygge.hir [description:Boats, shopping malls, and expensive restaurants] [name:Aker Brygge] | |
120 | -AddDefine LOADER_LOCATION_AKERBRYGGE {FileIndex} | |
121 | - | |
122 | -AddFile ..\build\files\location_kingscastle.hir [description:Where the royal familly lives] [name:The Royal Palace] | |
123 | -AddDefine LOADER_LOCATION_KINGCASTLE {FileIndex} | |
124 | - | |
125 | -AddFile ..\build\files\location_sognsvann.hir [description:A nice lake, you can swim and take a walk] [name:Sognsvann] | |
126 | -AddDefine LOADER_LOCATION_SOGNSVANN {FileIndex} | |
127 | - | |
128 | -AddFile ..\build\files\location_vikingship_museum.hir [description:Hosts three nice viking ships] [name:Viking Ship Museum] | |
129 | -AddDefine LOADER_LOCATION_VIKINGSHIP {FileIndex} | |
130 | - | |
131 | -AddFile ..\build\files\location_munch_museum.hir [description:The Scream is there, among many other paintings] [name:Munch Museum] | |
132 | -AddDefine LOADER_LOCATION_MUNCHMUSEUM {FileIndex} | |
133 | - | |
134 | -AddFile ..\build\files\location_ibsen_museum.hir [description:Ibsen, famous Norwegian writter] [name:Ibsen Museum] | |
135 | -AddDefine LOADER_LOCATION_IBSENMUSEUM {FileIndex} | |
136 | - | |
137 | -AddFile ..\build\files\location_norwegian_folk_museum.hir [description:Many interesting things to see there, including a beautiful stave church builtin the early 13th century] [name:Norwegian Folk Museum] | |
138 | -AddDefine LOADER_LOCATION_NORWEGIANFOLK {FileIndex} | |
139 | - | |
140 | -AddFile ..\build\files\location_kon_tiki_museum.hir [description:Learn about Thor Heyerdahl's expedition] [name:Kon-Tiki museum] | |
141 | -AddDefine LOADER_LOCATION_KONTIKI {FileIndex} | |
142 | - | |
143 | -AddFile ..\build\files\location_akershus_fortress.hir [description:The Oslo fortress, protecting from invaders comming by boat] [name:Akershus Fortress] | |
144 | -AddDefine LOADER_LOCATION_AKERSHUS {FileIndex} | |
145 | - | |
146 | -AddFile ..\build\files\location_national_gallery.hir [description:The other place where you can see the Scream. For free] [name:National Gallery] | |
147 | -AddDefine LOADER_LOCATION_NATIONALGALLERY {FileIndex} | |
148 | - | |
149 | -AddFile ..\build\files\location_natural_history_museum.hir [description:Dinosaurs and old stuff :)] [name:Natural History Museum] | |
150 | -AddDefine LOADER_LOCATION_NATURALHISTORY {FileIndex} | |
151 | -AddDefine LOADER_LOCATION_LAST {FileIndex} | |
152 | - |
@@ -0,0 +1,698 @@ | ||
1 | + | |
2 | +;#include "loader_api.h" | |
3 | + | |
4 | + .zero | |
5 | + | |
6 | +selected_option .dsb 1 | |
7 | +selected_offset .dsb 1 ; 0, 40 or 80 | |
8 | + | |
9 | +day_of_the_week .dsb 2 | |
10 | + | |
11 | + .text | |
12 | + | |
13 | +#define SET_DAY(message) lda #<message:sta day_of_the_week+0:lda #>message:sta day_of_the_week+1 | |
14 | + | |
15 | +#define PRINT_HIRES(message) lda #0:sta _PrintHiresX:lda #<message:sta _PrintMessagePtr+0:lda #>message:sta _PrintMessagePtr+1:jsr _PrintTextHires | |
16 | +#define PRINT_TEXT(message) lda #0:sta _PrintScreenX:lda #<message:sta _PrintMessagePtr+0:lda #>message:sta _PrintMessagePtr+1:jsr _PrintSelectedText | |
17 | + | |
18 | + | |
19 | + | |
20 | +_WaitOneSecond | |
21 | +.( | |
22 | + pha | |
23 | + txa | |
24 | + pha | |
25 | + ldx #50 | |
26 | +loop | |
27 | + jsr _VSync | |
28 | + dex | |
29 | + bne loop | |
30 | + | |
31 | + pla | |
32 | + tax | |
33 | + pla | |
34 | + rts | |
35 | +.) | |
36 | + | |
37 | +_WaitThreeSeconds | |
38 | + rts ; ----------- comment out in final version | |
39 | + jsr _WaitOneSecond | |
40 | + jsr _WaitOneSecond | |
41 | + jsr _WaitOneSecond | |
42 | + rts | |
43 | + | |
44 | + | |
45 | +_GameStart | |
46 | +.( | |
47 | + ;jmp sunday | |
48 | + | |
49 | +monday | |
50 | + SET_DAY(_MessageMonday) | |
51 | + jsr _OfficeDay | |
52 | + | |
53 | +tuesday | |
54 | + SET_DAY(_MessageTuesday) | |
55 | + jsr _HomeOfficeDay | |
56 | + | |
57 | +wednesday | |
58 | + SET_DAY(_MessageWednesday) | |
59 | + jsr _OfficeDay | |
60 | + | |
61 | +thursday | |
62 | + SET_DAY(_MessageThursday) | |
63 | + jsr _HomeOfficeDay | |
64 | + | |
65 | +friday | |
66 | + SET_DAY(_MessageFriday) | |
67 | + jsr _OfficeDay | |
68 | + | |
69 | +saturday | |
70 | + SET_DAY(_MessageSaturday) | |
71 | + jsr _Saturday | |
72 | + | |
73 | +sunday | |
74 | + SET_DAY(_MessageSunday) | |
75 | + jsr _Sunday | |
76 | + | |
77 | + jmp _GameStart | |
78 | +.) | |
79 | + | |
80 | +_DayIntroSequence | |
81 | + jsr _WaitThreeSeconds | |
82 | + jsr _LoadTitleScreen | |
83 | + | |
84 | + lda #0 | |
85 | + sta _PrintHiresX | |
86 | + lda day_of_the_week+0 | |
87 | + sta _PrintMessagePtr+0 | |
88 | + lda day_of_the_week+1 | |
89 | + sta _PrintMessagePtr+1 | |
90 | + jsr _PrintTextHires | |
91 | + | |
92 | + jsr _WaitOneSecond | |
93 | + rts | |
94 | + | |
95 | +_DayEndSequence | |
96 | + PRINT_HIRES(_MessageBedTime) | |
97 | + jsr _WaitThreeSeconds | |
98 | + | |
99 | + ldx #32 | |
100 | +loop_scrollout | |
101 | + jsr _ScrollUpHires | |
102 | + dex | |
103 | + bne loop_scrollout | |
104 | + rts | |
105 | + | |
106 | +_BadChoiceSequence | |
107 | + PRINT_HIRES(_MessageBadChoice) | |
108 | + jsr _WaitOneSecond | |
109 | + jsr _WaitOneSecond | |
110 | + jsr _WaitOneSecond | |
111 | + rts | |
112 | + | |
113 | + | |
114 | +_Saturday | |
115 | + jsr _DayIntroSequence | |
116 | + PRINT_HIRES(_MessageSaturdaySummary) | |
117 | + jsr _WaitOneSecond | |
118 | + jsr _WaitOneSecond | |
119 | + jsr _WaitOneSecond | |
120 | + | |
121 | + jsr _DayEndSequence | |
122 | + rts | |
123 | + | |
124 | +_Sunday | |
125 | + jsr _DayIntroSequence | |
126 | + PRINT_HIRES(_MessageSundaySummary) | |
127 | + jsr _WaitOneSecond | |
128 | + jsr _WaitOneSecond | |
129 | + jsr _WaitOneSecond | |
130 | + jsr _DayEndSequence | |
131 | + rts | |
132 | + | |
133 | +; -------------------------------------------------------------------------- | |
134 | +; ------------------------------------- Home Office Day | |
135 | +; -------------------------------------------------------------------------- | |
136 | +_HomeOfficeDay | |
137 | +.( | |
138 | + ;jmp choice_morning_computer_switch | |
139 | + jsr _DayIntroSequence | |
140 | + | |
141 | +wake_up | |
142 | +.( | |
143 | + PRINT_HIRES(_MessageNewDayStarts) | |
144 | + jsr _WaitOneSecond | |
145 | + jsr _WhatWouldMickaeldo | |
146 | + PRINT_TEXT(_MessageSnooze) | |
147 | + PRINT_TEXT(_MessageLeaveTheBed) | |
148 | + PRINT_TEXT(_MessageCallSick) | |
149 | + jsr _SelectOption | |
150 | + lda selected_option | |
151 | + cmp #0 | |
152 | + beq bad_choice_1 | |
153 | + cmp #2 | |
154 | + beq bad_choice_2 | |
155 | + jmp good_choice | |
156 | +bad_choice_1 | |
157 | + PRINT_HIRES(_MessageSnoozeError) | |
158 | + jsr _BadChoiceSequence | |
159 | + jmp _HomeOfficeDay | |
160 | +bad_choice_2 | |
161 | + PRINT_HIRES(_MessageCallSickError) | |
162 | + jsr _BadChoiceSequence | |
163 | + jmp _HomeOfficeDay | |
164 | +good_choice | |
165 | +.) | |
166 | +; ------------------------------------------- | |
167 | +choice_leave_bed | |
168 | +.( | |
169 | + PRINT_HIRES(_MessageWokenUp) | |
170 | + jsr _WhatWouldMickaeldo | |
171 | + PRINT_TEXT(_MessageSwitchOnComputer) | |
172 | + PRINT_TEXT(_MessageHaveBreakfast) | |
173 | + PRINT_TEXT(_MessageTakeShower) | |
174 | + jsr _SelectOption | |
175 | + lda selected_option | |
176 | + cmp #1 | |
177 | + beq bad_choice_1 | |
178 | + cmp #2 | |
179 | + beq bad_choice_2 | |
180 | + jmp good_choice | |
181 | +bad_choice_1 | |
182 | + PRINT_HIRES(_MessageHomeBreakfastError) | |
183 | + jsr _BadChoiceSequence | |
184 | + jmp _HomeOfficeDay | |
185 | +bad_choice_2 | |
186 | + PRINT_HIRES(_MessageShowerError) | |
187 | + jsr _BadChoiceSequence | |
188 | + jmp _HomeOfficeDay | |
189 | +good_choice | |
190 | +.) | |
191 | + | |
192 | +; ------------------------------------------- | |
193 | +#if 0 | |
194 | +choice_morning_computer_switch | |
195 | +.( | |
196 | + PRINT_HIRES(_MessageHomeOfficeDone) | |
197 | + jsr _WhatWouldMickaeldo | |
198 | + PRINT_TEXT(_MessageSwitchOnComputer) | |
199 | + PRINT_TEXT(_MessageHaveBreakfast) | |
200 | + PRINT_TEXT(_MessageTakeShower) | |
201 | + jsr _SelectOption | |
202 | + lda selected_option | |
203 | + cmp #1 | |
204 | + beq bad_choice_1 | |
205 | + cmp #2 | |
206 | + beq bad_choice_2 | |
207 | + jmp good_choice | |
208 | +bad_choice_1 | |
209 | + PRINT_HIRES(_MessageShowerError) | |
210 | + jsr _BadChoiceSequence | |
211 | + jmp _HomeOfficeDay | |
212 | +bad_choice_2 | |
213 | + PRINT_HIRES(_MessageHomeBreakfastError) | |
214 | + jsr _BadChoiceSequence | |
215 | + jmp _HomeOfficeDay | |
216 | +good_choice | |
217 | +.) | |
218 | +#endif | |
219 | +; ------------------------------------------- | |
220 | +choice_work_all_day | |
221 | +; ------------------------------------------- | |
222 | +at_home | |
223 | +.( | |
224 | + PRINT_HIRES(_MessageHomeOfficeDone) | |
225 | + jsr _WhatWouldMickaeldo | |
226 | + PRINT_TEXT(_MessagePizza) | |
227 | + PRINT_TEXT(_MessageNapTime) | |
228 | + PRINT_TEXT(_MessageComputerTime) | |
229 | + jsr _SelectOption | |
230 | + lda selected_option | |
231 | + cmp #0 | |
232 | + beq bad_choice_1 | |
233 | + cmp #2 | |
234 | + beq bad_choice_2 | |
235 | + jmp good_choice | |
236 | +bad_choice_1 | |
237 | + PRINT_HIRES(_MessagePizzaErrors) | |
238 | + jsr _BadChoiceSequence | |
239 | + jmp _HomeOfficeDay | |
240 | +bad_choice_2 | |
241 | + PRINT_HIRES(_MessageComputerTimeError) | |
242 | + jsr _BadChoiceSequence | |
243 | + jmp _HomeOfficeDay | |
244 | +good_choice | |
245 | +.) | |
246 | + | |
247 | +; ------------------------------------------- | |
248 | +after_dinner | |
249 | +.( | |
250 | + PRINT_HIRES(_MessageFeelingBetter) | |
251 | + jsr _WhatWouldMickaeldo | |
252 | + PRINT_TEXT(_MessageTvDinner) | |
253 | + PRINT_TEXT(_MessageInstagram) | |
254 | + PRINT_TEXT(_MessageCallMyParents) | |
255 | + jsr _SelectOption | |
256 | + lda selected_option | |
257 | + cmp #1 | |
258 | + beq bad_choice_1 | |
259 | + cmp #2 | |
260 | + beq bad_choice_2 | |
261 | + jmp good_choice | |
262 | +bad_choice_1 | |
263 | + PRINT_HIRES(_MessageInstagramError) | |
264 | + jsr _BadChoiceSequence | |
265 | + jmp _HomeOfficeDay | |
266 | +bad_choice_2 | |
267 | + PRINT_HIRES(_MessageCallMyParentsErrors) | |
268 | + jsr _BadChoiceSequence | |
269 | + jmp _HomeOfficeDay | |
270 | +good_choice | |
271 | +.) | |
272 | + | |
273 | +; ------------------------------------------------- | |
274 | +evening_rituals | |
275 | +.( | |
276 | + PRINT_HIRES(_MessageEveningRituals) | |
277 | + jsr _WhatWouldMickaeldo | |
278 | + PRINT_TEXT(_MessageComputerMMO) | |
279 | + PRINT_TEXT(_MessageComputerSocial) | |
280 | + PRINT_TEXT(_MessageComputerDefenceForce) | |
281 | + jsr _SelectOption | |
282 | + lda selected_option | |
283 | + cmp #0 | |
284 | + beq bad_choice_1 | |
285 | + cmp #1 | |
286 | + beq bad_choice_2 | |
287 | + jmp good_choice | |
288 | +bad_choice_1 | |
289 | + PRINT_HIRES(_MessageComputerMMOError) | |
290 | + jsr _BadChoiceSequence | |
291 | + jmp _HomeOfficeDay | |
292 | +bad_choice_2 | |
293 | + PRINT_HIRES(_MessageComputerSocialError) | |
294 | + jsr _BadChoiceSequence | |
295 | + jmp _HomeOfficeDay | |
296 | +good_choice | |
297 | +.) | |
298 | + | |
299 | + | |
300 | + jsr _DayEndSequence | |
301 | + rts | |
302 | +.) | |
303 | + | |
304 | + | |
305 | +; -------------------------------------------------------------------------- | |
306 | +; ------------------------------------- A new day in the office | |
307 | +; -------------------------------------------------------------------------- | |
308 | +_OfficeDay | |
309 | +.( | |
310 | + ;jmp wake_up | |
311 | + ;jmp choise_leave_bed | |
312 | + ;jmp choice_take_shower | |
313 | + ;jmp take_the_metro | |
314 | + ;jmp take_the_bus | |
315 | + ;jmp at_the_office | |
316 | + ;jmp after_the_office | |
317 | + ;jmp at_home | |
318 | + ;jmp after_dinner | |
319 | + ;jmp evening_rituals | |
320 | + | |
321 | + jsr _DayIntroSequence | |
322 | + | |
323 | +wake_up | |
324 | +.( | |
325 | + PRINT_HIRES(_MessageNewDayStarts) | |
326 | + jsr _WaitOneSecond | |
327 | + jsr _WhatWouldMickaeldo | |
328 | + PRINT_TEXT(_MessageSnooze) | |
329 | + PRINT_TEXT(_MessageLeaveTheBed) | |
330 | + PRINT_TEXT(_MessageCallSick) | |
331 | + jsr _SelectOption | |
332 | + lda selected_option | |
333 | + cmp #0 | |
334 | + beq bad_choice_1 | |
335 | + cmp #2 | |
336 | + beq bad_choice_2 | |
337 | + jmp good_choice | |
338 | +bad_choice_1 | |
339 | + PRINT_HIRES(_MessageSnoozeError) | |
340 | + jsr _BadChoiceSequence | |
341 | + jmp _OfficeDay | |
342 | +bad_choice_2 | |
343 | + PRINT_HIRES(_MessageCallSickError) | |
344 | + jsr _BadChoiceSequence | |
345 | + jmp _OfficeDay | |
346 | +good_choice | |
347 | +.) | |
348 | + | |
349 | +; ------------------------------------------- | |
350 | +choise_leave_bed | |
351 | +.( | |
352 | + PRINT_HIRES(_MessageWokenUp) | |
353 | + jsr _WhatWouldMickaeldo | |
354 | + PRINT_TEXT(_MessageSwitchOnComputer) | |
355 | + PRINT_TEXT(_MessageHaveBreakfast) | |
356 | + PRINT_TEXT(_MessageTakeShower) | |
357 | + jsr _SelectOption | |
358 | + lda selected_option | |
359 | + cmp #0 | |
360 | + beq bad_choice_1 | |
361 | + cmp #1 | |
362 | + beq bad_choice_2 | |
363 | + jmp good_choice | |
364 | +bad_choice_1 | |
365 | + PRINT_HIRES(_MessageSwitchOnComputerError) | |
366 | + jsr _BadChoiceSequence | |
367 | + jmp _OfficeDay | |
368 | +bad_choice_2 | |
369 | + PRINT_HIRES(_MessageHaveBreakfastError) | |
370 | + jsr _BadChoiceSequence | |
371 | + jmp _OfficeDay | |
372 | +good_choice | |
373 | +.) | |
374 | + | |
375 | +; ------------------------------------------- | |
376 | +choice_take_shower | |
377 | +.( | |
378 | + PRINT_HIRES(_MessageClean) | |
379 | + jsr _WhatWouldMickaeldo | |
380 | + PRINT_TEXT(_MessageTakeTheMetro) | |
381 | + PRINT_TEXT(_MessageWalkToTheOffice) | |
382 | + PRINT_TEXT(_MessageTakeTheCar) | |
383 | + jsr _SelectOption | |
384 | + lda selected_option | |
385 | + cmp #1 | |
386 | + beq bad_choice_1 | |
387 | + cmp #2 | |
388 | + beq bad_choice_2 | |
389 | + jmp good_choice | |
390 | +bad_choice_1 | |
391 | + PRINT_HIRES(_MessageWalkToTheOfficeError) | |
392 | + jsr _BadChoiceSequence | |
393 | + jmp _OfficeDay | |
394 | +bad_choice_2 | |
395 | + PRINT_HIRES(_MessageTakeTheCarError) | |
396 | + jsr _BadChoiceSequence | |
397 | + jmp _OfficeDay | |
398 | +good_choice | |
399 | +.) | |
400 | + | |
401 | +; ------------------------------------------- | |
402 | +take_the_metro | |
403 | +.( | |
404 | + PRINT_HIRES(_MessageMetroSitting) | |
405 | + jsr _WhatWouldMickaeldo | |
406 | + PRINT_TEXT(_MessageSitFront) | |
407 | + PRINT_TEXT(_MessageSitMiddle) | |
408 | + PRINT_TEXT(_MessageSitBack) | |
409 | + jsr _SelectOption | |
410 | + lda selected_option | |
411 | + cmp #0 | |
412 | + beq bad_choice_1 | |
413 | + cmp #1 | |
414 | + beq bad_choice_2 | |
415 | + jmp good_choice | |
416 | +bad_choice_1 | |
417 | + PRINT_HIRES(_MessageSitError) | |
418 | + jsr _BadChoiceSequence | |
419 | + jmp _OfficeDay | |
420 | +bad_choice_2 | |
421 | + PRINT_HIRES(_MessageSitError) | |
422 | + jsr _BadChoiceSequence | |
423 | + jmp _OfficeDay | |
424 | +good_choice | |
425 | +.) | |
426 | + | |
427 | +; ------------------------------------------- | |
428 | +take_the_bus | |
429 | +.( | |
430 | + PRINT_HIRES(_MessageWhichBus) | |
431 | + jsr _WhatWouldMickaeldo | |
432 | + PRINT_TEXT(_MessageTramway) | |
433 | + PRINT_TEXT(_MessageBus31) | |
434 | + PRINT_TEXT(_MessageBus36) | |
435 | + jsr _SelectOption | |
436 | + lda selected_option | |
437 | + cmp #0 | |
438 | + beq bad_choice_1 | |
439 | + cmp #2 | |
440 | + beq bad_choice_2 | |
441 | + jmp good_choice | |
442 | +bad_choice_1 | |
443 | + PRINT_HIRES(_MessageTramwayError) | |
444 | + jsr _BadChoiceSequence | |
445 | + jmp _OfficeDay | |
446 | +bad_choice_2 | |
447 | + PRINT_HIRES(_MessageBus36Error) | |
448 | + jsr _BadChoiceSequence | |
449 | + jmp _OfficeDay | |
450 | +good_choice | |
451 | +.) | |
452 | + | |
453 | +; ------------------------------------------- | |
454 | +at_the_office | |
455 | +.( | |
456 | + PRINT_HIRES(_MessageOffice) | |
457 | + jsr _WhatWouldMickaeldo | |
458 | + PRINT_TEXT(_MessageMailAndBreakfast) | |
459 | + PRINT_TEXT(_MessageBreakTheBuild) | |
460 | + PRINT_TEXT(_MessagePranks) | |
461 | + jsr _SelectOption | |
462 | + lda selected_option | |
463 | + cmp #1 | |
464 | + beq bad_choice_1 | |
465 | + cmp #2 | |
466 | + beq bad_choice_2 | |
467 | + jmp good_choice | |
468 | +bad_choice_1 | |
469 | + PRINT_HIRES(_MessageBreakTheBuildErrors) | |
470 | + jsr _BadChoiceSequence | |
471 | + jmp _OfficeDay | |
472 | +bad_choice_2 | |
473 | + PRINT_HIRES(_MessagePranksErrors) | |
474 | + jsr _BadChoiceSequence | |
475 | + jmp _OfficeDay | |
476 | +good_choice | |
477 | +.) | |
478 | + | |
479 | +; ------------------------------------------- | |
480 | +after_the_office | |
481 | +.( | |
482 | + PRINT_HIRES(_MessageOfficeDone) | |
483 | + jsr _WhatWouldMickaeldo | |
484 | + PRINT_TEXT(_MessagePartyTime) | |
485 | + PRINT_TEXT(_MessageGoHome) | |
486 | + PRINT_TEXT(_MessageOvertime) | |
487 | + jsr _SelectOption | |
488 | + lda selected_option | |
489 | + cmp #0 | |
490 | + beq bad_choice_1 | |
491 | + cmp #2 | |
492 | + beq bad_choice_2 | |
493 | + jmp good_choice | |
494 | +bad_choice_1 | |
495 | + PRINT_HIRES(_MessagePartyTimeErrors) | |
496 | + jsr _BadChoiceSequence | |
497 | + jmp _OfficeDay | |
498 | +bad_choice_2 | |
499 | + PRINT_HIRES(_MessageOvertimeErrors) | |
500 | + jsr _BadChoiceSequence | |
501 | + jmp _OfficeDay | |
502 | +good_choice | |
503 | +.) | |
504 | + | |
505 | +; ------------------------------------------- | |
506 | +at_home | |
507 | +.( | |
508 | + PRINT_HIRES(_MessageAtHome) | |
509 | + jsr _WhatWouldMickaeldo | |
510 | + PRINT_TEXT(_MessagePizza) | |
511 | + PRINT_TEXT(_MessageNapTime) | |
512 | + PRINT_TEXT(_MessageComputerTime) | |
513 | + jsr _SelectOption | |
514 | + lda selected_option | |
515 | + cmp #0 | |
516 | + beq bad_choice_1 | |
517 | + cmp #2 | |
518 | + beq bad_choice_2 | |
519 | + jmp good_choice | |
520 | +bad_choice_1 | |
521 | + PRINT_HIRES(_MessagePizzaErrors) | |
522 | + jsr _BadChoiceSequence | |
523 | + jmp _OfficeDay | |
524 | +bad_choice_2 | |
525 | + PRINT_HIRES(_MessageComputerTimeError) | |
526 | + jsr _BadChoiceSequence | |
527 | + jmp _OfficeDay | |
528 | +good_choice | |
529 | +.) | |
530 | + | |
531 | +; ------------------------------------------- | |
532 | +after_dinner | |
533 | +.( | |
534 | + PRINT_HIRES(_MessageFeelingBetter) | |
535 | + jsr _WhatWouldMickaeldo | |
536 | + PRINT_TEXT(_MessageTvDinner) | |
537 | + PRINT_TEXT(_MessageInstagram) | |
538 | + PRINT_TEXT(_MessageCallMyParents) | |
539 | + jsr _SelectOption | |
540 | + lda selected_option | |
541 | + cmp #1 | |
542 | + beq bad_choice_1 | |
543 | + cmp #2 | |
544 | + beq bad_choice_2 | |
545 | + jmp good_choice | |
546 | +bad_choice_1 | |
547 | + PRINT_HIRES(_MessageInstagramError) | |
548 | + jsr _BadChoiceSequence | |
549 | + jmp _OfficeDay | |
550 | +bad_choice_2 | |
551 | + PRINT_HIRES(_MessageCallMyParentsErrors) | |
552 | + jsr _BadChoiceSequence | |
553 | + jmp _OfficeDay | |
554 | +good_choice | |
555 | +.) | |
556 | + | |
557 | +; ------------------------------------------------- | |
558 | +evening_rituals | |
559 | +.( | |
560 | + PRINT_HIRES(_MessageEveningRituals) | |
561 | + jsr _WhatWouldMickaeldo | |
562 | + PRINT_TEXT(_MessageComputerMMO) | |
563 | + PRINT_TEXT(_MessageComputerSocial) | |
564 | + PRINT_TEXT(_MessageComputerDefenceForce) | |
565 | + jsr _SelectOption | |
566 | + lda selected_option | |
567 | + cmp #0 | |
568 | + beq bad_choice_1 | |
569 | + cmp #1 | |
570 | + beq bad_choice_2 | |
571 | + jmp good_choice | |
572 | +bad_choice_1 | |
573 | + PRINT_HIRES(_MessageComputerMMOError) | |
574 | + jsr _BadChoiceSequence | |
575 | + jmp _OfficeDay | |
576 | +bad_choice_2 | |
577 | + PRINT_HIRES(_MessageComputerSocialError) | |
578 | + jsr _BadChoiceSequence | |
579 | + jmp _OfficeDay | |
580 | +good_choice | |
581 | +.) | |
582 | + | |
583 | + | |
584 | + jsr _DayEndSequence | |
585 | + rts | |
586 | +.) | |
587 | + | |
588 | +_WhatWouldMickaeldo | |
589 | + jsr _WaitThreeSeconds | |
590 | + PRINT_HIRES(_MessagePlayerChoice) | |
591 | + jsr _WaitThreeSeconds | |
592 | + rts | |
593 | + | |
594 | +_SelectOption | |
595 | +.( | |
596 | + lda #0 | |
597 | + sta selected_option | |
598 | +loop | |
599 | + ; Select based on choice | |
600 | + ldx selected_option | |
601 | + beq selectFirst | |
602 | + dex | |
603 | + beq selectSecond | |
604 | + bne selectThird | |
605 | + | |
606 | +display | |
607 | + sta $bb80+40*25 | |
608 | + stx $bb80+40*26 | |
609 | + sty $bb80+40*27 | |
610 | + | |
611 | + ; Hack to get a null terminator... | |
612 | + lda #0 | |
613 | + sta $bb80+40*25+39 | |
614 | + sta $bb80+40*26+39 | |
615 | + sta $bb80+40*27+39 | |
616 | + | |
617 | +_ReadKeyboard | |
618 | + jsr _WaitNoKeyPressed | |
619 | +waitKey | |
620 | + lda _KeyboardStateMemorized | |
621 | + beq waitKey | |
622 | + lsr | |
623 | + lsr | |
624 | + lsr | |
625 | + bcs up | |
626 | + lsr | |
627 | + bcs down | |
628 | + lsr | |
629 | + bcs select | |
630 | + jmp loop | |
631 | + | |
632 | +selectFirst | |
633 | + lda #0 | |
634 | + sta selected_offset | |
635 | + lda #16+1 | |
636 | + ldx #16+0 | |
637 | + ldy #16+0 | |
638 | + jmp display | |
639 | + | |
640 | +selectSecond | |
641 | + lda #40 | |
642 | + sta selected_offset | |
643 | + lda #16+0 | |
644 | + ldx #16+1 | |
645 | + ldy #16+0 | |
646 | + jmp display | |
647 | + | |
648 | +selectThird | |
649 | + lda #80 | |
650 | + sta selected_offset | |
651 | + lda #16+0 | |
652 | + ldx #16+0 | |
653 | + ldy #16+1 | |
654 | + jmp display | |
655 | + | |
656 | +up | |
657 | + dec selected_option | |
658 | + bpl done_up | |
659 | + ldx #2 | |
660 | + stx selected_option | |
661 | +done_up | |
662 | + jmp loop | |
663 | + | |
664 | +down | |
665 | + ldx selected_option | |
666 | + inx | |
667 | + cpx #3 | |
668 | + bne done_down | |
669 | + ldx #0 | |
670 | +done_down | |
671 | + stx selected_option | |
672 | + jmp loop | |
673 | + | |
674 | +select | |
675 | + ; Copy the selected message to the history log | |
676 | + clc | |
677 | + lda #<$bb80+40*25+1 | |
678 | + adc selected_offset | |
679 | + sta _PrintMessagePtr+0 | |
680 | + lda #>$bb80+40*25+1 | |
681 | + adc #0 | |
682 | + sta _PrintMessagePtr+1: | |
683 | + | |
684 | + ldx #0 | |
685 | + stx _PrintHiresX | |
686 | + jsr _PrintTextHiresNoScroll | |
687 | + | |
688 | + jsr _EraseTextArea | |
689 | + rts | |
690 | + | |
691 | +.) | |
692 | + | |
693 | + | |
694 | + | |
695 | + | |
696 | + | |
697 | +_LoopForever | |
698 | + jmp _LoopForever |
@@ -109,8 +109,13 @@ | ||
109 | 109 | ; key_down=8, |
110 | 110 | ; key_fire= 16 |
111 | 111 | |
112 | +_WaitNoKeyPressed | |
113 | + lda _KeyboardState | |
114 | + bne _WaitNoKeyPressed | |
115 | + lda #0 | |
116 | + sta _KeyboardStateMemorized | |
117 | + rts | |
112 | 118 | |
113 | - | |
114 | 119 | _ReadKeyboard |
115 | 120 | lda #00 |
116 | 121 | sta _KeyboardState |
@@ -1,678 +1,36 @@ | ||
1 | 1 | // |
2 | -// Global Game Jam 2015 | |
3 | -// (c) 2015 Mickael Pointier and Funcom | |
2 | +// Global Game Jam 2016 | |
3 | +// (c) 2016 Mickael Pointier | |
4 | 4 | // |
5 | 5 | |
6 | 6 | #include <lib.h> |
7 | 7 | |
8 | -#include "defines.h" | |
9 | 8 | #include "loader_api.h" |
10 | 9 | |
11 | -// irq.s | |
12 | 10 | extern void System_InstallIRQ_SimpleVbl(); |
13 | -extern void VSync(); | |
14 | -extern void Stop(); | |
15 | -extern unsigned char KeyboardState; | |
16 | -extern unsigned char KeyboardStateMemorized; | |
17 | - | |
18 | -// buffer.s | |
19 | 11 | extern unsigned char Font6x6[]; |
20 | 12 | |
21 | -extern unsigned char TableDivBy6[]; | |
22 | -extern unsigned char TableModulo6[]; | |
23 | 13 | |
24 | -extern char BufferPicture1[]; | |
25 | -extern char BufferPicture2[]; | |
26 | -extern char BufferPicture3[]; | |
27 | -extern char BufferPicture4[]; | |
28 | - | |
29 | - | |
30 | -extern void InitializeTables(); | |
31 | - | |
32 | -// screen.s | |
33 | -extern unsigned char OsloLocation; | |
34 | -extern unsigned char ShowingOsloMap; | |
35 | -extern unsigned char NextLocation; | |
36 | -extern unsigned char AvailableActions; | |
37 | -extern unsigned char CurrentMenuAction; | |
38 | -extern unsigned char GameOver; | |
39 | - | |
40 | -extern unsigned char VisitedLocations[]; | |
41 | - | |
42 | - | |
43 | -// messages.s | |
44 | -extern char* PrintScreenPtr; | |
45 | -extern char* PrintMessagePtr; | |
46 | -extern char MessagePressFireToStart[]; | |
47 | -extern char MessageGameMenu[]; | |
48 | -extern char MessageTodayBestScores[]; | |
49 | -extern char MessageGameStory[]; | |
50 | - | |
51 | -extern char MessageCurrentLocation[]; | |
52 | -extern char MessageNextLocation[]; | |
53 | -extern char MessageAlreadyVisited[]; | |
54 | - | |
55 | -extern char MessageCopyright[]; | |
56 | - | |
57 | - | |
58 | -//extern char MessagePlace_Viggeland[]; | |
59 | - | |
60 | - | |
61 | - | |
62 | - char* screen; | |
63 | - char* picture; | |
64 | - int x,y; | |
65 | - | |
66 | - | |
67 | - | |
68 | -void Pause(int delay) | |
14 | +void LoadTitleScreen() | |
69 | 15 | { |
70 | - int i; | |
71 | - | |
72 | - for (i=0;i<delay;i++) | |
73 | - { | |
74 | - VSync(); | |
75 | - } | |
16 | + LoadFileAt(LOADER_TITLE_SCREEN,0xa000); | |
76 | 17 | } |
77 | 18 | |
78 | 19 | |
79 | -void PauseCheckKeyboard(int delay) | |
80 | -{ | |
81 | - int i; | |
82 | - | |
83 | - for (i=0;i<delay;i++) | |
84 | - { | |
85 | - if (KeyboardStateMemorized & 16) | |
86 | - { | |
87 | - return; | |
88 | - } | |
89 | - VSync(); | |
90 | - } | |
91 | -} | |
92 | - | |
93 | - | |
94 | -char IsHires=1; | |
95 | - | |
96 | -void EraseBottomTextArea() | |
97 | -{ | |
98 | - memset((unsigned char*)0xbb80+40*25,32,40*3); | |
99 | -} | |
100 | - | |
101 | -void EraseAllHires() | |
102 | -{ | |
103 | - memset((unsigned char*)0xa000,64,40*200); | |
104 | -} | |
105 | - | |
106 | -void SwitchToText() | |
107 | -{ | |
108 | - if (IsHires) | |
109 | - { | |
110 | - // If not in TEXT; we need to switch from HIRES to TEXT | |
111 | - memset((unsigned char*)0xa000,0,40*200); // Clear the entire HIRES area with black ink | |
112 | - poke((char*)0xbfdf,26); // 50hz Text attribute | |
113 | - VSync(); | |
114 | - VSync(); | |
115 | - memcpy((unsigned char*)0xb400,(unsigned char*)0x9800,0xbb80-0xb400); // Move the charsets from BOTTOM to TOP | |
116 | - memset((unsigned char*)0xbb80,32,40*25); // Fill the entire HIRES area with spaces | |
117 | - } | |
118 | - IsHires=0; | |
119 | -} | |
120 | - | |
121 | -void SwitchToHires() | |
122 | -{ | |
123 | - if (!IsHires) | |
124 | - { | |
125 | - // If not in HIRES; we need to switch from TEXT to HIRES | |
126 | - memcpy((unsigned char*)0x9800,(unsigned char*)0xb400,0xbb80-0xb400); // Move the charsets from TOP to BOTTOM | |
127 | - memset((unsigned char*)0xa000,0,40*200); // Clear the entire HIRES area with black ink | |
128 | - poke((char*)0xbfdf,30); // 50hz Graphics attribute | |
129 | - VSync(); | |
130 | - VSync(); | |
131 | - memset((unsigned char*)0xa000,64,40*200); // Fill the entire HIRES area with neutral 64 value | |
132 | - } | |
133 | - IsHires=1; | |
134 | - InitialiseFontColors(); // Hack to get the color attributes inside the first bytes of the font so I get colors in HIRES | |
135 | -} | |
136 | - | |
137 | - | |
138 | -// | |
139 | -// The menu is shown in TEXT mode | |
140 | -// | |
141 | -void ShowGameMenu() | |
142 | -{ | |
143 | - SwitchToText(); | |
144 | - | |
145 | - strcpy((char*)0xbb80+40*5+9,MessageGameMenu); | |
146 | - | |
147 | - | |
148 | - Pause(50); | |
149 | - | |
150 | - SwitchToHires(); | |
151 | -} | |
152 | - | |
153 | - | |
154 | -// | |
155 | -// People are always happy to see their best scores | |
156 | -// | |
157 | -void ShowHighScoreTable() | |
158 | -{ | |
159 | - SwitchToText(); | |
160 | - | |
161 | - strcpy((char*)0xbb80+40*5+9,MessageTodayBestScores); | |
162 | - | |
163 | - if (!(KeyboardStateMemorized & 16)) PauseCheckKeyboard(50*2); | |
164 | -} | |
165 | - | |
166 | - | |
167 | - | |
168 | -void ShowStoryPage() | |
169 | -{ | |
170 | - SwitchToHires(); | |
171 | - | |
172 | - InitTransitionDataBuffer4(); | |
173 | - PictureTransitionVenicianStore(); | |
174 | - | |
175 | - if (!(KeyboardStateMemorized & 16)) PauseCheckKeyboard(50*12); | |
176 | -} | |
177 | - | |
178 | -void ShowGameJamLogo() | |
179 | -{ | |
180 | - SwitchToHires(); | |
181 | - | |
182 | - InitTransitionDataBuffer1(); | |
183 | - PictureTransitionUnroll(); | |
184 | - | |
185 | - if (!(KeyboardStateMemorized & 16)) PauseCheckKeyboard(50*2); | |
186 | -} | |
187 | - | |
188 | - | |
189 | -void UpdateClockDisplay() | |
190 | -{ | |
191 | - ShowTimeOfTheDay(); | |
192 | -} | |
193 | - | |
194 | - | |
195 | - | |
196 | - | |
197 | -void ShowMockupUi() | |
198 | -{ | |
199 | - SwitchToHires(); | |
200 | - | |
201 | - // Place description at the bottom | |
202 | - EraseBottomTextArea(); | |
203 | - | |
204 | - // Date at the top | |
205 | - screen=(char*)0xa000; | |
206 | - memset(screen,(16+4)|128,40); | |
207 | - screen+=40; | |
208 | - for (y=0;y<8;y++) | |
209 | - { | |
210 | - memset(screen,64,29); | |
211 | - screen+=40; | |
212 | - } | |
213 | - memset(screen,(16+4)|128,29); | |
214 | - screen+=40; | |
215 | - ShowTimeOfTheDay(); | |
216 | - | |
217 | - // Options at the right | |
218 | - screen=(char*)0xa000+40; | |
219 | - for (y=0;y<198;y++) | |
220 | - { | |
221 | - screen[29]=(16+4)|128; | |
222 | - screen[30]=6; | |
223 | - memset(screen+31,64,9); | |
224 | - screen+=40; | |
225 | - } | |
226 | - ShowPlayerStatus(); | |
227 | - | |
228 | - // Name of the place at the bottom | |
229 | - screen=(char*)0xa000+40*190; | |
230 | - memset(screen,(16+4)|128,29); | |
231 | - screen+=40; | |
232 | - for (y=0;y<8;y++) | |
233 | - { | |
234 | - screen[0]=16+4; | |
235 | - screen[1]=6; | |
236 | - memset(screen+2,64,27); | |
237 | - screen+=40; | |
238 | - } | |
239 | - memset(screen,(16+4)|128,40); | |
240 | - | |
241 | - if (ShowingOsloMap) | |
242 | - { | |
243 | - LoaderApiEntryIndex=LOADER_OSLO_MAP; | |
244 | - } | |
245 | - else | |
246 | - { | |
247 | - LoaderApiEntryIndex=OsloLocation; | |
248 | - //ShowActionMenu(); | |
249 | - } | |
250 | - | |
251 | - // Picture at the center | |
252 | - //LoaderApiEntryIndex=OsloLocation; | |
253 | - LoadFileAt(LoaderApiEntryIndex,BufferPicture1); | |
254 | - | |
255 | - screen=(char*)0xa000+40*10; | |
256 | - picture=BufferPicture1; | |
257 | - for (y=0;y<180;y++) | |
258 | - { | |
259 | - memcpy(screen,picture,29); | |
260 | - screen+=40; | |
261 | - picture+=29; | |
262 | - } | |
263 | - | |
264 | - // Description of the place at the bottom | |
265 | - //LoaderApiEntryIndex=OsloLocation; | |
266 | - PrintScreenPtr=(char*)0xbb80+40*25; | |
267 | - PrintText(); | |
268 | - | |
269 | - // Name of the place | |
270 | - //LoaderApiEntryIndex=OsloLocation; | |
271 | - PrintScreenPtr=(char*)0xa000+40*191+2; | |
272 | - PrintHires(); | |
273 | - | |
274 | - if (ShowingOsloMap) | |
275 | - { | |
276 | - //_MessageCurrentLocation .byt "Current Location:",0 | |
277 | - //_MessageNextLocation .byt "Now, go to:",0 | |
278 | - PrintMessagePtr=MessageCurrentLocation; | |
279 | - PrintScreenPtr=(char*)0xbb80+40*26; | |
280 | - PrintSelectedText(); | |
281 | - | |
282 | - LoaderApiEntryIndex=OsloLocation; | |
283 | - PrintLocationText(); | |
284 | - } | |
285 | - | |
286 | - //Pause(50*2); | |
287 | -} | |
288 | - | |
289 | - | |
290 | -void ShowNextLocation() | |
291 | -{ | |
292 | - PrintMessagePtr=MessageNextLocation; | |
293 | - PrintScreenPtr=(char*)0xbb80+40*27; | |
294 | - PrintSelectedText(); | |
295 | - | |
296 | - LoaderApiEntryIndex=NextLocation; | |
297 | - PrintLocationText(); | |
298 | - | |
299 | - // Display if the place was already visited or not | |
300 | - if (VisitedLocations[NextLocation-LOADER_LOCATION_FIRST]) | |
301 | - { | |
302 | - PrintMessagePtr=MessageAlreadyVisited; | |
303 | - PrintSelectedText(); | |
304 | - } | |
305 | - | |
306 | - PrintScreenPtr[0]=0; // Black attribute at the end of the location text | |
307 | -} | |
308 | - | |
309 | - | |
310 | -void ChooseLocation() | |
311 | -{ | |
312 | - ShowingOsloMap=1; | |
313 | - NextLocation=OsloLocation; | |
314 | - ShowMockupUi(); | |
315 | - ShowNextLocation(); | |
316 | - // Anti bounce | |
317 | - while (KeyboardState) {} | |
318 | - do | |
319 | - { | |
320 | - if (KeyboardState&(MOVEMENT_LEFT|MOVEMENT_UP)) | |
321 | - { | |
322 | - NextLocation--; | |
323 | - if (NextLocation<LOADER_LOCATION_FIRST) | |
324 | - { | |
325 | - NextLocation=LOADER_LOCATION_LAST-1; | |
326 | - } | |
327 | - ShowNextLocation(); | |
328 | - // Anti bounce | |
329 | - while (KeyboardState) {} | |
330 | - } | |
331 | - else | |
332 | - if (KeyboardState&(MOVEMENT_RIGHT|MOVEMENT_DOWN)) | |
333 | - { | |
334 | - NextLocation++; | |
335 | - if (NextLocation>=LOADER_LOCATION_LAST) | |
336 | - { | |
337 | - NextLocation=LOADER_LOCATION_FIRST; | |
338 | - } | |
339 | - ShowNextLocation(); | |
340 | - // Anti bounce | |
341 | - while (KeyboardState) {} | |
342 | - } | |
343 | - | |
344 | - ShowLocationTarget(); // Temp | |
345 | - VSync(); | |
346 | - VSync(); | |
347 | - ShowLocationTarget(); // Temp | |
348 | - VSync(); | |
349 | - VSync(); | |
350 | - | |
351 | - //DecrementMoney(); // Test | |
352 | - } | |
353 | - while ( (!(KeyboardState&MOVEMENT_FIRE)) && (!GameOver)); | |
354 | - | |
355 | - ShowingOsloMap=0; | |
356 | - | |
357 | - // | |
358 | - // New destination selected | |
359 | - // | |
360 | - if (NextLocation!=OsloLocation) | |
361 | - { | |
362 | - // The new destination is different from the current one, | |
363 | - // we need to display the transportation mode to go from point A to point B | |
364 | - MoveToNewLocation(); | |
365 | - } | |
366 | -} | |
367 | - | |
368 | - | |
369 | - | |
370 | -void ManageLocation() | |
371 | -{ | |
372 | - while (1) | |
373 | - { | |
374 | - // Set the list of available options for the player in the menu | |
375 | - GetPossibleActionsForLocation(); | |
376 | - //AvailableActions=255; | |
377 | - CurrentMenuAction=0; | |
378 | - | |
379 | - ShowMockupUi(); | |
380 | - | |
381 | - while (KeyboardState) {} | |
382 | - | |
383 | - LoaderApiEntryIndex=OsloLocation; | |
384 | - ShowActionMenu(); | |
385 | - | |
386 | - do | |
387 | - { | |
388 | - //IncrementTime(); | |
389 | - UpdateClockDisplay(); | |
390 | - VSync(); | |
391 | - | |
392 | - if (KeyboardState&(MOVEMENT_LEFT|MOVEMENT_UP)) | |
393 | - { | |
394 | - do | |
395 | - { | |
396 | - CurrentMenuAction=(CurrentMenuAction-1)&7; | |
397 | - } | |
398 | - while (!(AvailableActions & (1<<CurrentMenuAction))); | |
399 | - | |
400 | - LoaderApiEntryIndex=OsloLocation; | |
401 | - ShowActionMenu(); | |
402 | - // Anti bounce | |
403 | - while (KeyboardState) {} | |
404 | - } | |
405 | - else | |
406 | - if (KeyboardState&(MOVEMENT_RIGHT|MOVEMENT_DOWN)) | |
407 | - { | |
408 | - do | |
409 | - { | |
410 | - CurrentMenuAction=(CurrentMenuAction+1)&7; | |
411 | - } | |
412 | - while (!(AvailableActions & (1<<CurrentMenuAction))); | |
413 | - | |
414 | - LoaderApiEntryIndex=OsloLocation; | |
415 | - ShowActionMenu(); | |
416 | - // Anti bounce | |
417 | - while (KeyboardState) {} | |
418 | - } | |
419 | - } | |
420 | - while ( (!(KeyboardState&MOVEMENT_FIRE)) && (!GameOver)); | |
421 | - | |
422 | - // Check the selected options | |
423 | - if (CurrentMenuAction==ACTION_GIVE_UP) | |
424 | - { | |
425 | - GameOver=GAMEOVER_GAVEUP; | |
426 | - } | |
427 | - else | |
428 | - if (CurrentMenuAction==ACTION_BUY_PASS) | |
429 | - { | |
430 | - BuyOsloPass(); | |
431 | - } | |
432 | - else | |
433 | - if (CurrentMenuAction==ACTION_DISCOVER) | |
434 | - { | |
435 | - VisitLocation(); | |
436 | - } | |
437 | - else | |
438 | - if (CurrentMenuAction==ACTION_LEAVE) | |
439 | - { | |
440 | - // We go to the location selection screen | |
441 | - return; | |
442 | - } | |
443 | - else | |
444 | - if (CurrentMenuAction==ACTION_AIRPORT) | |
445 | - { | |
446 | - // We go to the location selection screen | |
447 | - GameOver=GAMEOVER_VICTORY; | |
448 | - return; | |
449 | - } | |
450 | - | |
451 | - if (GameOver) | |
452 | - { | |
453 | - return; | |
454 | - } | |
455 | - } | |
456 | -} | |
457 | - | |
458 | - | |
459 | -void ShowTitleScreen() | |
460 | -{ | |
461 | - SwitchToHires(); | |
462 | - | |
463 | - LoadFileAt(LOADER_TITLE_SCREEN,BufferPicture1); | |
464 | - | |
465 | - InitTransitionDataBuffer1(); | |
466 | - PictureTransitionUnroll(); | |
467 | - | |
468 | - EraseBottomTextArea(); | |
469 | - | |
470 | - Pause(50); | |
471 | - | |
472 | - PrintMessagePtr=MessageCopyright; | |
473 | - PrintScreenPtr=(char*)0xbb80+40*26+2; | |
474 | - PrintSelectedText(); | |
475 | - | |
476 | - Pause(50*3); | |
477 | - | |
478 | - EraseBottomTextArea(); | |
479 | - | |
480 | - Pause(50); | |
481 | - | |
482 | - //EraseAllHires(); | |
483 | -} | |
484 | - | |
485 | - | |
486 | -void ShowAttractMode() | |
487 | -{ | |
488 | - ShowTitleScreen(); | |
489 | - | |
490 | - // | |
491 | - // Load all the pictures we need for the attract sequence | |
492 | - // | |
493 | -#ifdef ENABLE_GAMEJAM_LOGO | |
494 | - LoadFileAt(LOADER_GAMEJAM_LOGO,BufferPicture1); | |
495 | -#endif | |
496 | - | |
497 | -#ifdef ENABLE_STORY_PAGE | |
498 | - LoadFileAt(LOADER_HOW_TO_PLAY,BufferPicture4); | |
499 | -#endif | |
500 | - | |
501 | - // Erase the three bottom lines of text | |
502 | - EraseBottomTextArea(); | |
503 | - | |
504 | - // Anti bounce | |
505 | - while (KeyboardState & 16) {} | |
506 | - | |
507 | - // Print the 'PressFireToStart' message | |
508 | - strcpy((char*)0xbb80+40*26+9,MessagePressFireToStart); | |
509 | - strcpy((char*)0xbb80+40*27+9,MessagePressFireToStart); | |
510 | - | |
511 | - // Wait for the fire button to be pressed | |
512 | - //poke((char*)0xbb80+40*25,16+1); | |
513 | - KeyboardStateMemorized=0; | |
514 | - while (!(KeyboardStateMemorized & 16)) | |
515 | - { | |
516 | -#ifdef ENABLE_STORY_PAGE | |
517 | - if (!(KeyboardStateMemorized & 16)) ShowStoryPage(); | |
518 | -#endif | |
519 | - | |
520 | -#ifdef ENABLE_GAMEJAM_LOGO | |
521 | - if (!(KeyboardStateMemorized & 16)) ShowGameJamLogo(); | |
522 | -#endif | |
523 | - | |
524 | -#ifdef ENABLE_SHOW_HIGH_SCORES | |
525 | - // Show the high scores | |
526 | - if (!(KeyboardStateMemorized & 16)) ShowHighScoreTable(); | |
527 | -#endif | |
528 | - | |
529 | - | |
530 | -#ifdef ENABLE_SHOW_GAME_STORY | |
531 | - // Show the story of the game | |
532 | - if (!(KeyboardStateMemorized & 16)) ShowGameStory(); | |
533 | -#endif | |
534 | - } | |
535 | - EraseBottomTextArea(); | |
536 | - | |
537 | - // Anti bounce | |
538 | - //poke((char*)0xbb80+40*25,16+2); | |
539 | - while (KeyboardState & 16) {} | |
540 | -} | |
541 | - | |
542 | - | |
543 | -extern char MessageTotalScore[]; | |
544 | -extern char MessageScoreValue[]; | |
545 | - | |
546 | -void ShowTotalScore() | |
547 | -{ | |
548 | - EraseBottomTextArea(); | |
549 | - | |
550 | - ComputeScore(); | |
551 | - | |
552 | - Pause(50*3); | |
553 | -} | |
554 | - | |
555 | - | |
556 | -// Load some logos and stuff | |
557 | -void GameLoop() | |
558 | -{ | |
559 | - while (1) | |
560 | - { | |
561 | -#ifdef ENABLE_INTRO_SEQUENCE | |
562 | - ShowAttractMode(); | |
563 | -#endif | |
564 | - InitialiseGame(); | |
565 | - | |
566 | - while (!GameOver) | |
567 | - { | |
568 | - // Select the location | |
569 | - ChooseLocation(); | |
570 | - | |
571 | - if (!GameOver) | |
572 | - { | |
573 | - // Handle the location menus | |
574 | - ManageLocation(); | |
575 | - } | |
576 | - } | |
577 | - | |
578 | - // Let's say it's a game over man! | |
579 | - if (GameOver==GAMEOVER_GAVEUP) | |
580 | - { | |
581 | - LoaderApiEntryIndex=LOADER_ENDING_GIVEUP; | |
582 | - } | |
583 | - else | |
584 | - if (GameOver==GAMEOVER_NO_MORE_MONEY) | |
585 | - { | |
586 | - LoaderApiEntryIndex=LOADER_ENDING_OUT_OF_MONEY; | |
587 | - } | |
588 | - else | |
589 | - if (GameOver==GAMEOVER_TIME_UP) | |
590 | - { | |
591 | - LoaderApiEntryIndex=LOADER_ENDING_OUT_OF_TIME; | |
592 | - } | |
593 | - else | |
594 | - if (GameOver==GAMEOVER_VICTORY) | |
595 | - { | |
596 | - LoaderApiEntryIndex=LOADER_ENDING_VICTORY; | |
597 | - } | |
598 | - else | |
599 | - { | |
600 | - LoaderApiEntryIndex=LOADER_ENDING_GIVEUP; | |
601 | - } | |
602 | - LoadFileAt(LoaderApiEntryIndex,BufferPicture1); | |
603 | - | |
604 | - InitTransitionDataBuffer1(); | |
605 | - PictureTransitionUnroll(); | |
606 | - | |
607 | - EraseBottomTextArea(); | |
608 | - | |
609 | - ShowTotalScore(); | |
610 | - | |
611 | - | |
612 | - Pause(50*2); | |
613 | - | |
614 | - } | |
615 | -} | |
616 | - | |
617 | - | |
618 | -// | |
619 | -// Press START is shown in the three bottom lines of the screen | |
620 | -// | |
621 | -void ShowPressFireMessage() | |
622 | -{ | |
623 | - // Erase the three bottom lines of text | |
624 | - memset((unsigned char*)0xbb80+40*25,16+4,40*3); | |
625 | - | |
626 | - // Anti bounce | |
627 | - while (KeyboardState & 16) {} | |
628 | - | |
629 | - // Print the 'PressFireToStart' message | |
630 | - strcpy((char*)0xbb80+40*26+9,MessagePressFireToStart); | |
631 | - strcpy((char*)0xbb80+40*27+9,MessagePressFireToStart); | |
632 | - | |
633 | - // Wait for the fire button to be pressed | |
634 | - poke((char*)0xbb80+40*25,16+1); | |
635 | - while (!(KeyboardState & 16)) | |
636 | - { | |
637 | -#ifdef ENABLE_GAMEJAM_LOGO | |
638 | - ShowGameJamLogo(); | |
639 | -#endif | |
640 | - | |
641 | -#ifdef ENABLE_SHOW_HIGH_SCORES | |
642 | - // Show the high scores | |
643 | - ShowHighScoreTable(); | |
644 | -#endif | |
645 | - } | |
646 | - | |
647 | - // Anti bounce | |
648 | - poke((char*)0xbb80+40*25,16+2); | |
649 | - while (KeyboardState & 16) {} | |
650 | - | |
651 | - // Erase the three bottom lines of text | |
652 | - memset((unsigned char*)0xbb80+40*25,64,40*3); | |
653 | -} | |
654 | - | |
655 | - | |
656 | - | |
657 | - | |
658 | 20 | void main() |
659 | 21 | { |
660 | - // Clear the screen | |
661 | - IsHires=1; | |
662 | - memset((unsigned char*)0xa000,64,8000); | |
663 | - memset((unsigned char*)0xbb80+25*40,32,40*3); | |
664 | - | |
665 | 22 | // Install the IRQ handler |
666 | 23 | System_InstallIRQ_SimpleVbl(); |
667 | 24 | |
668 | - // Initialize stuff | |
669 | - InitializeTables(); | |
670 | - | |
671 | 25 | // Load the 6x8 font |
672 | 26 | LoadFileAt(LOADER_FONT_6x8,0x9900); |
27 | + LoadFileAt(LOADER_FONT_6x6,Font6x6); | |
28 | + PatchFont(); | |
673 | 29 | |
30 | + // Load the title picture | |
31 | + LoadFileAt(LOADER_GAMEJAM_LOGO,0xa000); | |
674 | 32 | |
675 | - GameLoop(); | |
676 | - | |
33 | + // Let's call the assembler game sequence... | |
34 | + GameStart(); | |
677 | 35 | } |
678 | 36 |
@@ -1,213 +1,399 @@ | ||
1 | 1 | |
2 | 2 | .zero |
3 | 3 | |
4 | -_PrintScreenPtr .dsb 2 ; Location of the place where we print the text | |
4 | +_PrintScreenX .dsb 1 | |
5 | +_PrintScreenColor .dsb 1 | |
6 | + | |
7 | +_PrintHiresX .dsb 1 | |
8 | +_PrintHiresColor .dsb 1 | |
9 | + | |
5 | 10 | _PrintMessagePtr .dsb 2 ; The address of the message to display |
6 | 11 | |
7 | 12 | .text |
8 | 13 | |
9 | -_MessagePressFireToStart | |
10 | - .byt 14,3,"Press Fire To Start",0 | |
14 | +_PrintSelectedText | |
15 | +.( | |
16 | + ldy #255 | |
17 | +loop_line | |
18 | + jsr _ScrollUpText | |
19 | + ldx _PrintScreenX | |
20 | + lda _PrintScreenColor | |
21 | + jmp printOut | |
22 | +loop_name | |
23 | + iny | |
24 | + lda (_PrintMessagePtr),y | |
25 | + beq end_name | |
26 | + cmp #13 | |
27 | + bne printOut | |
28 | + ; Carriage return | |
29 | + jmp loop_line | |
30 | +printOut | |
31 | + sta $BB80+40*27,x | |
11 | 32 | |
12 | -_MessageTodayBestScores | |
13 | - .byt 5,"Today's best scores",0 | |
33 | + inx | |
34 | + cpx #38 | |
35 | + bne loop_name | |
36 | + ldx #0 | |
37 | + jmp loop_line | |
38 | +end_name | |
39 | + stx _PrintScreenX | |
40 | + rts | |
41 | +.) | |
14 | 42 | |
15 | -_MessageGameStory | |
16 | - .byt 5,"The game story",0 | |
17 | 43 | |
18 | -_MessageGameMenu | |
19 | - .byt 5,"Game Menu",0 | |
44 | +#define SCROLLUP(ypos) lda $bb80+40*(ypos+1),x:sta $bb80+40*ypos,x | |
20 | 45 | |
21 | -_MessageCopyright .byt 2,96, " 1985 Mickael Pointier and Friends",0 | |
22 | 46 | |
23 | -_MessageCurrentLocation .byt 3,"Currently at:",6,0 | |
24 | -_MessageNextLocation .byt 3,"Now, go to:",6,0 | |
25 | -_MessageAlreadyVisited .byt " (Done)",0 | |
47 | +; 40*28=1120 bytes | |
48 | +_ScrollUpText | |
49 | + ;jmp _ScrollUpText | |
50 | +.( | |
51 | + pha | |
52 | + txa | |
53 | + pha | |
26 | 54 | |
27 | -_MessageVisitedPlaces .byt 2,"+200 per visited location",0 | |
28 | -_MessageRemainingMoney .byt 2,"+amount of money remaining",0 | |
55 | + ldx #0 | |
56 | +loop | |
57 | + SCROLLUP(25) | |
58 | + SCROLLUP(26) | |
29 | 59 | |
30 | -_MessageTime .byt " 00:00",0 | |
60 | + lda #32 | |
61 | + sta $bb80+40*27,x | |
62 | + inx | |
63 | + cpx #40 | |
64 | + beq end | |
65 | + jmp loop | |
66 | +end | |
67 | + pla | |
68 | + tax | |
69 | + pla | |
70 | + rts | |
71 | +.) | |
31 | 72 | |
32 | -_MessageMoney .byt "Money",0 | |
33 | -_MessageMoneyBalance .byt 2,"9999 nok",0 | |
73 | +_EraseTextArea | |
74 | +.( | |
75 | + ldx #0 | |
76 | +loop | |
77 | + lda #32 | |
78 | + sta $bb80+40*25,x | |
79 | + inx | |
80 | + cpx #40*3 | |
81 | + bne loop | |
82 | + rts | |
83 | +.) | |
34 | 84 | |
35 | -_MessageMood .byt "Mood",0 | |
36 | -_MessageMoodHappy .byt 2,"Happy",0 | |
37 | -_MessageMoodBored .byt 3,"Bored",0 | |
38 | -_MessageMoodAnnoyed .byt 1,"Annoyed",0 | |
85 | +; _Font6x6 | |
86 | +saveY .byt 0 | |
39 | 87 | |
40 | -_MessageEnergy .byt "Energy",0 | |
41 | -_MessageEnergyFresh .byt 2,"Fresh",0 | |
42 | -_MessageEnergyTired .byt 3,"Tired",0 | |
43 | -_MessageEnergyHungry .byt 3,"Hungry",0 | |
44 | -_MessageEnergyThirsty .byt 3,"Thirsty",0 | |
88 | +_PrintTextHiresNoScroll | |
89 | + ldy #255 | |
90 | + jmp do_print | |
45 | 91 | |
46 | -_MessageWhatDoWeDoNow1 .byt 3,"What Do",0 | |
47 | -_MessageWhatDoWeDoNow2 .byt 3," We Do",0 | |
48 | -_MessageWhatDoWeDoNow3 .byt 3," Now",0 | |
49 | -_MessageWhatDoWeDoNow4 .byt 3," ?",0 | |
92 | +_PrintTextHires | |
93 | +.( | |
94 | + ldy #255 | |
95 | +loop_line | |
96 | + jsr _ScrollUpHires | |
97 | ++do_print | |
98 | + ldx _PrintHiresX | |
99 | + lda _PrintHiresColor | |
100 | + jmp printOut | |
101 | +loop_name | |
102 | + iny | |
103 | + lda (_PrintMessagePtr),y | |
104 | + beq end_name | |
105 | + cmp #13 | |
106 | + bne printOut | |
107 | + ; Carriage return | |
108 | + jmp loop_line | |
109 | +printOut | |
110 | + sty saveY | |
111 | + tay | |
112 | + lda _Font6x6+256*0,y | |
113 | + sta $a000+40*6*32+40*0,x | |
50 | 114 | |
51 | -_MessageActionLeave .byt 5,"Leave",0 | |
52 | -_MessageActionDiscover .byt 5,"Visit",0 | |
53 | -_MessageActionEat .byt 5,"Eat",0 | |
54 | -_MessageActionDrink .byt 5,"Drink",0 | |
55 | -_MessageActionRest .byt 5,"Rest",0 | |
56 | -_MessageActionBuyPass .byt 5,"Buy Pass",0 | |
57 | -_MessageActionGoAirport .byt 5,"Airport",0 ; Not yet decided | |
58 | -_MessageActionGiveUp .byt 1,"Give Up",0 | |
115 | + lda _Font6x6+256*1,y | |
116 | + sta $a000+40*6*32+40*1,x | |
59 | 117 | |
60 | -_MessageTotalScore .byt 2,"Your final Score is:",0 | |
61 | -_MessageScoreValue .byt 1,"00000",0 ; 5 digits score | |
118 | + lda _Font6x6+256*2,y | |
119 | + sta $a000+40*6*32+40*2,x | |
62 | 120 | |
63 | -_ActionList_Low .byt <_MessageActionLeave,<_MessageActionDiscover,<_MessageActionEat,<_MessageActionDrink,<_MessageActionRest,<_MessageActionBuyPass,<_MessageActionGoAirport,<_MessageActionGiveUp | |
64 | -_ActionList_High .byt >_MessageActionLeave,>_MessageActionDiscover,>_MessageActionEat,>_MessageActionDrink,>_MessageActionRest,>_MessageActionBuyPass,>_MessageActionGoAirport,>_MessageActionGiveUp | |
121 | + lda _Font6x6+256*3,y | |
122 | + sta $a000+40*6*32+40*3,x | |
65 | 123 | |
124 | + lda _Font6x6+256*4,y | |
125 | + sta $a000+40*6*32+40*4,x | |
66 | 126 | |
127 | + lda _Font6x6+256*5,y | |
128 | + sta $a000+40*6*32+40*5,x | |
67 | 129 | |
68 | -#define METADATA_STORAGE | |
69 | -#include "floppy_description.h" | |
70 | -#undef METADATA_STORAGE | |
130 | + ldy saveY | |
71 | 131 | |
132 | + inx | |
133 | + cpx #40 | |
134 | + bne loop_name | |
135 | + ldx #0 | |
136 | + jmp loop_line | |
137 | +end_name | |
138 | + stx _PrintHiresX | |
139 | + rts | |
140 | +.) | |
72 | 141 | |
73 | -; Initialise the file number with _LoaderApiEntryIndex | |
74 | -; Initialise the location where to print in _PrintScreenPtr | |
75 | 142 | |
76 | -_PrintLocationText | |
143 | + | |
144 | +_PatchFont | |
77 | 145 | .( |
78 | - ; Start by creating the description in the buffer | |
79 | - ldy _LoaderApiEntryIndex | |
80 | - lda _MetaData_name_Low,y | |
81 | - sta _PrintMessagePtr+0 | |
82 | - lda _MetaData_name_High,y | |
83 | - sta _PrintMessagePtr+1 | |
84 | - jmp _PrintSelectedText | |
146 | + ldx #0 | |
147 | +loop_code | |
148 | + txa | |
149 | + sta _Font6x6+256*0,x | |
150 | + sta _Font6x6+256*1,x | |
151 | + sta _Font6x6+256*2,x | |
152 | + sta _Font6x6+256*3,x | |
153 | + sta _Font6x6+256*4,x | |
154 | + sta _Font6x6+256*5,x | |
155 | + inx | |
156 | + cpx #32 | |
157 | + bne loop_code | |
158 | + rts | |
85 | 159 | .) |
86 | 160 | |
87 | -_PrintText | |
161 | +; 40*28=1120 bytes | |
162 | +; We scroll the hires screen by 6 scanlines | |
163 | + | |
164 | +_ScrollUpHires | |
165 | + ;jmp _ScrollUpHires | |
88 | 166 | .( |
89 | - ; Start by creating the description in the buffer | |
90 | - ldy _LoaderApiEntryIndex | |
91 | - lda _MetaData_description_Low,y | |
92 | - sta _PrintMessagePtr+0 | |
93 | - lda _MetaData_description_High,y | |
94 | - sta _PrintMessagePtr+1 | |
95 | -.) | |
96 | -_PrintSelectedText | |
97 | -.( | |
167 | + pha | |
168 | + txa | |
169 | + pha | |
170 | + tya | |
171 | + pha | |
172 | + | |
173 | + lda #<$a000 | |
174 | + sta tmp1+0 | |
175 | + lda #>$a000 | |
176 | + sta tmp1+1 | |
177 | + | |
178 | + lda #<$a000+40*6 | |
179 | + sta tmp2+0 | |
180 | + lda #>$a000+40*6 | |
181 | + sta tmp2+1 | |
182 | + | |
183 | + ldx #32 ; 33*6=198 | |
184 | +loop_y | |
98 | 185 | ldy #0 |
99 | - ldx #0 | |
100 | -loop_name | |
101 | - lda (_PrintMessagePtr),y | |
102 | - beq end_name | |
103 | - sta (_PrintScreenPtr),y | |
104 | - ;iny | |
186 | +loop_x | |
187 | + lda (tmp2),y | |
188 | + sta (tmp1),y | |
189 | + iny | |
190 | + cpy #240 | |
191 | + bne loop_x | |
105 | 192 | |
106 | - .( | |
107 | - inc _PrintMessagePtr+0 | |
108 | - bne skip | |
109 | - inc _PrintMessagePtr+1 | |
110 | -skip | |
111 | - .) | |
193 | + jsr Add240Tmp1 | |
194 | + jsr Add240Tmp2 | |
112 | 195 | |
113 | - clc | |
114 | - lda _PrintScreenPtr+0 | |
115 | - adc #1 | |
116 | - sta _PrintScreenPtr+0 | |
117 | - lda _PrintScreenPtr+1 | |
118 | - adc #0 | |
119 | - sta _PrintScreenPtr+1 | |
196 | + dex | |
197 | + bne loop_y | |
120 | 198 | |
121 | - inx | |
122 | - bne loop_name | |
123 | -end_name | |
199 | + ; Clean the last line | |
200 | + ldy #0 | |
201 | +loop_x_clean | |
202 | + lda #64 | |
203 | + sta (tmp1),y | |
204 | + iny | |
205 | + cpy #40*6 | |
206 | + bne loop_x_clean | |
207 | + | |
208 | + pla | |
209 | + tay | |
210 | + pla | |
211 | + tax | |
212 | + pla | |
213 | +;bla jmp bla | |
124 | 214 | rts |
125 | 215 | .) |
126 | 216 | |
127 | -; Same thing, but in HIRES mode instead of TEXT | |
128 | -_PrintHires | |
129 | -.( | |
130 | - ; Start by creating the description in the buffer | |
131 | - ldy _LoaderApiEntryIndex | |
132 | - lda _MetaData_name_Low,y | |
133 | - sta _PrintMessagePtr+0 | |
134 | - lda _MetaData_name_High,y | |
135 | - sta _PrintMessagePtr+1 | |
136 | 217 | |
137 | -+_PrintHiresInternal | |
138 | - ldx #0 | |
139 | -loop_name | |
140 | - ldy #0 | |
141 | - lda (_PrintMessagePtr),y | |
142 | - beq end_name | |
218 | +; Let's have the messages of the game: | |
143 | 219 | |
144 | - sta tmp1+0 | |
145 | - lda #0 | |
146 | - sta tmp1+1 | |
220 | +; Days of the week | |
221 | +_MessageMonday .byt 3,16+1,"A new monday starts...",16+0,13,13,0 | |
222 | +_MessageTuesday .byt 3,16+1,"A new tuesday starts...",16+0,13,13,0 | |
223 | +_MessageWednesday .byt 3,16+1,"A new wednesday starts...",16+0,13,13,0 | |
224 | +_MessageThursday .byt 3,16+1,"A new thursday starts...",16+0,13,13,0 | |
225 | +_MessageFriday .byt 3,16+1,"A new friday starts...",16+0,13,13,0 | |
226 | +_MessageSaturday .byt 3,16+1,"A new saturday starts...",16+0,13,13,0 | |
227 | +_MessageSunday .byt 3,16+1,"A new sunday starts...",16+0,13,13,0 | |
147 | 228 | |
148 | - asl tmp1+0 ; x2 | |
149 | - rol tmp1+1 | |
229 | +; The description messages | |
230 | +_MessageNewDayStarts | |
231 | + .byt 7,"It's still dark outside.",13 | |
232 | + .byt 7,"A normal winter day in Oslo.",13,13 | |
233 | + .byt 1,"The alarm clock beeps...",13 | |
234 | + .byt 0 | |
150 | 235 | |
151 | - asl tmp1+0 ; x4 | |
152 | - rol tmp1+1 | |
236 | +_MessageSaturdaySummary | |
237 | + .byt 7,"It's still dark outside.",13 | |
238 | + .byt 7,"A normal winter day in Oslo.",13,13 | |
239 | + .byt 7,"But today is Saturday, so I don't have" | |
240 | + .byt 7,"to go to work.",13,13 | |
241 | + .byt 7,"There are still some rituals to",13 | |
242 | + .byt 7,"perform, such as go shopping and",13 | |
243 | + .byt 7,"cleaning, but I will spare you these.",13 | |
244 | + .byt 0 | |
153 | 245 | |
154 | - asl tmp1+0 ; x8 | |
155 | - rol tmp1+1 | |
246 | +_MessageSundaySummary | |
247 | + .byt 7,"It's still dark outside.",13 | |
248 | + .byt 7,"A normal winter day in Oslo.",13,13 | |
249 | + .byt 7,"But today is Sunday, so I don't have",13 | |
250 | + .byt 7,"to go to work.",13,13 | |
251 | + .byt 7,"I guess the only Sunday's ritual I can" | |
252 | + .byt 7,"think of is to not do much at all and",13 | |
253 | + .byt 7,"just enjoy the day.",13 | |
254 | + .byt 0 | |
156 | 255 | |
157 | - clc | |
158 | - lda tmp1+0 | |
159 | - adc #<$9800 | |
160 | - sta tmp1+0 | |
256 | +_MessageWokenUp | |
257 | + .byt 13,7,"I slowly get out of the bed.",13,13 | |
258 | + .byt 7,"A bit of stretching helps the old",13 | |
259 | + .byt 7,"carcass prepare for the day ahead.",13,13 | |
260 | + .byt 7,"I need to get ready for work.",13 | |
261 | + .byt 0 | |
161 | 262 | |
162 | - lda tmp1+1 | |
163 | - adc #>$9800 | |
164 | - sta tmp1+1 | |
263 | +_MessageClean | |
264 | + .byt 13,7,"Nice shower is nice.",13,13 | |
265 | + .byt 7,"I put my clothes and leave.",13,13 | |
266 | + .byt 7,"I will take my breakfast at work.",13 | |
267 | + .byt 0 | |
165 | 268 | |
166 | - clc | |
167 | - lda _PrintScreenPtr+0 | |
168 | - sta tmp2+0 | |
169 | - adc #1 | |
170 | - sta _PrintScreenPtr+0 | |
171 | - lda _PrintScreenPtr+1 | |
172 | - sta tmp2+1 | |
173 | - adc #0 | |
174 | - sta _PrintScreenPtr+1 | |
269 | +_MessageMetroSitting | |
270 | + .byt 13,7,"The tbane arrives.",13,13 | |
271 | + .byt 7,"I like to optimize everything I do:",13 | |
272 | + .byt 7,"If you board the right car you can",13 | |
273 | + .byt 7,"exit faster which helps catching the",13 | |
274 | + .byt 7,"next transport!",13 | |
275 | + .byt 0 | |
175 | 276 | |
176 | - ldx #8 | |
177 | - ldy #0 | |
178 | -loop | |
179 | - lda (tmp1),y | |
180 | - sta (tmp2),y | |
277 | +_MessageWhichBus | |
278 | + .byt 13,7,"I spend the next 20 minutes reading on" | |
279 | + .byt 7,"my ebook reader while listening epic",13 | |
280 | + .byt 7,"music on my mobile phone.",13,13 | |
281 | + .byt 7,"When the metro arrives at Stortinget I" | |
282 | + .byt 7,"move to the last door of the car and",13 | |
283 | + .byt 7,"briskly walk toward the town hall as",13 | |
284 | + .byt 7,"soon as the doors open.",13 | |
285 | + .byt 0 | |
181 | 286 | |
182 | - .( | |
183 | - inc tmp1+0 | |
184 | - bne skip | |
185 | - inc tmp1+1 | |
186 | -skip | |
187 | - .) | |
287 | +_MessageOffice | |
288 | + .byt 13,7,"The bus to Skoyen is not that fast",13 | |
289 | + .byt 7,"during rush hours, but after a while",13 | |
290 | + .byt 7,"I'm finally at the Maritim bus stop.",13,13 | |
291 | + .byt 7,"Few hundred meters walking and I'm in",13 | |
292 | + .byt 7,"the office ready for new challenges.",13 | |
293 | + .byt 0 | |
188 | 294 | |
189 | - .( | |
190 | - clc | |
191 | - lda tmp2+0 | |
192 | - adc #40 | |
193 | - sta tmp2+0 | |
194 | - bcc skip | |
195 | - inc tmp2+1 | |
196 | -skip | |
197 | - .) | |
295 | +_MessageOfficeDone | |
296 | + .byt 13,7,"It's another long day spent coding, ",13 | |
297 | + .byt 7,"designing, debugging, helping and ",13 | |
298 | + .byt 7,"discussing with colleagues.",13,13 | |
299 | + .byt 7,"I finally call it a day and leave.",13 | |
300 | + .byt 0 | |
198 | 301 | |
199 | - dex | |
200 | - bne loop | |
201 | - | |
202 | - .( | |
203 | - inc _PrintMessagePtr+0 | |
204 | - bne skip | |
205 | - inc _PrintMessagePtr+1 | |
206 | -skip | |
207 | - .) | |
302 | +_MessageHomeOfficeDone | |
303 | + .byt 13,7,"I start the VPN and connect to my work" | |
304 | + .byt 7,"computer.",13,13 | |
305 | + .byt 7,"It's another long day spent coding, ",13 | |
306 | + .byt 7,"designing, debugging, helping and ",13 | |
307 | + .byt 7,"discussing with colleagues on Skype.",13,13 | |
308 | + .byt 7,"I finally call it a day and disconnect.",13 | |
309 | + .byt 0 | |
208 | 310 | |
209 | - jmp loop_name | |
210 | -end_name | |
211 | - rts | |
212 | -.) | |
311 | +_MessageAtHome | |
312 | + .byt 13,7,"I'm finally home, tired and hungry",13 | |
313 | + .byt 0 | |
213 | 314 | |
315 | +_MessageFeelingBetter | |
316 | + .byt 13,7,"I call that a 'Powernap', it's a great" | |
317 | + .byt 7,"way to recharge the batteries.",13,13 | |
318 | + .byt 7,"I'm now ready for the evening rituals.",13 | |
319 | + .byt 0 | |
320 | + | |
321 | +_MessageEveningRituals | |
322 | + .byt 13,7,"My girlfriend and I like to watch",13 | |
323 | + .byt 7,"series together while having dinner.",13,13 | |
324 | + .byt 7,"After that I spend some time on my",13 | |
325 | + .byt 7,"computer.",13 | |
326 | + .byt 0 | |
327 | + | |
328 | +_MessageBedTime | |
329 | + .byt 13,7,"I spend few hours on the computer.",13,13 | |
330 | + .byt 7,"It's now late, so...",13 | |
331 | + .byt 7,"...time to go to bed!!!",13,13 | |
332 | + .byt 7,"Let's have a good night sleep.",13 | |
333 | + .byt 0 | |
334 | + | |
335 | +; What would I do | |
336 | +_MessagePlayerChoice .byt 1,12,16+7,"What would Mickael do? ",16+0,0 | |
337 | + | |
338 | +_MessageBadChoice | |
339 | + .byt 13,5,"That was not very logical!",13 | |
340 | + .byt 5,"I'm probably still sleeping...",13 | |
341 | + .byt 5,"Another weird dream???",13,13,13 | |
342 | + .byt 0 | |
343 | + | |
344 | +; Actions | |
345 | +_MessageSnooze .byt 2,"I hit the snooze button",0 | |
346 | +_MessageLeaveTheBed .byt 2,"I leave the bed",0 | |
347 | +_MessageCallSick .byt 2,"I call work and say I'm sick",0 | |
348 | +_MessageTakeShower .byt 2,"I jump into the shower",0 | |
349 | +_MessageHaveBreakfast .byt 2,"I get my breakfast",0 | |
350 | +_MessageSwitchOnComputer .byt 2,"I switch on my computer",0 | |
351 | +_MessageTakeTheMetro .byt 2,"I go to the metro station",0 | |
352 | +_MessageWalkToTheOffice .byt 2,"I walk to the office",0 | |
353 | +_MessageTakeTheCar .byt 2,"I take the car",0 | |
354 | +_MessageSitFront .byt 2,"I sit in the front",0 | |
355 | +_MessageSitMiddle .byt 2,"I sit in the middle",0 | |
356 | +_MessageSitBack .byt 2,"I sit in the back",0 | |
357 | +_MessageTramway .byt 2,"I take the tramway",0 | |
358 | +_MessageBus31 .byt 2,"I take the bus 31, 31E or 32",0 | |
359 | +_MessageBus36 .byt 2,"I take the bus 36E, 70 or 74",0 | |
360 | +_MessageMailAndBreakfast .byt 2,"I read mails and eat breakfast",0 | |
361 | +_MessageBreakTheBuild .byt 2,"I break the build",0 | |
362 | +_MessagePranks .byt 2,"I prank some colleagues",0 | |
363 | +_MessagePartyTime .byt 2,"I go to a party",0 | |
364 | +_MessageGoHome .byt 2,"I go home",0 | |
365 | +_MessageOvertime .byt 2,"I do some overtime",0 | |
366 | +_MessagePizza .byt 2,"I order some food",0 | |
367 | +_MessageComputerTime .byt 2,"I spend time on the computer",0 | |
368 | +_MessageNapTime .byt 2,"I take a 20 minutes nap",0 | |
369 | +_MessageTvDinner .byt 2,"I watch some series while eating",0 | |
370 | +_MessageInstagram .byt 2,"I post photos of my dinner",0 | |
371 | +_MessageCallMyParents .byt 2,"I call my parents",0 | |
372 | + | |
373 | +_MessageComputerDefenceForce .byt 2,"I do some defence force stuff",0 | |
374 | +_MessageComputerSocial .byt 2,"I browse 9gag, 4chan and reddit",0 | |
375 | +_MessageComputerMMO .byt 2,"I log on my favorite MMO",0 | |
376 | + | |
377 | +; Actions error explanations | |
378 | +_MessageSnoozeError .byt 13,5,"I never use the snooze button",0 | |
379 | +_MessageCallSickError .byt 13,5,"Seriously, how lame is that!",0 | |
380 | +_MessageHaveBreakfastError .byt 13,5,"I usually take my breakfast at work",0 | |
381 | +_MessageSwitchOnComputerError .byt 13,5,"I can check my mail at work while",13,5,"I'm eating my breakfast",0 | |
382 | +_MessageTakeTheCarError .byt 13,5,"I really love the Feltvogn but",13,5,"that's not for the daily commute.",0 | |
383 | +_MessageWalkToTheOfficeError .byt 13,5,"I would love to walk to the office",13,5,"but it's wayyyy to far.",0 | |
384 | +_MessageSitError .byt 13,5,"That's not optimal if you leave",13,5,"at the National Theater stop!",0 | |
385 | +_MessageBus36Error .byt 13,5,"The bus 36E does not stop at Maritim",0 | |
386 | +_MessageTramwayError .byt 13,5,"The tramway does not go where I need",0 | |
387 | +_MessageBreakTheBuildErrors .byt 13,5,"I would not do that on purpose",0 | |
388 | +_MessagePranksErrors .byt 13,5,"That's not funny",0 | |
389 | +_MessagePartyTimeErrors .byt 13,5,"Unfortunately I'm not 25 anymore",0 | |
390 | +_MessageOvertimeErrors .byt 13,5,"That would be exceptional",0 | |
391 | +_MessageComputerTimeError .byt 13,5,"I will do that later",0 | |
392 | +_MessagePizzaErrors .byt 13,5,"Only on weekend ;)",0 | |
393 | +_MessageInstagramError .byt 13,5,"I don't own a smartphone",0 | |
394 | +_MessageCallMyParentsErrors .byt 13,5,"I should probably do that",0 | |
395 | +_MessageShowerError .byt 13,5,"When I work from home I switch on the",13,5,"computer before taking my shower.",0 | |
396 | +_MessageHomeBreakfastError .byt 13,5,"When I work from home I switch on the",13,5,"computer before eating breakfast.",0 | |
397 | +_MessageComputerSocialError .byt 13,5,"If you want to find time to do stuff,",13,5,"you should really avoid these sites.",0 | |
398 | +_MessageComputerMMOError .byt 13,5,"I really tried hard to like MMOs, but",13,5,"ultimately I found them very boring.",0 | |
399 | + |
@@ -5,5 +5,5 @@ | ||
5 | 5 | :: |
6 | 6 | SET OSDKADDR=$c000 |
7 | 7 | SET OSDKNAME=game |
8 | -SET OSDKFILE=main utilities irq loader_api screen digiplayer transitions messages buffers | |
8 | +SET OSDKFILE=main game utilities irq loader_api messages buffers | |
9 | 9 | SET OSDKDISK= |
@@ -27,3 +27,43 @@ | ||
27 | 27 | rts |
28 | 28 | .) |
29 | 29 | |
30 | +Add240Tmp1 | |
31 | +.( | |
32 | + clc | |
33 | + lda tmp1 | |
34 | + adc #240 | |
35 | + sta tmp1 | |
36 | + bcc skip_dst | |
37 | + inc tmp1+1 | |
38 | +skip_dst | |
39 | + rts | |
40 | +.) | |
41 | + | |
42 | + | |
43 | + | |
44 | +Add240Tmp2 | |
45 | +.( | |
46 | + clc | |
47 | + lda tmp2 | |
48 | + adc #240 | |
49 | + sta tmp2 | |
50 | + bcc skip_dst | |
51 | + inc tmp2+1 | |
52 | +skip_dst | |
53 | + rts | |
54 | +.) | |
55 | + | |
56 | + | |
57 | + | |
58 | +Add40Tmp2 | |
59 | +.( | |
60 | + clc | |
61 | + lda tmp2 | |
62 | + adc #40 | |
63 | + sta tmp2 | |
64 | + bcc skip_dst | |
65 | + inc tmp2+1 | |
66 | +skip_dst | |
67 | + rts | |
68 | +.) | |
69 | + |
@@ -18,7 +18,7 @@ | ||
18 | 18 | CALL osdk_config.bat |
19 | 19 | |
20 | 20 | :: Delete the floppy, just to be sure |
21 | -del build\GlobalGameJam2015.dsk | |
21 | +del build\GlobalGameJam2016.dsk | |
22 | 22 | |
23 | 23 | :: Create the folders we need |
24 | 24 | md build |
@@ -4,7 +4,7 @@ | ||
4 | 4 | :: Set the build paremeters |
5 | 5 | :: |
6 | 6 | SET OSDKADDR=$400 |
7 | -SET OSDKNAME=GlobalGameJam2015 | |
7 | +SET OSDKNAME=GlobalGameJam2016 | |
8 | 8 | SET OSDKFILE= |
9 | 9 | SET OSDKDISK=%OSDKNAME%.dsk |
10 | 10 |
@@ -10,67 +10,18 @@ | ||
10 | 10 | :: Build data for the game |
11 | 11 | :: |
12 | 12 | SET PICTCONV=%OSDK%\Bin\PictConv.exe |
13 | -SET SAMPLETWEAKER=%OSDK%\Bin\SampleTweaker.exe | |
14 | 13 | |
15 | 14 | :: Pictures |
16 | 15 | SET PARAMS=-f1 -d0 -o2 -u1 -t1 |
17 | 16 | |
18 | -::%PICTCONV% %PARAMS% data\logo_fire.png build\files\logo_fire.hir | |
19 | - | |
20 | 17 | :: Color pictures |
21 | 18 | %PICTCONV% %PARAMS% data\title_screen.png build\files\title_screen.hir |
22 | -%PICTCONV% %PARAMS% data\how_to_play.png build\files\how_to_play.hir | |
23 | 19 | %PICTCONV% %PARAMS% data\GlobalGameJamOslo.png build\files\GlobalGameJamOslo.hir |
24 | 20 | |
25 | -:: Failures | |
26 | -%PICTCONV% %PARAMS% data\ending_giveup.png build\files\ending_giveup.hir | |
27 | -%PICTCONV% %PARAMS% data\ending_out_of_money.png build\files\ending_out_of_money.hir | |
28 | -%PICTCONV% %PARAMS% data\ending_out_of_time.png build\files\ending_out_of_time.hir | |
29 | - | |
30 | -:: Victory | |
31 | -%PICTCONV% %PARAMS% data\ending_victory.png build\files\ending_victory.hir | |
32 | - | |
33 | - | |
34 | - | |
35 | - | |
36 | 21 | :: Monochrome pictures |
37 | -%PICTCONV% -f0 -f0 -o2 data\funcom_logo_240x200.png build\files\funcom_logo_240x200.hir | |
38 | -%PICTCONV% -f0 -f0 -o2 data\valp_outline.png build\files\valp_outline.hir | |
39 | -%PICTCONV% -f0 -f0 -o2 data\oslo_map.png build\files\oslo_map.hir | |
40 | - | |
41 | -:: Locations | |
42 | -%PICTCONV% -f0 -f0 -o2 data\location_vigeland.png build\files\location_vigeland.hir | |
43 | -%PICTCONV% -f0 -f0 -o2 data\location_opera.png build\files\location_opera.hir | |
44 | -%PICTCONV% -f0 -f0 -o2 data\location_holmenkolen.png build\files\location_holmenkolen.hir | |
45 | -%PICTCONV% -f0 -f0 -o2 data\location_jernbanetorget.png build\files\location_jernbanetorget.hir | |
46 | -%PICTCONV% -f0 -f0 -o2 data\location_akerbrygge.png build\files\location_akerbrygge.hir | |
47 | -%PICTCONV% -f0 -f0 -o2 data\location_kingscastle.png build\files\location_kingscastle.hir | |
48 | -%PICTCONV% -f0 -f0 -o2 data\location_sognsvann.png build\files\location_sognsvann.hir | |
49 | -%PICTCONV% -f0 -f0 -o2 data\location_vikingship_museum.png build\files\location_vikingship_museum.hir | |
50 | -%PICTCONV% -f0 -f0 -o2 data\location_munch_museum.png build\files\location_munch_museum.hir | |
51 | -%PICTCONV% -f0 -f0 -o2 data\location_ibsen_museum.png build\files\location_ibsen_museum.hir | |
52 | -%PICTCONV% -f0 -f0 -o2 data\location_norwegian_folk_museum.png build\files\location_norwegian_folk_museum.hir | |
53 | -%PICTCONV% -f0 -f0 -o2 data\location_kon_tiki_museum.png build\files\location_kon_tiki_museum.hir | |
54 | -%PICTCONV% -f0 -f0 -o2 data\location_akershus_fortress.png build\files\location_akershus_fortress.hir | |
55 | -%PICTCONV% -f0 -f0 -o2 data\location_national_gallery.png build\files\location_national_gallery.hir | |
56 | -%PICTCONV% -f0 -f0 -o2 data\location_natural_history_museum.png build\files\location_natural_history_museum.hir | |
57 | - | |
58 | 22 | %PICTCONV% -f0 -f0 -o2 data\Font6x8.png build\files\Font6x8.hir |
59 | 23 | %PICTCONV% -f0 -f0 -o2 data\Font6x6.png build\files\Font6x6.hir |
60 | 24 | |
61 | -:: Sample | |
62 | - | |
63 | -%SAMPLETWEAKER% data\Funcom-mono-8.raw build\files\FuncomJingle.raw | |
64 | -::%OSDK%\bin\Bin2Txt -s1 -f2 build\sample.raw sample.s _FuncomJingle | |
65 | -::echo _FuncomJingleEnd >> sample.s | |
66 | - | |
67 | - | |
68 | -:: YM Musics | |
69 | -SET YM2MYM=%osdk%\Bin\ym2mym.exe -m15360 | |
70 | -SET PARAMS=-f2 -h1 -s1 | |
71 | - | |
72 | -%YM2MYM% "data\Decade Reset.ym" build\files\DecadeReset.ym | |
73 | - | |
74 | 25 | ::pause |
75 | 26 | |
76 | 27 |