*lol*
als ich mir das ding downloadete stand Freeware drüber...(seltsam/fake?)
@Der Drake
"Also für Engine und Spiellogik sicherlich, aber sobald es an den Inhalt geht sind grafische Editoren praktisch Pflicht, imo.
Oder zumindest ne Skriptsprache... du willst doch nicht ernsthaft ein komplettes Spiel mit hunderten und tausenden verschiedener Ereignisse von Hand in C(++) schreiben, oder? Du würdest vermutlich nie fertig werden."
sind nicht pflicht, jedoch schreibe ich zu jedem Game einen eigenen Mapeditor oder modifiziere einen älteren, Ereignisse werden mit dem Mapeditor gesetzt und in mehrere Dimensionierten arrays gespeichert und durch Procedures/funktionen ausgefürt, es ist NICHT notwendig jedes Ereigniss einzeln zu schreiben, schwer zu erklären, hier ein kleiner PB_Code:
Code:
;Dx, bzw Dy bestimmt die Breite/länge der map
;map wird erstellt, alle mit dem Tile 0
Structure Held
x.w
y.w
Image.w
HP.w
LP.w
EndStructure
NewList Held.Held()
Global Held
Procedure Heldplazieren()
For x=0 To Dx
For y=0 To Dy
If map(x,y)=1
AddElement(Held())
Held()\x =x*Tileg+Tx
Held()\y =y*Tileg+Ty
EndIF
Next
Next
Held()\Image =#Hero
Held()\HP =100
Held()\LP =50
EndProcedure
tile=1
Dim map.b(Dx,Dy)
For x=0 To Dx
For y=0 To Dy
map(x,y)=0
Next
Next
Repeat
;Wenn Maus an Position auf der Map gedrückt entspricht das Tile der Variable tile, also 1.
If MouseButton(1) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
map(Int((MTx/Tileg)),Int((MTy/Tileg)))=tile
EndIf
Heldplazieren()
If KeyboardPushed(#PB_Key_LeftAlt) And KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver
So in vereinfachter Form kann man Ereignisse auf der Map plazieren, also kann ich so viele Helden, wie ich will plazieren und muss das nur einmal schreiben, normal, oder?
Erm, wer die Sprache kann kann sich hir mal einen unfertigen Code eines Mapeditores von mir ansehen (älteres teil)
Sprache PureBasic
Load,Clippingroutine:
Code:
If Tset=1
anzahl=28
LoadSprite(0,"Gfx\Tileset1\Tileset1.bmp",0)
LoadSprite(29,"Gfx\Tileset1\Wasser.bmp",0)
LoadSprite(30,"Gfx\Tileset1\Unitb.bmp",0)
LoadSprite(31,"Gfx\Tileset1\Unitb2.bmp",0)
LoadSprite(32,"Gfx\Tileset1\infantrie1.bmp",0)
LoadSprite(33,"Gfx\Tileset1\Infantrie2.bmp",0)
TransparentSpriteColor(30,RGB(255,0,255))
TransparentSpriteColor(31,RGB(255,0,255))
TransparentSpriteColor(32,RGB(255,0,255))
TransparentSpriteColor(33,RGB(255,0,255))
For x=1 To anzahl
If LoadSprite(x,"Gfx\Tileset1\Tileset1.bmp",0)=0
MessageRequester("Fehler","Bild!\-1-/!",0)
EndIf
Next
ClipSprite(1,0,0,32,32)
EndIf
For x=1 To anzahl
ClipSprite(x+1,x*32,0,32,32)
Next
LoadSprite(99,"Gfx\Pfeil.bmp",0)
Die Initialisation:
Code:
;-Initialisation--------------------------------------
If InitSprite() = 0
MessageRequester("Fehler", "Kann Grafik nicht Initialisieren..(DirectX7 oder höher notwendig!)", 0)
End
EndIf
If InitSprite3D() =0
MessageRequester("Fehler", "3DKarte unterstützt Sp3D nicht oder DX ist nicht instaliert", 0)
End
EndIf
If InitKeyboard() = 0
MessageRequester("Fehler", "Kann Keyboard nicht Initialisieren..(DirectX7 oder höher notwendig!)", 0)
End
EndIf
If InitSound() = 0
MessageRequester("Fehler", "Kann Sound nicht Initialisieren..(DirectX7 oder höher notwendig, Soundkarte notwendig!)", 0)
End
EndIf
If InitMouse() = 0
MessageRequester("Fehler", "Kann Maus nicht Initialisieren..", 0)
End
EndIf
If InitMovie() = 0
MessageRequester("Fehler", "Kann Film nicht Initialisieren..", 0)
End
EndIf
OpenScreen(800,600,32,"Mapeditor(Ix entertainment)") ; Vollbildmodus, 800*600 Pixel,
Maincode:
Code:
;Author: Oliver Riehle (Ix entertainment)
;Date: Uninterresant
;Version : 0.9
;Name: Welteneditor, Freeware zu dem dazugehörigen Spiel
MessageRequester("Welteneditor v.1.0","WeltenEditor Beta1 von OliverRiehle",0)
utile=Val(InputRequester("Unterstes Tile", "Unterstes Tile12=Gras", ""))
Dx=Val(InputRequester("Map größe", "Ausdehnung(x/y)", ""))+1
Dy=Dx
Tset=Val(InputRequester("Zu verwendendes Tileset", "TilesetNR:", ""));je nach dem werden Sprites geladen
;unitsetload
IncludeFile"Sources/Initsystem.pb"
Enumeration
#SaveFile
EndEnumeration
Dim map.b(Dx,Dy)
For y=0 To Dy
For x=0 To Dx
map(x,y)=utile ;utile ist Tile=$
Next
Next
Dim mapebene2.b(Dx,Dy)
For y=0 To Dy
For x=0 To Dx
mapebene2(x,y)=1
Next
Next
framedelay.l=335
frametimer.l=0
frame.l=0
frames.l=2
Timer.l = ElapsedMilliseconds()
WieLange.l = 1000
Bild.l = 1
IncludeFile"Sources/Load.pb"
Dim felder.b(anzahl+1)
For x=1 To anzahl+1
felder(x)=x
Next
#Screenshot=80
tile=1
Tileg=32 ;Tilegröße
Repeat
ClearScreen(RGB(0,0,0))
ExamineKeyboard()
If pushed=0
If KeyboardPushed(#PB_Key_L)
load=1
pushed=1
EndIf
If load=1
CloseScreen()
Mapname$ =OpenFileRequester("Zu ladende Map","","dat | *.*",0)
ReadFile(#SaveFile,Mapname$)
utile=ReadByte(#SaveFile)
Tset=ReadByte(#SaveFile)
Dx=ReadByte(#SaveFile)
Dy=ReadByte(#SaveFile)
numer=ReadByte(#SaveFile)
Dim map.b(Dx,Dy);über datei
For y=0 To Dy
For x=0 To Dx
map(x,y)=ReadByte(#SaveFile)
Next
Next
Dim mapebene2.b(Dx,Dy)
For y=0 To Dy
For x=0 To Dx
mapebene2(x,y)=ReadByte(#SaveFile)
Next
Next
CloseFile(#SaveFile)
load=0
OpenScreen(800,600,32,"Mapeditor(Ix entertainment)")
IncludeFile"Sources/Load.pb"
EndIf
EndIf
If KeyboardReleased(#PB_Key_L)
pushed=0
EndIf
If KeyboardPushed(#PB_Key_LeftControl)
If KeyboardPushed(#PB_Key_S)
save=1
EndIf
EndIf
If save=1
CloseScreen()
Mapname$ =SaveFileRequester("Zu speichernde Map","","dat | *.*",0)
CreateFile(#SaveFile,Mapname$)
WriteByte(#SaveFile,utile)
WriteByte(#SaveFile,Tset)
WriteByte(#SaveFile,Dx)
WriteByte(#SaveFile,Dy)
WriteByte(#SaveFile,numer)
For y=0 To Dy
For x=0 To Dx
WriteByte(#SaveFile,map(x,y))
Next
Next
For y=0 To Dy
For x=0 To Dy
WriteByte(#SaveFile,mapebene2(x,y))
Next
Next
CloseFile(#SaveFile)
OpenScreen(800,600,32,"Mapeditor(Ix entertainment)")
IncludeFile"Sources/Load.pb"
save=0
EndIf
If pushed=0
If KeyboardPushed(#PB_Key_2)
pushed=1
If tile < (anzahl+1)
tile+1
EndIf
EndIf
If KeyboardPushed(#PB_Key_1)
pushed=1
If tile>1
tile-1
EndIf
EndIf
If KeyboardPushed(#PB_Key_3) Or MouseWheel() > 0
pushed=1
scroll+32
EndIf
If KeyboardPushed(#PB_Key_4) Or MouseWheel() < 0
pushed=1
scroll-32
EndIf
EndIf
If KeyboardReleased(#PB_Key_2)
pushed=0
EndIf
If KeyboardReleased(#PB_Key_1)
pushed=0
EndIf
If KeyboardReleased(#PB_Key_3)
pushed=0
EndIf
If KeyboardReleased(#PB_Key_4)
pushed=0
EndIf
If KeyboardPushed(#PB_Key_S)
tile=72
ebene=1
EndIf
ExamineMouse()
If MouseButton(0)
pushed=0
EndIf
If ebene=0
If MouseButton(1) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
map(Int((MTx/Tileg)),Int((MTy/Tileg)))=tile
EndIf
If MouseButton(2) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
tile=map(Int((MTx/Tileg)),Int((MTy/Tileg)))
EndIf
EndIf
If ebene=1
If MouseButton(1) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
mapebene2(Int((MTx/Tileg)),Int((MTy/Tileg)))=tile
EndIf
EndIf
If MouseX() > 800-64
If MouseButton(2)
tile=felder(Int((MouseY()-scroll)/Tileg))
EndIf
EndIf
If ebene=1
If MouseButton(2) And MouseX() < ((Dx+1)*Tileg) And MouseY() < ((Dy+1)*Tileg)
tile=mapebene2(Int((Mtx/Tileg)),Int((MTy/Tileg)))
EndIf
EndIf
If laden=1
laden=0
IncludeFile"Sources/Load.pb"
EndIf
For x=0 To Dx ;wird die Breite bestimmen
For y=0 To Dy ;wird die Höhe bestimmen
If x*Tileg+Tx <= 800+32 And x*Tileg+Tx >= 0-32
If y*Tileg+Ty <= 600+32 And y*Tileg+Ty >= 0-32
DisplaySprite(map(x,y),x*Tileg+Tx,y*Tileg+Ty)
EndIf
EndIf
Next
Next
For x=0 To Dx
For y=0 To Dy
If x*Tileg+Tx <= 800+32 And x*Tileg+Tx >= 0-32
If y*Tileg+Ty <= 600+32 And y*Tileg+Ty >= 0-32
DisplayTransparentSprite(mapebene2(x,y),x*Tileg+Tx,y*Tileg+Ty)
EndIf
EndIf
Next
Next
If Qpressed=#False
If KeyboardPushed(#PB_Key_Q) ;Gebäude anzeigen
Qpressed=#True
If gebaudeanz=#True
gebaudeanz=#False
Else
gebaudeanz=#True
EndIf
EndIf
EndIf
If KeyboardReleased(#PB_Key_Q)
Qpressed=#False
EndIf
If gebaudeanz=#True
For x=0 To Dx
For y=0 To Dy
If x*Tileg+Tx <= 800+32 And x*Tileg+Tx >= 0-32
If y*Tileg+Ty <= 600+32 And y*Tileg+Ty >= 0-32
If mapebene2(x,y)=27
DisplayTransparentSprite(30,x*Tileg+Tx,y*Tileg+Ty)
EndIf
If mapebene2(x,y)=28
DisplayTransparentSprite(31,x*Tileg+Tx,y*Tileg+Ty)
EndIf
If mapebene2(x,y)=23
DisplayTransparentSprite(33,x*Tileg+Tx,y*Tileg+Ty)
EndIf
If mapebene2(x,y)=24
DisplayTransparentSprite(32,x*Tileg+Tx,y*Tileg+Ty)
EndIf
EndIf
EndIf
Next
Next
EndIf
For x=1 To anzahl+1
DisplaySprite(felder(x),800-32,x*Tileg+scroll)
Next
;minimap
StartDrawing(ScreenOutput())
Box((sichtx-1)*3,((sichty-1)+50)*3,27*3,21*3,RGB(0,0,255))
Box(sichtx*3,(sichty+50)*3,25*3,19*3,RGB(255,0,0))
For x=0 To Dx
For y=0 To Dy
FrontColor(RGB(map(x,y)*3,map(x,y)*3,map(x,y)*3))
Plot(x*3+1,(y+50)*3+1)
Plot(x*3+1,(y+50)*3+2)
Plot(x*3+2,(y+50)*3+1)
Plot(x*3+2,(y+50)*3+2)
Next
Next
StopDrawing()
;{ Ladeengine
;{ Wasser
If ElapsedMilliseconds() - frametimer > framedelay
frametimer=ElapsedMilliseconds()
If frame >= frames
frameup=1
EndIf
If frame <= 0
frameup=0
EndIf
If frameup=0
frame+1
Else
frame-1
EndIf
EndIf
If ElapsedMilliseconds() - Timer > WieLange.l
Timer = ElapsedMilliseconds()
WieLange = 1000
EndIf
If frame=0
ClipSprite(29,0,0,32,32)
Else : If frame=1
ClipSprite(29,32,0,32,32)
Else : If frame=2
ClipSprite(29,64,0,32,32)
EndIf
EndIf
EndIf
;}
;}
If KeyboardPushed(#PB_Key_Left) ;Or MouseX<=0
Tx+16
sichtxteiler-1
EndIf
If KeyboardPushed(#PB_Key_Up) ;Or MouseY<=0
Ty+16
sichtyteiler-1
EndIf
If KeyboardPushed(#PB_Key_Right) ;Or MouseX>=800
Tx-16
sichtxteiler+1
EndIf
If KeyboardPushed(#PB_Key_Down) ;Or MouseY>=600
Ty-16
sichtyteiler+1
EndIf
If sichtxteiler >= 2
sichtxteiler=0
sichtx+1
Else
If sichtxteiler <= -2
sichtxteiler=0
sichtx-1
EndIf
EndIf
If sichtyteiler >= 2
sichtyteiler=0
sichty+1
Else
If sichtyteiler <= -2
sichtyteiler=0
sichty-1
EndIf
EndIf
If KeyboardPushed(#PB_Key_D) ;Or MouseY>=600
ebene=0
EndIf
If KeyboardPushed(#PB_Key_U) ;Or MouseY>=600
ebene=1
EndIf
Max=MouseX()
May=MouseY()
MTx=MouseX()-Tx
MTy=MouseY()-Ty
DisplaySprite(tile,Max+5,May+5)
DisplayTransparentSprite(99,Max,May)
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawText(0,0,"L=laden/Esc=ende/Str+S=Speichern/D oder U=Ebene S=SpecialTile")
DrawText(0,15,"X="+Str(MouseX()-Tx)+"/Y="+Str(MouseY()-Ty)+"/Ebene="+Str(ebene)+"pushed"+Str(pushed))
DrawText(0,30,"Tx= "+Str(Int(((MouseX()-Tx)/Tileg))) + " " + "Ty= "+Str(Int(((MouseY()-Ty)/Tileg))));für special, wie Wegpunkte
StopDrawing()
FlipBuffers()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver
;Executableformat Windows
;EOF