Merge pull request #168 from pkali/develop

v1.50
This commit is contained in:
2024-03-15 16:54:29 -04:00
committed by GitHub
12 changed files with 112 additions and 61 deletions
+10 -13
View File
@@ -1966,27 +1966,24 @@ NoShieldEnergy
;========================= ;=========================
mwa Wind temp mwa Wind temp
lda #space lda #space
bit Wind+3 ; highest byte of 4 byte wind
bmi DisplayLeftWind
sta statusBuffer+80+17 ; (space) char sta statusBuffer+80+17 ; (space) char
lda #char_TAB ; (tab) char
sta statusBuffer+80+20
bne DisplayWindValue
DisplayLeftWind
sta statusBuffer+80+20 ; (space) char sta statusBuffer+80+20 ; (space) char
:4 lsrw temp ;divide by 16 to have a nice value on a screen
lda temp
beq DisplayWindValuex
bit Wind+3 ; highest byte of 4 byte wind
bmi DisplayLeftWindx
ldx #char_TAB ; (tab) char
stx statusBuffer+80+20
bne DisplayWindValuex
DisplayLeftWindx
lda #char_DEL ;(del) char lda #char_DEL ;(del) char
sta statusBuffer+80+17 sta statusBuffer+80+17
sec ; Wind = -Wind sec ; Wind = -Wind
lda #$00 lda #$00
sbc temp sbc temp
sta temp sta temp
lda #$00 DisplayWindValuex
sbc temp+1
sta temp+1
DisplayWindValue
:4 lsrw temp ;divide by 16 to have a nice value on a screen
lda temp
;sta decimal
mwx #statusBuffer+80+18 displayposition mwx #statusBuffer+80+18 displayposition
jsr displaybyte jsr displaybyte
+43 -1
View File
@@ -5,7 +5,7 @@ Scorch is a multi-player, turn-based, artillery video game. Tanks do turn-based
by Tomasz 'Pecus' Pecko and Pawel 'pirx' Kalinowski by Tomasz 'Pecus' Pecko and Pawel 'pirx' Kalinowski
Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022, 2023 Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022, 2023, 2024
[Game manual in PDF (layout by Bocianu)](Manuals/scorch_manual_en.pdf) [Game manual in PDF (layout by Bocianu)](Manuals/scorch_manual_en.pdf)
@@ -35,6 +35,16 @@ Compilation: (requires mads newer than 2023-09-13)
- `mads scorch.asm -o:scorch.bin -d:TARGET=5200` for Atari 5200 version - `mads scorch.asm -o:scorch.bin -d:TARGET=5200` for Atari 5200 version
- `mads scorchC64.asm -o:scorchC64.prg` for C64 version (WIP, not playable yet) - `mads scorchC64.asm -o:scorchC64.prg` for C64 version (WIP, not playable yet)
Update of the official Atari 8-bit cartridge from Mq:
- boot `scorch_fl.atr` from e.g. SIO2SD, SIO2PC or a large floppy
- insert the cartridge
- do what the flasher application says on the screen.
- do not despair if something goes wrong, just reboot, the reinsert cart, etc.
- it is smoother with QMeg OS, because there you can insert the cart, turn on your Atari, jump to the QMeg menu and boot the `scorch_fl.atr` from there. No need to insert the cart to the running Atari.
WARNING | ADVERTENCIA |警告 | AVERTISSEMENT | चेतावनी | WARNUNG | ПРЕДУПРЕЖДЕНИЕ | UWAGA | POZOR !!!
This is not an official cart manufacturer's (Mq) flasher, it is a collective and separate community effort. Be responsible, don't drink and flash your car(t). Better yet, do not flash it at all. In fact, to preserve the historical value of the artifact we strongly discourage from opening the game box and inserting the cartridge anywhere, especially into unauthorized orifices.
Game source code is split into several parts: Game source code is split into several parts:
- `scorch.asm` is the main game startup code - `scorch.asm` is the main game startup code
@@ -66,6 +76,38 @@ With the advent of [fujinet](https://fujinet.online/) we are thinking about maki
## Changelog: ## Changelog:
###### Version 1.50
2024-03-15
Atari 8-bit cart flasher and bug fixes!
@RB5200 provided us with a very good bug reports so the new version was inevitable. Additionally, we have used [cart flasher](https://github.com/jhusak/jataricart/tree/master/various_flashers/1MBscorch) from @jhusak to prepare the .atr with flasher.
Fixes and changes:
- Napalm and Hot Napalm animations were not playing.
- Wind of force 0 and left direction was wrapping arithmetic and caused very strong left shoots.
- Now 0 force wind has got no direction (no negative zeroes anymore!)
- CTRL+Tab was non functional for some time, returned
- Much nicer easter egg visualization.
###### Version 1.48
2024-03-11
New cart image, bugfixes and easter eggs.
In preparation for the festive season we have squeezed the code a bit more, fixed some buggies and added an easter egg or two :)
Most important changes:
- Cyborgs prefer attacking human players again! Due to unforeseen circumstances Cyborgs were a bit shy and not as vicious as planned. Fixed.
- A new weapon "Propaganda". In the spirit of a ["Phoney War"](https://en.wikipedia.org/wiki/Phoney_War) instead of dropping bombs we drop a bunch of leaflets. This will show them!
- Robotanks were making suboptimal purchase decisions. Fixed.
- Updated binary manuals.
- ... _redacted_
- ... _redacted for egg season_
- A new physical cart image - you can update carts and have even more fun now!
###### Version 1.43 ###### Version 1.43
2023-12-07 2023-12-07
+40 -8
View File
@@ -1,3 +1,5 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone .IF *>0 ;this is a trick that prevents compiling this file alone
; All main procedures of the game not dependent on hardware (I hope) :) ; All main procedures of the game not dependent on hardware (I hope) :)
@@ -742,19 +744,20 @@ NotNegativeShieldEnergy
;out: Wind (word) ;out: Wind (word)
;uses: _ ;uses: _
;-------------------------------------------------- ;--------------------------------------------------
lda random
cmp MaxWind
bcs GetRandomWind ; if more than MaxWind then randomize again
sta Wind
mva #$00 Wind+1 mva #$00 Wind+1
sta Wind+2 sta Wind+2
sta Wind+3 sta Wind+3
@ lda random
sta Wind
beq noWind ; if 0 then nothing to do
cmp MaxWind
bcs @- ; if more than MaxWind then randomize again
; multiply Wind by 16 ; multiply Wind by 16
; two bytes of Wind are treated as a decimal part of vx variable ; two bytes of Wind are treated as a decimal part of vx variable
:4 aslw Wind :4 aslw Wind
; decide the direction ; decide the direction
lda random lda random
bmi @+ bmi noWindDirectionChange
sec ; Wind = -Wind sec ; Wind = -Wind
.rept 2 .rept 2
lda #$00 lda #$00
@@ -764,7 +767,9 @@ NotNegativeShieldEnergy
lda #$ff lda #$ff
sta Wind+2 sta Wind+2
sta Wind+3 sta Wind+3
@ rts noWind
noWindDirectionChange
rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc MaxForceCalculate .proc MaxForceCalculate
@@ -1439,15 +1444,22 @@ FinishResultDisplay
.ENDIF .ENDIF
cmp #VuMeterTime cmp #VuMeterTime
bcc EndMeter bcc EndMeter
; Let's go!
jsr ClearTanks
; store all angles ; store all angles
ldx NumberOfPlayers ldx NumberOfPlayers
dex
@ lda AngleTable,x @ lda AngleTable,x
sta previousAngle,x sta previousAngle,x
lda #0
sta AngleTable,x
dex dex
bpl @- bpl @-
jsr DrawTanks
; let's go! ; let's go!
Meter Meter
jsr ClearTanks mva #1 Erase
jsr drawbarrels ; clear barrels
ldx NumberOfPlayers ldx NumberOfPlayers
@ txa @ txa
and #%00000001 and #%00000001
@@ -1457,7 +1469,8 @@ Meter
sta AngleTable,x sta AngleTable,x
dex dex
bpl @- bpl @-
jsr drawtanks mva #0 Erase
jsr drawbarrels ; draw barrels
jsr WaitOneFrame jsr WaitOneFrame
jsr GetKeyFast jsr GetKeyFast
cmp #@kbcode._none cmp #@kbcode._none
@@ -1465,6 +1478,7 @@ Meter
; restore all angles ; restore all angles
jsr ClearTanks jsr ClearTanks
ldx NumberOfPlayers ldx NumberOfPlayers
dex
@ lda previousAngle,x @ lda previousAngle,x
sta AngleTable,x sta AngleTable,x
dex dex
@@ -1481,6 +1495,24 @@ EndMeterAndReset
.ENDIF .ENDIF
EndMeter EndMeter
rts rts
;-----------
drawbarrels
lda TankNr
pha
ldx NumberOfPlayers
dex
stx TankNr
DrawNextTank
lda eXistenZ,x
beq nobarrel ; if energy=0 then no tank
jsr drawtanknr.BarrelChange
nobarrel
dec TankNr
ldx TankNr
bpl DrawNextTank
pla
sta TankNr
rts
.endp .endp
.ENDIF .ENDIF
+2 -2
View File
@@ -25,7 +25,7 @@
.ENDIF .ENDIF
;--------------------------------------------------- ;---------------------------------------------------
.ifndef SPLASH .ifndef SPLASH
.def SPLASH = 0 ; if 0 - no splash screens .def SPLASH = 0 ; if 0 - no splash screens
.endif .endif
.ifndef CART_VERSION .ifndef CART_VERSION
.def CART_VERSION = 0 ; if 1 - dual splash screen .def CART_VERSION = 0 ; if 1 - dual splash screen
@@ -41,7 +41,7 @@
;--------------------------------------------------- ;---------------------------------------------------
.macro build .macro build
dta d"1.48" ; number of this build (4 bytes) dta d"1.50" ; number of this build (4 bytes)
.endm .endm
.macro RMTSong .macro RMTSong
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -25,7 +25,7 @@
;--------------------------------------------------- ;---------------------------------------------------
.macro build .macro build
dta d"1.48" ; number of this build (4 bytes) dta d"1.50" ; number of this build (4 bytes)
.endm .endm
.macro RMTSong .macro RMTSong
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+16 -36
View File
@@ -261,6 +261,7 @@ RepeatNapalm ; external loop (for fire animation)
mwa xcircle xdraw mwa xcircle xdraw
sbw xdraw #(napalmRadius) ; 10 pixels on left side hit point sbw xdraw #(napalmRadius) ; 10 pixels on left side hit point
ldy #0 ldy #0
sty Erase ; becouse Erase flag is set!
sty magic+1 sty magic+1
RepeatFlame ; internal loop (draw flames) RepeatFlame ; internal loop (draw flames)
ldy #0 ldy #0
@@ -1247,19 +1248,9 @@ DeadTank
ldx TankNr ldx TankNr
;Checking the maximal force ;Check and set the maximal force
lda MaxForceTableH,x jsr RandomizeForce.LimitForce ; only limit (no randomize)
cmp ForceTableH,x
bne ContinueToCheckMaxForce2
lda MaxForceTableL,x
cmp ForceTableL,x
ContinueToCheckMaxForce2
bcs @+
lda MaxForceTableH,x
sta ForceTableH,x
lda MaxForceTableL,x
sta ForceTableL,x
@
jsr PutTankNameOnScreen jsr PutTankNameOnScreen
; jsr DisplayStatus ; There is no need anymore, it is always after PutTankNameOnScreen ; jsr DisplayStatus ; There is no need anymore, it is always after PutTankNameOnScreen
@@ -1271,13 +1262,8 @@ ContinueToCheckMaxForce2
bpl @+ bpl @+
jsr Shoot.AfterOffensiveText ; Lazy Darwin - aiming visualisation jsr Shoot.AfterOffensiveText ; Lazy Darwin - aiming visualisation
@ @
;keyboard reading
; KBCODE keeps code of last keybi
; SKSTAT $ff - nothing pressed
; $FB - any key
; $f7 - shift
; $f3 - shift+key
.IF VU_METER = 1 .IF VU_METER = 1
; VU meter timer reset
jsr VUMeter.EndMeterAndReset jsr VUMeter.EndMeterAndReset
.ENDIF .ENDIF
notpressed notpressed
@@ -1286,6 +1272,12 @@ notpressed
.IF VU_METER = 1 .IF VU_METER = 1
jsr VUMeter jsr VUMeter
.ENDIF .ENDIF
;keyboard reading
; KBCODE keeps code of last keybi
; SKSTAT $ff - nothing pressed
; $FB - any key
; $f7 - shift
; $f3 - shift+key
ldx TankNr ; for optimize ldx TankNr ; for optimize
jsr GetKeyFast jsr GetKeyFast
mvy #00 EscFlag ; prevent for set EscFalg in GetKey! we checking this in CheckExitKeys! mvy #00 EscFlag ; prevent for set EscFalg in GetKey! we checking this in CheckExitKeys!
@@ -1328,12 +1320,13 @@ NoSpyHard
mva #0 escFlag mva #0 escFlag
jmp ReleaseAndLoop jmp ReleaseAndLoop
@ @
/*o cmp #$80|@kbcode._up /* cmp #$80|@kbcode._up
jeq CTRLPressedUp jeq CTRLPressedUp
cmp #$80|@kbcode._down cmp #$80|@kbcode._down
jeq CTRLPressedDown jeq CTRLPressedDown */
cmp #$80|@kbcode._tab cmp #$80|@kbcode._tab
jeq CTRLPressedTAB */ jeq CTRLPressedTAB
jumpFromStick jumpFromStick
.IF TARGET = 800 .IF TARGET = 800
@@ -1399,20 +1392,7 @@ pressedUp
CheckingMaxForce CheckingMaxForce
mva #sfx_set_power_1 sfx_effect mva #sfx_set_power_1 sfx_effect
; checking is at the beginning of the procedure !!
lda MaxForceTableH,x
cmp ForceTableH,x
bne FurtherCheckMaxForce
lda MaxForceTableL,x
cmp ForceTableL,x
FurtherCheckMaxForce
jcs BeforeFire
lda MaxForceTableH,x
sta ForceTableH,x
lda MaxForceTableL,x
sta ForceTableL,x
jmp BeforeFire jmp BeforeFire
CTRLPressedUp CTRLPressedUp