Toolbox-2/source/boulder/regnatix/bd.spin

305 lines
10 KiB
Plaintext

{{ ---------------------------------------------------------------------------------------------------------
Hive-Computer-Projekt: Boulder Dash - Hive-Version
http://hive-project.de
Basierend auf dem Fanprojekt diverser Propellerk?pfe:
http://forums.parallax.com/forums/default.aspx?f=33&m=263404
Besonderer Dank an Pex "Mahoney" Tufvesson f?r die coole Musik!:
http://mahoney.c64.org
http://www.livet.se/visa
Tasten:
ESC Stop Button A
Space Pause Button B
LShift Start
LCTRL Select
Cursor
Anpassungen f?r den Hive
09-01-2010 - Entfernung der Hardwareerkennung
- Anpassung Konfiguration an Hive/Bellatrix
- Gamecontr. entfernt
- Auskommentierung Sound
12-01-2010 - Soundadapter optimiert
- Scrolltext im Titelbildschirm eingef?gt
19-04-2010 - Anpassung an TriOS: Boulder l?uft jetzt auch aus dem Verzeichnis. Bedingt durch das
neue, etwas tr?gere WAV-Soundsystem, habe ich einige Effekte durch HSS/SFX ersetzt.
Zur Hive-Version: Das Game an sich - also der urspr?ngliche Basiscode aus dem Parallax-Forum - l?uft
auf einem einzigen Propellerchip! Was war zu tun um diese Version an den Hive anzupassen:
1. Der Code kann im wesentlichen fast ausschlie?lich auf Bellatrix laufen. Daf?r m?ssen die entsprechenden
Belegungen der IO-Pins f?r Video und Keyboard angepasst werden.
2. Da Bellatrix keinen Sound ausgeben kann, sondern diese Aufgabe im Hive Administra ?bernimmt, mu? die
Soundausgabe angepasst werden. Im Originalcode ?bernimmt das Objekt "sound.spin" diese Aufgabe - welches
wieder den SIDemu in einer getrennten Cog startet. Hier zeigt sich die St?rke der SPIN-Objekte: F?r die
Anpassung brauchte ich einfach nur ein neues Objekt gleicher Struktur definieren, ohne das Hauptprogramm
zu ?ndern. Dieses neue Soundobjekt startet ebenfalls eine Cog, welche einzig die Aufgabe hat die Kommunikation
zu Regnatix/Administra zu realisieren.
3. Regnatix-Code: Tja, die K?nigin kann bei der ganzen Sache D?umchen drehen, denn sie hat nur folgend Aufgaben
in einer einzigen Cog zu bew?ltigen:
- Bellatrix-Code laden
- SFX-Slots in Administra initialisieren
- Warten bis Bellatrix einen Ton von sich geben m?chte und ?bermittlung dieser
Tonesequenz an Administra
Damit werden nat?rlich auf der einen Seite massig Ressourcen in Bellatrix gegen?ber dem urspr?nglichen Code frei
und es sind durch die Verwendung von HSS/SFX + Waveplayer + SDCard mehr M?glichkeiten gegeben.
Bellatrix-Code : 20,5 KByte
Regnatix-Code : 3,2 KByte
Bei diesen Werten ist zu beachten, dass der Regnatix das blanke IOS mit 2,6 KByte eingebunden hat - ohne Optimierung,
denn ein Gro?teil der IOS-Routinen sind in diesem Fall ungenutzt.
Zeitaufwand : ca. 3 nette Abende ;)
drohne235
--------------------------------------------------------------------------------------------------------- }}
OBJ
ios : "reg-ios"
' debugx : "pterm" 'debug
CON
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
CON
_music_on = 1
_music_off = 2
_moving_sound1 = 3
_moving_sound2 = 4
_boulder_sound = 5
_diamond_sound = 6
_pick_sound = 7
_explosion_sound = 8
_crack_sound = 9
_magic_wall_sound_on = 10
_magic_wall_sound_off = 11
_amoeba_sound_on = 12
_amoeba_sound_off = 13
_time_ending_sound = 14
_bonus_point_sound = 15
_cover_sound = 16
VAR
byte parastr[64]
byte fl_musicon
PUB main | a,b,c,i,n,stradr
'initialisierung
ios.start 'ios initialisieren
' ios.startram 'code f?r test im ram, sollte bei bin-datei auskommentiert werden
' debugx.start(115200)
ios.admsetsyssnd(0) 'systemsounds abschalten
ios.sddmact(ios#DM_USER) 'wieder in userverzeichnis wechseln
ios.print(string("Boulder Dash - Loading..."))
'bellatrix-code laden
ios.parastart
parastr[0] := 0
ios.paranext(@parastr)
case parastr[0]
"n":
ios.belload(@beln) 'grafiktreiber ntsc laden
other:
ios.belload(@belp) 'grafiktreiber pal laden
ios.sddmact(ios#DM_USER) '???
'sfx-slots setzen
ios.sfx_setslot(@fx_moving_sound1, 0)
ios.sfx_setslot(@fx_moving_sound2, 1)
ios.sfx_setslot(@fx_boulder_sound,2)
ios.sfx_setslot(@fx_diamond_sound,3)
ios.sfx_setslot(@fx_pick_sound,4)
ios.sfx_setslot(@fx_amoeba_sound,5)
ios.sfx_setslot(@fx_time_sound,6)
ios.sfx_setslot(@fx_cover_sound,7)
ios.sfx_setslot(@fx_bonus,8)
ios.sfx_setslot(@fx_crack,9)
ios.sfx_setslot(@fx_explosion,10)
ios.sfx_setslot(@fx_wall,11)
'soundadapter
repeat
case ios.bus_getchar2
_music_on: 'titelmusik
ios.admsetsound(ios#SND_HSSOFF) 'hss ausschalten
ios.admsetsound(ios#SND_WAVON) 'wav einschalten
n := ios.wav_play(@wav1)
fl_musicon := 1
_music_off:
if fl_musicon
ios.wav_stop
ios.admsetsound(ios#SND_WAVOFF) 'wav ausschalten
ios.admsetsound(ios#SND_HSSON) 'hss anschalten
fl_musicon := 0
_moving_sound1:
ios.sfx_fire(0,1)
_moving_sound2:
ios.sfx_fire(1,1)
_boulder_sound:
ios.sfx_fire(2,1)
waitcnt(clkfreq / 30 + cnt)
_diamond_sound:
b?
b := b & $FF
byte[@fx_diamond_sound+2] := b
ios.sfx_setslot(@fx_diamond_sound,3)
ios.sfx_fire(3,1)
waitcnt(clkfreq / 30 + cnt)
_pick_sound:
ios.sfx_fire(4,2)
waitcnt(clkfreq / 3 + cnt)
_explosion_sound: 'explosion
ios.sfx_fire(10,1)
waitcnt(clkfreq * 3 + cnt)
_crack_sound: 'eingang
ios.sfx_fire(9,1)
waitcnt(clkfreq / 3 + cnt)
_magic_wall_sound_on:
ios.sfx_fire(11,2)
_magic_wall_sound_off:
_amoeba_sound_on:
ios.sfx_fire(5,2)
_amoeba_sound_off:
_time_ending_sound:
ios.sfx_fire(6,2)
_bonus_point_sound: 'bonus
ios.sfx_fire(8,2)
waitcnt(clkfreq * 4 + cnt)
_cover_sound:
b?
b := b & $FF
byte[@fx_cover_sound+2] := b
ios.sfx_setslot(@fx_cover_sound,7)
ios.sfx_fire(7,1)
waitcnt(clkfreq / 30 + cnt)
DAT
wav1 byte "bd.wav",0 ' titelmusik
beln byte "bd_ntsc.bel",0 ' bella-code, ntsc-version
belp byte "bd_pal.bel",0
'basisschwingung modulation h?llkurve
'Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
fx_moving_sound1 byte $06, $02, $01, $08, $00, $00, $00, $00, $FF, $00, $00, $D0
fx_moving_sound2 byte $06, $02, $01, $0F, $00, $00, $00, $00, $FF, $00, $00, $D0
fx_boulder_sound byte $06, $01, $FF, $0F, $01, $03, $01, $00, $FF, $00, $00, $80
fx_diamond_sound byte $01, $01, $E0, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_pick_sound byte $01, $01, $E0, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_explosion_sound byte $01, $01, $E0, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_crack_sound byte $06, $02, $10, $0F, $00, $00, $00, $00, $FF, $00, $00, $D0
fx_magic_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_amoeba_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_time_sound byte $02, $05, $FF, $0F, $10, $00, $01, $00, $FF, $00, $00, $40
fx_bonus_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_cover_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
fx_bonus
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
byte $03,$03,$FF,$0F,$02,$00,$05,$00,$FF,$01,$50,$11
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
fx_crack
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
byte $01,$22,$01,$0F,$11,$00,$05,$00,$55,$01,$50,$11
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
fx_explosion
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
byte $06,$04,$10,$0F,$00,$00,$00,$00,$FF,$01,$50,$11
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
fx_wall
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
byte $04,$FF,$FF,$0F,$01,$00,$01,$00,$FF,$06,$20,$00
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
DAT
{
sfx-struktur:
wav len freq vol grundschwingung
lfo lfw fma ama modulation
att dec sus rel h?llkurve
seq (optional)
wav wellenform
0 sinus (0..500hz)
1 schneller sinus (0..1khz)
2 dreieck (0..500hz)
3 rechteck (0..1khz)
4 schnelles rechteck (0..4khz)
5 impulse (0..1,333hz)
6 rauschen
len tonl?nge $0..$fe, $ff endlos
freq frequenz $00..$ff
vol lautst?rke $00..$0f
lfo low frequency oscillator $ff..$01
lfw low frequency waveform
$00 sinus (0..8hz)
$01 fast sine (0..16hz)
$02 ramp up (0..8hz)
$03 ramp down (0..8hz)
$04 square (0..32hz)
$05 random
$ff sequencer data
fma frequency modulation amount
$00 no modulation
$01..$ff
ama amplitude modulation amount
$00 no modulation
$01..$ff
att attack $00..$ff
dec decay $00..$ff
sus sustain $00..$ff
rel release $00..$ff
}