@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