;--------------------Map laden
Function e_map_load(name$,root$="maps/")
Local x,y,i,header$,stream,ec
;löschen
e_cls()
;Existiert Map?
If FileType(root$+name$+".map")<>1 Then
con_add("Error: Can't find "+name$+".map!",0)
Return 0
EndIf
;Waypoints
map_waypoints=e_waypoints_load(name$)
;Lesen
con_add("Loading "+name$+".map",0)
stream=ReadFile(root$+name$+".map")
;ID-Header
header$=ReadLine(stream)
If Instr(header$, "Unreal Software's Counter-Strike 2D Map File")=0 Then
con_add("Error: Can't load "+name$+".map - no Counter-Strike 2D map!",0)
Return 0
EndIf
;Fakes
map_back_scr_tile=ReadByte(stream)
For i=1 To 9
ReadByte(stream)
Next
For i=1 To 10
ReadInt(stream)
Next
For i=1 To 10
ReadLine(stream)
Next
;Map Header
map_code$=ReadLine(stream)
map_name$=name$
map_tileset$=ReadLine(stream)
map_tilesc=ReadByte(stream):Local map_tilesc_loaded=map_tilesc
map_xsize=ReadInt(stream)
map_ysize=ReadInt(stream)
map_back$=ReadLine(stream)
map_back_h=0
map_back_x=0
map_back_y=0
map_back_scr_x=ReadInt(stream)
map_back_scr_y=ReadInt(stream)
map_bg_r=ReadByte(stream)
map_bg_g=ReadByte(stream)
map_bg_b=ReadByte(stream)
map_storm_x#=0
map_storm_y#=0
;Maximale Größe
If map_xsize>10000 Then map_xsize=10000:con_add("Error: Invalid X-Size",0,0)
If map_ysize>10000 Then map_ysize=10000:con_add("Error: Invalid Y-Size",0,0)
;Background Color/Image initialisieren
ClsColor map_bg_r,map_bg_g,map_bg_b
If map_back$<>"" And Instr(map_back$,".")=0 Then map_back$=map_back$+".jpg"
If FileType("gfx/backgrounds/"+map_back$)=1 Then
map_back_h=LoadImage("gfx/backgrounds/"+map_back$)
Else
map_back_h=0
EndIf
;zwischen-Test
header$=ReadLine(stream)
If header$<>"ed.erawtfoslaernu" Then
con_add("Error: Can't load "+name$+".map - invalid/damaged map header!",0)
Return 0
EndIf
;Tile Modes
If Not e_loadtiles(map_tileset$) Then Return 0
Dim tile_mode(map_tilesc_loaded)
For i=0 To map_tilesc_loaded
tile_mode(i)=ReadByte(stream)
Next
;Tiles
Dim map(map_xsize,map_ysize,3)
For x=0 To map_xsize
For y=0 To map_ysize
map(x,y,0)=ReadByte(stream)
If map(x,y,0)>map_tilesc Then
map(x,y,0)=0
map(x,y,3)=tile_mode(0)
Else
map(x,y,3)=tile_mode(map(x,y,0))
EndIf
Next
Next
;Entities
ec=ReadInt(stream)
If ec>10000 Then ec=10000:con_add("Error: Invalid Entity Count",0,0)
For i=1 To ec
entity.entity=New entity
entity\name$=ReadLine(stream)
entity\typ=ReadByte(stream)
entity\h=0
entity\x=ReadInt(stream)
entity\y=ReadInt(stream)
entity\trigger$=ReadLine(stream)
For x=0 To 9
entity\value_int[x]=ReadInt(stream)
entity\value_str$[x]=ReadLine(stream)
Next
Next
;In Entities verwendete Ressourcen laden / Enities einstellen
For entity.entity=Each entity
Select entity\typ
;inf_animation
Case 8
entity\value_int[8]=entity\value_int[0]
;inf_storm
Case 9
map_storm_x#=Float(Sin(entity\value_int[0])*entity\value_int[1])/10.0
map_storm_y#=Float(-Cos(entity\value_int[0])*entity\value_int[1])/10.0
;env_sprite
Case 22
e_res_load(entity\value_str$[0],1,entity\value_str$[2])
e_setup_sprite(entity\x,entity\y)
;env_sound
Case 23
entity\h=e_res_load(entity\value_str$[0],0)
;env_image
Case 28
entity\h=e_res_load(entity\value_str$[0],2)
End Select
Next
;Entities Cachen
For entity.entity=Each entity
entityc.entityc=New entityc
entityc\name$=entity\name$
entityc\typ=entity\typ
entityc\h=entity\h
entityc\x=entity\x
entityc\y=entity\y
entityc\trigger$=entity\trigger$
For x=0 To 9
entityc\value_int[x]=entity\value_int[x]
entityc\value_str$[x]=entity\value_str$[x]
Next
Next
;Entities in Map Array speichern
;Leeren
For x=0 To map_xsize
For y=0 To map_ysize
map(x,y,1)=-1
Next
Next
;Fläche
Local ax,ay,a
For entity.entity=Each entity
If entity_area(entity\typ)>0 Then
a=entity_area(entity\typ)
For ax=entity\x-a To entity\x+a
For ay=entity\y-a To entity\y+a
If ax>=0 Then
If ay>=0 Then
If ax<=map_xsize Then
If ay<=map_ysize Then
map(ax,ay,1)=entity\typ
EndIf
EndIf
EndIf
EndIf
Next
Next
EndIf
Next
;Punkt
For entity.entity=Each entity
If entity\x>=0 Then
If entity\y>=0 Then
If entity\x<=map_xsize Then
If entity\y<=map_ysize Then
map(entity\x,entity\y,1)=entity\typ
EndIf
EndIf
EndIf
EndIf
Next
;Dynamic Walls (env_breakable)
For entity.entity=Each entity
If entity\typ=25 Then
If entity\x>=0 Then
If entity\y>=0 Then
If entity\x<=map_xsize Then
If entity\y<=map_ysize Then
If entity\value_int[6]=0 Then
map(entity\x,entity\y,3)=1 ;Wall (Shadow)
ElseIf entity\value_int[6]=1 Then
map(entity\x,entity\y,3)=3 ;Block (no Shadow)
Else
map(entity\x,entity\y,3)=2 ;Obstacle (Obstacle Shadow)
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Next
;Overwrite Entities (löschen Flächen wieder
For entity.entity=Each entity
;info_nobuying
If entity\typ=11 Then
For x=0 To map_xsize
For y=0 To map_ysize
If map(x,y,1)<3 Then map(x,y,1)=-1
Next
Next
EndIf
Next
;Map Cachen
Dim map_c(map_xsize,map_ysize,3)
For x=0 To map_xsize
For y=0 To map_ysize
map_c(x,y,0)=map(x,y,0)
map_c(x,y,1)=map(x,y,1)
map_c(x,y,2)=map(x,y,2)
map_c(x,y,3)=map(x,y,3)
Next
Next
;Auf 0|0 setzen
e_x=0
e_y=0
;Start Time setzen
e_starttime=MilliSecs()
;Schließen
CloseFile(stream)
;Info Text?
map_briefing=0
Dim map_info$(17)
If FileType(root$+name$+".txt")=1 Then
stream=ReadFile(root$+name$+".txt")
i=0
While Not Eof(stream)
map_info$(i)=ReadLine(stream)
i=i+1
If i=18 Then Exit
Wend
CloseFile(stream)
map_briefing=1
EndIf
e_map_reset(0)
;Mapcycle
e_sv_mapcyclems=MilliSecs()
e_sv_round=0
;Ausgabe
con_add("Map "+name$+".map loaded",0)
hud_mapload=1
Return 1
End Function