mirror of
https://github.com/pkali/scorch_src.git
synced 2026-05-20 22:34:21 +02:00
Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c86aa65047 | |||
| 96372de688 | |||
| 1b6fdb6bb5 | |||
| e215148faf | |||
| 0e20f0e68d | |||
| cb1f9514e5 | |||
| 98018a16dd | |||
| 3174876183 | |||
| 253faff3cd | |||
| 16d629d94d | |||
| e8830401d0 | |||
| b759091882 | |||
| da99406bbd | |||
| 7088e02527 | |||
| 697a6ef9fe | |||
| 6685ef1203 | |||
| 28e34f3c02 | |||
| 14b35275f7 | |||
| 18107445e4 | |||
| 3a0600bd4d | |||
| df9db33c4b | |||
| 0b5029ddb9 | |||
| c9e8adb352 | |||
| 9aabd92d01 | |||
| 132cef82ee | |||
| 719b712451 | |||
| bc31fa0ea1 | |||
| 1e5530579f | |||
| a5f02cf33b | |||
| 5657171bb2 | |||
| 66d620fe4b | |||
| 19b71664f1 | |||
| f2de25a769 | |||
| 16fc84aa6f | |||
| fa79836f77 | |||
| f475999918 | |||
| 2005f7bf98 | |||
| ab965c00b4 | |||
| 83969e747b | |||
| e1a930ca44 | |||
| d12102ad60 | |||
| 2de654db32 | |||
| 0703a9db93 | |||
| af305f154c | |||
| 4cf4eb14c7 | |||
| 1337c83791 |
+2
-1
@@ -67,7 +67,7 @@ The keyboard controls here are simple, cursor keys or joystick: left/right - cha
|
||||
| A800 | 5200 | function |
|
||||
| --- | --- | --- |
|
||||
| [SPACE] | [0] | or joystick button pressed briefly - firing a shot. |
|
||||
| [TAB] or [SELECT] | [5] | selection of offensive weapons (this option is not available directly with the joystick - you need to select Inventory). In the main menu it changes the mountain shading, indicated by the hill color change at the bottom of the screen. |
|
||||
| [TAB] or [SELECT] | [5] | selection of offensive weapons (this option is not available directly with the joystick - you need to select Inventory). |
|
||||
| [I] | [9] | or longer holding the joystick button - go to Inventory. It is a screen (actually two) with the same layout as the shopping menu, it also works similarly except that here you don't buy weapons, but choose one of the offensive ones to shoot or activate a defensive weapon. |
|
||||
| [A] or [OPTION] | [7] | go directly to the defensive weapons activation.
|
||||
| [M] | [PAUSE] | disable/enable background music. |
|
||||
@@ -78,6 +78,7 @@ The keyboard controls here are simple, cursor keys or joystick: left/right - cha
|
||||
| [G] | N/A | changes the mountain shading |
|
||||
| [ESC] | [*] | during the entire game at any time (unless the computer is playing, then sometimes you have to wait a while) you can press the [ESC] key, which allows you to abort the game and return to the beginning (of course, there is protection against accidental pressing). |
|
||||
| [Y] | [1] | when asked to abort or terminate the game - confirmation |
|
||||
| [CTRL] + [HELP] | N/A | Toggle "visual debug" mode. It displays distances measured, laser aiming, and aiming technique. It leaves a mess on the screen, but it does not impair the game, just makes it a bit harder. |
|
||||
|
||||
## 5. Game mechanics - offensive weapons
|
||||
|
||||
|
||||
+3
-2
@@ -23,7 +23,7 @@ Na pierwszym ekranie możemy skonfigurować opcje rozgrywki:
|
||||
|
||||
Wybór opcji klawiszami kursora lub joystickiem.
|
||||
|
||||
Klawisz [TAB] lub [SELECT], a na konsoli Atari 5200 klawisz [5] kontrolera zmieniają kolor gór (3 wersje do wyboru) lub (leśli kursor wskazuje opcję wyboru siły wiatru "Wind") zmieniają sposób losowania siły wiatru z "co rundę" na "co turę" i odwrotnie. Losowanie co turę jest sygnalizowane znakiem "?" przy słowie "Wind".
|
||||
Klawisz [TAB] lub [SELECT], a na konsoli Atari 5200 klawisz [5] kontrolera zmieniają kolor gór (3 wersje do wyboru) lub (jeśli kursor wskazuje opcję wyboru siły wiatru "Wind") zmieniają sposób losowania siły wiatru z "co rundę" na "co turę" i odwrotnie. Losowanie co turę jest sygnalizowane znakiem "?" przy słowie "Wind".
|
||||
|
||||
Klawisz [RETURN] lub przycisk Joysticka przechodzi do następnego ekranu.
|
||||
|
||||
@@ -66,7 +66,7 @@ Tutaj klawiszologia jest prosta, klawisze kursora lub joystick: lewo/prawo - zmi
|
||||
| A800 | 5200 | funkcja |
|
||||
| --- | --- | --- |
|
||||
| [SPACJA] | [0] | lub przycisk joysticka naciśnięte krótko - oddanie strzału |
|
||||
| [TAB] lub [SELECT] | [5] | wybór broni ofensywnej (ta opcja nie jest dostępna bezpośrednio joystickiem - trzeba wybrać Inventory). W głównym menu zmienia cieniowanie gór, widoczne w kolorze górek na dole ekranu. |
|
||||
| [TAB] lub [SELECT] | [5] | wybór broni ofensywnej (ta opcja nie jest dostępna bezpośrednio joystickiem - trzeba wybrać Inventory). |
|
||||
| [I] | [9] | lub dłuższe przytrzymanie przycisku joysticka - przejście do Inventory (aktywacji broni). Inventory to ekran (a w zasadzie dwa) bliźniaczo podobny do ekranu zakupów. Zasady poruszania się są identyczne z tym, że tu nie kupujemy broni, ale wybieramy jedną z ofensywnych, którą będziemy strzelać lub aktywujemy broń defensywną. |
|
||||
| [A] lub [OPTION] | [7] | bezpośrednie przejście na ekran Inventory aktywacji broni defensywnych. |
|
||||
| [M] | [PAUSE] | wyłączenie/włączenie muzyki w tle |
|
||||
@@ -77,6 +77,7 @@ Tutaj klawiszologia jest prosta, klawisze kursora lub joystick: lewo/prawo - zmi
|
||||
| [G] | brak | zmienia cieniowanie gór |
|
||||
| [ESC] | [*] | w czasie całej gry w dowolnym momencie (chyba że akurat gra komputer, wtedy czasem trzeba chwilę poczekać) można nacisnąć klawisz [ESC], który umożliwia przerwanie gry i powrót na początek (oczywiście jest zabezpieczenie przed przypadkowym naciśnięciem). |
|
||||
| [Y] | [1] | w przypadku pytania o przerwanie lub zakończenie gry - potwierdzenie decyzji |
|
||||
| [CTRL] + [HELP] | brak | Przełącza tryb "visual debug". Wizualizuje mierzone odległości, celowanie lasera oraz technikę celowania komputera. Pozostawia bałagan na ekranie, co nie zmienia rozgrywki, tylko ją nieco utrudnia. |
|
||||
|
||||
## 5. Zasady gry - bronie ofensywne
|
||||
|
||||
|
||||
@@ -8,17 +8,19 @@ by Tomasz 'Pecus' Pecko and Pawel 'pirx' Kalinowski
|
||||
Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022
|
||||
|
||||
Contributors:
|
||||
- Miker (@mikerro) - in-game music and sfx, ideas, QA
|
||||
- Kaz - splash screen, ideas
|
||||
- Adam (@6502adam) - font, design, QA
|
||||
- Bocianu (@bocianu) - important ideas, FujiNet implementation, QA
|
||||
- Miker ([mikerro](https://github.com/mikerro)) - in-game music and sfx, ideas, QA
|
||||
- Kaz - original splash screen, SV Atari 50 splash screen, ideas
|
||||
- Adam ([6502adam](https://github.com/6502adam)) - font, design, QA
|
||||
- Bocianu ([bocianu](https://github.com/bocianu)) - important ideas, FujiNet implementation, QA
|
||||
- Emkay - splash screen music
|
||||
- Fox (@pfusik) - plot and point optimization
|
||||
- Fox ([pfusik](https://github.com/pfusik)) - plot and point optimization
|
||||
- xorcerer ([xauberer](https://github.com/xauberer)) - prompt for AI generated splash and sticker
|
||||
|
||||
|
||||
QA: Probabilitydragon, KrzysRog, Beeblebrox, EnderDude, lopezpb, Dracon, brad-colbert, archon800,
|
||||
Shaggy the Atarian, x=usr(1536), Aking, Kenshi
|
||||
|
||||
Special thanks to tebe (@tebe6502), JAC! (@peterdell) and phaeron for their fantastic tools and support.
|
||||
Special thanks to tebe ([tebe6502](https://github.com/tebe6502)), JAC! ([peterdell](https://github.com/peterdell)) and phaeron ([Altirra](https://www.virtualdub.org/altirra.html)) for their fantastic tools and support.
|
||||
|
||||
You can contact us via [AtariAge](https://atariage.com) or [AtariOnLine](https://atarionline.pl) forums.
|
||||
|
||||
@@ -51,6 +53,29 @@ With the advent of [fujinet](https://fujinet.online/) we are thinking about maki
|
||||
|
||||
## Changelog:
|
||||
|
||||
###### Version 1.28
|
||||
2023-04-22
|
||||
|
||||
Greetings and salutations,
|
||||
|
||||
Allow me to present the release notes for Version 1.28 of our esteemed hobby game for 8-bit computers.
|
||||
|
||||
First and foremost, let it be known that we have reached the end of an era. We bid adieu to the solitary player versions, as we are determined to preserve the sanctity of this auspicious round version number.
|
||||
|
||||
Moving on to the technical enhancements and embellishments, we are proud to introduce a simulated stereo feature for those fortunate enough to possess the dual pokey hardware. This auditory wonder was brought to fruition by the esteemed Arthur "Two Pokeys" Jackson, whose mastery in the field of sound engineering knows no bounds.
|
||||
|
||||
Furthermore, we have bestowed upon our beloved creation a splash screen of unrivaled brilliance, crafted by the masterful xorcerer. This work of art, by the Artificial Unintelligence and Machine Forgetting, shall leave an indelible mark on all who behold it.
|
||||
|
||||
Our developers have also painstakingly refined the game's performance with a plethora of improvements, including a refined round and final results sorting mechanism, additional keyboard usage assistance in the main menu, and a significant acceleration of the 8x8 and 4x4 put char routines. Additionally, we have incorporated configurable hardware and screen memory layout agnostic put char routines to accommodate future ports and ensure seamless compatibility.
|
||||
|
||||
Last but certainly not least, our mountain drawing optimization shall elevate the visual experience to new heights, ensuring an immersive and enjoyable experience for all.
|
||||
|
||||
We hope that these improvements shall enhance your gaming experience, and we eagerly anticipate your feedback.
|
||||
|
||||
Yours sincerely,
|
||||
|
||||
The Developers
|
||||
|
||||
###### Version 1.27
|
||||
2023-02-07
|
||||
|
||||
|
||||
@@ -601,6 +601,7 @@ NoHitInFirstLoopR
|
||||
sbc #5
|
||||
sta NewAngle
|
||||
HitOnRightSideOfTargetR
|
||||
dec NewAngle
|
||||
EndOfFirstLoopR
|
||||
mva #5 modify ; set counter (5 turns)
|
||||
SecondLoopR
|
||||
@@ -695,6 +696,7 @@ NoHitInFirstLoopL
|
||||
adc #5
|
||||
sta NewAngle
|
||||
HitOnLeftSideOfTargetL
|
||||
inc NewAngle
|
||||
EndOfFirstLoopL
|
||||
mva #5 modify ; set counter (5 turns)
|
||||
SecondLoopL
|
||||
|
||||
@@ -1,877 +0,0 @@
|
||||
/***************************************/
|
||||
/* Use MADS http://mads.atari8.info/ */
|
||||
/* Mode: DLI (char mode) */
|
||||
/***************************************/
|
||||
|
||||
;icl "Scorch50.h"
|
||||
;icl "../lib/ATARISYS.ASM"
|
||||
;icl "../lib/macro.hea"
|
||||
|
||||
; --- dmsc LZSS player routine on zero page
|
||||
org $80
|
||||
|
||||
chn_copy .ds 9
|
||||
chn_pos .ds 9
|
||||
bptr .ds 2
|
||||
cur_pos .ds 1
|
||||
chn_bits .ds 1
|
||||
|
||||
bit_data .ds 1
|
||||
|
||||
fcnt .ds 2
|
||||
fadr .ds 2
|
||||
fhlp .ds 2
|
||||
cloc .ds 1
|
||||
regA .ds 1
|
||||
regX .ds 1
|
||||
regY .ds 1
|
||||
|
||||
WIDTH = 40
|
||||
HEIGHT = 30
|
||||
|
||||
; --- BASIC switch OFF
|
||||
org $2000\ mva #$ff portb\ rts\ ini $2000
|
||||
|
||||
; --- MAIN PROGRAM
|
||||
org $2000
|
||||
ant dta $C2,a(scr)
|
||||
dta $02,$82,$02,$02,$82,$02,$82,$02,$82,$02,$02,$02,$82,$02,$82,$82
|
||||
dta $02,$02,$82,$02,$02,$82,$02,$02,$82,$82,$02,$82,$22
|
||||
;dta $42,a(verline)
|
||||
dta $41,a(ant)
|
||||
|
||||
;verline
|
||||
; :37 dta d" "
|
||||
; dta build
|
||||
|
||||
scr ins "Scorch50.scr"
|
||||
|
||||
.ds 0*40
|
||||
|
||||
.ALIGN $0400
|
||||
fnt ins "Scorch50.fnt"
|
||||
|
||||
ift USESPRITES
|
||||
.ALIGN $0800
|
||||
pmg .ds $0300
|
||||
ift FADECHR = 0
|
||||
SPRITES
|
||||
els
|
||||
.ds $500
|
||||
eif
|
||||
eif
|
||||
|
||||
|
||||
song_data
|
||||
ins 'mmm_16.lzs'
|
||||
song_end
|
||||
|
||||
buffers
|
||||
.ds 256 * 9
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Song Initialization - this runs in the first tick:
|
||||
;
|
||||
.proc init_song
|
||||
|
||||
mva #1 bit_data
|
||||
|
||||
; 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
|
||||
;
|
||||
|
||||
; not checking really so the tune gets funky :)))
|
||||
;lda song_ptr + 1
|
||||
;cmp #>song_end
|
||||
;bne wait_frame
|
||||
;lda song_ptr
|
||||
;cmp #<song_end
|
||||
;bne wait_frame
|
||||
|
||||
end_loop
|
||||
rts
|
||||
|
||||
song_ptr = get_byte + 1
|
||||
.proc get_byte
|
||||
lda song_data+1
|
||||
inc song_ptr
|
||||
bne skip
|
||||
inc song_ptr+1
|
||||
skip
|
||||
rts
|
||||
.endp
|
||||
|
||||
|
||||
main
|
||||
|
||||
jsr init_song
|
||||
|
||||
; ; copy system font to $a000
|
||||
; ldx #0
|
||||
;@ lda $e000,x
|
||||
; sta $a000,x
|
||||
; ;lda $e100,x ; i need digits only :]
|
||||
; ;sta $a100,x
|
||||
; ;lda $e200,x
|
||||
; ;sta $a200,x
|
||||
; ;lda $e300,x
|
||||
; ;sta $a300,x
|
||||
; inx
|
||||
; bne @-
|
||||
|
||||
; --- init PMG
|
||||
|
||||
ift USESPRITES
|
||||
mva >pmg pmbase ;missiles and players data address
|
||||
mva #$03 GRACTL ;enable players and missiles
|
||||
eif
|
||||
|
||||
lda:cmp:req $14 ;wait 1 frame
|
||||
|
||||
sei ;stop IRQ interrupts
|
||||
mva #$00 nmien ;stop NMI interrupts
|
||||
sta dmactl
|
||||
;mva #$fe portb ;switch off ROM to get 16k more ram
|
||||
|
||||
;mwa #NMI $fffa ;new NMI handler
|
||||
|
||||
sta COLOR4
|
||||
lda #$0E
|
||||
sta COLOR1
|
||||
lda #$84
|
||||
sta COLOR2
|
||||
lda #$0E
|
||||
sta COLOR3
|
||||
lda #$02
|
||||
|
||||
|
||||
|
||||
VMAIN NMI.vbl,6 ;jsr SetVBL
|
||||
VDLI DLI.dli_start
|
||||
|
||||
|
||||
mva #1 vscrol
|
||||
|
||||
mva #$c0 nmien ;switch on NMI+DLI again
|
||||
|
||||
_lp lda trig0 ; FIRE #0
|
||||
beq stop
|
||||
|
||||
lda trig1 ; FIRE #1
|
||||
beq stop
|
||||
|
||||
lda consol ; START
|
||||
and #1
|
||||
beq stop
|
||||
|
||||
lda skctl
|
||||
and #$04
|
||||
bne _lp ;wait to press any key; here you can put any own routine
|
||||
|
||||
|
||||
stop
|
||||
|
||||
cli
|
||||
vmain sysvbv,6
|
||||
|
||||
mva #$00 GRACTL ;PMG disabled
|
||||
tax
|
||||
sta:rne hposp0,x+
|
||||
|
||||
;mva #$ff portb ;ROM switch on
|
||||
mva #$40 nmien ;only NMI interrupts, DLI disabled
|
||||
;cli ;IRQ enabled
|
||||
|
||||
lda #0
|
||||
ldx #8
|
||||
@ sta POKEY,x
|
||||
dex
|
||||
bpl @-
|
||||
|
||||
|
||||
;no glitching please (issue #67)
|
||||
lda #0
|
||||
sta $D400 ;dmactl
|
||||
sta $022F ;dmactls
|
||||
rts ;return to ... DOS
|
||||
|
||||
; --- DLI PROGRAM
|
||||
|
||||
.local DLI
|
||||
|
||||
?old_dli = *
|
||||
|
||||
dli_start
|
||||
|
||||
dli13
|
||||
sta regA
|
||||
|
||||
sta wsync ;line=8
|
||||
sta wsync ;line=9
|
||||
sta wsync ;line=10
|
||||
sta wsync ;line=11
|
||||
sta wsync ;line=12
|
||||
sta wsync ;line=13
|
||||
c9 lda #$14
|
||||
sta wsync ;line=14
|
||||
sta colpm3
|
||||
DLINEW DLI.dli2 1 0 0
|
||||
|
||||
dli2
|
||||
sta regA
|
||||
lda >fnt+$400*$01
|
||||
sta wsync ;line=24
|
||||
sta chbase
|
||||
DLINEW dli3 1 0 0
|
||||
|
||||
dli3
|
||||
sta regA
|
||||
lda >fnt+$400*$02
|
||||
sta wsync ;line=48
|
||||
sta chbase
|
||||
sta wsync ;line=49
|
||||
sta wsync ;line=50
|
||||
sta wsync ;line=51
|
||||
s3 lda #$07
|
||||
sta wsync ;line=52
|
||||
sta sizem
|
||||
DLINEW dli14 1 0 0
|
||||
|
||||
dli14
|
||||
sta regA
|
||||
stx regX
|
||||
sty regY
|
||||
|
||||
x8 lda #$A3
|
||||
sta wsync ;line=64
|
||||
sta hposp3
|
||||
x9 lda #$AB
|
||||
sta wsync ;line=65
|
||||
sta hposm3
|
||||
sta wsync ;line=66
|
||||
sta wsync ;line=67
|
||||
sta wsync ;line=68
|
||||
sta wsync ;line=69
|
||||
sta wsync ;line=70
|
||||
s4 lda #$13
|
||||
x10 ldx #$A6
|
||||
sta wsync ;line=71
|
||||
sta sizem
|
||||
stx hposm2
|
||||
s5 lda #$01
|
||||
x11 ldx #$72
|
||||
x12 ldy #$62
|
||||
sta wsync ;line=72
|
||||
sta sizep2
|
||||
sta sizep3
|
||||
stx hposp2
|
||||
sty hposp3
|
||||
x13 lda #$A9
|
||||
sta wsync ;line=73
|
||||
sta hposp1
|
||||
DLINEW dli4 1 1 1
|
||||
|
||||
dli4
|
||||
sta regA
|
||||
lda >fnt+$400*$03
|
||||
sta wsync ;line=80
|
||||
sta chbase
|
||||
DLINEW dli5 1 0 0
|
||||
|
||||
dli5
|
||||
sta regA
|
||||
stx regX
|
||||
lda >fnt+$400*$04
|
||||
sta wsync ;line=112
|
||||
sta chbase
|
||||
sta wsync ;line=113
|
||||
sta wsync ;line=114
|
||||
sta wsync ;line=115
|
||||
sta wsync ;line=116
|
||||
sta wsync ;line=117
|
||||
sta wsync ;line=118
|
||||
s6 lda #$07
|
||||
x14 ldx #$A3
|
||||
sta wsync ;line=119
|
||||
sta sizem
|
||||
stx hposm1
|
||||
s7 lda #$01
|
||||
x15 ldx #$93
|
||||
sta wsync ;line=120
|
||||
sta sizep1
|
||||
stx hposp1
|
||||
DLINEW dli15 1 1 0
|
||||
|
||||
dli15
|
||||
sta regA
|
||||
stx regX
|
||||
|
||||
sta wsync ;line=128
|
||||
sta wsync ;line=129
|
||||
sta wsync ;line=130
|
||||
sta wsync ;line=131
|
||||
x16 lda #$4A
|
||||
sta wsync ;line=132
|
||||
sta hposp1
|
||||
c10 lda #$D4
|
||||
sta wsync ;line=133
|
||||
sta colpf2
|
||||
s8 lda #$C3
|
||||
x17 ldx #$5A
|
||||
sta wsync ;line=134
|
||||
sta sizem
|
||||
stx hposm3
|
||||
DLINEW dli6 1 1 0
|
||||
|
||||
dli6
|
||||
sta regA
|
||||
stx regX
|
||||
sty regY
|
||||
lda >fnt+$400*$05
|
||||
sta wsync ;line=136
|
||||
sta chbase
|
||||
sta wsync ;line=137
|
||||
sta wsync ;line=138
|
||||
sta wsync ;line=139
|
||||
sta wsync ;line=140
|
||||
sta wsync ;line=141
|
||||
sta wsync ;line=142
|
||||
s9 lda #$C7
|
||||
x18 ldx #$A9
|
||||
sta wsync ;line=143
|
||||
sta sizem
|
||||
stx hposm1
|
||||
s10 lda #$D7
|
||||
x19 ldx #$9E
|
||||
c11 ldy #$02
|
||||
sta wsync ;line=144
|
||||
sta sizem
|
||||
stx hposm2
|
||||
sty colpm2
|
||||
sta wsync ;line=145
|
||||
c12 lda #$04
|
||||
sta wsync ;line=146
|
||||
sta colpm1
|
||||
sta wsync ;line=147
|
||||
sta wsync ;line=148
|
||||
sta wsync ;line=149
|
||||
s11 lda #$00
|
||||
x20 ldx #$74
|
||||
c13 ldy #$02
|
||||
sta wsync ;line=150
|
||||
sta sizep3
|
||||
stx hposp3
|
||||
sty colpm3
|
||||
sta wsync ;line=151
|
||||
sta wsync ;line=152
|
||||
sta wsync ;line=153
|
||||
sta wsync ;line=154
|
||||
sta wsync ;line=155
|
||||
sta wsync ;line=156
|
||||
sta wsync ;line=157
|
||||
c14 lda #$04
|
||||
sta wsync ;line=158
|
||||
sta colpf0
|
||||
DLINEW dli7 1 1 1
|
||||
|
||||
dli7
|
||||
sta regA
|
||||
lda >fnt+$400*$06
|
||||
sta wsync ;line=160
|
||||
sta chbase
|
||||
DLINEW dli8 1 0 0
|
||||
|
||||
dli8
|
||||
sta regA
|
||||
stx regX
|
||||
sty regY
|
||||
lda >fnt+$400*$07
|
||||
sta wsync ;line=184
|
||||
sta chbase
|
||||
sta wsync ;line=185
|
||||
s12 lda #$00
|
||||
x21 ldx #$8E
|
||||
c15 ldy #$08
|
||||
sta wsync ;line=186
|
||||
sta sizep2
|
||||
stx hposp2
|
||||
sty colpm2
|
||||
x22 lda #$4C
|
||||
c16 ldx #$0E
|
||||
sta wsync ;line=187
|
||||
sta hposp3
|
||||
stx colpm3
|
||||
c17 lda #$0A
|
||||
c18 ldx #$34
|
||||
sta wsync ;line=188
|
||||
sta colpf1
|
||||
stx colpm3
|
||||
s13 lda #$43
|
||||
x23 ldx #$49
|
||||
sta wsync ;line=189
|
||||
sta sizem
|
||||
stx hposm3
|
||||
c19 lda #$08
|
||||
c20 ldx #$34
|
||||
sta wsync ;line=190
|
||||
sta colpf1
|
||||
stx colpm2
|
||||
sta wsync ;line=191
|
||||
c21 lda #$0A
|
||||
sta wsync ;line=192
|
||||
sta colpf1
|
||||
c22 lda #$08
|
||||
sta wsync ;line=193
|
||||
sta colpf1
|
||||
c23 lda #$0A
|
||||
sta wsync ;line=194
|
||||
sta colpf1
|
||||
c24 lda #$34
|
||||
sta wsync ;line=195
|
||||
sta colpf2
|
||||
c25 lda #$0C
|
||||
sta wsync ;line=196
|
||||
sta colpf1
|
||||
c26 lda #$0A
|
||||
sta wsync ;line=197
|
||||
sta colpf1
|
||||
c27 lda #$0C
|
||||
sta wsync ;line=198
|
||||
sta colpf1
|
||||
sta wsync ;line=199
|
||||
sta wsync ;line=200
|
||||
c28 lda #$0E
|
||||
sta wsync ;line=201
|
||||
sta colpf1
|
||||
c29 lda #$0C
|
||||
sta wsync ;line=202
|
||||
sta colpf1
|
||||
c30 lda #$0E
|
||||
sta wsync ;line=203
|
||||
sta colpf1
|
||||
c31 lda #$0C
|
||||
sta wsync ;line=204
|
||||
sta colpf1
|
||||
c32 lda #$0E
|
||||
sta wsync ;line=205
|
||||
sta colpf1
|
||||
DLINEW dli16 1 1 1
|
||||
|
||||
dli16
|
||||
sta regA
|
||||
|
||||
sta wsync ;line=208
|
||||
sta wsync ;line=209
|
||||
c33 lda #$0C
|
||||
sta wsync ;line=210
|
||||
sta colpf1
|
||||
c34 lda #$0E
|
||||
sta wsync ;line=211
|
||||
sta colpf1
|
||||
c35 lda #$0C
|
||||
sta wsync ;line=212
|
||||
sta colpf1
|
||||
DLINEW dli9 1 0 0
|
||||
|
||||
dli9
|
||||
sta regA
|
||||
stx regX
|
||||
sty regY
|
||||
lda >fnt+$400*$08
|
||||
c36 ldx #$0A
|
||||
sta wsync ;line=216
|
||||
sta chbase
|
||||
stx colpf1
|
||||
c37 lda #$0C
|
||||
sta wsync ;line=217
|
||||
sta colpf1
|
||||
c38 lda #$0A
|
||||
x24 ldx #$9D
|
||||
c39 ldy #$34
|
||||
sta wsync ;line=218
|
||||
sta colpf1
|
||||
stx hposm1
|
||||
sty colpm1
|
||||
s14 lda #$03
|
||||
x25 ldx #$7D
|
||||
sta wsync ;line=219
|
||||
sta sizep3
|
||||
stx hposp3
|
||||
c40 lda #$08
|
||||
s15 ldx #$13
|
||||
x26 ldy #$45
|
||||
sta wsync ;line=220
|
||||
sta colpf1
|
||||
stx sizem
|
||||
sty hposm2
|
||||
s16 lda #$03
|
||||
x27 ldx #$59
|
||||
sta wsync ;line=221
|
||||
sta sizep2
|
||||
stx hposp2
|
||||
s17 lda #$53
|
||||
x28 ldx #$49
|
||||
x29 ldy #$79
|
||||
sta wsync ;line=222
|
||||
sta sizem
|
||||
stx hposp1
|
||||
sty hposm3
|
||||
c41 lda #$06
|
||||
c42 ldx #$00
|
||||
sta wsync ;line=223
|
||||
sta colpf1
|
||||
stx colpf2
|
||||
lda >fnt+$400*$01
|
||||
s18 ldx #$50
|
||||
x30 ldy #$44
|
||||
sta wsync ;line=224
|
||||
sta chbase
|
||||
stx sizem
|
||||
sty hposm0
|
||||
sta wsync ;line=225
|
||||
c43 lda #$08
|
||||
sta wsync ;line=226
|
||||
sta colpf1
|
||||
c44 lda #$0C
|
||||
sta wsync ;line=227
|
||||
sta colpf1
|
||||
sta wsync ;line=228
|
||||
sta wsync ;line=229
|
||||
c45 lda #$0E
|
||||
sta wsync ;line=230
|
||||
sta colpf1
|
||||
DLINEW dli10 1 1 1
|
||||
|
||||
dli10
|
||||
sta regA
|
||||
lda >fnt+$400*$00
|
||||
sta wsync ;line=232
|
||||
sta chbase
|
||||
;DLINEW dli11 1 0 0
|
||||
|
||||
lda regA
|
||||
rti
|
||||
|
||||
;dli11
|
||||
; sta regA
|
||||
;
|
||||
; lda #>$a000 ; system font
|
||||
; sta wsync ;line=232
|
||||
; sta chbase
|
||||
; lda #$01
|
||||
; sta gtictl
|
||||
;
|
||||
; lda regA
|
||||
; rti
|
||||
|
||||
|
||||
.endl
|
||||
|
||||
; ---
|
||||
|
||||
CHANGES = 1
|
||||
FADECHR = 0
|
||||
|
||||
SCHR = 127
|
||||
|
||||
dliv = $0200
|
||||
|
||||
; ---
|
||||
|
||||
.proc NMI
|
||||
|
||||
bit nmist
|
||||
bpl VBL
|
||||
|
||||
jmp DLI.dli_start
|
||||
|
||||
|
||||
VBL
|
||||
sta regA
|
||||
stx regX
|
||||
sty regY
|
||||
|
||||
;sta nmist ;reset NMI flag
|
||||
|
||||
mwa #ant dlptr ;ANTIC address program
|
||||
|
||||
mva #@dmactl(standard|dma|lineX1|players|missiles) dmactl ;set new screen width
|
||||
|
||||
inc cloc ;little timer
|
||||
|
||||
; Initial values
|
||||
|
||||
lda >fnt+$400*$00
|
||||
sta chbase
|
||||
c0 lda #$00
|
||||
sta colbak
|
||||
c1 lda #$0E
|
||||
sta colpf1
|
||||
c2 lda #$84
|
||||
sta colpf2
|
||||
c3 lda #$0E
|
||||
sta colpf3
|
||||
lda #$02
|
||||
sta CHACTL
|
||||
lda #$01
|
||||
sta PRIOR
|
||||
sta sizep0
|
||||
s0 lda #$03
|
||||
sta sizem
|
||||
x0 lda #$D0
|
||||
sta hposp0
|
||||
x1 lda #$28
|
||||
sta hposm0
|
||||
c4 lda #$00
|
||||
sta colpm0
|
||||
x2 lda #$A2
|
||||
sta hposm3
|
||||
c5 lda #$0E
|
||||
sta colpm3
|
||||
s1 lda #$00
|
||||
sta sizep2
|
||||
sta sizep3
|
||||
x3 lda #$92
|
||||
sta hposp2
|
||||
x4 lda #$8A
|
||||
sta hposp3
|
||||
c6 lda #$14
|
||||
sta colpm2
|
||||
s2 lda #$00
|
||||
sta sizep1
|
||||
x5 lda #$9A
|
||||
sta hposp1
|
||||
c7 lda #$14
|
||||
sta colpm1
|
||||
x6 lda #$A4
|
||||
sta hposm2
|
||||
x7 lda #$A6
|
||||
sta hposm1
|
||||
c8 lda #$00
|
||||
sta colpf0
|
||||
|
||||
mwa #DLI.dli_start dliv ;set the first address of DLI interrupt
|
||||
|
||||
;this area is for yours routines
|
||||
jsr play_frame
|
||||
|
||||
quit
|
||||
lda regA
|
||||
ldx regX
|
||||
ldy regY
|
||||
jmp sysvbv
|
||||
|
||||
.endp
|
||||
|
||||
; ---
|
||||
ini main
|
||||
; ---
|
||||
|
||||
;opt l- ; this stops the listing
|
||||
|
||||
.MACRO SPRITES
|
||||
missiles
|
||||
.he 00 00 00 00 00 00 00 00 03 03 C3 03 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 03 83 83 83 C3 C3 C3 C3
|
||||
.he C3 C3 C3 C3 C3 E3 E3 E3 E3 E3 E3 F3 F3 F3 F3 FB
|
||||
.he FB FB FB FB FF FF FF FF F3 33 83 83 83 83 C3 D3
|
||||
.he D3 D3 13 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 0F
|
||||
.he 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 03 03 03 03 C3 C3
|
||||
.he C3 C3 C3 C3 C3 C3 C3 C3 C3 D3 FF FF 3F 3F 3F 3F
|
||||
.he 3F 3F 33 13 03 03 03 03 03 03 03 03 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 43 43 C3 C3 C3 C3 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||
.he 03 03 0F 0F 3F 3F FF FC FE FE FF DB 03 03 03 03
|
||||
.he 03 03 03 03 03 03 03 03 00 00 00 00 00 00 00 00
|
||||
player0
|
||||
.he 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
|
||||
player1
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 F0 FC FE FE FF FF FF FF
|
||||
.he FF 0F 0F 0F 0F 0F 0F 0F 0F 0F 07 07 07 07 07 07
|
||||
.he 03 03 03 FF FF FF FF FF CF CF FF FF FF FF FF 9F
|
||||
.he 9F FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
|
||||
.he 00 F0 F0 F0 F0 78 F8 78 78 78 78 38 78 38 3C 3C
|
||||
.he 3C 3C 1C 3C 1C 1C 1C 1C 1E 1E 1E 1E 0E 1E 0E 0E
|
||||
.he 0E 0F 07 0F 07 0F 07 07 07 07 07 07 06 06 06 06
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF 00 00 3E 3F 7F
|
||||
.he 7F 7F 7F 7F 7F 7F 7F 3F 3F 3F 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 FF FF FF FF FF FF 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
player2
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
|
||||
.he FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 FF FF FF FF FF 99 99 FF FF FF FF FF 33
|
||||
.he 33 FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
|
||||
.he 00 00 80 F0 F8 F8 F8 FC FC FC FC FC FC FC FC FC
|
||||
.he FC FE FE FE FE FE FE FF FF FF FF FF FF FF FE FC
|
||||
.he F8 F8 F8 F8 F0 F0 F0 F0 F0 F0 F0 F0 E0 E0 E0 E0
|
||||
.he E0 E0 E0 FC FE FE FF FF 8F 87 87 87 07 07 07 07
|
||||
.he 07 07 07 07 07 07 07 03 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 F8 FC FC FE FE FF FF 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 FF FF FF FF FF FF 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
player3
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 01 07 0F 1F 1F 3F 3F 7F
|
||||
.he 7F 78 78 F0 F0 F0 F0 F8 F8 F8 78 7C 7C 7C 3C 3E
|
||||
.he 3E 3E 1E 1F 1F 1F 0F 0F 0F 0F 0F 1F 1F 1F 1F 1F
|
||||
.he 1F 3F 3F 3F 3F 3F 3F 3F FF 7F 7F 3F 3F 1F 1F 0F
|
||||
.he 1F 1F 1F 3F 3F 3F 3F 3F 3F 3B 30 30 30 30 30 30
|
||||
.he 30 30 30 30 38 3E 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F
|
||||
.he 7F 7F 7F 7F 7F 7F 7F FF FF FF FF FF FF FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF 7F 7F 7F 7F 7F 7F FF FF
|
||||
.he FF FF FF FF FE FE FE FE FE FE FE FE FC 1C FF 7E
|
||||
.he 7E FE FE FE FE FF FF FF 7F 7E 7E 3C 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 7C FE FE FF FF FF 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 FF FF FF FF FF FF FF FF FF 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.ENDM
|
||||
|
||||
USESPRITES = 1
|
||||
|
||||
.MACRO DLINEW
|
||||
mva <:1 dliv
|
||||
ift [>?old_dli]<>[>:1]
|
||||
mva >:1 dliv+1
|
||||
eif
|
||||
|
||||
ift :2
|
||||
lda regA
|
||||
eif
|
||||
|
||||
ift :3
|
||||
ldx regX
|
||||
eif
|
||||
|
||||
ift :4
|
||||
ldy regY
|
||||
eif
|
||||
|
||||
rti
|
||||
|
||||
.def ?old_dli = *
|
||||
.ENDM
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -616,28 +616,33 @@ qq3
|
||||
qq5
|
||||
stx v_audctl
|
||||
rmt_p5
|
||||
lda v_ainstrspeed
|
||||
|
||||
; lda v_ainstrspeed
|
||||
.IF TARGET = 800
|
||||
ldx #$10 ; pseudo stereo
|
||||
bne SetPokey_OffsetX ; pseudo stereo
|
||||
.ELSE
|
||||
rts
|
||||
.ENDIF
|
||||
SetPokey
|
||||
ldy v_audctl
|
||||
|
||||
ldx #0 ; POKEY registers offset (for stereo)
|
||||
SetPokey_OffsetX
|
||||
lda trackn_audf+0
|
||||
ldx trackn_audc+0
|
||||
sta AUDF1
|
||||
stx AUDC1
|
||||
sta AUDF1,x
|
||||
lda trackn_audc+0
|
||||
sta AUDC1,x
|
||||
lda trackn_audf+1
|
||||
ldx trackn_audc+1
|
||||
sta AUDF2
|
||||
stx AUDC2
|
||||
sta AUDF2,x
|
||||
lda trackn_audc+1
|
||||
sta AUDC2,x
|
||||
lda trackn_audf+2
|
||||
ldx trackn_audc+2
|
||||
sta AUDF3
|
||||
stx AUDC3
|
||||
sta AUDF3,x
|
||||
lda trackn_audc+2
|
||||
sta AUDC3,x
|
||||
lda trackn_audf+3
|
||||
ldx trackn_audc+3
|
||||
sta AUDF4
|
||||
stx AUDC4
|
||||
sty AUDCTL
|
||||
sta AUDF4,x
|
||||
lda trackn_audc+3
|
||||
sta AUDC4,x
|
||||
lda v_audctl
|
||||
sta AUDCTL,x
|
||||
rts
|
||||
RMTPLAYEREND
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
; --- dmsc LZSS player routine
|
||||
|
||||
song_data
|
||||
ins 'mmm_16.lzs'
|
||||
song_end
|
||||
|
||||
buffers
|
||||
.ds 256 * 9
|
||||
|
||||
POKEY2 = POKEY+$10 ; stereo
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Song Initialization - this runs in the first tick:
|
||||
;
|
||||
.proc init_song
|
||||
|
||||
; pokeys init
|
||||
lda #3 ; stereo
|
||||
sta POKEY+$0f ; stereo
|
||||
sta POKEY2+$0f ; stereo
|
||||
|
||||
mva #1 bit_data
|
||||
|
||||
; 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
|
||||
sta POKEY2,x ; stereo
|
||||
sta stereo_buff,x ; stereo
|
||||
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
|
||||
ldx #8 ; stereo
|
||||
@ lda stereo_buff,x ; stereo
|
||||
sta POKEY2,x ; stereo
|
||||
dex ;stereo
|
||||
bpl @- ; stereo
|
||||
|
||||
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 stereo_buff,x ; stereo
|
||||
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
|
||||
;
|
||||
|
||||
; not checking really so the tune gets funky :)))
|
||||
;lda song_ptr + 1
|
||||
;cmp #>song_end
|
||||
;bne wait_frame
|
||||
;lda song_ptr
|
||||
;cmp #<song_end
|
||||
;bne wait_frame
|
||||
|
||||
end_loop
|
||||
rts
|
||||
|
||||
song_ptr = get_byte + 1
|
||||
.proc get_byte
|
||||
lda song_data+1
|
||||
inc song_ptr
|
||||
bne skip
|
||||
inc song_ptr+1
|
||||
skip
|
||||
rts
|
||||
.endp
|
||||
|
||||
stereo_buff ; stereo
|
||||
.ds 9 ; stereo
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,73 @@
|
||||
; ----------------------------------
|
||||
; RastaConverter by Ilmenit v.Beta7
|
||||
; ----------------------------------
|
||||
missiles
|
||||
.ds $100
|
||||
player0
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 60 A0 26 1E 00 00 00 00
|
||||
.he 08 04 0E 0E 0F 0F 1E 07 03 02 02 C7 D7 F7 F7 77
|
||||
.he 77 37 F7 37 57 46 6E B0 B0 A0 C1 60 7C 1E 07 05
|
||||
.he 01 03 03 07 07 19 1F 1B 1B B2 53 BB 43 D3 60 38
|
||||
.he 01 7C 7B 41 C3 87 E7 85 75 02 C8 C8 9F 12 1E 9E
|
||||
.he 1E 9E 9E 9E F2 EB BF 1F 3F C7 00 7F 7F 7F 7F 7F
|
||||
.he 3F 3D 1D 0D 38 38 0F 1F 00 0C 04 04 08 10 E0 C0
|
||||
.he E4 E2 E0 E8 E0 7A EE FD F4 78 7F 7B A1 31 C5 56
|
||||
.he C6 D0 3C F7 90 CF 28 08 2C 3C 3C 3C 36 1D 14 36
|
||||
.he 32 30 38 1C 1E 38 70 FC FB F3 FE 8F D7 EF 43 83
|
||||
.he BA F9 F8 F8 1C 1C 0C 04 04 04 04 FA FB FA 30 70
|
||||
.he 70 78 F8 38 3F 00 03 03 0B 0F 07 13 03 03 13 C0
|
||||
.he CA 9A BF 9F 3F 5B 1F 9F FF CF 59 C4 0B EC 51 8F
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
player1
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 FE FE FE FE FE FF 03 03
|
||||
.he FF FF FF FF FF 01 FF FF DF DF DF 0F 1F 0F 1F 0F
|
||||
.he 1F 0F 1F 0E 1E CE DE DE FE 5F 3E 1E 83 C6 C3 C6
|
||||
.he C3 C7 C7 43 E7 67 E7 77 7F 7F 3F 3F 7F 3F 3E 00
|
||||
.he F0 3C E7 E0 60 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 77
|
||||
.he 77 07 07 5F 07 7F C7 FF FF FF FF 3E FE 0C C0 C0
|
||||
.he D8 C0 F0 C0 87 00 00 FC 01 00 20 20 50 10 50 5C
|
||||
.he 4C 44 60 6C 3C 38 C0 C8 98 39 1D 1F 1E C8 00 01
|
||||
.he 01 01 3F F2 F3 F6 E7 F7 D5 07 77 F7 FF FF DF 9F
|
||||
.he 6F FF FF BF FF FF 48 80 80 80 80 FF FF FF FF FF
|
||||
.he FF FF FF 7F 7F 7F 7F 5F DF FF FD FF FF FE F8 07
|
||||
.he 67 3F 27 7F 27 3F 27 7F DF A0 F8 E4 F8 E4 FC E0
|
||||
.he D8 E0 D8 20 95 E2 3F E0 7A E2 9E 81 5A CE 83 8C
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
player2
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 60 81 71 93 73 BB F9 BF
|
||||
.he F8 BF FD FC FC FC FC 8C 0C 88 0C 8C 38 38 B8 3A
|
||||
.he BA B8 3A BA BA B9 AC 0C CC 0C CC 1C 9C 7C 3C FC
|
||||
.he FA FC FE FC F4 F2 F0 72 72 26 52 22 C2 06 C2 22
|
||||
.he 38 C0 C0 0E 00 00 00 10 00 12 10 10 30 30 30 30
|
||||
.he 70 30 10 30 FF EC 3F EC 3F EC 3F ED 3C EC 3F ED
|
||||
.he 3F 6C 3F 2D 3F FE 10 18 1E 1E 1E 1C 1D E4 98 E4
|
||||
.he E8 DC E8 38 20 50 A8 58 AB 7E 36 1B E0 02 21 10
|
||||
.he 10 EC 20 05 EE 82 64 61 6D 24 6D 78 30 9C 75 5D
|
||||
.he 5D 1D 3D 57 4D E7 E7 24 0A 0C 38 1A 08 08 0C 0C
|
||||
.he 38 1C 18 0E 3E 3C 3E 3E 3E 3A 3A 3C 37 7A 3E 7E
|
||||
.he 3E 3F 10 2A 19 3A 39 1B 19 38 3E 38 18 3B 00 E0
|
||||
.he 50 C0 72 F8 68 DE 0A FF 1E 5A 1E 2B 16 FB DF FB
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
player3
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 06 DF CE FF 6E FF 60 47
|
||||
.he 60 E7 C0 D0 D8 D0 D8 DE CE EE EE E4 E6 E4 F1 F4
|
||||
.he F0 F0 D8 D8 D8 D0 D0 C6 C1 C6 D4 DF FF FF FF FE
|
||||
.he FE FE FE FE FE FE FE FF FF FF FF FF FE FF FE FF
|
||||
.he FF FE FE FF FF FF FF FF FF FF FF FC FE FF FF FF
|
||||
.he FF FF FF FF FF FF FF FF FF FF FF 03 43 F2 DF FF
|
||||
.he DD FF 9F FE BF FE 1E FE 1C FC FF 4E DE 2A 1C 00
|
||||
.he 04 2F 10 8E CC 5C 80 D0 A0 40 20 00 3A 0F FE 16
|
||||
.he 01 BB 5B DB 53 53 F3 F3 F3 E3 F3 F3 F3 F3 F6 FF
|
||||
.he FF FF FF FF FF FF 15 E1 92 C2 36 6B FF FF FF FE
|
||||
.he FE FA FC FA FC F8 FC FD 07 1F 2E 7F 7F FF 7F DF
|
||||
.he 7F FF 7F DF 7F DF 7F FF 7F FF 3A FF E7 FF E7 7F
|
||||
.he A7 FF 27 1F 0F 07 07 20 3F 3F 1F 38 F0 62 D0 E0
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
||||
; ----------------------------------
|
||||
; RastaConverter by Ilmenit v.Beta7
|
||||
; ----------------------------------
|
||||
|
||||
; Initial values
|
||||
lda #$0E
|
||||
sta colpf0
|
||||
lda #$96
|
||||
sta colpf1
|
||||
lda #$88
|
||||
sta colpf2
|
||||
lda #$00
|
||||
sta COLBAK
|
||||
lda #$74
|
||||
sta COLPM0
|
||||
lda #$EE
|
||||
sta COLPM1
|
||||
lda #$85
|
||||
sta COLPM2
|
||||
lda #$95
|
||||
sta COLPM3
|
||||
lda #$5E
|
||||
sta HPOSP0
|
||||
lda #$9F
|
||||
sta HPOSP1
|
||||
lda #$45
|
||||
sta HPOSP2
|
||||
lda #$30
|
||||
sta HPOSP3
|
||||
lda #$0
|
||||
ldx #$0
|
||||
ldy #$0
|
||||
|
||||
; Set proper count of wsyncs
|
||||
|
||||
:2 sta wsync
|
||||
|
||||
; Set proper picture height
|
||||
|
||||
|
||||
PIC_HEIGHT = 200
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 109 KiB |
@@ -0,0 +1,282 @@
|
||||
/***************************************/
|
||||
/* Use MADS http://mads.atari8.info/ */
|
||||
/* Mode: GED- (bitmap mode) */
|
||||
/***************************************/
|
||||
|
||||
icl "splash.h"
|
||||
|
||||
; --- dmsc LZSS player routine on zero page
|
||||
org $80
|
||||
|
||||
chn_copy .ds 9
|
||||
chn_pos .ds 9
|
||||
bptr .ds 2
|
||||
cur_pos .ds 1
|
||||
chn_bits .ds 1
|
||||
|
||||
bit_data .ds 1
|
||||
; ---
|
||||
|
||||
org $00
|
||||
|
||||
fcnt .ds 2
|
||||
fadr .ds 2
|
||||
fhlp .ds 2
|
||||
cloc .ds 1
|
||||
regA .ds 1
|
||||
regX .ds 1
|
||||
regY .ds 1
|
||||
byt2 .ds 1
|
||||
|
||||
zc .ds ZCOLORS
|
||||
|
||||
* --- BASIC switch OFF
|
||||
org $2000\ mva #$ff portb\ rts\ ini $2000
|
||||
|
||||
* --- MAIN PROGRAM
|
||||
org $2010
|
||||
IFT PIC_HEIGHT>=204
|
||||
scr ins "output.png.mic", 0, 8160
|
||||
:16 .byte 0
|
||||
ins "output.png.mic" , +8160
|
||||
ELS
|
||||
scr ins "output.png.mic"
|
||||
EIF
|
||||
|
||||
.ifdef nil_used
|
||||
nil :8*40 brk
|
||||
eif
|
||||
|
||||
.ALIGN $0400
|
||||
ant ANTIC_PROGRAM scr,ant
|
||||
|
||||
fnt
|
||||
|
||||
ift USESPRITES
|
||||
.ALIGN $0800
|
||||
.ds $0300
|
||||
pmg SPRITES
|
||||
eif
|
||||
|
||||
FontSplash
|
||||
ins '../../artwork/weapons_AW6_mod.fnt' ; 'artwork/weapons.fnt'
|
||||
|
||||
mother
|
||||
; dta d" The Mother of All Games "
|
||||
dta d" Father Unknown of All Games "
|
||||
icl "lzss_player.asm" ; player (and data) for splash music
|
||||
|
||||
main
|
||||
jsr init_song
|
||||
|
||||
* --- init PMG
|
||||
|
||||
ift USESPRITES
|
||||
mva >pmg pmbase ;missiles and players data address
|
||||
mva #$03 pmcntl ;enable players and missiles
|
||||
eif
|
||||
|
||||
lda:cmp:req $14 ;wait 1 frame
|
||||
|
||||
sei ;stop interrups
|
||||
mva #$00 nmien ;stop all interrupts
|
||||
mva #$fe portb ;switch off ROM to get 16k more ram
|
||||
|
||||
ZPINIT
|
||||
|
||||
////////////////////
|
||||
// RASTER PROGRAM //
|
||||
////////////////////
|
||||
|
||||
; jmp line239
|
||||
jmp raster_program_end
|
||||
|
||||
LOOP lda vcount ;synchronization for the first screen (picture) line
|
||||
cmp #$02
|
||||
;sta colpf0
|
||||
;sta colpm0
|
||||
;sta colbak
|
||||
bne LOOP
|
||||
|
||||
mva #%00111110 dmactl ;set new screen width
|
||||
mva <ant dlptr
|
||||
mva >ant dlptr+1
|
||||
|
||||
icl "output.png.rp.ini"
|
||||
|
||||
;--- 16 lines down ---- !!!
|
||||
:16 sta wsync
|
||||
|
||||
; wait 13 cycles !!!
|
||||
:4 nop
|
||||
inc byt2
|
||||
|
||||
;--- wait 18 cycles
|
||||
; jsr _rts
|
||||
; inc byt3
|
||||
|
||||
|
||||
;--- set global offset (23 cycles)
|
||||
jsr _rts
|
||||
cmp byt3\ pha:pla
|
||||
|
||||
;--- empty line
|
||||
jsr wait54cycle
|
||||
inc byt2
|
||||
|
||||
icl "output.png.rp"
|
||||
|
||||
raster_program_end
|
||||
|
||||
lda >FontSplash
|
||||
sta chbase
|
||||
c0 lda #$00
|
||||
sta colbak
|
||||
c1 lda #$00
|
||||
sta colpf0
|
||||
c2 lda #$02
|
||||
sta colpf1
|
||||
c3 lda #$08
|
||||
sta colpf2
|
||||
c4 lda #$00
|
||||
sta colpf3
|
||||
s0 lda #$03
|
||||
sta sizep0
|
||||
sta sizep1
|
||||
sta sizep2
|
||||
sta sizep3
|
||||
mva #$ff sizem
|
||||
sta grafm
|
||||
mva #$20 hposm0
|
||||
mva #$28 hposm1
|
||||
mva #$d0 hposm2
|
||||
mva #$d8 hposm3
|
||||
mva #$02 pmcntl
|
||||
lda #$14
|
||||
sta gtictl
|
||||
|
||||
|
||||
//--------------------
|
||||
// EXIT
|
||||
//--------------------
|
||||
|
||||
lda trig0 ; FIRE #0
|
||||
beq stop
|
||||
|
||||
lda trig1 ; FIRE #1
|
||||
beq stop
|
||||
|
||||
lda consol ; START
|
||||
and #1
|
||||
beq stop
|
||||
|
||||
lda skctl ; ANY KEY
|
||||
and #$04
|
||||
bne skp
|
||||
|
||||
stop mva #$00 pmcntl ;PMG disabled
|
||||
tax
|
||||
sta:rne hposp0,x+
|
||||
|
||||
; silent
|
||||
lda #0
|
||||
ldx #8
|
||||
@ sta POKEY,x
|
||||
sta POKEY2,x ; stereo
|
||||
dex
|
||||
bpl @-
|
||||
|
||||
;no glitching please (issue #67)
|
||||
lda #0
|
||||
sta $D400 ;dmactl
|
||||
sta $022F ;dmactls
|
||||
|
||||
|
||||
mva #$ff portb ;ROM switch on
|
||||
mva #$40 nmien ;only NMI interrupts, DLI disabled
|
||||
cli ;IRQ enabled
|
||||
|
||||
rts ;return to ... DOS
|
||||
skp
|
||||
|
||||
//--------------------
|
||||
jsr play_frame
|
||||
|
||||
jmp LOOP
|
||||
|
||||
;---
|
||||
|
||||
wait54cycle
|
||||
:2 inc byt2
|
||||
wait44cycle
|
||||
inc byt3
|
||||
nop
|
||||
wait36cycle
|
||||
inc byt3
|
||||
jsr _rts
|
||||
wait18cycle
|
||||
inc byt3
|
||||
_rts rts
|
||||
|
||||
byt3 brk
|
||||
|
||||
|
||||
;---
|
||||
|
||||
.MACRO ANTIC_PROGRAM
|
||||
dta $70,$70
|
||||
:+8 dta $4e,a(:1+$0000+#*40)
|
||||
:+8 dta $4e,a(:1+$0140+#*40)
|
||||
:+8 dta $4e,a(:1+$0280+#*40)
|
||||
:+8 dta $4e,a(:1+$03C0+#*40)
|
||||
:+8 dta $4e,a(:1+$0500+#*40)
|
||||
:+8 dta $4e,a(:1+$0640+#*40)
|
||||
:+8 dta $4e,a(:1+$0780+#*40)
|
||||
:+8 dta $4e,a(:1+$08C0+#*40)
|
||||
:+8 dta $4e,a(:1+$0A00+#*40)
|
||||
:+8 dta $4e,a(:1+$0B40+#*40)
|
||||
:+8 dta $4e,a(:1+$0C80+#*40)
|
||||
:+8 dta $4e,a(:1+$0DC0+#*40)
|
||||
:+8 dta $4e,a(:1+$0F00+#*40)
|
||||
:+8 dta $4e,a(:1+$1040+#*40)
|
||||
:+8 dta $4e,a(:1+$1180+#*40)
|
||||
:+8 dta $4e,a(:1+$12C0+#*40)
|
||||
:+8 dta $4e,a(:1+$1400+#*40)
|
||||
:+8 dta $4e,a(:1+$1540+#*40)
|
||||
:+8 dta $4e,a(:1+$1680+#*40)
|
||||
:+8 dta $4e,a(:1+$17C0+#*40)
|
||||
:+8 dta $4e,a(:1+$1900+#*40)
|
||||
:+8 dta $4e,a(:1+$1A40+#*40)
|
||||
:+8 dta $4e,a(:1+$1B80+#*40)
|
||||
:+8 dta $4e,a(:1+$1CC0+#*40)
|
||||
:+8 dta $4e,a(:1+$1E00+#*40)
|
||||
; :+4 dta $4e,a(:1+$1F40+#*40)
|
||||
; :+4 dta $4e,a(:1+$1FF0+#*40)
|
||||
; :+8 dta $4e,a(:1+$2090+#*40)
|
||||
; :+8 dta $4e,a(:1+$21D0+#*40)
|
||||
; :+8 dta $4e,a(:1+$2310+#*40)
|
||||
; :+8 dta $4e,a(:1+$2450+#*40)
|
||||
dta $00
|
||||
dta $42,a(mother)
|
||||
dta $41,a(:2)
|
||||
.ENDM
|
||||
|
||||
CL
|
||||
|
||||
.MACRO ZPINIT
|
||||
.ENDM
|
||||
|
||||
ZCOLORS = 0
|
||||
|
||||
;---
|
||||
ini main
|
||||
;---
|
||||
|
||||
opt l-
|
||||
|
||||
.MACRO SPRITES
|
||||
icl "output.png.pmg"
|
||||
.ENDM
|
||||
|
||||
USESPRITES = 1
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
|
||||
.enum @@dmactl
|
||||
blank = %00
|
||||
narrow = %01
|
||||
standard= %10
|
||||
wide = %11
|
||||
missiles= %100
|
||||
players = %1000
|
||||
lineX1 = %10000
|
||||
lineX2 = %00000
|
||||
dma = %100000
|
||||
.ende
|
||||
|
||||
.enum @@pmcntl
|
||||
missiles= %1
|
||||
players = %10
|
||||
trigs = %100
|
||||
.ende
|
||||
|
||||
.enum @@gtictl
|
||||
prior0 = %0
|
||||
prior1 = %1
|
||||
prior2 = %10
|
||||
prior4 = %100
|
||||
prior8 = %1000
|
||||
ply5 = %10000 ; Fifth Player Enable
|
||||
mlc = %100000 ; Multiple Color Player Enable
|
||||
mode9 = %01000000
|
||||
mode10 = %10000000
|
||||
mode11 = %11000000
|
||||
.ende
|
||||
|
||||
* ---------------------------------------------------------------------------------------------
|
||||
* --- GTIA
|
||||
* ---------------------------------------------------------------------------------------------
|
||||
|
||||
gtictl = PRIOR ; rejestr kontroli uk³adu GTIA
|
||||
gtiactl = gtictl
|
||||
|
||||
pmcntl = GRACTL ; rejestr kontroli graczy i pocisków
|
||||
|
||||
* ---------------------------------------------------------------------------------------------
|
||||
* --- POKEY
|
||||
* ---------------------------------------------------------------------------------------------
|
||||
|
||||
irqens = $0010 ; rejestr-cieñ IRQEN
|
||||
irqstat = $0011 ; rejestr-cieñ IRQST
|
||||
|
||||
skstres = SKRES ; rejestr statusu z³¹cza szeregowego (Z)
|
||||
|
||||
* ---------------------------------------------------------------------------------------------
|
||||
* --- ANTIC
|
||||
* ---------------------------------------------------------------------------------------------
|
||||
chrctl = CHACTL ; rejestr kontroli wyœwietlania znaków
|
||||
|
||||
+27
-8
@@ -215,8 +215,8 @@ SlideLeftTable
|
||||
.BY %00000101
|
||||
.BY %00000110
|
||||
.BY %00000111
|
||||
.BY %00001100
|
||||
|
||||
; .BY %00001100
|
||||
SlideLeftTableLen = *-SlideLeftTable
|
||||
;-------------------------------------------------
|
||||
TanksNamesDefault
|
||||
dta d"1st.Tank"
|
||||
@@ -550,7 +550,22 @@ DefensiveEnergy = *-(last_offensive_____ - first_offensive____ +1) ; to fake th
|
||||
.by 00 ; Auto Defense
|
||||
.by 00 ; Spy Hard
|
||||
weaponsOfDeath ; weapons used in tank death animations
|
||||
dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27
|
||||
dta ind_Missile________
|
||||
dta ind_Baby_Nuke______
|
||||
dta ind_Nuke___________
|
||||
dta ind_Death_s_Head___
|
||||
dta ind_Hot_Napalm_____ ; why not?
|
||||
dta ind_Riot_Bomb______
|
||||
dta ind_Heavy_Riot_Bomb
|
||||
dta ind_Baby_Digger____
|
||||
dta ind_Digger_________
|
||||
dta ind_Heavy_Digger___
|
||||
dta ind_Baby_Sandhog___
|
||||
dta ind_Sandhog________
|
||||
dta ind_Heavy_Sandhog__
|
||||
dta ind_Dirt_Clod______
|
||||
dta ind_Dirt_Ball______
|
||||
dta ind_Ton_of_Dirt____
|
||||
weaponsOfDeathEnd
|
||||
joyToKeyTable
|
||||
.by $ff ;00
|
||||
@@ -623,12 +638,13 @@ CreditsStart
|
||||
dta d"Ar",d"t"*
|
||||
dta d"Adam Wachowsk",d"i"*
|
||||
.IF target != 5200
|
||||
dta d"Krzysztof 'Kaz' Ziembi",d"k"*
|
||||
dta d"Roman 'xorcerer' Fierfa",d"s"*
|
||||
.ENDIF
|
||||
dta d" "*
|
||||
dta d"Ideas, help and Q",d"A"*
|
||||
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
|
||||
dta d"Beeblebrox, KrzysRog, lopezpb, Dracon",d","*
|
||||
dta d"Bocianu, Probabilitydragon",d","*
|
||||
dta d"EnderDude, Dracon",d","*
|
||||
dta d"Beeblebrox, KrzysRog, lopezpb",d","*
|
||||
dta d"brad-colbert, archon800, nowy80",d","*
|
||||
dta d"Shaggy the Atarian, RetroBorsuk, ZPH"
|
||||
.IF target = 5200
|
||||
@@ -641,6 +657,9 @@ CreditsStart
|
||||
dta d" "*
|
||||
dta d"Additional testin",d"g"*
|
||||
dta d"Arek and Alex Peck",d"o"*
|
||||
dta d" "*
|
||||
dta d"Special thank",d"s"*
|
||||
dta d"Krzysztof 'Kaz' Ziembi",d"k"*
|
||||
.IF target != 5200
|
||||
dta d" "*
|
||||
dta d"Stay tuned for the FujiNet version",d"!"*
|
||||
@@ -648,9 +667,9 @@ CreditsStart
|
||||
dta d" "*
|
||||
CreditsEnd
|
||||
.IF target = 5200
|
||||
CreditsLines=38
|
||||
CreditsLines=34 + 7; add 7 for scrollout
|
||||
.ELSE
|
||||
CreditsLines=42 ; 34 in reality. add 7?
|
||||
CreditsLines=40 + 7 ; add 7 for scrollout
|
||||
.ENDIF
|
||||
.IF target = 5200
|
||||
; Atari 5200 splash
|
||||
|
||||
@@ -145,6 +145,7 @@ last_defensive_____ = ind_Spy_Hard_______
|
||||
last_real_defensive = ind_Bouncy_Castle__
|
||||
number_of_offensives = last_offensive_____ - first_offensive____+1
|
||||
number_of_defensives = (last_defensive_____ - first_defensive____+1)
|
||||
number_of_weapons = number_of_offensives + number_of_defensives
|
||||
;--------------------------------
|
||||
; names of RMT instruments (sfx)
|
||||
;--------------------------------
|
||||
|
||||
+20
-13
@@ -12,8 +12,14 @@ OptionsScreen
|
||||
dta d" (un)2000-2023"
|
||||
|
||||
.IF TARGET = 800
|
||||
dta d" Please select option with cursor keys "
|
||||
dta d" and press (Return) to proceed "
|
||||
dta d" Please select option with "
|
||||
dta $fe,$dc,$dd,$ff ; cursors in inverse
|
||||
dta d" and "
|
||||
dta d"Tab"*
|
||||
dta d" "
|
||||
dta d" Press "
|
||||
dta d"Return"*
|
||||
dta d" to proceed "
|
||||
.ELIF TARGET = 5200
|
||||
dta d" Please select option with joystick one "
|
||||
dta d" and press FIRE to proceed "
|
||||
@@ -32,20 +38,21 @@ NameScreen3
|
||||
dta d" Human/Atari (difficulty level) "
|
||||
NameScreen5
|
||||
.IF TARGET = 800
|
||||
dta d" "
|
||||
dta d"TAB"*
|
||||
dta d" - Port nr "
|
||||
dta d"Joy"*
|
||||
dta d" - Difficulty "
|
||||
dta d" "
|
||||
dta d"Return"*
|
||||
dta d" - Proceed "
|
||||
dta d"TAB"*
|
||||
dta d" - Port nr "
|
||||
dta $fe,$dc,$dd,$ff ; cursors in inverse
|
||||
dta d" - Difficulty"
|
||||
dta d" "
|
||||
dta d"INV"*
|
||||
dta d" - Shape "
|
||||
dta d"Return"*
|
||||
dta d" - Proceed "
|
||||
.ELIF TARGET = 5200
|
||||
dta d" "
|
||||
dta d"(5)"*
|
||||
dta d" - Port nr "
|
||||
dta d"Joy"*
|
||||
dta d" - Difficulty "
|
||||
dta d" - Port/Shape "
|
||||
dta d"Joy"*
|
||||
dta d" - Diffic. "
|
||||
dta d" "
|
||||
dta d"FIRE"*
|
||||
dta d" - Proceed "
|
||||
|
||||
+98
-2
@@ -5,6 +5,8 @@
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc draw ;;fuxxing good draw :)
|
||||
; xdraw,ydraw (word) - coordinates of first point
|
||||
; xbyte,ybyte (word) - coordinates of last point
|
||||
;--------------------------------------------------
|
||||
;creditz to Dr Jankowski / MIM U.W.
|
||||
; (xi,yi)-----(xk,yk)
|
||||
@@ -291,6 +293,8 @@ EndOfDraw
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc circle ;fxxxing good circle drawing :)
|
||||
; xdraw,ydraw (word) - coordinates of circle center
|
||||
; radius (byte) - radius of circle
|
||||
;--------------------------------------------------
|
||||
;Turbo Basic source
|
||||
; R=30
|
||||
@@ -1136,7 +1140,7 @@ OneTimeParachute
|
||||
jmp EndOfFCycle
|
||||
NoFallingDown
|
||||
; check direction (left or right)
|
||||
ldy #7 ; SlideLeftTable length -1 (from 0 to 7)
|
||||
ldy #SlideLeftTableLen-1 ; SlideLeftTable length -1 (from 0 to 7)
|
||||
@ lda SlideLeftTable,y
|
||||
cmp UnderTank1
|
||||
beq FallingLeft
|
||||
@@ -1289,7 +1293,7 @@ drawmountainsloop
|
||||
beq NoMountain
|
||||
sta ydraw
|
||||
sty ydraw+1
|
||||
; jsr DrawLine
|
||||
.IF FASTER_GRAF_PROCS = 1
|
||||
; there was Drawline proc
|
||||
lda #screenheight
|
||||
sec
|
||||
@@ -1308,6 +1312,16 @@ drawmountainsloop
|
||||
dec tempbyte01
|
||||
bne @-
|
||||
; end of Drawline proc
|
||||
.ELSE
|
||||
; there was Drawline proc
|
||||
drawline
|
||||
jsr plot.MakePlot
|
||||
inc ydraw
|
||||
lda ydraw
|
||||
cmp #screenheight
|
||||
bne drawline
|
||||
; end of Drawline proc
|
||||
.ENDIF
|
||||
NoMountain
|
||||
inw modify
|
||||
inw xdraw
|
||||
@@ -1858,6 +1872,7 @@ CopyMask
|
||||
dey
|
||||
bpl CopyMask
|
||||
|
||||
.IF FASTER_GRAF_PROCS = 1
|
||||
; calculating coordinates from xdraw and ydraw
|
||||
mwa xdraw xbyte
|
||||
|
||||
@@ -1922,6 +1937,44 @@ CharLoopi
|
||||
inx
|
||||
cpx #8
|
||||
bne CharLoopi
|
||||
.ELSE
|
||||
mvx #7 temp ; line counter (Y)
|
||||
CharLoop1
|
||||
mva #7 temp+1 ; pixel counter (X)
|
||||
CharLoop2
|
||||
mva #0 color
|
||||
rol mask1,x
|
||||
bcc NoMaskNoPlot
|
||||
rol char1,x
|
||||
bcs NoPlot
|
||||
MakeCharPlot
|
||||
lda Erase
|
||||
bne ErasingChar
|
||||
inc color
|
||||
ErasingChar
|
||||
NoPlot
|
||||
jsr plot.MakePlot
|
||||
AfterCharPlot
|
||||
inw xdraw
|
||||
ldx temp
|
||||
dec temp+1
|
||||
bpl CharLoop2
|
||||
sec
|
||||
sbw xdraw #8
|
||||
dec ydraw
|
||||
ldx temp
|
||||
dex
|
||||
stx temp
|
||||
bpl CharLoop1
|
||||
clc
|
||||
lda ydraw
|
||||
adc #8
|
||||
sta ydraw
|
||||
bne EndPutChar
|
||||
NoMaskNoPlot
|
||||
rol char1,x
|
||||
jmp AfterCharPlot
|
||||
.ENDIF
|
||||
EndPutChar
|
||||
rts
|
||||
.endp
|
||||
@@ -1979,6 +2032,7 @@ GetUpper4bits
|
||||
dex
|
||||
bpl CopyChar
|
||||
|
||||
.IF FASTER_GRAF_PROCS = 1
|
||||
; calculating coordinates from xdraw and ydraw
|
||||
mwa dx xbyte
|
||||
|
||||
@@ -2038,6 +2092,48 @@ PutInColor0_2
|
||||
inx
|
||||
cpx #4
|
||||
bne CharLoopi4x4
|
||||
.ELSE
|
||||
mwa xdraw char2
|
||||
mwa ydraw mask2
|
||||
mva color mask2+2
|
||||
mwa dx xdraw
|
||||
mwa dy ydraw
|
||||
mvx #3 temp ; line counter (Y)
|
||||
CharLoop1
|
||||
mva #3 temp+1 ; pixel counter (X)
|
||||
CharLoop2
|
||||
mva #0 color
|
||||
rol mask1,x
|
||||
bcc NoMaskNoPlot
|
||||
rol char1,x
|
||||
bcs NoPlot
|
||||
MakeCharPlot
|
||||
lda plot4x4color
|
||||
beq ErasingChar
|
||||
inc color
|
||||
ErasingChar
|
||||
NoPlot
|
||||
jsr plot.MakePlot
|
||||
AfterCharPlot
|
||||
inw xdraw
|
||||
ldx temp
|
||||
dec temp+1
|
||||
bpl CharLoop2
|
||||
sec
|
||||
sbw xdraw #4
|
||||
dec ydraw
|
||||
ldx temp
|
||||
dex
|
||||
stx temp
|
||||
bpl CharLoop1
|
||||
mwa char2 xdraw
|
||||
mwa mask2 ydraw
|
||||
mva mask2+2 color
|
||||
bpl EndPut4x4
|
||||
NoMaskNoPlot
|
||||
rol char1,x
|
||||
jmp AfterCharPlot
|
||||
.ENDIF
|
||||
EndPut4x4
|
||||
rts
|
||||
.endp
|
||||
|
||||
+83
-68
@@ -6,19 +6,22 @@
|
||||
;Miami & Warsaw 2022, 2023
|
||||
|
||||
;---------------------------------------------------
|
||||
.def TARGET = 800 ;5200 ; or 800
|
||||
.def TARGET = 800 ; 5200 ; or 800
|
||||
;atari800 -5200 -cart ${outputFilePath} -cart-type 4
|
||||
;atari800 -run ${outputFilePath}
|
||||
;---------------------------------------------------
|
||||
.def XCORRECTION_FOR_PM = 0
|
||||
; if 1 - active x position of tanks correction fo PMG
|
||||
.def FASTER_GRAF_PROCS = 1
|
||||
; if 1 - activates faster graphics routines
|
||||
; (direct writes to screen memory - atari only :) )
|
||||
;---------------------------------------------------
|
||||
|
||||
;OPT r+ ; saves 12 bytes :O
|
||||
|
||||
;---------------------------------------------------
|
||||
.macro build
|
||||
dta d"1.27" ; number of this build (4 bytes)
|
||||
dta d"1.28" ; number of this build (4 bytes)
|
||||
.endm
|
||||
|
||||
.macro RMTSong
|
||||
@@ -191,7 +194,7 @@ FirstZpageVariable = $57
|
||||
.ELSE
|
||||
icl 'lib/ATARISYS.ASM'
|
||||
icl 'lib/MACRO.ASM'
|
||||
icl 'artwork/Scorch50.asm' ; splash screen and musix
|
||||
icl 'artwork/splash_v2/splash.asm' ; splash screen and musix
|
||||
.ENDIF
|
||||
|
||||
;-----------------------------------------------
|
||||
@@ -314,14 +317,9 @@ no5200splash
|
||||
dey
|
||||
bpl @-
|
||||
|
||||
; initialize one Variable in zero page :)
|
||||
;lda #<dliColorsFore
|
||||
;sta GradientColors
|
||||
;lda #>dliColorsFore
|
||||
;sta GradientColors+1
|
||||
; set gradient to the full LGBTIQQAAPP+ flag on start
|
||||
mva #1 GradientNr
|
||||
jsr SelectNextGradient
|
||||
mva #0 GradientNr ; #1 to set gradient number 2 :) (next one)
|
||||
jsr SelectNextGradient.NotWind
|
||||
|
||||
; generate linetables
|
||||
mwa #display temp
|
||||
@@ -338,6 +336,12 @@ no5200splash
|
||||
bne @-
|
||||
|
||||
.IF TARGET = 800
|
||||
|
||||
; pokeys init
|
||||
lda #3 ; stereo
|
||||
sta POKEY+$0f ; stereo
|
||||
sta POKEY+$1f ; stereo
|
||||
|
||||
lda PAL
|
||||
and #%00001110
|
||||
bne NoRMT_PALchange
|
||||
@@ -641,8 +645,9 @@ SettingEnergies
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc MainRoundLoop
|
||||
; here we must check if by a chance there is only one
|
||||
; tank with energy greater than 0 left
|
||||
; here we must check if by a chance there is only one
|
||||
; tank with energy greater than 0 left
|
||||
;--------------------------------------------------
|
||||
|
||||
ldy #0 ; in Y - number of tanks with energy greater than zero
|
||||
sty ATRACT ; reset atract mode
|
||||
@@ -908,9 +913,10 @@ NotLastPlayerInRound
|
||||
|
||||
;---------------------------------
|
||||
.proc PlayerXdeath
|
||||
; this tank should not explode anymore:
|
||||
; there is 0 in A, and Tank Number in X, so...
|
||||
;---------------------------------
|
||||
|
||||
; this tank should not explode anymore:
|
||||
; there is 0 in A, and Tank Number in X, so...
|
||||
sta LASTeXistenZ,x
|
||||
; save x somewhere
|
||||
stx TankTempY
|
||||
@@ -926,7 +932,7 @@ NotLastPlayerInRound
|
||||
|
||||
; in X there is a number of tank that died
|
||||
|
||||
lda #77 ; mumber of defensive text after BFG!
|
||||
lda #78 ; mumber of defensive text after BFG! ("VERY FUNNY.")
|
||||
bit AfterBFGflag ; check BFG flag
|
||||
bmi TextAfterBFG
|
||||
; if BFG then no points for dead tanks ...
|
||||
@@ -1039,7 +1045,6 @@ ldahashzero
|
||||
NotNegativeEnergy
|
||||
sta Energy,x
|
||||
;now increase the gain of the shooting tank
|
||||
; phx
|
||||
ldy TankNr
|
||||
clc
|
||||
lda gainL,y
|
||||
@@ -1048,7 +1053,6 @@ NotNegativeEnergy
|
||||
lda gainH,y
|
||||
adc #$00
|
||||
sta gainH,y
|
||||
; plx
|
||||
rts
|
||||
.endp
|
||||
|
||||
@@ -1081,6 +1085,7 @@ NotNegativeShieldEnergy
|
||||
|
||||
;---------------------------------
|
||||
.proc Seppuku
|
||||
;---------------------------------
|
||||
lda #0
|
||||
sta ydraw+1
|
||||
; get position of the tank
|
||||
@@ -1135,48 +1140,44 @@ NotNegativeShieldEnergy
|
||||
;this algiorithm is a little longer than one in Ruszczyc 6502 book
|
||||
;but it is faster
|
||||
|
||||
LDy #8
|
||||
LDA #0
|
||||
CLC
|
||||
LP0
|
||||
ldy #8
|
||||
lda #0
|
||||
clc
|
||||
LP0 ror
|
||||
ror L1
|
||||
bcc B0
|
||||
clc
|
||||
adc #10 ; (L2) multiplication by 10
|
||||
B0 dey
|
||||
bne LP0
|
||||
ror
|
||||
ROR L1
|
||||
BCC B0
|
||||
CLC
|
||||
ADC #10 ; (L2) multiplication by 10
|
||||
B0 DEY
|
||||
BNE LP0
|
||||
ror
|
||||
ROR L1
|
||||
STA MaxForceTableH,x
|
||||
ror L1
|
||||
sta MaxForceTableH,x
|
||||
lda L1
|
||||
sta MaxForceTableL,x
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc WeaponCleanup;
|
||||
.proc WeaponCleanup
|
||||
; cleaning of the weapon possesion tables
|
||||
; 99 of Baby Missles(index==0), all other weapons=0)
|
||||
; 99 of Baby Missles and White Flags, all other weapons=0)
|
||||
;--------------------------------------------------
|
||||
ldx #$3f ; TODO: maxweapons
|
||||
ldx #(number_of_weapons - 1)
|
||||
@ lda #$0
|
||||
cpx #ind_White_Flag_____ ; White Flag
|
||||
bne @+
|
||||
lda #99
|
||||
@ sta TanksWeapon1,x
|
||||
bne no99
|
||||
set99 lda #99
|
||||
no99 sta TanksWeapon1,x
|
||||
sta TanksWeapon2,x
|
||||
sta TanksWeapon3,x
|
||||
sta TanksWeapon4,x
|
||||
sta TanksWeapon5,x
|
||||
sta TanksWeapon6,x
|
||||
dex
|
||||
beq setBmissile
|
||||
bpl @-1
|
||||
beq set99 ; Baby Missile (index=0)
|
||||
bpl @-
|
||||
rts
|
||||
setBmissile
|
||||
lda #99
|
||||
bne @-
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
@@ -1256,6 +1257,9 @@ MakeTanksVisible
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc SetStandardBarrels
|
||||
; set standart barrel length and deactivate Auto Defense
|
||||
; for all tanks
|
||||
;--------------------------------------------------
|
||||
ldx #maxPlayers-1
|
||||
@ lda #StandardBarrel ; standard barrel length
|
||||
sta BarrelLength,x
|
||||
@@ -1266,7 +1270,7 @@ MakeTanksVisible
|
||||
rts
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
.proc RandomizeSequence0
|
||||
/* .proc RandomizeSequence0
|
||||
ldx #0
|
||||
@ txa
|
||||
sta TankSequence,x
|
||||
@@ -1274,7 +1278,7 @@ MakeTanksVisible
|
||||
cpx #MaxPlayers
|
||||
bne @-
|
||||
rts
|
||||
.endp
|
||||
.endp */
|
||||
;--------------------------------------------------
|
||||
.proc RandomizeSequence
|
||||
; in: NumberOfPlayers
|
||||
@@ -1331,20 +1335,10 @@ UsageLoop
|
||||
; X is not changed
|
||||
;----------------------------------------------
|
||||
|
||||
;valid angle values are ((256-90)..255) and (0..90)
|
||||
;it means that values 91..165 must be elliminated...
|
||||
;so, lets randomize someting between 0 and 180
|
||||
;and substract this value from 90
|
||||
; lets randomize someting between 0 and 180
|
||||
lda RANDOM
|
||||
|
||||
cmp #180
|
||||
bcs RandomizeAngle
|
||||
|
||||
|
||||
;sta temp
|
||||
;lda #90 ; CARRY=0 here
|
||||
;sbc temp
|
||||
|
||||
rts
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
@@ -1395,6 +1389,7 @@ LimitForce
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
.proc Table2Force
|
||||
;----------------------------------------------
|
||||
lda ForceTableL,x
|
||||
sta Force
|
||||
lda ForceTableH,x
|
||||
@@ -1403,6 +1398,7 @@ LimitForce
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
.proc MoveBarrelToNewPosition
|
||||
;----------------------------------------------
|
||||
mva #1 Erase
|
||||
jsr DrawTankNr.BarrelChange
|
||||
mva #0 Erase
|
||||
@@ -1418,11 +1414,11 @@ MoveBarrel
|
||||
lda NewAngle
|
||||
cmp AngleTable,x
|
||||
beq BarrelPositionIsFine
|
||||
bcc rotateLeft ; older is bigger
|
||||
rotateRight;older is lower
|
||||
bcc rotateLeft
|
||||
rotateRight ; older is lower
|
||||
inc angleTable,x
|
||||
jmp MoveBarrel
|
||||
rotateLeft
|
||||
rotateLeft ; older is bigger
|
||||
dec angleTable,x
|
||||
jmp MoveBarrel
|
||||
BarrelPositionIsFine
|
||||
@@ -1442,10 +1438,10 @@ BarrelPositionIsFine
|
||||
; I think I will go for a stupid bubble sort...
|
||||
; it is easy to test :)
|
||||
;
|
||||
; Results are in ResultsTable, in SortedTable we want to
|
||||
; Results are in ResultsTable, in TankSequence (Sorted Table) we want to
|
||||
; have numbers of tanks from the worst to the best.
|
||||
; in other words, if ResultsTable=(5,4,65,23,3,6)
|
||||
; the SortedTable=(4,1,0,5,3,2)
|
||||
; the TankSequence=(4,1,0,5,3,2)
|
||||
; let's assume initially the TankSequence=(0,1,2,3,4,5)
|
||||
|
||||
ldx #0
|
||||
@@ -1490,10 +1486,20 @@ Bubble
|
||||
BubbleBobble
|
||||
lda TempResults,x
|
||||
cmp TempResults+1,x
|
||||
beq nextishigher ; this is to block hangs when 2 equal values meet
|
||||
bcc nextishigher
|
||||
bne swapvalues
|
||||
nextisequal
|
||||
; if results are equal, check Direct Hits (only lower byte - sorry memory)
|
||||
ldy TankSequence,x
|
||||
lda DirectHitsL,y
|
||||
ldy TankSequence+1,x
|
||||
cmp DirectHitsL,y
|
||||
;
|
||||
beq nextishigher ; this is to block hangs when 2 equal values meet
|
||||
bcc nextishigher
|
||||
;here we must swap values
|
||||
;because next is smaller than previous
|
||||
swapvalues
|
||||
sta temp
|
||||
lda TempResults+1,x
|
||||
sta TempResults,x
|
||||
@@ -1537,8 +1543,10 @@ SetRandomWalls
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc GetKey ; waits for pressing a key and returns pressed value in A
|
||||
; when [ESC] is pressed, escFlag is set to 1
|
||||
.proc GetKey
|
||||
; waits for pressing a key and returns pressed value in A
|
||||
; when [ESC] is pressed, escFlag is set
|
||||
; result: A=keycode
|
||||
;--------------------------------------------------
|
||||
jsr WaitForKeyRelease
|
||||
@
|
||||
@@ -1642,7 +1650,8 @@ KeyReleased
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc IsKeyPressed ; A=0 - yes , A>0 - no
|
||||
.proc IsKeyPressed
|
||||
; result: A=0 - yes , A>0 - no
|
||||
;--------------------------------------------------
|
||||
lda SKSTAT
|
||||
and #%00000100
|
||||
@@ -1653,6 +1662,8 @@ KeyReleased
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc DemoModeOrKey
|
||||
; Waits for the key pressed if at least one human is playing.
|
||||
; Otherwise, waits 3 seconds (demo mode).
|
||||
;--------------------------------------------------
|
||||
;check demo mode
|
||||
ldx numberOfPlayers
|
||||
@@ -1667,17 +1678,19 @@ checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE
|
||||
ldy #75
|
||||
jsr PauseYFrames
|
||||
rts
|
||||
|
||||
peopleAreHere
|
||||
jmp getkey ; jsr:rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
MakeDarkScreen
|
||||
jsr PMoutofScreen
|
||||
;--------------------------------------------------
|
||||
jsr PMoutofScreen ; hide P/M
|
||||
mva #0 dmactls ; dark screen
|
||||
; sta dmactl ; probably not necessary (3 bytes!!! :) )
|
||||
; and wait one frame :)
|
||||
;--------------------------------------------------
|
||||
.proc WaitOneFrame
|
||||
;--------------------------------------------------
|
||||
lda CONSOL
|
||||
and #%00000101 ; Start + Option
|
||||
sne:mva #$40 escFlag
|
||||
@@ -1686,9 +1699,11 @@ MakeDarkScreen
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc PauseYFrames
|
||||
; Y - number of frames to wait (divided by 2)
|
||||
; pauses for maximally 510 frames (255 * 2)
|
||||
;--------------------------------------------------
|
||||
@ jsr WaitOneFrame
|
||||
jsr WaitOneFrame
|
||||
dey
|
||||
@@ -1698,8 +1713,8 @@ MakeDarkScreen
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc RmtSongSelect
|
||||
;--------------------------------------------------
|
||||
; starting song line 0-255 to A reg
|
||||
;--------------------------------------------------
|
||||
cmp #song_ingame
|
||||
bne noingame ; noMusic blocks only ingame song
|
||||
bit noMusic
|
||||
@@ -1784,7 +1799,7 @@ YesCheat
|
||||
lda #99
|
||||
@ iny
|
||||
sta (temp),y
|
||||
cpy #(last_defensive_____ - first_offensive____)
|
||||
cpy #(number_of_weapons - 1)
|
||||
bne @-
|
||||
NoCheat
|
||||
rts
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+30
-36
@@ -2033,34 +2033,33 @@ EndOfCredits
|
||||
.proc DisplayStatus
|
||||
;-------------------------------------------------
|
||||
|
||||
;=========================
|
||||
; displaying number of active controller port
|
||||
;=========================
|
||||
ldy JoystickNumber
|
||||
lda digits+1,y
|
||||
sta statusBuffer+17
|
||||
;---------------------
|
||||
|
||||
;=========================
|
||||
;displaying symbol of the weapon
|
||||
;---------------------
|
||||
;display name and symbol of the weapon
|
||||
;statusBuffer+18 - symbol (1 char)
|
||||
;statusBuffer+20 - quantity left
|
||||
;statusBuffer+23 - name
|
||||
;=========================
|
||||
ldx TankNr
|
||||
ldy ActiveWeapon,x
|
||||
lda WeaponSymbols,y
|
||||
sta statusBuffer+19
|
||||
|
||||
;---------------------
|
||||
;=========================
|
||||
;displaying quantity of the given weapon
|
||||
;---------------------
|
||||
;=========================
|
||||
lda ActiveWeapon,x
|
||||
jsr HowManyBullets
|
||||
sta decimal
|
||||
mwa #statusBuffer+21 displayposition
|
||||
jsr displaybyte
|
||||
|
||||
;---------------------
|
||||
;=========================
|
||||
;displaying name of the weapon
|
||||
;---------------------
|
||||
;=========================
|
||||
ldx TankNr
|
||||
lda ActiveWeapon,x
|
||||
sta temp ;get back number of the weapon
|
||||
@@ -2080,9 +2079,9 @@ EndOfCredits
|
||||
dey
|
||||
bpl @-
|
||||
|
||||
;---------------------
|
||||
;=========================
|
||||
;displaying name of the defence weapon (if active)
|
||||
;---------------------
|
||||
;=========================
|
||||
lda AutoDefenseFlag,x ; Auto Defense symbol (space or "A" in inverse)
|
||||
bpl @+
|
||||
lda #$5e ; Auto Defense symbol
|
||||
@@ -2119,19 +2118,17 @@ ClearingOnly
|
||||
dey
|
||||
bpl @-
|
||||
|
||||
;---------------------
|
||||
;=========================
|
||||
;displaying the energy of a tank
|
||||
;---------------------
|
||||
|
||||
;=========================
|
||||
lda Energy,x
|
||||
|
||||
sta decimal
|
||||
mwa #statusBuffer+48 displayposition
|
||||
jsr displaybyte
|
||||
|
||||
;---------------------
|
||||
;=========================
|
||||
;displaying the energy of a tank shield (if exist)
|
||||
;---------------------
|
||||
;=========================
|
||||
; clear (if no shield)
|
||||
lda #space
|
||||
sta statusBuffer+40+10
|
||||
@@ -2155,17 +2152,20 @@ NoDefenceWeapon
|
||||
NoShieldEnergy
|
||||
|
||||
;=========================
|
||||
;display Wind
|
||||
; display Wind
|
||||
;=========================
|
||||
mwa Wind temp
|
||||
lda Wind+3 ; highest byte of 4 byte wind
|
||||
lda #space
|
||||
bit Wind+3 ; highest byte of 4 byte wind
|
||||
bmi DisplayLeftWind
|
||||
sta statusBuffer+80+17 ; (space) char
|
||||
lda #$7f ; (tab) char
|
||||
sta statusBuffer+80+20
|
||||
lda #space
|
||||
sta statusBuffer+80+17
|
||||
beq DisplayWindValue
|
||||
bne DisplayWindValue
|
||||
DisplayLeftWind
|
||||
sta statusBuffer+80+20 ; (space) char
|
||||
lda #$7e ;(del) char
|
||||
sta statusBuffer+80+17
|
||||
sec ; Wind = -Wind
|
||||
lda #$00
|
||||
sbc temp
|
||||
@@ -2173,10 +2173,6 @@ DisplayLeftWind
|
||||
lda #$00
|
||||
sbc temp+1
|
||||
sta temp+1
|
||||
lda #$7e ;(del) char
|
||||
sta statusBuffer+80+17
|
||||
lda #space
|
||||
sta statusBuffer+80+20
|
||||
DisplayWindValue
|
||||
:4 lsrw temp ;divide by 16 to have a nice value on a screen
|
||||
lda temp
|
||||
@@ -2207,6 +2203,7 @@ DisplayWindValue
|
||||
;display Angle
|
||||
;=========================
|
||||
displayAngle
|
||||
ldy #space
|
||||
ldx TankNr
|
||||
lda AngleTable,x
|
||||
cmp #90
|
||||
@@ -2215,28 +2212,25 @@ displayAngle
|
||||
AngleToRight
|
||||
; now we have values from 0 to 89 and right angle
|
||||
sta decimal
|
||||
sty statusBuffer+40+22 ; (space) character
|
||||
lda #$7f ; (tab) character
|
||||
sta statusBuffer+40+25
|
||||
lda #space
|
||||
sta statusBuffer+40+22
|
||||
beq AngleDisplay
|
||||
bne AngleDisplay
|
||||
AngleToLeft
|
||||
sec
|
||||
lda #180
|
||||
sbc AngleTable,x
|
||||
; angles 180 - 91 converted to 0 - 89
|
||||
sta decimal
|
||||
sty statusBuffer+40+25 ; (space) character
|
||||
lda #$7e ;(del) char
|
||||
sta statusBuffer+40+22
|
||||
lda #space
|
||||
sta statusBuffer+40+25
|
||||
beq AngleDisplay
|
||||
bne AngleDisplay
|
||||
VerticallyUp
|
||||
; now we have value 90
|
||||
sta decimal
|
||||
lda #space
|
||||
sta statusBuffer+40+25
|
||||
sta statusBuffer+40+22
|
||||
sty statusBuffer+40+25 ; (space) character
|
||||
sty statusBuffer+40+22 ; (space) character
|
||||
|
||||
AngleDisplay
|
||||
mwa #statusBuffer+40+23 displayposition
|
||||
|
||||
+6
-6
@@ -342,17 +342,17 @@ LaserCoordinate .DS 8 ; 2,2,2,2
|
||||
; from $30 the defensive weapons begin
|
||||
TanksWeapons
|
||||
TanksWeapon1
|
||||
.DS [last_defensive_____ - first_offensive____ +1]
|
||||
.DS number_of_weapons
|
||||
TanksWeapon2
|
||||
.DS [last_defensive_____ - first_offensive____ +1]
|
||||
.DS number_of_weapons
|
||||
TanksWeapon3
|
||||
.DS [last_defensive_____ - first_offensive____ +1]
|
||||
.DS number_of_weapons
|
||||
TanksWeapon4
|
||||
.DS [last_defensive_____ - first_offensive____ +1]
|
||||
.DS number_of_weapons
|
||||
TanksWeapon5
|
||||
.DS [last_defensive_____ - first_offensive____ +1]
|
||||
.DS number_of_weapons
|
||||
TanksWeapon6
|
||||
.DS [last_defensive_____ - first_offensive____ +1]
|
||||
.DS number_of_weapons
|
||||
|
||||
mountaintable ;table of mountains (size=screenwidth)
|
||||
.DS [screenwidth]
|
||||
|
||||
+42
-9
@@ -3,6 +3,9 @@
|
||||
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||
;--------------------------------------------------
|
||||
.proc Explosion
|
||||
; xdraw,ydraw (word) - coordinates of explosion center
|
||||
; TankNr - number of shooting tank
|
||||
; ActiveWeapon(TankNr) - weapon that tank fires
|
||||
;--------------------------------------------------
|
||||
;cleanup of the soil fall down ranges (left and right)
|
||||
jsr ClearScreenSoilRange
|
||||
@@ -358,29 +361,34 @@ EndNurnedCheckLoop
|
||||
; ------------------------
|
||||
.proc babyroller
|
||||
mva #11 ExplosionRadius
|
||||
GoRoller
|
||||
jmp xroller
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc roller ;
|
||||
mva #21 ExplosionRadius
|
||||
jmp xroller
|
||||
bne babyroller.GoRoller ; 1 byte saved
|
||||
; jmp xroller
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc heavyroller
|
||||
mva #30 ExplosionRadius
|
||||
jmp xroller
|
||||
bne babyroller.GoRoller ; 1 byte saved
|
||||
; jmp xroller
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc riotbomb
|
||||
mva #17 ExplosionRadius
|
||||
GoRiotBomb
|
||||
jsr CalculateExplosionRange
|
||||
jmp xriotbomb
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc heavyriotbomb
|
||||
mva #29 ExplosionRadius
|
||||
jsr CalculateExplosionRange
|
||||
jmp xriotbomb
|
||||
bne riotbomb.GoRiotBomb ; 4 bytes saved - optimization :)
|
||||
; jsr CalculateExplosionRange
|
||||
; jmp xriotbomb
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc babydigger
|
||||
@@ -680,6 +688,7 @@ ToHighFill
|
||||
mwa EndOfTheBarrelX xbyte
|
||||
mva EndOfTheBarrelY ybyte
|
||||
mva #0 ybyte+1
|
||||
sta LaserFlag ; turn on gravity and wind after shot :)
|
||||
|
||||
mwa xdraw LaserCoordinate
|
||||
mwa ydraw LaserCoordinate+2
|
||||
@@ -932,6 +941,14 @@ ExplodeNow
|
||||
; --------------------------------------------------
|
||||
.proc checkRollDirection
|
||||
; check rolling direction (for roller and other rolling weapons)
|
||||
; xdraw (word) - X coordinate
|
||||
; Y coordinate is taken from mountaintable and go to ydraw (word)
|
||||
; shoot direction is taken from VX+3
|
||||
; result:
|
||||
; HowMuchToFall - direction
|
||||
; $FF - we are in a hole (flying in missile direction)
|
||||
; 1 - right, 2 - left
|
||||
; --------------------------------------------------
|
||||
ldy #0
|
||||
adw xdraw #mountaintable tempXROLLER
|
||||
lda (tempXROLLER),y
|
||||
@@ -951,15 +968,12 @@ PositiveVelocity
|
||||
; 1 - right, 2 - left
|
||||
mva #$ff HowMuchToFall
|
||||
mva ydraw HeightRol
|
||||
;mwa #mountaintable tempXROLLER - It's already done !!!
|
||||
;adw tempXROLLER xdraw
|
||||
SeekLeft
|
||||
cpw tempXROLLER #mountaintable
|
||||
beq GoRightNow ; "bounce" if we have on left end
|
||||
.nowarn dew tempXROLLER
|
||||
lda (tempXROLLER),y ;fukk! beware of Y value
|
||||
cmp HeightRol
|
||||
;bne HowMuchToFallLeft
|
||||
HowMuchToFallLeft
|
||||
bcs GoRightNow
|
||||
mva #1 HowMuchToFall
|
||||
@@ -971,9 +985,7 @@ SeekRight
|
||||
inw tempXROLLER
|
||||
lda (tempXROLLER),y
|
||||
cmp HeightRol
|
||||
;bne HowMuchToFallRight
|
||||
HowMuchToFallRight
|
||||
; check if up or down
|
||||
bcs HowMuchToFallKnown
|
||||
lda HowMuchToFall
|
||||
bpl ItIsLeftAlready
|
||||
@@ -2393,6 +2405,7 @@ NoWall
|
||||
; X and TankNr - index of shooting tank
|
||||
; -------------------------------------------------
|
||||
mva #sfx_sandhog sfx_effect
|
||||
.IF FASTER_GRAF_PROCS = 1
|
||||
ldy #0 ; byte counter (from 0 to 39)
|
||||
NextColumn
|
||||
; big loop - we repat internal loops for each column of bytes
|
||||
@@ -2427,6 +2440,26 @@ NextLine2
|
||||
iny
|
||||
cpy #40
|
||||
bne NextColumn
|
||||
.ELSE
|
||||
mva #1 color
|
||||
mwa #120 ydraw
|
||||
NextLineSlow
|
||||
lda #0
|
||||
sta xdraw
|
||||
sta xdraw+1
|
||||
NextPixelSlow
|
||||
bit random
|
||||
bpl NoPlot
|
||||
bvc NoPlot
|
||||
jsr plot.MakePlot
|
||||
NoPlot
|
||||
inw xdraw
|
||||
cpw xdraw #screenwidth
|
||||
bne NextPixelSlow
|
||||
dec ydraw
|
||||
dec ydraw
|
||||
bpl NextLineSlow
|
||||
.ENDIF
|
||||
; and we have "snow" :)
|
||||
lda #0
|
||||
ldx TankNr
|
||||
|
||||
Reference in New Issue
Block a user