From c38c87ce4433af5a1f46da693c18ecb8f2ba94b9 Mon Sep 17 00:00:00 2001 From: pkali Date: Sun, 6 Mar 2022 14:22:42 -0500 Subject: [PATCH] build 129 --- README.md | 7 +- TODO.txt | 60 +++++++++------- artwork/HIMARS14.asm | 155 ++++++++++++++++++++++++++++++++++++++++- artwork/mm_rmt1.31.rmt | Bin 0 -> 2837 bytes artwork/mmm_16.lzs | Bin 0 -> 3493 bytes artwork/mmm_type_r.sap | Bin 0 -> 53000 bytes display.asm | 2 +- lib/macro.hea | 2 - scorch.asm | 11 +-- scorch.xex | Bin 32050 -> 35643 bytes textproc.asm | 46 ++++++------ variables.asm | 13 ++-- weapons.asm | 4 +- 13 files changed, 231 insertions(+), 69 deletions(-) create mode 100644 artwork/mm_rmt1.31.rmt create mode 100644 artwork/mmm_16.lzs create mode 100644 artwork/mmm_type_r.sap diff --git a/README.md b/README.md index 465379c..8381b31 100755 --- a/README.md +++ b/README.md @@ -40,7 +40,12 @@ with the advent of fujinet (https://fujinet.online/) we are thinking about makin ## Changes: -###### Build 127 +###### Build 129 +2022-03-06 +- added tune by emkay, lzss player by dmsc +- fixed bug "When result in points is >99 then only 2 first digits are displayed" + +###### Build 128 2022-02-19 - fixed a bug making it harder to select AI level, unfortunately now player names can not include hyphen - fixed numerous mistakes in handling bytes and words - possibly some of the crashes eliminated diff --git a/TODO.txt b/TODO.txt index 577d436..be01cde 100755 --- a/TODO.txt +++ b/TODO.txt @@ -3,25 +3,29 @@ rev. 2013-11-17 --------------------------------------------------------- Known bugs (+ means bug is fixed) +004. when parachute is on and the tank dies (e.g. hit by a powerful + weapon) the dead (invisible) tank falls on parachute + (and uses one parachute more than necessary) +005. tank stands still on a one pixel spike - it should fall + (possibly all that is necessary is adjust of WhereToSlideTable) +007. Decreasing of number of bullets after a shoot does not work correctly + (e.g. 2 bullets are deducted instead of 1) +017: Observed MIRV loops - it shoots and shoots MIRV all over the screen. Very rare. +020: sometimes leftmost or rightmost remains of the funkybomb smoke do not get cleared +022: shooting funkybomb decreases number of bombs too much! (2 instead of 1?) + +Fixed: +001. when bullet goes straight down very fast it misses the tank it happens only when tank is standing on the bottom of the screen (no groud below) +002. points after the round are not calculated correctly +003. if death's head explodes low, the lowest explosion wraps and appears on the top of the screen -004. when parachute is on and the tank dies (e.g. hit by a powerful - weapon) the dead (invisible) tank falls on parachute - (and uses one parachute more than necessary) -005. tank stands still on a one pixel spike - it should fall - (possibly all that is necessary is adjust of WhereToSlideTable) +006. After some attacks (like MIRV and leapfrog the OffensiveText stays on the screen (and becomes a static decoration) It possibly happens when a tank kills itself with mirv or leapfrog. -007. Decreasing of number of bullets after a shoot does not work correctly - (e.g. 2 bullets are deducted instead of 1) +008. After a round the last tank sprite stays on the screen. This hurts only when the last tank is under the table with results! -009. When result in points is >99 then only 2 first digits are displayed +010. Even MORONS shoot their feet too often - increase min. randomised energy. +011. High flying bullets sometimes cause brief screen garbage - like a DL damaged for a fraction of a frame. @@ -32,44 +36,48 @@ Known bugs (+ means bug is fixed) +015: Only first shoot of FunkyBomb is correct (with smoke and fast), the next are like missiles +016: Additional explosions after Frogger do not have falling soil (?) -017: Observed MIRV loops - it shoots and shoots MIRV all over the screen. Very rare. -018: MINOR: ydraw, yhit, ybyte variable is sometimes treated as WORD, sometimes as BYTE. Making it consistent would save both time and space (not much) REJECTED: too much work - different routines depend on checking high byte. +019: AI menu does not recognize keyboard up (prints "-" in tank name) -020: sometimes leftmost or rightmost remains of the funkybomb smoke do not get cleared -021: check MWA, ADW, SBW macros - bad modifications of bytes found!!! -022: shooting funkybomb decreases number of bombs too much! (2 instead of 1?) ++021: check MWA, ADW, SBW macros - bad modifications of bytes found!!! ++009. When result in points is >99 then only 2 first digits are displayed + + + --------------------------------------------------------- To do -+001. Start each round with a)worst tank or b)random tank - (Worst tank starts first) -+002. Start each round with random angles (not always 45 degrees left) -+003. Add colour of the given tank to the screen - E.g. when a given tank is shooting it's colour could be behind - tank name on the text screen *004. The game has no end!!! Add ending!!! A good idea for an ending - a TIP pic - Red Army taking Berlin :) Another - vector tanks like in BattleZone Another - stickman tankmen -+005. Add number of rounds to the options menu 006. Add sound effects (maybe sampled? or mp0 (sound based on fft)) 007. There is no defensive weapon handling (only parachute works, but also provisionally -+008. No computer operated opponents - make a frame for AI!!! 009. Make AI in the existing frame 010. It is impossible to look up a number of parachutes left. -+011. Colouring the top status lines in a colour of the active tank. 012. Decreased number of bullets should be displayed just after the shoot. 013. Check LineTable - possibly it is unnecessarily long -+014. Demo mode - when all tanks are CPUs let them play non-stop! - (replace waiting for a key-press after a round with a small delay) -+015. Switch to mads for easier development (mads speeds it up, no doubt) -+016. Speed up death's head (e.g.: draw each second circle) --017. Wide screen mode (with scroll?) 018. Speed up soil down after soil eating weapons - correctly calculate ranges as now range is very broad even when very little soil is eaten. 019. Purchase impossible with joystick only. Add buy on e.g. joystick right. 020. Not a bug per se, but ydraw variable is word, possibly it can be switched to byte 021. Add player colors to purchase screen 022. Make colors more contrasting + +Done: + ++001. Start each round with a)worst tank or b)random tank + (Worst tank starts first) ++002. Start each round with random angles (not always 45 degrees left) ++003. Add colour of the given tank to the screen + E.g. when a given tank is shooting it's colour could be behind + tank name on the text screen ++005. Add number of rounds to the options menu ++008. No computer operated opponents - make a frame for AI!!! ++011. Colouring the top status lines in a colour of the active tank. ++014. Demo mode - when all tanks are CPUs let them play non-stop! + (replace waiting for a key-press after a round with a small delay) ++015. Switch to mads for easier development (mads speeds it up, no doubt) ++016. Speed up death's head (e.g.: draw each second circle) +-017. Wide screen mode (with scroll?) diff --git a/artwork/HIMARS14.asm b/artwork/HIMARS14.asm index fdbccf7..88cd952 100644 --- a/artwork/HIMARS14.asm +++ b/artwork/HIMARS14.asm @@ -1,4 +1,4 @@ -; @com.wudsn.ide.asm.mainsourcefile=scorch.asm +; @com.wudsn.ide.asm.mainsourcefile=../scorch.asm /***************************************/ /* Use MADS http://mads.atari8.info/ */ /* Mode: DLI (char mode) */ @@ -7,7 +7,26 @@ ;icl "HIMARS14.h" ;ICL '../lib/atari.hea' - org $f0 + org $80 + +chn_copy .ds 9 +chn_pos .ds 9 +bptr .ds 2 +cur_pos .ds 1 +chn_bits .ds 1 + +bit_data .byte 1 + +.proc get_byte + lda song_data+1 + inc song_ptr + bne skip + inc song_ptr+1 +skip + rts +.endp +song_ptr = get_byte + 1 + fcnt .ds 2 fadr .ds 2 @@ -47,7 +66,132 @@ pmg .ds $0300 eif eif +song_data + ins 'mmm_16.lzs' +song_end + +POKEY = $D200 + +buffers + .ds 256 * 9 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Song Initialization - this runs in the first tick: +; +.proc init_song + + ; Example: here initializes song pointer: + + ;mwa #song_data song_ptr + + ; Init all channels: + ldx #8 + ldy #0 +clear + ; Read just init value and store into buffer and POKEY + jsr get_byte + sta POKEY, x + sty chn_copy, x +cbuf + sta buffers + 255 + inc cbuf + 2 + dex + bpl clear + + ; Initialize buffer pointer: + sty bptr + sty cur_pos + rts +.endp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Wait for next frame +; +.proc wait_frame + + lda 20 +delay + cmp 20 + beq delay +.endp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Play one frame of the song +; +.proc play_frame + lda #>buffers + sta bptr+1 + + lda song_data + sta chn_bits + ldx #8 + + ; Loop through all "channels", one for each POKEY register +chn_loop: + lsr chn_bits + bcs skip_chn ; C=1 : skip this channel + + lda chn_copy, x ; Get status of this stream + bne do_copy_byte ; If > 0 we are copying bytes + + ; We are decoding a new match/literal + lsr bit_data ; Get next bit + bne got_bit + jsr get_byte ; Not enough bits, refill! + ror ; Extract a new bit and add a 1 at the high bit (from C set above) + sta bit_data ; +got_bit: + jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte" + bcs store ; Bit = 1 is "literal", bit = 0 is "match" + + sta chn_pos, x ; Store in "copy pos" + + jsr get_byte + sta chn_copy, x ; Store in "copy length" + + ; And start copying first byte +do_copy_byte: + dec chn_copy, x ; Decrease match length, increase match position + inc chn_pos, x + ldy chn_pos, x + + ; Now, read old data, jump to data store + lda (bptr), y + +store: + ldy cur_pos + sta POKEY, x ; Store to output and buffer + sta (bptr), y + +skip_chn: + ; Increment channel buffer pointer + inc bptr+1 + + dex + bpl chn_loop ; Next channel + + inc cur_pos +.endp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Check for ending of song and jump to the next frame +; +.proc check_end_song + lda song_ptr + 1 + cmp #>song_end + ;bne wait_frame + lda song_ptr + cmp #7%Q6rT0&b{p>!J2BYKrge>p?A{#-3CVwn+ayLv2&GbK)lmM@6BjN)2wPl` zazW~m3JK8*0wnH8kmSlO91se)cGsp}W2==o>yG>=Eb8- zwj%w=wZc-z1?{P@OBH5W(J1r$+2Lm3@N0`9%F`&EKQE4zAC0iuuzzgW&Uf}7TlSyj zu$C2pFKb!3+`qRPTlOd0_LsNpZ&UVuIULv&0fETIwUmgNxP}n@bGWqOYb(skaV2F3 zP^+6eN&{#D4$zjmZSoc*m0BjJ${oNl`S^w%rHd^cU}!??ywNsufqQ@pbb+4KJ(KsP z?3>(|owR|hca(d83()aBsfD$d7S^6bcG8Bt5rx%RAO$P{X{pmD&q$duxi33uL*AG{ ze;gqDb3jt+q{(S%i!@Jw=75CB$2Sb0k4)wP;sxA#!?>y+7}xZ>#%1tpf*tUIab0g9 z_p7K~0aNXY{tLKiyo%Ze_?qC8`s>*96V9j`>w+C{9o`3mFY9gN2G(!rU9sl|)>rl4 zux=Y~>W<*+$JRTjca66v>TklQBc7M`Z|HlA1?{ABTjJc^s#*=?@P4RNmAsx~`DY78 zJ+u?(0>pmZ@#RPBzsnl!@%N1C2I@_qFWIjY7gdXZcKbWPN$=_3HPTXljx_9O>7CEdK*oSGDj(nAnbJiJpNS5}AsD>$ z8$d&tCOgeZBq2q=)qX^&{cN)^#x?XvFmZV!x(g zF~|>iP^U3UIodPGjrP;}F5m$7CHr+3V|QeveSsk-Mwc7eErfOpS}i@BjucM2v2-l2 um!G{mMUe_loTR literal 0 HcmV?d00001 diff --git a/artwork/mmm_16.lzs b/artwork/mmm_16.lzs new file mode 100644 index 0000000000000000000000000000000000000000..c2dada3b599e141f089a18a2d7499852f875c84f GIT binary patch literal 3493 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 U#D8V#`;O-wpWb(G-@UH?1NhHkIRF3v literal 0 HcmV?d00001 diff --git a/artwork/mmm_type_r.sap b/artwork/mmm_type_r.sap new file mode 100644 index 0000000000000000000000000000000000000000..97554ff706876a5b9cd66f0987ad65b4e9c616fa GIT binary patch literal 53000 zcmeI5&ud&)md8sajm-qS2u+$!$fC(YWYp#0kzKTA%EUA;jWRqkQ|YNJrU=Nrs9}OM z-Dr9SL}!tSr@$ne;FZllK=po9NgaCU217QItLQ~-l3n*Ai!AyN2=vCgp3nE3cV9^* z*~ChQ{CX>YxVQYyJwNV`bML!P|NN8og(rUUTIc0|`q>YkyZVb?{_yAj^`HOt%l~-s zxeHJH<4<1ssh9oY=l|YQN#|eMKmFm)`1c>Ex%9Vx-~90le|Kf=!V?#ss4ZSzURZdh z){hnk)0Y+&FZ6qRgK2O7vhg|5G3Z^3Ogf;K8VXrKNsvur=-_ON;YRs}&`W zhT7uONPkk&+eojS?|1jw)9(I4zuz5RnRNH-Nxz!{InOx-23N-2L{(>kIo;1+=y%Y) zvwvsQ@1T2Ue{ZkfLHAC6Z@++#k^<^W{SLZ!lKQz5P*w$4`k&%AOE+fV(oJ_+9^GT4 z$I?AUdMw>zq{q_z6hL|`-QzQXTi*OG%j5S5%SZBigykdoJ;L&l{O*9?9q@aE!6W&7 z4rq^;JQ_~w?v_V)w>-ML<$2C2V3t?anV`1#Y>4^S(H*}>d#|HAevgJ%(H*}>DImW) z;CBc79wk@D(Gb7S163(ixqf4S-wU|mkP!e;_VjX;$?q8k&+xlJj_y$=gQI(t2xLRS za1M~}CCEA*QoNI?DhrSoFc+<`0hQZ}` z1NnVDlfm&jPX=T|fxLVaknSbOIvvyu`JD$AkQZ>WzsL0VSbmS`@3H(I)8AwH-2uNl z;P;sR9?S1@fGjV0G}IP<5XSjee5~8pdu6(zv2J5{d9tCgZX*Sx*C{Z#Jl@b)w{a$z z)1ChAy5o1(9lyJ#_}u}&JK)neL3jCm9;l+D#qzrYelOsLgZv(6&o0LqBW;|$K8>^U zjPrv0P6k}X;CnzKxR*N&KN=KJuL~p{%M0=u6jix?!)Oz`EQ7cEabCd5{$9=R_`RCn zzt!{mu{EvD?}ISEZ-x0C@cCU}^Sgk)95Kg5TG!1(SrtI@yZusC`hW8En*xISLhShsp6s4e~|tZm-$b=}(DJJU6d^J~NIWKHAz zS_){KcVL`%V4PnYbjNEN=jVX-c*&!ow)j-g{Uz5u+ItDhYi%>Uh~>4mNdf783Jfk{ zc~zYW=5)99{5xSi-wo?|z}NEv{NBMD9r?Y3?!|ikIFwZZ@VoyQzn9?BZ9Ol`Yh8!s z3*EaxcffT&0Z1=&KMT0!Z9Ol`v#wji@`c|o2EPODcY*m`AipOU$7@6R{W!?oDOGCo zLqO||wd_aBYntQMGJ-8ze8M6B_&0!p?NcDJsM~iKJ{T5YLW#QJQe7p;DnU=S5|d7q z%L%d4mpSG8Yd`R2%8%yLFX{-F5Ik!yhtNfi= zrpn)0(^mWQts@%wpaOkmA@ZP z+sj10OxsKNdgkx7T5?QKq5+OKO3U!JtIU)M?j?f;wtgO|rGiD;dKBvhRa zF8!G9jPp%&Z|WSjIlMJ#DvxWTa#Q8sLx^&}wOt4@cRjHS8fUv;0xr-SYU|Esx*b&OGN7Fw3jzB$(w@ zbvn3o?U0-9+9Aj94R**I@_U0F@`n80NCElX0lz!o(?)WA+|YU4JW!QVr9C|d{9eEf z2W{Lnvgei?I)`m!7+mMD20DjrWHLCqV>-ZXIBDqA)k+FLx|bm9bVzZ5_9}T`0eJzn z#bYs#-&csb75ROIm|v0KR|vKh`P~7(JK*;f489`2&jGSlF!+l6{t%c&o%y}!?@gkv zss7$1>YD2BO`@(Ty-oq5t|<}ClR(sY)#)&cI`g}F9DaA*@w@Ae-(6Gu?ttGN@Tut~ zzt00zDZ0z=4*0!*8xHdO3JzJ3-&ZmWF25Vd?<<)Mj_y1ea2rlmr)2oWFa2=ltFKJLm7-%{hN};A|bxXv0V=(D{1- zMU~Fq8J6khHnteN-EUZbUwWGvcD}z?^E>^$n%^1ctNFc}-*h;wCnucLH#|sj&!Z(2Y{{B zdC>)6J%0?8wp&RF%HM6xZ&R(Z00*t-C4Inp-lQi2Nw;OZqz_on>-^opq^rb4U{z(2 zjossbbd}g|3?$v*hJ&BKfARU<-=ij5p8*E9j9$y;N5Genze|MW?~e_0Ya9Ij`1!lu zv$8Dm2#~fbuT1cc1C}p<{N1WpYq|8JIqc)-?^4gf)?~L=`+WqWolpL z?^XWp_oS-)o%MW`zw-wBxAyyW_3-|Dy}18=bNGkp%@KaTncte+9B~eNlM4$sGx9hG z@;C?1<8Jac_)WcUGY1UIUh-(D)x-VwdT}4NJKUUhN8AbR<}XjWBj&g+mk7GL_;3nv z4Yv6H{8^xOTzB&K2;HO69THV^k4E^NTl|wqHy0eZx!|BY4&96Ilpcq&Dgf_Q7VjV4 zn1M^z`}1ab*0e38x1@Uu=`HErLV8QOp8`m4DNAad3Ec7;=gsoGchSW1P5Hfv<(u+* z6U#T{cL)6LfZy!`viv>=w8u*x4JUPX%cHwn9^Ku}Jm(ZJ%d6^4P^*Xg@AcyS`R4FF zbjR<_{5rbh_a@h5n)15?es{p{z__XVGV@SW>BfpxWx6+^AL}(*gH(_{x7);#^tsTj5-UH<*ig{Ju)mt;+AKMBS?V zzDm@s%I^;N-2uP*JDm7^4rs>bdA;*we~*Z|NHHG~b&+B|LS_GW{z;&}7vE?-3(V9Qmo4Ft0@MT-wot<`?`hv z&i}&lGNwRYJ_<??Y;~dix+;IK_UEhp`D%Zjan*C8YJYyVV_)sh+m8Kd+w#S( zez7h8rSH!lPut5x{^4nR5xpU&uJZSOAf)XOVYx9(R|s$h$g^ zb6{QPz`E`(n;3U>4m$_<-Af(~wfgn@3k!dlOd{Z=g`Hu4XL$Yo&Pb3O6pW5Ba0>>#QyW`6W*O+c}5+ zKsJLclmG*&lD`~IVuKxC6_|rTC@En#lt}uep!+4)y*<2izb)O{xk27AUgsB zs*(>5Cy_xr>9^-#5K2ne4JDE;znktllS1VfzsJ%&#_xds7%?E-3((&wwh{op$I|_p z0lIt14EPhqURAx}0~4x}0`jg2y&um&mM1o7p-DdmCLIwwfQi^aXeOb6`~6R{y!^gN zu;KUiNPyn~1sjmfKv8EU06uN2$3+HoG%uNff=$2amY}G!lHhlXI`wygZ4XX`kQkw2qh)#hLYfS(_MZy-PeQemxAtq>uz8@ zP9+88>T$TTovX(kgRG6pDmen^u9CD3;EQ%D-3?ILO0pS*ZjSEO-}AN!y^pK_=#F&8 z1a!CG908M#h)uvmY$6oDQxg3C=ivA4A)okoZ`v6N@H>$AJ9xR1%^(XU03Ph9$E_Qn zyO+#h5K2ne4JE-fS0$EKOau68*C><$qWXe zq=em268uh&^KqVz)}g<5MgsafAl(7=xB{fRl@yTw4&7CfchLP9WF1ttAI|{YRg!i9 ze9=kKecb?+tt6X)3BBKu?))^&8Wh;?10(I#SD2jqQ?;gLq00>c;9;*?$`A9-jKICf6ZH+g8Wt9>g?sb%n4*O$U+G)pi1-m zmI0%Um&{-gN=n!bC6fLsx}U2d{Z(|ot(DcQ_v4WuH_(y>$ZnUQwT+bk10eaMEHCKE z^2b32w~`WMc`K3h?*-joblrQy7pFbx-pik#0C~Tc0MfmH>~b zq=em2BI(Zu-JcJ-KOb~AkjjATZXn$Q3;@?%V7ea%sca=BNOvm0jFYz8J>B?aU? z6MDZj19}|N`3*geCm#cojtF|3%VHtj$|O{fd~dmxG0SYFFHTz-%lOs|o+s2<#<%dh z13m>5>c>F3TZwcRq%%;cTS*BB^%8?ZcYNV0&jHd^l1g_6r0-fu0Q&oumC((-Y6b}P zsuB>YlB`_Mf5G{k9_RBrQRnmf48pYDD7! zrIW}@x~1fj?r`n|lvM$Ef8Kw*bi*M7^2sx`y9+NYA9RO{7w#^+Hzkw$__udQg8Wn9 z`lSEi;b$MPM?XI3B@add_NYSlPg~DXd)j)A+SAr^)SkAUbBp$HvN%3y(+mOY=K!?F zO4OcMdbP1nEWO&;Czf7q>=R3`Pp}Wit7^}Kk%0CrEjeHxgLi3<=@ru+(<`PurdLdR zOfR*^^infSiy6?KLNB%FY3X&I_Ozwfoe{_7(ra%o9$lIA-^D(0c4d4JV;=##eDx&< z>=WmdJ1_J%-Olx7Q+ED6?b(!_H))T6li2{Y z$4ZX0=X_|-ol()Ay}iQk_x9VF`Te6rfZyv&4%mlt=yCs+;wQH_Bz|&>L*j=&Fp1xZ zpN#lXd+a%CMmyzy&4Bh;$;a5IBfYk2(YHaHys@d@vHwo~0!R z>|^jg?b%*jXwUZO;-vpE?b%K)jt{nJkAM@*0JO(S)ZeW= zUE;^u(uYh2K7aQ&olnKAI6_f7=Jop{OMHV&sQ=2*tn|k z$HrBSKQ^vv{Gngi_@i;v#vhHVHvSlB{1IsUi5C9G$De57zkU3PMgrnF8olP@Pn5jo zv6H6AX!IPKrocsLShJRCi*d5}Rbd0z9N1M^@2+M}wz+SBv)oWIcX z_S_luyghq+J+-G+ySLv{dv4Re1pV9eF9+;nP_y=+m$wIXygdSI56|)T@EmUj&zXU> zhmv>AKIj#jeNZPh`v}ZF=vAv>pA5Zj%RT_@!9E7EPhRNN%H7USv~sueZ(5n#8K6Dy z9)7kD$nOt^9FxfJ{C9)FQr+MawI?g)ua<@j&0h|TKdqc`L-qmOJ_55(OB2~`>|QzbI|Maj6c=-r&|A1>z_8`VYU8Y+^E(+ z-}(HjTL1WJr&|Af)7L+5PA)G`7oMpdM8m;!y1@Ml1Kq!f@~z2K_b=Ob(^Gp^X-{u~-7o`vn{Ji%^z?1I4{1*?xwp@{SHNzV1G`~8zI@wD>gQjuo zXE5!0djN0GR`F#;o}(Qo(@S7_Iq)2VH_@x(_GwQ$ZXdwybA@+zvCoI-)scOAsG}T} z_6V>~550iJ{;y0g>~qcZ!afFS&o$G_?4!n;eH^e)0Mm;WzBzd|wC8o&W8ZuL{F{we zX%F`K)#24~hdba0*AfBtalk&;29)R)mUt^QMI^2^o ze|7Zj5&6qOdZ|S5(+%;{4e`?r@za%k-ZeX8pBQzNgOL{quup7uF5+h=#LrHMpPdjt zJ0X6Q0a|+m)*c7iW1#r4_9$$+A%40ce!3xky0VYLrYrk66!Am;S;UX*)6;Wg9|PH^ zhrhbAkNSna%<1tXYp7pz4WyUb=jr8*5I-9sel|kb9C+oor-$)$I-9kmuwFYsBG3%2(YS>h-?< z=F3LP$K0y%C&Z89+2Y5*`i1qcuiN-@IgCGpF#Z5O{%nQuM}IZU#vg&jkHF%`K;zE~ z%dz6wu6-$<{r;DYKi9bfW#iBFaqRKzKs*N+6!7NcN6V4-uXm=A_b(W|h}OTj*X+vlR&=l#QrV(<=W`o)Xs2|L^%%wfQB}t+V+X+ zmM^mr#F>Hb|8QpM`#&5^PHfu;V13B8j{*6+f%122kMj4ZZtFTWf;ijr{U5ClZU1L* zZ+~LjJ_FWu4y@~J|A#$#+y5!rqvu$ANaVdexZMUH(W^xhEr z2*{TmNRuOL4+?7kr)Uq$X4xkq?>75Htb2RK`gz=weYEYpUVu-H(^G04MiSP5AuISFZ~5?G93)rSG*^{NtfLy5qeQ9`zL-%C=! zo?Jo_N>0Lns$Hp5!fq%z8;2$d1McUO^6MM4z`RWJCmdcpqz DD@@`~ literal 0 HcmV?d00001 diff --git a/display.asm b/display.asm index acd2ff3..1fd966e 100755 --- a/display.asm +++ b/display.asm @@ -77,7 +77,7 @@ PlotLine = display + screenHeight*screenBytes ; the last line is plot pointer ;Screen displays go first to avoid crossing 4kb barrier ;----------------------------------------------- OptionsScreen - dta d"Welcome to Scorch ver. 128 (un)2000-2022" + dta d"Welcome to Scorch ver. 129 (un)2000-2022" dta d" Please select option with cursor keys " dta d" and press (Return) to proceed " OptionsHere diff --git a/lib/macro.hea b/lib/macro.hea index aed4482..c284272 100644 --- a/lib/macro.hea +++ b/lib/macro.hea @@ -54,11 +54,9 @@ ;------------------------------------- .MACRO halt ?stop - /* lda RANDOM and #$05 sta COLBAK - */ jmp ?stop .ENDM ;------------------------------------- diff --git a/scorch.asm b/scorch.asm index 38accc4..5c2b211 100644 --- a/scorch.asm +++ b/scorch.asm @@ -69,6 +69,7 @@ .zpvar modify .word .zpvar weaponPointer .word +displayposition = modify ;------------------------------- ;constants FlyDelay = 150 @@ -158,21 +159,21 @@ MainGameLoop mva #0 Erase jsr PMoutofScreen ;let P/M disappear - ; here gains and looses should be displayed (dollars) + ; here gains and losses should be displayed (dollars) ; finally we have changed our minds and money of players ; is displayed only in weapons shop ; Results are number of other deaths ; before the player dies itself - ; add gains and substract looses + ; add gains and substract losses ; gain is what player gets for lost energy of opponents ; energy lost by opponents is added during Round and ; little below in source, multiplied by 2 to get "dollars". - ; By analogy, loss is energy that given player looses during + ; By analogy, loss is energy that given player losses during ; each Round. - ; Important! If player has 10 energy and gets central hit - ; from nuke that would take 90 energy points his loss + ; Important! If player has 10 energy and gets a central hit + ; from nuke that would take 90 energy points, his loss ; is 90, not 10 jsr DisplayResults diff --git a/scorch.xex b/scorch.xex index 2a6b0f48c7f4febb5db85e697ae7c5ed24eca3f2..161ffa6d8509de4b2ffb6b1e207c80ef297dc6f6 100644 GIT binary patch delta 10409 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�(-8slkpb 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 delta 6658 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

$IiHP>`L}5C3}=O0RY+9^$ZNG>u-Gh8 zHY8a|!vF^A3bd;Xpj~Z%+Tkk1GrDV5{wG{~Y+rSM1o)s9$yLG^DGrS&o8Ui*s}^>c zb|PI_qMs)oR9E)y3v~wU-iO~|kailP2)-7-*J({g9=_Z8@Vw!O&Ct>$@CLaHg;_?JZ3fs!ZGboj0FL|##sWx{wW3&W0|^kd5yujtj1u>sHv!##1H+#T~yx8AEU&0 z-Y)?L!#@H3KOi7M^yUK-$Sa%i#Osb9-y1*vZoGREG_@w*=m1v|obwLJD$sNG#>0i* zc{d(D1+abS6U*fIt2Owm?L@8V9c(xAk#^y1c8qd#$HRvKM{m4yKjpX^kFPy;Ck?Zr zo~&xKyMNvb*LEX09nC496twe!^pRhswk?Oj#Z=L&57@rXJ>Tl5i+UCqF* z2;7AaaTmNiU4R~V45N?Ar%e4TZ*YFa8;pPF=hY_O_iJqG*ih?!zC+7$_KwRaz#27d cFr1E+Xn}PiaRaTfYKa@|1=ddkyoy)