@tukinem, post #270



@AD99, post #271
@AD99, post #274
@mike100, post #275



@tukinem, post #277
@tukinem, post #286
@Hexmage960, post #287
@tukinem, post #288
Oczywiście używam FMODE 3 i podwójnego buforowania. Bez tego blitter nie wyświetliłby tyle grafik jednocześnie. Próby uruchomienia bez FMODE okazały się fiaskiem, bo naprawdę wtedy musiałbym ponad połowę obiektów z komnat pousuwać.
@Hexmage960, post #289
@AD99, post #291

@tukinem, post #292
@c64portal, post #293
.MAN
;-------------- ODCZYT KOLIZJI
If G\x>=0 AND G\x<=288
If G\y>0
c(0) = mc(dzielenie(G\x)+3 , dzielenie(G\y+3)+3)
c(1) = mc(dzielenie(G\x+23)+3, dzielenie(G\y+3)+3)
Else
c(0) = mc(dzielenie(G\x)+3 , 3)
c(1) = mc(dzielenie(G\x+23)+3, 3)
EndIf
If G\y>3
c(2) = mc(dzielenie(G\x+4)+3 , dzielenie(G\y)+3)
c(3) = mc(dzielenie(G\x+19)+3, dzielenie(G\y)+3)
EndIf
If G\y>-14
c(4) = mc(dzielenie(G\x)+3 , dzielenie(G\y+16)+3)
c(5) = mc(dzielenie(G\x+23)+3, dzielenie(G\y+16)+3)
Else
c(4) = mc(dzielenie(G\x)+3 , 3)
c(5) = mc(dzielenie(G\x+23)+3, 3)
EndIf
If G\y>-41
c(6) = mc(dzielenie(G\x)+3, dzielenie(G\y+41)+3)
c(7) = mc(dzielenie(G\x+23)+3, dzielenie(G\y+41)+3)
Else
c(6) = mc(dzielenie(G\x)+3 , 3)
c(7) = mc(dzielenie(G\x+23)+3, 3)
EndIf
If G\y>-42
c(8) = mc(dzielenie(G\x+8)+3, dzielenie(G\y+42)+3)
c(9) = mc(dzielenie(G\x+13)+3, dzielenie(G\y+42)+3)
Else
c(8)=0
c(9)=0
EndIf
EndIf
If G\x<0
If G\y>0
c(0) = mc(3 , dzielenie(G\y)+3)
Else
c(0)=0
EndIf
If G\y>-18
c(4) = mc(3 , dzielenie(G\y+18)+3)
Else
c(4)=0
EndIf
If G\y>-21
c(6) = mc(3 , dzielenie(G\y+41)+3)
c(8) = mc(3 , dzielenie(G\y+42)+3)
c(9) = mc(3 , dzielenie(G\y+42)+3)
Else
c(6) = 0
c(8) = mc(3 , 3)
c(9) = mc(3 , 3)
EndIf
EndIf
If G\x>288
If G\y>0
c(1) = mc(15 , dzielenie(G\y)+3)
Else
c(1) = 0
EndIf
If G\y>-18
c(5) = mc(15 , dzielenie(G\y+18)+3)
Else
c(5) = 0
EndIf
If G\y>-21
c(7) = mc(15 , dzielenie(G\y+41)+3)
c(8) = mc(15 , dzielenie(G\y+42)+3)
c(9) = mc(15 , dzielenie(G\y+42)+3)
Else
c(7) = 0
c(8) = mc(15 , 3)
c(9) = mc(15 , 3)
EndIf
EndIf
;-------------- BIEGANIE
If SOUNDTIME=0 AND G\b=1
MTSoundFX #SOUND_STEPS,48
SOUNDTIME = #TIME_STEPS
EndIf
If G\j=0 ;czy stoimy na ziemii
If Peek.b(?JOY) BitTst 2 ;kierunek w lewo
If G\k=0
If G\b<=1 Then G\b=4 ; wlaczenie animacji obracania sie
Else ;kierunek w prawo
G\b=1
G\k=1
EndIf
EndIf
If Peek.b(?JOY) BitTst 3 ;to samo w druga strone
If G\k=1
If G\b<=1 Then G\b=4
Else
G\b=1
G\k=0
EndIf
EndIf
If Peek.b(?JOY) BitTst 0=0 AND Peek.b(?JOY) BitTst 2=0 AND Peek.b(?JOY) BitTst 3=0 AND G\b=1 Then G\b=0
Select G\b
Case 0 ;stoimy w miejscu
G\a=0
Case 1 ;zwykly bieg
If G\a<13 AND G\a>=4 Then G\a +1 Else G\a=4
If G\k=0 AND c(7)<>1 AND c(1)<>1 Then G\x+4
If G\k=1 AND c(6)<>1 AND c(0)<>1 Then G\x-4
Case 2 ;trzecia klatka obrotu
G\k = 1 - G\k
G\a=0
G\b-1
Case 3 ;druga klatka obrotu
G\a=2
G\b-1
Case 4 ;pierwsza klatka obrotu
G\a=1
G\b-1
End Select
EndIf
;-------------- SKAKANIE
If G\j>0 AND Peek.b(?JUMP)>0
If Peek.b(?JUMP)=11 Then G\a=3 Else G\a=4
G\y+Peek.b(?JUMPMOVE+Peek.b(?JUMP))
; SKOK W LEWO
If G\j=1
If c(6)<>1 AND c(4)<>1 AND c(0)<>1
G\x-4
Else
If c(2)=1 Then G\j=2
EndIf
EndIf
; SKOK W PRAWO
If G\j=3
If c(7)<>1 AND c(5)<>1 AND c(1)<>1
G\x+4
Else
If c(3)=1 Then G\j=2
EndIf
EndIf
; GORNA KOLIZJA
If c(2)=1 OR c(3)=1
If G\j=1 Then G\x-4
If G\j=3 Then G\x+4
G\j=-G\j
opad = 0
EndIf
SUBQ.b #1,JUMP
If Peek.b(?JUMP)=0 Then G\j=-G\j
EndIf
If G\j<=0
; SPADANIE
If c(8)=0 AND c(9)=0
If G\b=1 AND G\j=0
If G\k=0 Then G\j=-3 : G\x-4
If G\k=1 Then G\j=-1 : G\x+4
G\b=0
EndIf
MOVE.b #0,JUMP
Else
If G\j<0
G\j=0 : G\a=3 : opad=0
MTSoundFX #SOUND_JUMP,64
EndIf
EndIf
EndIf
; WYKRYCIE WCISNIECIA GORY
If Peek.b(?JOY) BitTst 0 AND G\j=0
G\j=2
MOVE.b #JUMPMAX,JUMP
If Peek.b(?JOY) BitTst 2
G\j=1
If G\b<=1 Then G\k=1 Else G\k=1
G\b=0
EndIf
If Peek.b(?JOY) BitTst 3
G\j=3
If G\b<=1 Then G\k=0 Else G\k=0
G\b=0
EndIf
EndIf
;-------------- SPADANIE
If G\j<0
G\b=0
If opad<127 Then opad+1
G\a=4
If opad<10 Then G\y-Peek.b(?JUMPMOVE+opad+1) Else G\y+12
If G\j=-1 AND c(2)<>1
If c(6)<>1 AND c(4)<>1
G\x-4
Else
G\j=-2
EndIf
EndIf
If G\j=-3 AND c(3)<>1
If c(7)<>1 AND c(5)<>1
G\x+4
Else
G\j=-2
EndIf
EndIf
EndIf
;-------------- WYROWNANIE PO LADOWANIU
If G\j=0 AND G\a=3
x1 = roomx*13+(G\x)/24 : x2 = roomx*13+(G\x+23)/24
y1 = roomy*8+(G\y+41)/24 : y2 = roomy*8+(G\y+42)/24
If map(x1,y1)=map(x1,y2) OR map(x2,y1)=map(x2,y2)
While G\y MOD 24 <> 6
G\y-1
Wend
EndIf
EndIf
;-------------- STRZELANIE
;-------------- ODCZYT KOLIZJI STRZALU
If s\x>16 AND s\y>0
Select s\t
Case 1
cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
Case 2
cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+3)+3)
Case 3
cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+14)+3)
Case 4
cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+5)+3)
Case 5
cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+6)+3)
cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+17)+3)
End Select
Else
cs(0) = 0
cs(1) = 0
EndIf
If Peek.b(?JOY) BitTst 4 AND G\ammo>0 AND Peek.b(?FIREKEY)=0
If s\x<=0 OR s\x>=320
s\x=G\x+8 - G\k LSL3
s\k=G\k
s\t=G\tammo
Select G\tammo
Case 1 : s\a=0 : s\y=G\y+21 : s\ymax=3 : MTSoundFX #SOUND_FIRE1,64
Case 2 : s\a=8 : s\y=G\y+19 : s\ymax=5 : MTSoundFX #SOUND_FIRE2,64
Case 3 : s\a=10 : s\y=G\y+8 : s\ymax=16 : MTSoundFX #SOUND_FIRE3,64
Case 4 : s\a=13 : s\y=G\y+17 : s\ymax=7 : MTSoundFX #SOUND_FIRE4,64
Case 5 : s\a=16 : s\y=G\y+2 : s\ymax=24: MTSoundFX #SOUND_FIRE5,64
End Select
G\ammo-1
Select G\ammo
Case 0 : G\tammo=0 : JSR AddGUI
Case 19 : G\tammo=1 : JSR AddGUI
Case 34 : G\tammo=2 : JSR AddGUI
Case 49 : G\tammo=3 : JSR AddGUI
Case 64 : G\tammo=4 : JSR AddGUI
End Select
MOVE.b #1,FIREKEY
EndIf
EndIf
firekey
TST.b FIREKEY : BEQ.b 'koniec
BTST #4,JOY : BNE.b 'koniec : MOVE.b #0,FIREKEY
'koniec
If s\x>-32 AND s\x<320
If s\k=0 Then s\x+16 Else s\x-16
Select s\t
Case 1 : If s\a<7 Then s\a+1 Else s\x=-100 : cs(0)=0 : cs(1)=0
Case 2 : If s\a<9 Then s\a+1 Else s\a=8
Case 3 : If s\a<12 Then s\a+1 Else s\a=10
Case 4 : If s\a<15 Then s\a+1 Else s\a=13
End Select
Else
c(0)=0
c(1)=0
EndIf
If playfield=1 AND G\y>-64
Use BitMap 2
GetaShape 299,G\x+64,G\y+64,24,42
If s\x>-63 AND s\y>-63
Use BitMap 2
GetaShape 297,s\x+64,s\y+64,16,s\ymax LSL1
EndIf
Use BitMap db
EndIf
If cs(0)=1 OR cs(1)=1
boom\a = 27
boom\x = s\x+s\k LSL4+48
boom\y = s\y+s\ymax LSR1 + 56
s\x=-100
EndIf
RTS
.MAN_DEATH
CNIF #DEV=0
Use BitMap 1-db
For b=0 To 3
For a=27 To 0 Step -1
UnBuffer 1-db
BBlit 1-db,410-(a LSR2),G\x+64,G\y+72
If SOUNDTIME>0
SOUNDTIME-1
Else
MTSoundFX #SOUND_BOOM,32
SOUNDTIME = 27
EndIf
VWait
Next
Next
G\x=X
G\y=Y
G\j=0
opad=0
MOVE.b #0,JOY
G\tammo=0
G\ammo=0
roomx=ROOMX
roomy=ROOMY
UnBuffer db
UnBuffer 1-db
QAMIGA
If armatygora>0
BLoad src$+"armatagora.dat",&armatagora(1),armatygora*(SizeOf .enemy)
EndIf
If armatydol>0
BLoad src$+"armatadol.dat",&armatadol(1),armatygdol*(SizeOf .enemy)
EndIf
If puchy>0
BLoad src$+"pucha.dat",&pucha(1),puchy*(SizeOf .enemy)
EndIf
If pajaki>0
BLoad src$+"pajak.dat",&pajak(1),pajaki*(SizeOf .enemy)
EndIf
If kafle>0
BLoad src$+"kafel.dat",&kafel(1),kafle*(SizeOf .enemy)
EndIf
If lasery>0
BLoad src$+"laser.dat",&laser(1),lasery*(SizeOf .enemy)
EndIf
If czolgil>0
BLoad src$+"czolgl.dat",&czolgl(1),czolgil*(SizeOf .enemy)
EndIf
If czolgir>0
BLoad src$+"czolgr.dat",&czolgr(1),czolgir*(SizeOf .enemy)
EndIf
If miny>0
BLoad src$+"mina.dat",&mina(1),miny*(SizeOf .enemy)
EndIf
If boboki>0
BLoad src$+"bobok.dat",&bobok(1),boboki*(SizeOf .enemy)
EndIf
If jezdziki>0
BLoad src$+"jezdzik.dat",&jezdzik(1),jezdziki*(SizeOf .enemy)
EndIf
BLITZ
JSR MakeMap
MTSoundFX #SOUND_START,64
CELSE
MOVE.w #$fff,$dff180
CEND
RTS @tukinem, post #294
@c64portal, post #295
Dcb.w 7,0 ; 7 to rozmiar bloku zmiennych czyli tablicy / 0 to wartosci
@tukinem, post #292
