mirror of
https://github.com/Pecusx/scorch_src.git
synced 2026-05-20 22:33:43 +02:00
build 132
This commit is contained in:
@@ -4,42 +4,51 @@ by Tomasz 'pecus' Pecko and Pawel 'pirx' Kalinowski
|
||||
|
||||
Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022
|
||||
|
||||
you can contact us at pecus@poczta.fm or pirx@5oft.pl
|
||||
You can contact us at pecus@poczta.fm or pirx@5oft.pl
|
||||
home page of this project is https://github.com/pkali/scorch_src
|
||||
|
||||
this source code was compiled under OMC65 crossassembler
|
||||
This source code was originally compiled under OMC65 crossassembler
|
||||
(https://github.com/pkali/omc65)
|
||||
and on 2012-06-21 translated to mads
|
||||
|
||||
game source code is split into 5+1 parts:
|
||||
Game source code is split into 5+3 parts:
|
||||
- scorch.asm is the main game code (with many assorted routines)
|
||||
- grafproc.asm - graphics routines like line or circle
|
||||
- textproc.asm - text routines like list of weapons and shop
|
||||
- variables.asm - all non-zero page variables and constants
|
||||
- variables.asm - all non-zero page variables
|
||||
- constants.asm - various tables of constants
|
||||
- display.asm - display lists and text screen definitions
|
||||
- ai.asm - artificial stupidity of computer opponents
|
||||
- weapons.asm - general arsenal of tankies
|
||||
|
||||
we were trying to use as much macros and pseudo-ops as possible
|
||||
they are defined in atari.hea and macro.hea files together with many
|
||||
We were trying to use as much macros and pseudo-ops as possible.
|
||||
They are defined in atari.hea and macro.hea files together with many
|
||||
atari constants. This way it should be relatively easy to
|
||||
port this code to e.g. C64
|
||||
|
||||
After those N years of working on this piece of code
|
||||
we are sure it would be much wiser to write it in C, Action!
|
||||
or MadPascal but on the other hand it is so much fun to type 150 chars
|
||||
where you want to have y=ax+b :)
|
||||
where all you want to have y=ax+b :)
|
||||
|
||||
originally most variables were in Polish, comments were sparse
|
||||
Originally most variables were in Polish, comments were sparse
|
||||
but we wanted to release this piece of code to public
|
||||
and due to being always short of time/energy (to finish the game)
|
||||
we decided it must go in 'English' to let other people work on it.
|
||||
it never happened, but we got some encouraging comments and we are still
|
||||
It never happened, but we got some encouraging comments and we are still
|
||||
trying to do something from time to time.
|
||||
|
||||
with the advent of fujinet (https://fujinet.online/) we are thinking about making the game interplanetary, err, with multiplayer over the net. we'll see.
|
||||
With the advent of fujinet (https://fujinet.online/) we are thinking about making the game interplanetary, err, with multiplayer over the net. We'll see.
|
||||
|
||||
## Changes:
|
||||
|
||||
###### Build 132
|
||||
2022-03-27
|
||||
- fixed bug: https://github.com/pkali/scorch_src/issues/21 Wrong number of shells purchased
|
||||
- fixed bug: https://github.com/pkali/scorch_src/issues/19 Inventory not cleared on next match. When fixing in a general way (cleaning all variables on game restart) I encountered a very old and nasty bug that made the game running basically by pure chance.
|
||||
- fixed bug: https://github.com/pkali/scorch_src/issues/18 selecting players using fire sometimes selects more than one. Rewritten keyboard handling to prepare for enhancements like #17
|
||||
- tables of constants moved to a separate file, variables declared with .DS directive in preparation for memory map optimization.
|
||||
|
||||
###### Build 131
|
||||
2022-03-20
|
||||
- fixed bug: https://github.com/pkali/scorch_src/issues/4 It was really hard one, because I had to unspaghetti our own lousy code :]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; @com.wudsn.ide.asm.mainsourcefile=program.asm
|
||||
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||
|
||||
; artificial intelligence of tanks goes here!
|
||||
; in A there is a level of tank's intelligence
|
||||
|
||||
+1
-1
@@ -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. 131 (un)2000-2022"
|
||||
dta d"Welcome to Scorch ver. 132 (un)2000-2022"
|
||||
dta d" Please select option with cursor keys "
|
||||
dta d" and press (Return) to proceed "
|
||||
OptionsHere
|
||||
|
||||
@@ -438,18 +438,6 @@ splot8 .proc
|
||||
RTS
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
WaitForKeyRelease .proc
|
||||
;--------------------------------------------------
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq KeyIsReleased
|
||||
cmp #$f7
|
||||
bne WaitForKeyRelease
|
||||
KeyIsReleased
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
clearscreen .proc
|
||||
;--------------------------------------------------
|
||||
|
||||
+97
-93
@@ -11,13 +11,14 @@
|
||||
;(https://github.com/pkali/omc65)
|
||||
;and on 2012-06-21 translated to mads
|
||||
;
|
||||
;game source code is split into 5+1 parts:
|
||||
;game source code is split into 5+2 parts:
|
||||
;scorch.asm is the main game code (with many assorted routines)
|
||||
;grafproc.asm - graphics routines like line or circle
|
||||
;textproc.asm - text routines like list of weapons and shop
|
||||
;variables.asm - all non-zero page variables and constans
|
||||
;display.asm - display lists and text screen definitions
|
||||
;ai.asm - artificial stupidity of computer opponents
|
||||
;weapons.asm - general arsenal of tankies
|
||||
|
||||
;we were trying to use as much macros and pseudoops as possible
|
||||
;they are defined in atari.hea and macro.hea files together with many
|
||||
@@ -91,6 +92,7 @@ MaxPlayers = 6
|
||||
;-----------------------------------------------
|
||||
icl 'display.asm'
|
||||
;----------------------------------------------
|
||||
icl 'constants.asm'
|
||||
icl 'variables.asm'
|
||||
;--------------------------------------------------
|
||||
OffensiveTexts
|
||||
@@ -120,12 +122,11 @@ START
|
||||
|
||||
mva #0 TankNr
|
||||
|
||||
loop01
|
||||
jsr EnterPlayerName
|
||||
inc TankNr
|
||||
lda TankNr
|
||||
cmp NumberOfPlayers
|
||||
bne loop01
|
||||
@ jsr EnterPlayerName
|
||||
inc TankNr
|
||||
lda TankNr
|
||||
cmp NumberOfPlayers
|
||||
bne @-
|
||||
|
||||
mwa #dl dlptrs
|
||||
lda dmactls
|
||||
@@ -185,27 +186,12 @@ checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE
|
||||
beq peopleAreHere
|
||||
dex
|
||||
bpl checkForHuman
|
||||
tay
|
||||
; no people, just wait a bit
|
||||
pause 150
|
||||
jmp noKey
|
||||
|
||||
peopleAreHere
|
||||
;key ; only if there is a human player
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq checkFire
|
||||
cmp #$f7
|
||||
beq checkFire
|
||||
jmp noKey ;key pressed, so go
|
||||
checkFire
|
||||
;------------JOY-------------
|
||||
;happy happy joy joy
|
||||
;check for joystick now
|
||||
;fire
|
||||
lda TRIG0
|
||||
bne peopleAreHere ;fire not pressed, so loop
|
||||
|
||||
jsr getkey
|
||||
noKey
|
||||
ldx NumberOfPlayers
|
||||
dex
|
||||
@@ -267,11 +253,11 @@ Round .proc ;
|
||||
|
||||
lda #0
|
||||
tax
|
||||
loop
|
||||
@
|
||||
sta previousAngle,x
|
||||
inx
|
||||
cpx #(clearEnd-PreviousAngle)
|
||||
bne loop
|
||||
cpx #(singleRoundVarsEnd-PreviousAngle)
|
||||
bne @-
|
||||
|
||||
ldx #5
|
||||
SettingEnergies
|
||||
@@ -317,11 +303,10 @@ SettingEnergies
|
||||
jsr drawmountains ;draw them
|
||||
jsr drawtanks ;finally draw tanks
|
||||
|
||||
.endp ; not really end of the procedure, but just for now. revisit.
|
||||
.endp ; not really end of the procedure, but just for now. TODO: revisit.
|
||||
|
||||
;--------------------round screen is ready---------
|
||||
|
||||
;mva #0 TankNr
|
||||
mva #0 TankSequencePointer
|
||||
|
||||
MainRoundLoop
|
||||
@@ -628,70 +613,8 @@ PlayerXdeath .proc
|
||||
|
||||
jmp AfterExplode
|
||||
|
||||
|
||||
;--------------------------------------------------
|
||||
Explosion .proc
|
||||
;--------------------------------------------------
|
||||
;cleanup of the soil fall down ranges (left and right)
|
||||
mwa #screenwidth RangeLeft
|
||||
lda #0
|
||||
sta RangeRight
|
||||
sta RangeRight+1
|
||||
|
||||
ldx TankNr
|
||||
lda ActiveWeapon,x
|
||||
asl
|
||||
.endp
|
||||
Explosion2 .proc
|
||||
tax
|
||||
lda ExplosionRoutines+1,x
|
||||
pha
|
||||
lda ExplosionRoutines,x
|
||||
pha
|
||||
rts
|
||||
ExplosionRoutines
|
||||
.word babymissile-1
|
||||
.word missile-1
|
||||
.word babynuke-1
|
||||
.word nuke-1
|
||||
.word leapfrog-1
|
||||
.word funkybomb-1
|
||||
.word mirv-1
|
||||
.word deathshead-1
|
||||
.word VOID-1 ;napalm
|
||||
.word VOID-1 ;hotnapalm
|
||||
.word tracer-1
|
||||
.word VOID-1 ;smoketracer
|
||||
.word babyroller-1
|
||||
.word roller-1
|
||||
.word heavyroller-1
|
||||
.word VOID-1 ;riotcharge
|
||||
.word VOID-1 ;riotblast
|
||||
.word riotbomb-1
|
||||
.word heavyriotbomb-1
|
||||
.word babydigger-1
|
||||
.word digger-1
|
||||
.word heavydigger-1
|
||||
.word babysandhog-1
|
||||
.word sandhog-1
|
||||
.word heavysandhog-1
|
||||
.word dirtclod-1
|
||||
.word dirtball-1
|
||||
.word tonofdirt-1
|
||||
.word VOID-1 ;liquiddirt
|
||||
.word dirtcharge-1
|
||||
.word VOID-1 ;earthdisrupter
|
||||
.word VOID-1 ;plasmablast
|
||||
.word laser-1
|
||||
|
||||
VOID
|
||||
rts
|
||||
.endp
|
||||
; ------------------------
|
||||
|
||||
icl 'weapons.asm'
|
||||
|
||||
|
||||
;--------------------------------------------------
|
||||
DecreaseEnergyX .proc
|
||||
;Decreases energy of player nr X
|
||||
@@ -767,7 +690,7 @@ PMoutofScreen .proc
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.nowarn .proc WeaponCleanup;
|
||||
.proc WeaponCleanup;
|
||||
; cleaning of the weapon possesion tables
|
||||
; (99 of Baby Missles, all other weapons=0)
|
||||
;--------------------------------------------------
|
||||
@@ -792,8 +715,7 @@ loop05
|
||||
Initialize .proc
|
||||
;Initialization sequence
|
||||
;--------------------------------------------------
|
||||
;jsr GenerateOffensiveTextTables
|
||||
;jsr GenerateDeffensiveTextTables
|
||||
deletePtr = temp
|
||||
|
||||
lda #0
|
||||
sta Erase
|
||||
@@ -802,6 +724,33 @@ Initialize .proc
|
||||
sta oldPlotPointerX+1
|
||||
sta GameIsOver
|
||||
|
||||
|
||||
; clean variables
|
||||
tay
|
||||
mwa #variablesStart deletePtr
|
||||
@ tya
|
||||
sta (deletePtr),y
|
||||
inw deletePtr
|
||||
cpw deletePtr #variablesEnd
|
||||
bne @-
|
||||
|
||||
lda #2
|
||||
sta OptionsTable+2
|
||||
sta OptionsTable+3
|
||||
|
||||
mwa #1024 RandBoundaryHigh
|
||||
mva #$ff LastWeapon
|
||||
sta HowMuchToFall
|
||||
mva #1 color
|
||||
mva #$40 MaxWind
|
||||
mwa #$0080 Wind
|
||||
mva #25 gravity
|
||||
|
||||
|
||||
|
||||
jsr WeaponCleanup
|
||||
|
||||
|
||||
mva #$2 colpf2s
|
||||
mva #12 colpf3s
|
||||
mva #>WeaponFont chbas
|
||||
@@ -1121,6 +1070,61 @@ nextishigher
|
||||
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
getkey .proc; waits for pressing a key and returns pressed value in A
|
||||
;--------------------------------------------------
|
||||
jsr WaitForKeyRelease
|
||||
@
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq checkJoyGetKey ; key not pressed, check Joy
|
||||
|
||||
lda kbcode
|
||||
and #$3f ;CTRL and SHIFT ellimination
|
||||
rts
|
||||
checkJoyGetKey
|
||||
;------------JOY-------------
|
||||
;happy happy joy joy
|
||||
;check for joystick now
|
||||
lda JSTICK0
|
||||
and #$0f
|
||||
cmp #$0f
|
||||
beq notpressedJoyGetKey
|
||||
tay
|
||||
lda joyToKeyTable,y
|
||||
rts
|
||||
notpressedJoyGetKey
|
||||
;fire
|
||||
lda TRIG0
|
||||
bne @-
|
||||
lda #$0c ;Return key
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
getkeynowait .proc;
|
||||
;--------------------------------------------------
|
||||
jsr WaitForKeyRelease
|
||||
lda kbcode
|
||||
and #$3f ;CTRL and SHIFT ellimination
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
WaitForKeyRelease .proc
|
||||
;--------------------------------------------------
|
||||
lda JSTICK0
|
||||
and #$0f
|
||||
cmp #$0f
|
||||
bne WaitForKeyRelease
|
||||
lda TRIG0
|
||||
beq WaitForKeyRelease
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
bne WaitForKeyRelease
|
||||
KeyIsReleased
|
||||
rts
|
||||
.endp
|
||||
|
||||
;----------------------------------------------
|
||||
icl 'textproc.asm'
|
||||
;----------------------------------------------
|
||||
|
||||
BIN
Binary file not shown.
+9
-62
@@ -6,62 +6,7 @@
|
||||
; this module contains routines used in text mode
|
||||
; like shop and start-up options
|
||||
;----------------------------------------
|
||||
;--------------------------------------------------
|
||||
getkey .proc; waits for pressing a key and returns pressed value in A
|
||||
;--------------------------------------------------
|
||||
pause 5
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq lopx01
|
||||
cmp #$f7
|
||||
bne getkey ; I guess it waits for RELEASING a key
|
||||
lda JSTICK0
|
||||
and #$0f
|
||||
cmp #$0f
|
||||
bne getkey ; waits for not moving the joy
|
||||
lda TRIG0
|
||||
beq getkey ; waits for releasing FIRE
|
||||
|
||||
|
||||
lopx01 lda SKSTAT
|
||||
cmp #$ff
|
||||
beq checkJoyGetKey ; key not pressed, check Joy
|
||||
cmp #$f7
|
||||
beq checkJoyGetKey ; key not pressed, check Joy
|
||||
|
||||
lda kbcode
|
||||
and #$3f ;CTRL and SHIFT ellimination
|
||||
rts
|
||||
checkJoyGetKey
|
||||
;------------JOY-------------
|
||||
;happy happy joy joy
|
||||
;check for joystick now
|
||||
lda JSTICK0
|
||||
and #$0f
|
||||
cmp #$0f
|
||||
beq notpressedJoyGetKey
|
||||
tay
|
||||
lda joyToKeyTable,y
|
||||
rts
|
||||
notpressedJoyGetKey
|
||||
;fire
|
||||
lda TRIG0
|
||||
bne lopx01
|
||||
lda #$0c ;Return key
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
getkeynowait .proc;
|
||||
;--------------------------------------------------
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq getkeynowait
|
||||
cmp #$f7
|
||||
beq getkeynowait ; I guess it waits for RELEASING a key
|
||||
lda kbcode
|
||||
and #$3f ;CTRL and SHIFT ellimination
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
Options .proc
|
||||
;--------------------------------------------------
|
||||
@@ -682,6 +627,7 @@ SecondSelected
|
||||
;--------------------------------------------------
|
||||
.proc PurchaseWeaponNow
|
||||
;--------------------------------------------------
|
||||
weaponPtr = temp
|
||||
isPriceZero = tempXRoller
|
||||
|
||||
lda WhichList
|
||||
@@ -718,17 +664,18 @@ PurchaseAll
|
||||
; and add appropriate number of shells
|
||||
|
||||
lda TanksWeaponsTableL,x
|
||||
sta temp
|
||||
sta weaponPtr
|
||||
lda TanksWeaponsTableH,x
|
||||
sta temp+1
|
||||
sta weaponPtr+1
|
||||
|
||||
lda (temp),y ; and we have number of posessed bullets of the weapon
|
||||
clc
|
||||
lda (weaponPtr),y ; and we have number of posessed bullets of the weapon
|
||||
adc WeaponUnits,y
|
||||
sta (temp),y ; and we added appropriate number of bullets
|
||||
sta (weaponPtr),y ; and we added appropriate number of bullets
|
||||
cmp #100 ; but there should be no more than 99 bullets
|
||||
bcc LessThan100
|
||||
lda #99
|
||||
sta (temp),y
|
||||
sta (weaponPtr),y
|
||||
LessThan100
|
||||
sty LastWeapon ; store last purchased weapon
|
||||
; because we must put screen pointer next to it
|
||||
@@ -739,7 +686,7 @@ LessThan100
|
||||
lda isPriceZero
|
||||
bne @+
|
||||
lda #0
|
||||
sta (temp),y
|
||||
sta (weaponPtr),y
|
||||
@
|
||||
jmp Purchase.AfterPurchase
|
||||
.endp
|
||||
@@ -1021,7 +968,7 @@ nextchar05
|
||||
.proc SelectLevel
|
||||
; this routine highlights the choosen
|
||||
; level of the computer opponent
|
||||
ldx #$9 ; 9 possible levels
|
||||
ldx #8 ; 9 possible levels
|
||||
CheckNextLevel01
|
||||
lda LevelNameBeginL,x ; address on the screen
|
||||
sta temp
|
||||
|
||||
+198
-978
File diff suppressed because it is too large
Load Diff
+64
-9
@@ -1,6 +1,65 @@
|
||||
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||
|
||||
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||
;--------------------------------------------------
|
||||
Explosion .proc
|
||||
;--------------------------------------------------
|
||||
;cleanup of the soil fall down ranges (left and right)
|
||||
mwa #screenwidth RangeLeft
|
||||
lda #0
|
||||
sta RangeRight
|
||||
sta RangeRight+1
|
||||
|
||||
ldx TankNr
|
||||
lda ActiveWeapon,x
|
||||
asl
|
||||
.endp
|
||||
Explosion2 .proc
|
||||
tax
|
||||
lda ExplosionRoutines+1,x
|
||||
pha
|
||||
lda ExplosionRoutines,x
|
||||
pha
|
||||
rts
|
||||
ExplosionRoutines
|
||||
.word babymissile-1
|
||||
.word missile-1
|
||||
.word babynuke-1
|
||||
.word nuke-1
|
||||
.word leapfrog-1
|
||||
.word funkybomb-1
|
||||
.word mirv-1
|
||||
.word deathshead-1
|
||||
.word VOID-1 ;napalm
|
||||
.word VOID-1 ;hotnapalm
|
||||
.word tracer-1
|
||||
.word VOID-1 ;smoketracer
|
||||
.word babyroller-1
|
||||
.word roller-1
|
||||
.word heavyroller-1
|
||||
.word VOID-1 ;riotcharge
|
||||
.word VOID-1 ;riotblast
|
||||
.word riotbomb-1
|
||||
.word heavyriotbomb-1
|
||||
.word babydigger-1
|
||||
.word digger-1
|
||||
.word heavydigger-1
|
||||
.word babysandhog-1
|
||||
.word sandhog-1
|
||||
.word heavysandhog-1
|
||||
.word dirtclod-1
|
||||
.word dirtball-1
|
||||
.word tonofdirt-1
|
||||
.word VOID-1 ;liquiddirt
|
||||
.word dirtcharge-1
|
||||
.word VOID-1 ;earthdisrupter
|
||||
.word VOID-1 ;plasmablast
|
||||
.word laser-1
|
||||
|
||||
VOID
|
||||
rts
|
||||
.endp
|
||||
; ------------------------
|
||||
|
||||
; ------------------------
|
||||
.proc babymissile
|
||||
@@ -811,7 +870,6 @@ ContinueToCheckMaxForce2
|
||||
jsr DrawTankNr
|
||||
|
||||
wait ; best after drawing a tank
|
||||
;wait
|
||||
|
||||
|
||||
;keyboard reading
|
||||
@@ -822,6 +880,8 @@ ContinueToCheckMaxForce2
|
||||
; $f3 - shift+key
|
||||
|
||||
notpressed
|
||||
lda TRIG0
|
||||
beq notpressed
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq checkJoy
|
||||
@@ -866,11 +926,9 @@ checkJoy
|
||||
notpressedJoy
|
||||
;fire
|
||||
lda TRIG0
|
||||
bne JNotFire
|
||||
lda #$21
|
||||
jmp jumpFromStick
|
||||
JNotFire
|
||||
jmp notpressed
|
||||
jeq pressedSpace
|
||||
jmp notpressed
|
||||
|
||||
;
|
||||
pressedUp
|
||||
;force increaseeee!
|
||||
@@ -1060,7 +1118,6 @@ AfterStrongShoot
|
||||
clc
|
||||
lda xtraj+1
|
||||
adc EndOfTheBarrelX,y ; correction of X
|
||||
;adc #4
|
||||
sta xtraj+1
|
||||
lda xtraj+2
|
||||
adc #0
|
||||
@@ -1068,7 +1125,6 @@ AfterStrongShoot
|
||||
sec
|
||||
lda ytraj+1
|
||||
sbc EndOfTheBarrelY,y ; correction of Y
|
||||
;sbc #7
|
||||
sta ytraj+1
|
||||
lda ytraj+2
|
||||
sbc #0
|
||||
@@ -1078,7 +1134,6 @@ AfterStrongShoot
|
||||
|
||||
jsr Flight
|
||||
mva #1 color
|
||||
;jsr WaitForKeyRelease
|
||||
rts
|
||||
.endp
|
||||
|
||||
|
||||
Reference in New Issue
Block a user