diff --git a/games/riven_hgr/Makefile b/games/riven_hgr/Makefile index f7e042f1..cc655c36 100644 --- a/games/riven_hgr/Makefile +++ b/games/riven_hgr/Makefile @@ -7,7 +7,7 @@ EMPTY_DISK = ../../empty_disk/ LINKER_SCRIPTS = ../../linker_scripts/ -all: riven_disk39.dsk riven_disk43.dsk +all: riven_disk39.dsk riven_disk40.dsk riven_disk43.dsk riven_disk39.dsk: QBOOT QLOAD_39 TITLE_39 \ disk39_files/LEVEL_MAGSTEPS \ @@ -29,6 +29,16 @@ riven_disk39.dsk: QBOOT QLOAD_39 TITLE_39 \ $(DOS33_RAW) riven_disk39.dsk 25 0 disk39_files/MOVIE_MAGLEV_FLIP 0 0 $(DOS33_RAW) riven_disk39.dsk 27 0 disk39_files/MOVIE_MAGLEV_RIDE 0 0 +riven_disk40.dsk: QBOOT QLOAD_40 TITLE_40 \ + disk40_files/LEVEL_MAGLEV + cp $(EMPTY_DISK)/empty.dsk riven_disk40.dsk + $(DOS33_RAW) riven_disk40.dsk 0 0 QBOOT 0 1 + $(DOS33_RAW) riven_disk40.dsk 0 2 QBOOT 1 1 + $(DOS33_RAW) riven_disk40.dsk 0 4 QBOOT 2 1 + $(DOS33_RAW) riven_disk40.dsk 1 0 QLOAD_40 0 0 + $(DOS33_RAW) riven_disk40.dsk 1 8 TITLE_40 0 0 + $(DOS33_RAW) riven_disk40.dsk 2 0 disk40_files/LEVEL_MAGLEV 0 0 + riven_disk43.dsk: QBOOT QLOAD_43 TITLE_43 \ disk43_files/LEVEL_CART cp $(EMPTY_DISK)/empty.dsk riven_disk43.dsk @@ -62,6 +72,22 @@ qload_39.o: qload.s qboot.inc \ keyboard.s ca65 -o qload_39.o qload.s -DDISK=39 -l qload_39.lst +### + +QLOAD_40: qload_40.o + ld65 -o QLOAD_40 qload_40.o -C $(LINKER_SCRIPTS)/apple2_1800.inc + +qload_40.o: qload.s qboot.inc \ + zx02_optim.s wait.s \ + draw_pointer.s log_table.s \ + disk40_files/disk40_qload.inc \ + disk40_files/disk40_defines.inc \ + graphics_sprites/pointer_sprites.inc \ + hgr_14x14_sprite.s \ + keyboard.s + ca65 -o qload_40.o qload.s -DDISK=40 -l qload_40.lst + + #### QLOAD_43: qload_43.o @@ -90,6 +116,18 @@ title_39.o: title.s zp.inc hardware.inc \ #### +TITLE_40: title_40.o + ld65 -o TITLE_40 title_40.o -C $(LINKER_SCRIPTS)/apple2_4000.inc + +title_40.o: title.s zp.inc hardware.inc \ + qload.inc wait_a_bit.s \ + hgr_tables.s \ + graphics_title/riven_title.hgr.zx02 + ca65 -o title_40.o title.s -DDISK=40 -l title_40.lst + + +#### + TITLE_43: title_43.o ld65 -o TITLE_43 title_43.o -C $(LINKER_SCRIPTS)/apple2_4000.inc @@ -122,6 +160,11 @@ disk39_files/MOVIE_MAGLEV_RIDE: #### +disk40_files/LEVEL_MAGLEV: + cd disk40_files && make + +#### + disk43_files/LEVEL_CART: cd disk43_files && make @@ -137,16 +180,22 @@ graphics_title/riven_title.hgr.zx02: #### clean: - rm -f *~ *.o *.lst QLOAD QBOOT TITLE + rm -f *~ *.o *.lst QLOAD \ + QBOOT_39 QBOOT_40 QBOOT_43 \ + TITLE_39 TITLE_40 TITLE_43 cd disk39_files && make clean + cd disk40_files && make clean cd disk43_files && make clean #### distclean: - rm -f *~ *.o *.lst QLOAD QBOOT TITLE + rm -f *~ *.o *.lst QLOAD \ + QBOOT_39 QBOOT_40 QBOOT_43 \ + TITLE_39 TITLE_40 TITLE_43 cd graphics_title && make clean cd graphics_sprites && make clean cd disk39_files && make distclean + cd disk40_files && make distclean cd disk43_files && make distclean diff --git a/games/riven_hgr/NOTES b/games/riven_hgr/NOTES index 74bb7f2c..a9dd1357 100644 --- a/games/riven_hgr/NOTES +++ b/games/riven_hgr/NOTES @@ -51,8 +51,27 @@ T 2 = PROJECTOR 26736 bytes 112S = 7T0S (28672) 2k free T 9 = OUTSIDE 29355 bytes 128S = 8T0S (32768) 3k free T 17 = MAGSTEPS 11537 bytes 64S = 4T0S (16384) 5k free T 21 = MAGLEV 13862 bytes 64S = 4T0S (16384) 3k free -T 25 = MOVIE1 7680 bytes 32S = 2T0S (8192) 500B free -T 27 = MOVIE2 32275 bytes 128S = 8T0S (32768)500B free +T 25 = MOVIE_FLIP 7680 bytes 32S = 2T0S (8192) 500B free +T 27 = MOVIE_MAG 32275 bytes 128S = 8T0S (32768)500B free + +Disk40 Map (disk has 35 tracks, each 4k in size) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +T 0 = Qboot +T 1 = QLOAD 1762 bytes 8S = 0T8S (2048) 300B free +T 1.5 = TITLE 1531 bytes 8S = 0T8S (2048) 500B free +T 2 = STATION 26736 bytes 112S = 7T0S (28672) 2k free +T 25 = MOVIE_FLIP 7680 bytes 32S = 2T0S (8192) 500B free +T 27 = MOVIE_MAG 32275 bytes 128S = 8T0S (32768)500B free + + +Disk43 Map (disk has 35 tracks, each 4k in size) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +T 0 = Qboot +T 1 = QLOAD 1762 bytes 8S = 0T8S (2048) 300B free +T 1.5 = TITLE 1531 bytes 8S = 0T8S (2048) 500B free +T 2 = CART 26736 bytes 112S = 7T0S (28672) 2k free +T 27 = MOVIE_CART32275 bytes 128S = 8T0S (32768)500B free + diff --git a/games/riven_hgr/disk39_files/end_message/Makefile b/games/riven_hgr/disk39_files/end_message/Makefile index dc8a2d73..c096f3b4 100644 --- a/games/riven_hgr/disk39_files/end_message/Makefile +++ b/games/riven_hgr/disk39_files/end_message/Makefile @@ -1,7 +1,7 @@ -include ../../../Makefile.inc +include ../../../../Makefile.inc ZX02 = ~/research/6502_compression/zx02.git/build/zx02 -PNG2GR = ../../../utils/gr-utils/png2gr +PNG2GR = ../../../../utils/gr-utils/png2gr all: end_message.gr.zx02 diff --git a/games/riven_hgr/disk40_files/Makefile b/games/riven_hgr/disk40_files/Makefile new file mode 100644 index 00000000..e539580a --- /dev/null +++ b/games/riven_hgr/disk40_files/Makefile @@ -0,0 +1,105 @@ +include ../../../Makefile.inc + +LINKER_SCRIPTS = ../../../linker_scripts/ + + +all: LEVEL_MAGLEV + +#### + +LEVEL_MAGLEV: level_maglev.o + ld65 -o LEVEL_MAGLEV level_maglev.o -C $(LINKER_SCRIPTS)/apple2_4000.inc + +level_maglev.o: level_maglev.s \ + ../zp.inc ../hardware.inc ../qload.inc \ + ../common_defines.inc disk40_defines.inc \ + leveldata_maglev.inc \ + graphics_maglev/maglev_graphics.inc + ca65 -o level_maglev.o level_maglev.s -l level_maglev.lst + +#### + +LEVEL_PROJECTOR: level_projector.o + ld65 -o LEVEL_PROJECTOR level_projector.o -C $(LINKER_SCRIPTS)/apple2_4000.inc + +level_projector.o: level_projector.s \ + ../zp.inc ../hardware.inc ../qload.inc \ + ../common_defines.inc disk40_defines.inc \ + leveldata_projector.inc \ + graphics_projector/projector_graphics.inc + ca65 -o level_projector.o level_projector.s -l level_projector.lst + +#### + +LEVEL_MAGSTEPS: level_magsteps.o + ld65 -o LEVEL_MAGSTEPS level_magsteps.o -C $(LINKER_SCRIPTS)/apple2_4000.inc + +level_magsteps.o: level_magsteps.s \ + ../zp.inc ../hardware.inc ../qload.inc \ + ../common_defines.inc disk40_defines.inc \ + leveldata_magsteps.inc \ + graphics_magsteps/magsteps_graphics.inc + ca65 -o level_magsteps.o level_magsteps.s -l level_magsteps.lst + +#### + +MOVIE_MAGLEV_FLIP: movie_maglev_flip.o + ld65 -o MOVIE_MAGLEV_FLIP movie_maglev_flip.o -C $(LINKER_SCRIPTS)/apple2_4000.inc + +movie_maglev_flip.o: movie_maglev_flip.s \ + ../zp.inc ../hardware.inc ../qload.inc \ + ../common_defines.inc disk40_defines.inc \ + movie_maglev_flip/movie_maglev_flip.inc + ca65 -o movie_maglev_flip.o movie_maglev_flip.s -l movie_maglev_flip.lst + +#### + +MOVIE_MAGLEV_RIDE: movie_maglev_ride.o + ld65 -o MOVIE_MAGLEV_RIDE movie_maglev_ride.o -C $(LINKER_SCRIPTS)/apple2_4000.inc + +movie_maglev_ride.o: movie_maglev_ride.s \ + ../zp.inc ../hardware.inc ../qload.inc \ + ../common_defines.inc disk40_defines.inc \ + end_message/end_message.gr.zx02 \ + movie_maglev_ride/movie_maglev_ride.inc + ca65 -o movie_maglev_ride.o movie_maglev_ride.s -l movie_maglev_ride.lst + + + +#### + +graphics_maglev/maglev_graphics.inc: + cd graphics_maglev && make + +graphics_magsteps/magsteps_graphics.inc: + cd graphics_magsteps && make + +graphics_projector/projector_graphics.inc: + cd graphics_projector && make + +movie_maglev_flip/movie_maglev_flip.inc: + cd movie_maglev_flip && make + +movie_maglev_ride/movie_maglev_ride.inc: + cd movie_maglev_ride && make + +#### + +clean: + rm -f *~ *.o *.lst \ + LEVEL_PROJECTOR LEVEL_MAGSTEPS LEVEL_MAGLEV LEVEL_MAGLEV \ + MOVIE_MAGLEV_FLIP MOVIE_MAGLEV_RIDE + +#### + +distclean: + rm -f *~ *.o *.lst \ + LEVEL_PROJECTOR LEVEL_MAGSTEPS LEVEL_MAGLEV LEVEL_MAGLEV \ + MOVIE_MAGLEV_FLIP MOVIE_MAGLEV_RIDE + cd graphics_maglev && make clean +# cd graphics_projector && make clean +# cd graphics_magsteps && make clean +# cd graphics_maglev && make clean +# cd movie_maglev_flip && make clean +# cd movie_maglev_ride && make clean + diff --git a/games/riven_hgr/disk40_files/disk40_defines.inc b/games/riven_hgr/disk40_files/disk40_defines.inc new file mode 100644 index 00000000..61c0e2b5 --- /dev/null +++ b/games/riven_hgr/disk40_files/disk40_defines.inc @@ -0,0 +1,10 @@ +LOAD_TITLE = 0 +LOAD_MAGLEV = 1 + +;================================ +; Level definitions + +; Maglev + +RIVEN_MAGLEV_SIT = 0 + diff --git a/games/riven_hgr/disk40_files/disk40_qload.inc b/games/riven_hgr/disk40_files/disk40_qload.inc new file mode 100644 index 00000000..bddbf2b0 --- /dev/null +++ b/games/riven_hgr/disk40_files/disk40_qload.inc @@ -0,0 +1,14 @@ +which_disk_array: + .byte 1,1,1,1 ; TITLE, MAGLEV + +load_address_array: + .byte $40,$40,$40,$40 ; TITLE, MAGLEV + +track_array: + .byte 1, 2, 9,17 ; TITLE, MAGLEV + +sector_array: + .byte 8, 0, 0, 0 ; TITLE, MAGLEV + +length_array: + .byte 16, 96,123, 64 ; TITLE, MAGLEV diff --git a/games/riven_hgr/disk40_files/graphics_maglev/Makefile b/games/riven_hgr/disk40_files/graphics_maglev/Makefile new file mode 100644 index 00000000..74a9dd6d --- /dev/null +++ b/games/riven_hgr/disk40_files/graphics_maglev/Makefile @@ -0,0 +1,24 @@ +include ../../../../Makefile.inc + +ZX02 = ~/research/6502_compression/zx02.git/build/zx02 -f +PNG_TO_HGR = ../../../../utils/hgr-utils/png2hgr + +all: maglev_graphics.inc + +maglev_graphics.inc: \ + maglev_sit_s.hgr.zx02 + echo "maglev_sit_s_zx02: .incbin \"maglev_sit_s.hgr.zx02\"" > maglev_graphics.inc + +#### + +%.hgr: %.png + $(PNG_TO_HGR) $< > $@ + +%.hgr.zx02: %.hgr + $(ZX02) -f $< $@ + +#### + +clean: + rm -f *~ *.o *.lst *.zx02 *.hgr maglev_graphics.inc + diff --git a/games/riven_hgr/disk40_files/graphics_maglev/maglev_sit_s.png b/games/riven_hgr/disk40_files/graphics_maglev/maglev_sit_s.png new file mode 100644 index 00000000..00d89def Binary files /dev/null and b/games/riven_hgr/disk40_files/graphics_maglev/maglev_sit_s.png differ diff --git a/games/riven_hgr/disk40_files/level_maglev.s b/games/riven_hgr/disk40_files/level_maglev.s new file mode 100644 index 00000000..89e4bc53 --- /dev/null +++ b/games/riven_hgr/disk40_files/level_maglev.s @@ -0,0 +1,122 @@ +; Riven -- Jungle Island -- Maglev + +; by deater (Vince Weaver) + +; Zero Page + .include "../zp.inc" + .include "../hardware.inc" + .include "../common_defines.inc" + .include "../qload.inc" + .include "disk40_defines.inc" + +riven_jungle_maglev: + + ;=================== + ; init screen + ;=================== + +; jsr TEXT +; jsr HOME + bit KEYRESET + + bit SET_GR + bit PAGE1 + bit HIRES + bit FULLGR + + ;======================== + ; set up location + ;======================== + + lda #locations + sta LOCATIONS_H + + lda #0 + sta DRAW_PAGE + sta LEVEL_OVER + + lda #0 + sta JOYSTICK_ENABLED + sta UPDATE_POINTER + + lda #1 + sta CURSOR_VISIBLE + + lda #20 + sta CURSOR_X + sta CURSOR_Y + + + + + ;=================================== + ; init + ;=================================== + +; done in title + +; lda #$20 +; sta HGR_PAGE +; jsr hgr_make_tables + + jsr change_location + + jsr save_bg_14x14 ; save old bg + +game_loop: + + ;=================================== + ; draw pointer + ;=================================== + + jsr draw_pointer + + ;=================================== + ; handle keypress/joystick + ;=================================== + + jsr handle_keypress + + ;=================================== + ; increment frame count + ;=================================== + + inc FRAMEL + bne frame_no_oflo + + inc FRAMEH +frame_no_oflo: + + ;==================================== + ; check level over + ;==================================== + + lda LEVEL_OVER + bne really_exit + + jmp game_loop + +really_exit: + + rts + + ;================================== + ; cart button clicked + ;================================== + ; TODO: call cart code + +cart_button_clicked: + bit SPEAKER + rts + + + ;========================== + ; includes + ;========================== + + +.include "graphics_maglev/maglev_graphics.inc" + +.include "leveldata_maglev.inc" diff --git a/games/riven_hgr/disk40_files/leveldata_maglev.inc b/games/riven_hgr/disk40_files/leveldata_maglev.inc new file mode 100644 index 00000000..68c0f833 --- /dev/null +++ b/games/riven_hgr/disk40_files/leveldata_maglev.inc @@ -0,0 +1,27 @@ +;=============================================== +; level data for Jungle Maglev +;=============================================== + +locations: + .word location0 + +; RIVEN_MAGLEV_SIT -- sitting in maglev +location0: + .byte $ff ; north exit + .byte $ff ; south exit + .byte $ff ; east exit + .byte $ff ; west exit + .byte $ff ; north exit_dir + .byte $ff ; south exit_dir + .byte $ff ; east exit_dir + .byte $ff ; west exit_dir + .word $0000 ; north bg + .word maglev_sit_s_zx02 ; south bg + .word $0000 ; east bg + .word $0000 ; west bg + .byte BG_SOUTH ; bgs + .byte DIRECTION_S ; special exit + .byte 3,5 ; special x + .byte 107,130 ; special y + .word cart_button_clicked-1 + diff --git a/games/riven_hgr/qload.s b/games/riven_hgr/qload.s index 4d4af30e..53e66511 100644 --- a/games/riven_hgr/qload.s +++ b/games/riven_hgr/qload.s @@ -11,6 +11,9 @@ .if DISK=39 .include "disk39_files/disk39_defines.inc" .endif +.if DISK=40 +.include "disk40_files/disk40_defines.inc" +.endif .if DISK=43 .include "disk43_files/disk43_defines.inc" .endif @@ -268,6 +271,10 @@ insert_disk_string: .include "disk39_files/disk39_qload.inc" .endif +.if DISK=40 +.include "disk40_files/disk40_qload.inc" +.endif + .if DISK=43 .include "disk43_files/disk43_qload.inc" .endif diff --git a/games/riven_hgr/title.s b/games/riven_hgr/title.s index 96df96f2..a8744799 100644 --- a/games/riven_hgr/title.s +++ b/games/riven_hgr/title.s @@ -12,6 +12,10 @@ .include "disk39_files/disk39_defines.inc" .endif +.if DISK=40 + .include "disk40_files/disk40_defines.inc" +.endif + .if DISK=43 .include "disk43_files/disk43_defines.inc" .endif @@ -304,6 +308,17 @@ clear_loop: sta DIRECTION .endif +.if DISK=40 + lda #LOAD_MAGLEV + sta WHICH_LOAD ; assume new game (dome island) + + lda #RIVEN_MAGLEV_SIT + sta LOCATION + + lda #DIRECTION_S + sta DIRECTION +.endif + .if DISK=43 lda #LOAD_CART sta WHICH_LOAD