From 97b3bcf3a5d4a1747eddbc0de8fc8f25a250222e Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 22 May 2020 01:28:35 -0400 Subject: [PATCH] mist: both brothers books more or less working --- mist/brother_books.s | 192 +++++++++++++++------ mist/common_defines.inc | 2 + mist/graphics_octagon/Makefile | 5 +- mist/graphics_octagon/blue_book_ending.png | Bin 0 -> 6720 bytes mist/graphics_octagon/red_book_ending.png | Bin 748 -> 7119 bytes mist/leveldata_octagon.inc | 38 +++- mist/octagon.s | 6 +- 7 files changed, 185 insertions(+), 58 deletions(-) create mode 100644 mist/graphics_octagon/blue_book_ending.png diff --git a/mist/brother_books.s b/mist/brother_books.s index 231bc75d..6b93f27e 100644 --- a/mist/brother_books.s +++ b/mist/brother_books.s @@ -47,6 +47,13 @@ not_red_page: open_red_book: + ; DEBUG + inc RED_PAGE_COUNT + + lda RED_PAGE_COUNT + cmp #6 + beq red_ending + lda #OCTAGON_RED_BOOK_OPEN sta LOCATION @@ -61,6 +68,12 @@ open_book: rts +red_ending: + lda #OCTAGON_RED_END + sta LOCATION + + lda #DIRECTION_W|DIRECTION_SPLIT + jmp open_book ;=========================== ; Touch the blue book @@ -110,12 +123,25 @@ not_blue_page: open_blue_book: + ; DEBUG + inc BLUE_PAGE_COUNT + + lda BLUE_PAGE_COUNT + cmp #6 + beq blue_ending + lda #OCTAGON_BLUE_BOOK_OPEN sta LOCATION lda #DIRECTION_E|DIRECTION_SPLIT jmp open_book +blue_ending: + lda #OCTAGON_BLUE_END + sta LOCATION + + lda #DIRECTION_E|DIRECTION_SPLIT + jmp open_book ;=========================== @@ -141,18 +167,30 @@ repeat_sirrus_string: lda (OUTL),Y bpl repeat_sirrus_string + ; pick which animation to use + lda ANIMATE_FRAME asl tay + lda RED_PAGE_COUNT + bne red_show_face + +red_only_static: lda red_book_sprite_sequence0,Y sta INL lda red_book_sprite_sequence0+1,Y + jmp common_book_proper + +red_show_face: + lda red_book_sprite_sequence1,Y + sta INL + lda red_book_sprite_sequence1+1,Y + +common_book_proper: sta INH lda #23 - -advance_red_book: sta XPOS lda #14 sta YPOS @@ -165,7 +203,7 @@ advance_red_book: inc ANIMATE_FRAME lda ANIMATE_FRAME - cmp #4 + cmp #5 bne done_animate_red_book lda #1 sta ANIMATE_FRAME @@ -186,6 +224,55 @@ red_book_done: rts + + ;=========================== + ; Blue book animation + ;=========================== + +blue_book_animation: + + ; draw the text + lda BLUE_PAGE_COUNT + asl + tay + + lda achenar_dialog,Y + sta OUTL + lda achenar_dialog+1,Y + sta OUTH + +repeat_achenar_string: + jsr move_and_print + + ldy #0 + lda (OUTL),Y + bpl repeat_achenar_string + + ; pick which animation to use + + lda ANIMATE_FRAME + asl + tay + + lda BLUE_PAGE_COUNT + bne blue_show_face + +blue_only_static: + lda blue_book_sprite_sequence0,Y + sta INL + lda blue_book_sprite_sequence0+1,Y + jmp common_book_proper + +blue_show_face: + lda blue_book_sprite_sequence1,Y + sta INL + lda blue_book_sprite_sequence1+1,Y + + jmp common_book_proper + + + + ;========================== ; books sprites ;========================== @@ -199,11 +286,11 @@ red_book_sprite_sequence0: red_book_sprite_sequence1: .word red_book_static1_sprite - .word red_book_static2_sprite + .word red_book_static1_sprite + .word red_book_face_sprite .word red_book_face_sprite .word red_book_static2_sprite - red_book_face_sprite: .byte 9,7 .byte $31,$88,$bb,$bb,$bb,$bb,$bb,$88,$13 @@ -244,7 +331,8 @@ blue_book_sprite_sequence0: blue_book_sprite_sequence1: .word blue_book_static1_sprite - .word blue_book_static2_sprite + .word blue_book_static1_sprite + .word blue_book_face_sprite .word blue_book_face_sprite .word blue_book_static2_sprite @@ -291,7 +379,7 @@ blue_book_static2_sprite: sirrus_dialog: .word red_dialog0,red_dialog1,red_dialog2,red_dialog3 - .word red_dialog4,red_dialog5,red_dialog6 + .word red_dialog4,red_dialog5 ; red 0 ; only static @@ -306,9 +394,9 @@ red_dialog0: ; 0123456789012345678901234567890123456789 red_dialog1: - .byte 0,21 + .byte 6,21 .byte "WHO ARE YOU? I CAN'T SEE YOU",0 - .byte 0,22 + .byte 4,22 .byte "BRING ME A RED PAGE. I AM SIRRUS.",0 .byte $80 @@ -321,9 +409,9 @@ red_dialog1: red_dialog2: .byte 0,21 .byte "YOU'VE RETURNED. THANK YOU FOR THE PAGE",0 - .byte 0,22 + .byte 1,22 .byte "I BEG YOU TO FIND REMAINING RED PAGES",0 - .byte 0,23 + .byte 1,23 .byte "DON'T WASTE TIME ON MY GUILTY BROTHER",0 .byte $80 @@ -334,11 +422,11 @@ red_dialog2: ; 0123456789012345678901234567890123456789 red_dialog3: - .byte 0,21 + .byte 2,21 .byte "FREE ME FROM MY PRISON. I AM SIRRUS.",0 .byte 0,22 .byte "I NEED MORE PAGES, DON'T TOUCH BLUE ONES",0 - .byte 0,23 + .byte 1,23 .byte "DO NOT HELP MY WICKED BROTHER ACHENAR",0 .byte $80 @@ -349,11 +437,11 @@ red_dialog3: ; 0123456789012345678901234567890123456789 red_dialog4: - .byte 0,21 + .byte 2,21 .byte "WITH EACH PAGE I CAN SEE MORE CLEARLY",0 - .byte 0,22 + .byte 6,22 .byte "ACHENAR IS GUILTY OF CONQUEST",0 - .byte 0,23 + .byte 6,23 .byte "FREE ME AND I WILL REWARD YOU",0 .byte $80 @@ -368,13 +456,13 @@ red_dialog4: ; 0123456789012345678901234567890123456789 red_dialog5: - .byte 0,21 + .byte 10,20 .byte "YOU FINALLY RETURNED.",0 - .byte 0,22 + .byte 4,21 .byte "YOU MUST THINK ACHENAR IS GUILTY",0 - .byte 0,23 - .byte "USE PAGE 158 IN PATTERN BOOK",0 - .byte 0,24 + .byte 4,22 + .byte "USE PAGE 158 IN THE PATTERN BOOK",0 + .byte 6,24 .byte "DO NOT TOUCH THE GREEN BOOK",0 .byte $80 @@ -384,21 +472,21 @@ red_dialog5: ; I hope you're into books. Goodbye! ; 0123456789012345678901234567890123456789 -red_dialog6: - .byte 0,21 - .byte "I AM FREE! THANK YOU, YOU STUPID FOOL!",0 - .byte 0,22 - .byte "LET ME RIP SOME PAGES OUT!",0 - .byte 0,23 - .byte "I HOPE YOU'RE INTO BOOKS! GOODBYE!",0 - .byte $80 +;red_dialog6: +; .byte 0,21 +; .byte "I AM FREE! THANK YOU, YOU STUPID FOOL!",0 +; .byte 0,22 +; .byte "LET ME RIP SOME PAGES OUT!",0 +; .byte 0,23 +; .byte "I HOPE YOU'RE INTO BOOKS! GOODBYE!",0 +; .byte $80 ;========================== ; blue/Achenar achenar_dialog: .word red_dialog0,blue_dialog1,blue_dialog2,blue_dialog3 - .word blue_dialog4,blue_dialog5,blue_dialog6 + .word blue_dialog4,blue_dialog5 ; blue 0 ; only static @@ -409,9 +497,9 @@ achenar_dialog: ; 0123456789012345678901234567890123456789 blue_dialog1: - .byte 0,21 + .byte 4,21 .byte "SIRRUS IS THAT YOU? WHO ARE YOU?",0 - .byte 0,22 + .byte 1,22 .byte "BRING BLUE PAGES. MUST HAVE BLUE PAGES",0 .byte $80 @@ -422,13 +510,13 @@ blue_dialog1: ; 0123456789012345678901234567890123456789 blue_dialog2: - .byte 0,21 + .byte 5,20 .byte "YOU'VE RETURNED. I'M ACHENAR.",0 - .byte 0,22 + .byte 4,21 .byte "DON'T LISTEN TO MY LIAR BROTHER",0 - .byte 0,23 + .byte 7,22 .byte "BRING BLUE PAGES, NOT RED",0 - .byte 0,24 + .byte 7,23 .byte "I WILL HAVE MY RETRIBUTION",0 .byte $80 @@ -439,11 +527,11 @@ blue_dialog2: ; 0123456789012345678901234567890123456789 blue_dialog3: - .byte 0,21 + .byte 9,21 .byte "YOU'VE RETURNED, GOOD.",0 - .byte 0,22 + .byte 6,22 .byte "GREEDY SIRRUS TRAPPED ME HERE",0 - .byte 0,23 + .byte 1,23 .byte "BRING BLUE PAGES, DON'T TOUCH THE RED",0 .byte $80 @@ -456,9 +544,9 @@ blue_dialog3: blue_dialog4: .byte 0,21 .byte "FRIEND, I SEE YOU THINK SIRRUS IS WRONG",0 - .byte 0,22 + .byte 2,22 .byte "HAVE YOU OBSERVED HIS LUST FOR RICHES",0 - .byte 0,23 + .byte 6,23 .byte "PLEASE BRING MORE BLUE PAGES",0 .byte $80 @@ -469,11 +557,11 @@ blue_dialog4: ; 0123456789012345678901234567890123456789 blue_dialog5: - .byte 0,21 + .byte 3,21 .byte "SIRRUS IS GUILTY, HE LIED TO FATHER",0 - .byte 0,22 + .byte 1,22 .byte "FIND PATTERN 158 AND USE THE FIREPLACE",0 - .byte 0,23 + .byte 7,23 .byte "DON'T TOUCH THE GREEN BOOK!",0 .byte $80 @@ -484,11 +572,11 @@ blue_dialog5: ; Maybe someone will rescue you. ; 0123456789012345678901234567890123456789 -blue_dialog6: - .byte 0,21 - .byte "HAHA I AM FREE! I FEEL SO ALIVE!",0 - .byte 0,22 - .byte "WHAT HAPPENS IF I RIP THESE PAGES OUT?",0 - .byte 0,23 - .byte "MAYBE SOMEONE WILL RESCUE YOU",0 - .byte $80 +;blue_dialog6: +; .byte 0,21 +; .byte "HAHA I AM FREE! I FEEL SO ALIVE!",0 +; .byte 0,22 +; .byte "WHAT HAPPENS IF I RIP THESE PAGES OUT?",0 +; .byte 0,23 +; .byte "MAYBE SOMEONE WILL RESCUE YOU",0 +; .byte $80 diff --git a/mist/common_defines.inc b/mist/common_defines.inc index c1d490ce..1b944b6d 100644 --- a/mist/common_defines.inc +++ b/mist/common_defines.inc @@ -143,6 +143,8 @@ OCTAGON_RED_BOOK_CLOSED = 27 OCTAGON_RED_BOOK_OPEN = 28 OCTAGON_BLUE_BOOK_CLOSED= 29 OCTAGON_BLUE_BOOK_OPEN = 30 +OCTAGON_RED_END = 31 +OCTAGON_BLUE_END = 32 ; Mechanical Engineering diff --git a/mist/graphics_octagon/Makefile b/mist/graphics_octagon/Makefile index ac631cde..1e75b6f1 100644 --- a/mist/graphics_octagon/Makefile +++ b/mist/graphics_octagon/Makefile @@ -48,7 +48,8 @@ octagon_graphics.inc: \ tower_key_view_rocket_hint_n.lzsa tower_key_view_dock_hint_n.lzsa \ tower_key_view_gears_hint_n.lzsa tower_key_view_tree_hint_n.lzsa \ elevator_door_closed_s.lzsa \ - elevator_dark_s.lzsa + elevator_dark_s.lzsa \ + red_book_ending.lzsa blue_book_ending.lzsa echo "temple_door_n_lzsa: .incbin \"temple_door_n.lzsa\"" > octagon_graphics.inc echo "temple_door_s_lzsa: .incbin \"temple_door_s.lzsa\"" >> octagon_graphics.inc echo "temple_door_closed_s_lzsa: .incbin \"temple_door_closed_s.lzsa\"" >> octagon_graphics.inc @@ -118,6 +119,8 @@ octagon_graphics.inc: \ echo "tower_key_view_s_lzsa: .incbin \"tower_key_view_s.lzsa\"" >> octagon_graphics.inc echo "elevator_door_closed_s_lzsa: .incbin \"elevator_door_closed_s.lzsa\"" >> octagon_graphics.inc echo "elevator_dark_s_lzsa: .incbin \"elevator_dark_s.lzsa\"" >> octagon_graphics.inc + echo "red_book_ending_lzsa: .incbin \"red_book_ending.lzsa\"" >> octagon_graphics.inc + echo "blue_book_ending_lzsa: .incbin \"blue_book_ending.lzsa\"" >> octagon_graphics.inc %.gr: %.png $(PNG2GR) $< $@ diff --git a/mist/graphics_octagon/blue_book_ending.png b/mist/graphics_octagon/blue_book_ending.png new file mode 100644 index 0000000000000000000000000000000000000000..974e20bd5b6b4bb3c503b85b63496a943f4134dc GIT binary patch literal 6720 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