From 484579c40041dbd129f4c01037c59ec86f1c4033 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 3 Mar 2019 14:05:00 -0500 Subject: [PATCH] ootw: intro: allow continuing to game --- ootw/README | 70 +++++++++++++++++++++++++------------------------ ootw/TODO | 10 ------- ootw/hello.bas | 2 +- ootw/intro.s | 44 ++++++++++++++++++++++++++++--- ootw/ootw.dsk | Bin 143360 -> 143360 bytes ootw/zp.inc | 1 + 6 files changed, 78 insertions(+), 49 deletions(-) diff --git a/ootw/README b/ootw/README index 36d1fedc..dd233478 100644 --- a/ootw/README +++ b/ootw/README @@ -1,35 +1,52 @@ +Another / Out-of-This World Demake for Apple II+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + by Vince "Deater" Weaver (vince@deater.net) + http://www.deater.net/weave/vmwprod/ootw/ + Disk and LZ4 routines by qkumba -Saw the amazing PICO-8 version of this: ++ The game "Another World" was released in 1991. + Written by Eric Chahi. + It was eventually ported to many systems (I played it on IBM PC). + + It even got an Apple IIgs port (the IIgs is 16-bit with fancy + graphics and sound). However you couldn't play it on + earlier Apple II systems... until now. + ++ I was inspired to do this by this amazing PICO-8 version of: https://liquidream.itch.io/another-world-survival -and thought the lo-res pallette might be just barely enough to do -it justice. - -Of course you could just play on your IIgs, but what's the fun in that. - - - - -Up to tunnel1, using RLE: - 35875 INTRO - - using LZ4: - + and thought the Apple II lo-res palette (15 colors, 40x48 graphics) + might be just barely enough to do it justice. +================== +Game controls: +================== + Use WASD keys to move, also arrow keys where available. + This is tricky as the original Apple II keyboard is very + simplistic so it's hard to get auto-repeat or multi keypress. + Spacebar is action. + + During the intro, you can press R to make it repeat forever. + + Joystick support: none yet? +================== +Development notes: +================== Memory map: 00 zero page 01 stack 02 ???? - 03 dos33 nibble table + 03 nibble table/disk data 04-07 GR page0 08-0b GR page1 0c-0f offscreen data ($c00 = disk load buffer) 10-13 offscreen data2 14-16 loader - 17-bf program/data (42.25k) + 17-89 program/compressed-data (30.25k) + 90-bf currently decompressed level data (12k) c0-cf I/O d0-ff ROM @@ -50,19 +67,8 @@ Memory squeeze! 2,053 over make elevator indicator a loop 1,347 over use LZ4 instead of RLE - - -4000 code - -40000 data - -20000 -> 12000 -20000 -> 12000 - 24000+20000=44000 - -20000 -> 10000 -20000 -> 10000 - 20000+2000= +Gave up, see if we can compress in chunks and decompress, sort of like +my chiptune player does. Let's take a 12k region of memory = $3000 @@ -70,7 +76,7 @@ Let's take a 12k region of memory = $3000 ID1 = 1461 2143\ -ID2 = 1759 2687|--- togeter in 01 +ID2 = 1759 2687|--- together in 01 ID3 = 1195 1879/ ID4 = 2514 8280\--- in 04 ID5 = 1947 3492/ @@ -82,7 +88,3 @@ ID10 = 3397 5558/ ===== ====== 25890 12k - - - - diff --git a/ootw/TODO b/ootw/TODO index 48000520..e936412a 100644 --- a/ootw/TODO +++ b/ootw/TODO @@ -1,15 +1,5 @@ TODO: -intro: -+ keyboard: skip to end, r to repeat forever -+ Some bugs to fix at some point - -> closing panel at entry to scanner, one frame missing grey line - -> on building_car bg there are some grey patches that are - grey 10 instead of grey 5 - -general: -+ move gr_make_quake out of gr_copy - movement -- note these are hard due to limitations of the Apple II keyboard + ability to run + ability to jump diff --git a/ootw/hello.bas b/ootw/hello.bas index 1937e2df..4c934e9e 100644 --- a/ootw/hello.bas +++ b/ootw/hello.bas @@ -1,5 +1,5 @@ 5 HOME - 10 PRINT "OOTW PROOF-OF-CONCEPT V1.7 BY DEATER" + 10 PRINT "OOTW PROOF-OF-CONCEPT V1.8 BY DEATER" 20 PRINT " DISK,LZ4 BY QKUMBA" 25 PRINT " ," 30 PRINT "ORIGINAL BY ERIC CHAHI" diff --git a/ootw/intro.s b/ootw/intro.s index 683bec8a..6607a771 100644 --- a/ootw/intro.s +++ b/ootw/intro.s @@ -6,7 +6,11 @@ .include "hardware.inc" intro: + lda #0 + sta INTRO_REPEAT + bit KEYRESET +repeat_intro: ;=========================== ; Enable graphics @@ -1617,11 +1621,43 @@ tunnel1: jsr run_sequence -gone_loop: - lda KEYPRESS - bpl gone_loop - bit KEYRESET + ;====================== + ; Pause a bit + ldx #180 + jsr long_wait + +;gone_loop: +; lda KEYPRESS +; bpl gone_loop +; bit KEYRESET + + ; see if R pressed, if so, repeat + ; otherwise, return and indicate we want to start the game + + lda KEYPRESS + bpl check_repeat ; if no keypress, jump ahead + + and #$7f ; clear high bit + + cmp #'R' + bne check_repeat + + lda INTRO_REPEAT + eor #$1 + sta INTRO_REPEAT + + +check_repeat: + bit KEYRESET ; reset keyboard strobe + lda INTRO_REPEAT + beq done_intro + + jmp repeat_intro + +done_intro: + lda #1 ; start game + sta WHICH_LOAD rts diff --git a/ootw/ootw.dsk b/ootw/ootw.dsk index 2ffaa6114a897f0051c4bf4329a1062803ce87c4..827624b5c72f332c25cdf401b6d6a09d573b1ef6 100644 GIT binary patch delta 8368 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 z zu9@F=jiriN^S^pk5}50K9oBUqyWTC(ZOL}~A;(sZDPEcAxrF{Jh_+@$_kvmZDzk|8Z4YsK8FxsBu8AEIvMQkBw8>$ds%W);x6OC`;8<2F}uvzj2y z>h{1upyyJGAMg+O7Xp)}cev~|#5}Ok-fgp|R(cjLf+w9vW_c21xhIZZwZ?J3t$i-3 z^yr-Vk8i4!fgACB1FOPvPm_+CbX@xyy(8?pwbGMtudqMO46uJpr-LB9of%+K%z!0G zZugu>eb~dMK7f;-nWWo1;T;}0Q||JF_nU2tC!8?bc2D>yeLh?>x!)6h&m_F>312YV zk33-uftDv>nOdLvyaH~Iz$t4!oP&q-(d2x3=To=NEhJFf%Zzf}U;8+L&}T-|b$=AK z_`9+ia5l|onC(hY|ERSL&W)Gp`JJ=1GbCQUeWdq9>R6Az$FJ-UZoag&a-_{vG!NRK zcl2&JeH3#HXW^`zjk9ws$8kI-a1KtSSa_!cZ+AFsoRgDT7@ps;uL95M2<&?Ux88x3 z)*7sI+NNPvpo(Cl)BC0p9`TrGcnfdkZM>ald5-6Kfp_pCFY!)Zj^sUzpYOmYMy&^J zr$Adgjw^)gZqnc=SdZ#7($Et8VScax5v{zuT@2zxBb*5z&sWGSRL2N*JDP{q#F?mq z2zjofVa@?tr}!eS5wjnb7Ame<_G!OHjL+Xxv-0ISzK0^4N}_Z#Mk4| zlGgh$dvpmF#bOuh;#|B-a5-F}OL93~vKzT^t`>|66BzryyFdACR;*5|fp00ohdLL% zg8w9aYRHo*(iGF9q)ohwwV>M3WH9>P|q9$ohO;(VC6-KcrR>h{+6;|OCUJ(?BA}W&N zRAd>+SY~94Y?W=YU1nuY=4C;4$f7LCPFZ#$Cw4MUi__|~Iql9{SSRP?or2Th6rGaO z>69fTVTq9}l2x)vc8QfZiI)V)A&HVCIVD*{A{H6ZB3eb8Xct+L6L~83ON}A_Q{Jb~u^WJCh=e@iB0azRp9smFU diff --git a/ootw/zp.inc b/ootw/zp.inc index b8ce6275..354913bf 100644 --- a/ootw/zp.inc +++ b/ootw/zp.inc @@ -70,6 +70,7 @@ BLARGH = $69 ;DY_F = $6F +INTRO_REPEAT = $7E ZPOS = $78 REGISTER_DUMP = $70