Wegen DirectX7. Das wird unter Vista nur 'emuliert'.dllfreak2001 hat geschrieben: Mich wunderts nur, dass das Spiel unter Vista deutlich langsamer läuft (also im allgemeinen). Wisst ihr woran das liegt? [/edit]
Retro-Remake (Alpha) Intruder schütze Stadt vor Aliens
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Im Source ist nix spektakuläres viele Listen nicht besonders Modular naja.
Keine Sprite3Ds und einfaches Clipping....
Hab hier aber schon etwas rumgeschraubt, später werden die Grafiken und Sounds auch noch in die EXE integriert.
Keine Sprite3Ds und einfaches Clipping....
Hab hier aber schon etwas rumgeschraubt, später werden die Grafiken und Sounds auch noch in die EXE integriert.
Code: Alles auswählen
;*** Intruder v1.0 ***
;*** Von dllfreak2001 ***
;*** 02.07.08 ***
;-Screenkramm initialisieren
InitSprite()
InitSound()
InitKeyboard()
;-Strukturen
Structure gshoot
posx.f
posy.f
EndStructure
Structure genemy
posx.f
posy.f
movex.f
movey.f
energy.f
targetx.l
targety.l
EndStructure
Structure gwreck
typ.l
anioff.l
posx.f
posy.f
movex.f
movey.f
EndStructure
Structure gexplosion
anim.l
posx.f
posy.f
EndStructure
Structure ghouse
typ.l
power.l
EndStructure
;-Konstanten und Definitionen
level = 0
#screenw = 800
#screenh = 320
#shootdelay = 40
#maxwreck = 2000
#efspeed = 1.8
#whouse = 22
#hhouse = 4
#hwreck = 20
#twave = 10000
Global guardpos.f = #screenw/2-32,guardmove.f, shootmove.f = 10
;-Listen und Arrays
Global NewList shoot.gshoot()
Global NewList enemy.genemy()
Global NewList wreck.gwreck()
Global NewList explo.gexplosion()
Global NewList shootin.gexplosion()
Global Dim house.ghouse(#whouse,#hhouse)
;Fenster und Screen öffnen
winid.l = OpenWindow(0,0,0,#screenw,#screenh,"Intruder",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
OpenWindowedScreen(winid,0,0,#screenw,#screenh,0,0,0)
;-Grafiken Laden
TransparentSpriteColor(#PB_Default ,RGB(255,0,255))
LoadSprite(0,"back.bmp",0)
LoadSprite(10,"enemy.bmp",0)
LoadSprite(1,"guard.bmp",0)
LoadSprite(2,"shoot.bmp",0)
LoadSprite(3,"shootout.bmp",0)
LoadSprite(100,"wreck01.bmp",0)
LoadSprite(101,"wreck02.bmp",0)
LoadSprite(102,"wreck03.bmp",0)
LoadSprite(103,"wreck04.bmp",0)
LoadSprite(104,"wreck05.bmp",0)
LoadSprite(200,"explosion.bmp",0)
LoadSprite(300,"shootin.bmp",0)
LoadSprite(400,"house01.bmp",0)
LoadSprite(401,"house02.bmp",0)
LoadSprite(402,"house03.bmp",0)
;-Sounds laden
LoadSound(0,"gun2.wav")
LoadSound(1,"explode.wav")
LoadSound(2,"laser.wav")
;-Prozeduren
Procedure NewExplosion(posx.f,posy.f)
AddElement(explo())
explo()\posx = posx
explo()\posy = posy
explo()\anim = 0
EndProcedure
Procedure NewWreck(posx.f,posy.f,movx.f,movy.f,type.l, range.l, count.l)
For f = 0 To count
AddElement(wreck())
wreck()\typ = type + Random(range)
wreck()\posx = posx
wreck()\posy = posy
wreck()\movex = (Random(movx)-movx/2)/100
wreck()\movey = (Random(movy)-movy/2)/100
wreck()\anioff = Random(3)
Next
EndProcedure
;-Stadt erzeugen
For x = 0 To #whouse
ttemp = Random(2)
For y = 0 To #hhouse
If y > 0
If house(x,y-1)\typ => 0 And Random(10) > 2
house(x,y)\typ = ttemp
house(x,y)\power = 400
Else
house(x,y)\typ = -1
EndIf
Else
If Random(10)> 0
house(x,y)\typ = ttemp
house(x,y)\power = 400
Else
house(x,y)\typ = -1
EndIf
EndIf
Next:Next
;******************************************************
; Beginn der Hauptschleife
;******************************************************
;-Start
Repeat
ExamineKeyboard()
wevent.l = WindowEvent()
;- <=== ===> Bewegen
guardmove/1.1
If KeyboardPushed(#PB_Key_Left)
guardmove - 1
ElseIf KeyboardPushed(#PB_Key_Right)
guardmove + 1
EndIf
guardpos = guardpos + guardmove
If guardpos < 0
guardpos = 0
guardmove = -guardmove/2
EndIf
If guardpos > #screenw-64
guardpos = #screenw-64
guardmove = -guardmove/2
EndIf
;- ===o Schiessen
If KeyboardPushed(#PB_Key_Space) And ElapsedMilliseconds()-shoottime > #shootdelay
shoottime = ElapsedMilliseconds()
AddElement(shoot())
shoot()\posx = guardpos + 32
shoot()\posy = #screenh-32
shootanim = 0
guardanimdelay.l = 10
PlaySound(0)
EndIf
;-Panzer animieren
guardanimdelay + 1
If guardanimdelay < 500 And ElapsedMilliseconds()-guardtime > guardanimdelay
guardtime.l = ElapsedMilliseconds()
guardanim + 1
If guardanim > 2
guardanim = 0
EndIf
EndIf
;-Stadt darstellen
For x = 0 To #whouse:For y= 0 To #hhouse
If house(x,y)\typ > -1
ClipSprite(400+ house(x,y)\typ,0,Round((400-house(x,y)\power)/100,0) * 32,32,32)
DisplayTransparentSprite(400 + house(x,y)\typ,32+x*32,#screenh-y*32-32)
EndIf
Next:Next
;-<<<****Gegner****>>>
;-Neue Gegner erzeugen
ecnt.l = CountList(enemy())
If ecnt = 0
start = 1
level + 1
For n = 0 To level
AddElement(enemy())
enemy()\posx = Random(#screenw)
enemy()\posy = -64
enemy()\movex = (Random(400)-200)/100
If Abs(enemy()\movex) < 0.5
enemy()\movex = 4
EndIf
enemy()\targetx = Random(#whouse)
enemy()\targety = Random(#hhouse)
enemy()\movey = Random(300)/100 + 1
enemy()\energy = 4
Next
EndIf
scnt.l = CountList(shoot())
ecnt = CountList(enemy())
If ecnt > 0
;-Raumschiffanimation
anim + 1
If anim > 3: anim = 0 :EndIf
ClipSprite(10,0,anim*32,32,32)
FirstElement(enemy())
playlaser.b = 0 ;Flag für Lasersound
For n = 0 To ecnt-1
;Gegner horizontal bewegen
enemy()\posx = enemy()\posx + enemy()\movex
If enemy()\posx > #screenw
enemy()\posx = #screenw
enemy()\movex = -Random(400)/100 -1
EndIf
If enemy()\posx < -64
enemy()\posx = -64
enemy()\movex = Random(400)/100 +1
EndIf
;Gegner vertikal bewegen
enemy()\posy = enemy()\posy + enemy()\movey
If enemy()\posy > #screenh - 96
enemy()\posy = #screenh - 96
enemy()\movey = -Random(400)/100 -1
EndIf
If enemy()\posy < - 64
enemy()\targetx = Random(#whouse)
enemy()\targety = Random(#hhouse)
enemy()\posy = - 64
enemy()\movey = Random(400)/100 + 1
EndIf
;-Häuser angreifen
If enemy()\posy+24 > #screenh/3 And enemy()\posy+24 < #screenh-enemy()\targety*32-16 And house(enemy()\targetx,enemy()\targety)\typ > -1 And enemy()\posx > enemy()\targetx*32 - 160 And enemy()\posx < enemy()\targetx*32 + 128
playlaser = 1
enemy()\movex = enemy()\movex/1.02
enemy()\movey = enemy()\movey/1.02
house(enemy()\targetx,enemy()\targety)\power - 1 ;Dem Stockwerk wird Energie entzogen
;-Stockwerk zerstören
If house(enemy()\targetx,enemy()\targety)\power < 1
enemy()\movex = (Random(400)-200)/100
If enemy()\movex = 0
enemy()\movex = 1.1
EndIf
enemy()\movey = (Random(200)/100)+0.1
house(enemy()\targetx,enemy()\targety)\power = 0
house(enemy()\targetx,enemy()\targety)\typ = -1
NewExplosion(32+enemy()\targetx*32,#screenh-enemy()\targety*32-32)
NewWreck(32+enemy()\targetx*32,#screenh-enemy()\targety*32-32,200,200,2,2,#hwreck)
PlaySound(1)
;höherliegende Stockwerke zerstören
If enemy()\targety < #hhouse
For v = enemy()\targety+1 To #hhouse
If house(enemy()\targetx,v)\typ > -1
house(enemy()\targetx,v)\typ = -1
house(enemy()\targetx,v)\power = -1
NewExplosion(32+enemy()\targetx*32,#screenh-v*32-32)
NewWreck(32+enemy()\targetx*32,#screenh-v*32-32,200,200,2,2,#hwreck)
EndIf
Next
EndIf
EndIf
;-Laser darstellen
StartDrawing(ScreenOutput())
LineXY(enemy()\posx+16,enemy()\posy+24,48+enemy()\targetx*32,#screenh-enemy()\targety*32-16,RGB(255,20,50))
StopDrawing()
EndIf
;-Gegner treffen
scnt = CountList(shoot())
If scnt > 0
FirstElement(shoot())
For m = 0 To scnt-1
;Auf einschlag prüfen
If shoot()\posx > enemy()\posx+2 And shoot()\posx < enemy()\posx+30 And shoot()\posy > enemy()\posy+8 And shoot()\posy < enemy()\posy +32
;Einschläge
AddElement(shootin())
shootin()\posx = shoot()\posx
shootin()\posy = shoot()\posy
;Schuss entfernen
DeleteElement(shoot())
;Gegner energie abziehen und flüchten lassen
enemy()\movex = enemy()\movex * #efspeed
enemy()\energy - 1
EndIf
NextElement(shoot())
Next
EndIf
;-Gegner darstellen
DisplayTransparentSprite(10,enemy()\posx,enemy()\posy)
;-Gegner löschen
If enemy()\energy < 1
NewWreck(enemy()\posx+8,enemy()\posy+8,2400,2400,0,1,100)
NewExplosion(enemy()\posx,enemy()\posy)
DeleteElement(enemy())
PlaySound(1)
EndIf
NextElement(enemy())
Next
EndIf
;-Lasersound abspielen
If ElapsedMilliseconds()-lasertime > 691 And playlaser = 1
lasertime = ElapsedMilliseconds()
PlaySound(2)
EndIf
;->>>****Gegner****<<<
;-Panzer darstellen
ClipSprite(1,0,guardanim*32,64,32)
DisplayTransparentSprite(1,guardpos,#screenh-32)
;-Wrackteile bewegen und darstellen
wcnt.l = CountList(wreck())
If wcnt > 0
FirstElement(wreck())
If ElapsedMilliseconds()-wanimtime > 50
wanim + 1
If wanim > 3:wanim = 0:EndIf
wanimtime = ElapsedMilliseconds()
EndIf
For n = 0 To wcnt-1
wreck()\movex / 1.005
wreck()\movey + 0.1
wreck()\posx = wreck()\posx + wreck()\movex
wreck()\posy = wreck()\posy + wreck()\movey
tanim = wanim + wreck()\anioff
If tanim > 3: tanim-3:EndIf
ClipSprite(100+wreck()\typ,0,tanim*16,16,16)
DisplayTransparentSprite(100+wreck()\typ, wreck()\posx, wreck()\posy)
If wreck()\posy > #screenh
DeleteElement(wreck())
EndIf
NextElement(wreck())
Next
EndIf
;-Schüsse darstellen und bewegen
scnt = CountList(shoot())
If scnt > 0
FirstElement(shoot())
For n = 0 To scnt - 1
shoot()\posy - shootmove
DisplayTransparentSprite(2,shoot()\posx-16,shoot()\posy-16)
If shoot()\posy < -16
DeleteElement(shoot())
EndIf
NextElement(shoot())
Next
EndIf
;-Mündungsfeuer darstellen
If shootanim < 4
ClipSprite(3,0,shootanim*32,32,32)
DisplayTransparentSprite(3,guardpos+16,#screenh-60)
If ElapsedMilliseconds()-schootouttimer > 50
shootanim + 1
schootouttimer = ElapsedMilliseconds()
EndIf
EndIf
;-Explosionen darstellen
excnt.l = CountList(explo())
If excnt > 0
FirstElement(explo())
If ElapsedMilliseconds() - explotime > 50
animok.b = 1
explotime = ElapsedMilliseconds()
Else
animok = 0
EndIf
For n = 0 To excnt - 1
ClipSprite(200,0,explo()\anim*64,64,64)
DisplayTransparentSprite(200,explo()\posx-16,explo()\posy-16)
If animok
explo()\anim + 1
EndIf
If explo()\anim = 4
DeleteElement(explo())
EndIf
NextElement(explo())
Next
EndIf
;-Einschläge darstellen
sincnt.l = CountList(shootin())
If sincnt > 0
FirstElement(shootin())
If ElapsedMilliseconds() - sintime > 20
sinanimok.b = 1
sintime = ElapsedMilliseconds()
Else
sinanimok = 0
EndIf
For n = 0 To sincnt - 1
ClipSprite(300,0,shootin()\anim*32,32,32)
DisplayTransparentSprite(300,shootin()\posx-16,shootin()\posy)
If sinanimok
shootin()\anim + 1
EndIf
If shootin()\anim = 4
DeleteElement(shootin())
EndIf
NextElement(shootin())
Next
EndIf
;-Text schreiben
StartDrawing(ScreenOutput())
DrawText(0,0,"Level: " + Str(level) )
StopDrawing()
;-Buffer flippen und Delay
FlipBuffers()
DisplaySprite(0,0,0)
Delay(10)
Until wevent = #PB_Event_CloseWindow
End
I´a dllfreak2001