model loading

the uvs are currently incorrect i think but it loads!
This commit is contained in:
Holly Stubbs 2024-12-24 13:03:56 +00:00
parent 9164fbbf2e
commit d7a0650183
Signed by: tgpholly
GPG key ID: B8583C4B7D18119E
7 changed files with 876 additions and 18 deletions

68
options.ini Normal file
View file

@ -0,0 +1,68 @@
[options]
width = 1280
height = 720
fullscreen = false
borderless windowed = false
gfx driver = 2
audio driver = 0
brightness = 50
screengamma = 1.0
show FPS = 0
framelimit = 0
vsync = 1
mouse sensitivity = 0.0
invert mouse y = 0
mouse smoothing = 1.0
camera fog near = 0.5
camera fog far = 6.0
fog r = 0
fog g = 0
fog b = 0
map size = 18
achievement popup enabled = 1
bump mapping enabled = 1
anisotropy = 0
antialias = 1
HUD enabled = 1
intro enabled = 1
room lights enabled = 1
texture details = 3
16bit = false
antialiased text = 0
particle amount = 2
enable vram = 0
check for updates = true
play startup video = true
[audio]
music volume = 0.5
sound volume = 1.0
enable user tracks = 1
user track setting = 1
sfx release = 1
[binds]
Right key = 32
Left key = 30
Up key = 17
Down key = 31
Blink key = 57
Sprint key = 42
Inventory key = 15
Crouch key = 29
Save key = 63
Console key = 61
[launcher]
launcher width = 640
launcher height = 480
launcher enabled = true
[console]
enabled = 0
auto opening = 0
[map creator]
resolution select = 1
width=1024
height=768

View file

@ -18,6 +18,7 @@ config/icon="res://icon.svg"
[autoload] [autoload]
Global="*res://src/Global.gd" Global="*res://src/Global.gd"
Options="*res://src/Options.gd"
DebugMenu="*res://addons/debug_menu/debug_menu.tscn" DebugMenu="*res://addons/debug_menu/debug_menu.tscn"
[editor_plugins] [editor_plugins]

View file

@ -7,12 +7,14 @@ var videoToPlay: String
var clickSound: AudioStreamPlayer var clickSound: AudioStreamPlayer
func GetTextureFromCache(name:String): func GetTextureFromCache(name:String):
if textureCache.has(name): var fixedName = name.replace("\\", "/")
return textureCache.get(name) if textureCache.has(fixedName):
return textureCache.get(fixedName)
return null return null
func LoadTexture(name:String): func LoadTexture(name:String):
return textureCache.get_or_add(name, load(str("res://", name.replace("\\", "/")))) var fixedName = name.replace("\\", "/")
return textureCache.get_or_add(fixedName, load(str("res://", fixedName)))
func _ready(): func _ready():
clickSound = AudioStreamPlayer.new() clickSound = AudioStreamPlayer.new()

751
src/MapSystem.gd Normal file
View file

@ -0,0 +1,751 @@
class MapSystem
const RandomSeed = 59395743
static func CreateMap()
#DebugLog ("Generating a map using the seed " + RandomSeed)
#I_Zone\Transition[0] = 13
#I_Zone\Transition[1] = 7
#I_Zone\HasCustomForest = False
#I_Zone\HasCustomMT = False
Local x%, y%, temp%
Local i%, x2%, y2%
Local width%, height%
Local zone%
SeedRnd GenerateSeedNumber(RandomSeed)
Dim MapName$(MapWidth, MapHeight)
Dim MapRoomID%(ROOM4 + 1)
x = Floor(MapWidth / 2)
y = MapHeight - 2;Rand(3, 5)
For i = y To MapHeight - 1
MapTemp(x, i) = True
Next
Repeat
width = Rand(10, 15)
If x > MapWidth*0.6 Then
width = -width
ElseIf x > MapWidth*0.4
x = x-width/2
EndIf
;make sure the hallway doesn't go outside the array
If x+width > MapWidth-3 Then
;x = -width+MapWidth-4
width=MapWidth-3-x
ElseIf x+width < 2
;x = 3-width
width=-x+2
EndIf
x = Min(x, x + width)
width = Abs(width)
For i = x To x + width
MapTemp(Min(i,MapWidth), y) = True
Next
height = Rand(3, 4)
If y - height < 1 Then height = y-1
yhallways = Rand(4,5)
If GetZone(y-height)<>GetZone(y-height+1) Then height=height-1
For i = 1 To yhallways
x2 = Max(Min(Rand(x, x + width-1),MapWidth-2),2)
While MapTemp(x2, y - 1) Or MapTemp(x2 - 1, y - 1) Or MapTemp(x2 + 1, y - 1)
x2=x2+1
Wend
If x2<x+width Then
If i = 1 Then
tempheight = height
If Rand(2)=1 Then x2 = x Else x2 = x+width
Else
tempheight = Rand(1,height)
EndIf
For y2 = y - tempheight To y
If GetZone(y2)<>GetZone(y2+1) Then ;a room leading from zone to another
MapTemp(x2, y2) = 255
Else
MapTemp(x2, y2) = True
EndIf
Next
If tempheight = height Then temp = x2
End If
Next
x = temp
y = y - height
Until y < 2
Local ZoneAmount=3
Local Room1Amount%[3], Room2Amount%[3],Room2CAmount%[3],Room3Amount%[3],Room4Amount%[3]
;count the amount of rooms
For y = 1 To MapHeight - 1
zone% = GetZone(y)
For x = 1 To MapWidth - 1
If MapTemp(x, y) > 0 Then
temp = Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1)
temp = temp + Min(MapTemp(x, y + 1),1) + Min(MapTemp(x, y - 1),1)
If MapTemp(x,y)<255 Then MapTemp(x, y) = temp
Select MapTemp(x,y)
Case 1
Room1Amount[zone]=Room1Amount[zone]+1
Case 2
If Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1)= 2 Then
Room2Amount[zone]=Room2Amount[zone]+1
ElseIf Min(MapTemp(x, y + 1),1) + Min(MapTemp(x , y - 1),1)= 2
Room2Amount[zone]=Room2Amount[zone]+1
Else
Room2CAmount[zone] = Room2CAmount[zone]+1
EndIf
Case 3
Room3Amount[zone]=Room3Amount[zone]+1
Case 4
Room4Amount[zone]=Room4Amount[zone]+1
End Select
EndIf
Next
Next
;force more room1s (if needed)
For i = 0 To 2
;need more rooms if there are less than 5 of them
temp = -Room1Amount[i]+5
If temp > 0 Then
For y = (MapHeight/ZoneAmount)*(2-i)+1 To ((MapHeight/ZoneAmount) * ((2-i)+1.0))-2
For x = 2 To MapWidth - 2
If MapTemp(x, y) = 0 Then
If (Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1) + Min(MapTemp(x, y + 1),1) + Min(MapTemp(x, y - 1),1)) = 1 Then
;If Rand(4)=1 Then
If MapTemp(x + 1, y) Then
x2 = x+1 : y2 = y
ElseIf MapTemp(x - 1, y)
x2 = x-1 : y2 = y
ElseIf MapTemp(x, y+1)
x2 = x : y2 = y+1
ElseIf MapTemp(x, y-1)
x2 = x : y2 = y-1
EndIf
placed = False
If MapTemp(x2,y2)>1 And MapTemp(x2,y2)<4 Then
Select MapTemp(x2,y2)
Case 2
If Min(MapTemp(x2 + 1, y2),1) + Min(MapTemp(x2 - 1, y2),1)= 2 Then
Room2Amount[i]=Room2Amount[i]-1
Room3Amount[i]=Room3Amount[i]+1
placed = True
ElseIf Min(MapTemp(x2, y2 + 1),1) + Min(MapTemp(x2, y2 - 1),1)= 2
Room2Amount[i]=Room2Amount[i]-1
Room3Amount[i]=Room3Amount[i]+1
placed = True
EndIf
Case 3
Room3Amount[i]=Room3Amount[i]-1
Room4Amount[i]=Room4Amount[i]+1
placed = True
End Select
If placed Then
MapTemp(x2,y2)=MapTemp(x2,y2)+1
MapTemp(x, y) = 1
Room1Amount[i] = Room1Amount[i]+1
temp=temp-1
EndIf
EndIf
EndIf
EndIf
If temp = 0 Then Exit
Next
If temp = 0 Then Exit
Next
EndIf
Next
;force more room4s and room2Cs
For i = 0 To 2
Select i
Case 2
zone=2
temp2=MapHeight/3;-1
Case 1
zone=MapHeight/3+1
temp2=MapHeight*(2.0/3.0)-1
Case 0
zone=MapHeight*(2.0/3.0)+1
temp2=MapHeight-2
End Select
If Room4Amount[i]<1 Then ;we want at least 1 ROOM4
DebugLog "forcing a ROOM4 into zone "+i
temp=0
For y = zone To temp2
For x = 2 To MapWidth - 2
If MapTemp(x,y)=3 Then
Select 0 ;see if adding a ROOM1 is possible
Case (MapTemp(x+1,y) Or MapTemp(x+1,y+1) Or MapTemp(x+1,y-1) Or MapTemp(x+2,y))
MapTemp(x+1,y)=1
temp=1
Case (MapTemp(x-1,y) Or MapTemp(x-1,y+1) Or MapTemp(x-1,y-1) Or MapTemp(x-2,y))
MapTemp(x-1,y)=1
temp=1
Case (MapTemp(x,y+1) Or MapTemp(x+1,y+1) Or MapTemp(x-1,y+1) Or MapTemp(x,y+2))
MapTemp(x,y+1)=1
temp=1
Case (MapTemp(x,y-1) Or MapTemp(x+1,y-1) Or MapTemp(x-1,y-1) Or MapTemp(x,y-2))
MapTemp(x,y-1)=1
temp=1
End Select
If temp=1 Then
MapTemp(x,y)=4 ;turn this room into a ROOM4
DebugLog "ROOM4 forced into slot ("+x+", "+y+")"
Room4Amount[i]=Room4Amount[i]+1
Room3Amount[i]=Room3Amount[i]-1
Room1Amount[i]=Room1Amount[i]+1
EndIf
EndIf
If temp=1 Then Exit
Next
If temp=1 Then Exit
Next
If temp=0 Then DebugLog "Couldn't place ROOM4 in zone "+i
EndIf
If Room2CAmount[i]<1 Then ;we want at least 1 ROOM2C
DebugLog "forcing a ROOM2C into zone "+i
temp=0
zone=zone+1
temp2=temp2-1
For y = zone To temp2
For x = 3 To MapWidth - 3
If MapTemp(x,y)=1 Then
Select True ;see if adding some rooms is possible
Case MapTemp(x-1,y)>0
If (MapTemp(x,y-1)+MapTemp(x,y+1)+MapTemp(x+2,y))=0 Then
If (MapTemp(x+1,y-2)+MapTemp(x+2,y-1)+MapTemp(x+1,y-1))=0 Then
MapTemp(x,y)=2
MapTemp(x+1,y)=2
DebugLog "ROOM2C forced into slot ("+(x+1)+", "+(y)+")"
MapTemp(x+1,y-1)=1
temp=1
Else If (MapTemp(x+1,y+2)+MapTemp(x+2,y+1)+MapTemp(x+1,y+1))=0 Then
MapTemp(x,y)=2
MapTemp(x+1,y)=2
DebugLog "ROOM2C forced into slot ("+(x+1)+", "+(y)+")"
MapTemp(x+1,y+1)=1
temp=1
EndIf
EndIf
Case MapTemp(x+1,y)>0
If (MapTemp(x,y-1)+MapTemp(x,y+1)+MapTemp(x-2,y))=0 Then
If (MapTemp(x-1,y-2)+MapTemp(x-2,y-1)+MapTemp(x-1,y-1))=0 Then
MapTemp(x,y)=2
MapTemp(x-1,y)=2
DebugLog "ROOM2C forced into slot ("+(x-1)+", "+(y)+")"
MapTemp(x-1,y-1)=1
temp=1
Else If (MapTemp(x-1,y+2)+MapTemp(x-2,y+1)+MapTemp(x-1,y+1))=0 Then
MapTemp(x,y)=2
MapTemp(x-1,y)=2
DebugLog "ROOM2C forced into slot ("+(x-1)+", "+(y)+")"
MapTemp(x-1,y+1)=1
temp=1
EndIf
EndIf
Case MapTemp(x,y-1)>0
If (MapTemp(x-1,y)+MapTemp(x+1,y)+MapTemp(x,y+2))=0 Then
If (MapTemp(x-2,y+1)+MapTemp(x-1,y+2)+MapTemp(x-1,y+1))=0 Then
MapTemp(x,y)=2
MapTemp(x,y+1)=2
DebugLog "ROOM2C forced into slot ("+(x)+", "+(y+1)+")"
MapTemp(x-1,y+1)=1
temp=1
Else If (MapTemp(x+2,y+1)+MapTemp(x+1,y+2)+MapTemp(x+1,y+1))=0 Then
MapTemp(x,y)=2
MapTemp(x,y+1)=2
DebugLog "ROOM2C forced into slot ("+(x)+", "+(y+1)+")"
MapTemp(x+1,y+1)=1
temp=1
EndIf
EndIf
Case MapTemp(x,y+1)>0
If (MapTemp(x-1,y)+MapTemp(x+1,y)+MapTemp(x,y-2))=0 Then
If (MapTemp(x-2,y-1)+MapTemp(x-1,y-2)+MapTemp(x-1,y-1))=0 Then
MapTemp(x,y)=2
MapTemp(x,y-1)=2
DebugLog "ROOM2C forced into slot ("+(x)+", "+(y-1)+")"
MapTemp(x-1,y-1)=1
temp=1
Else If (MapTemp(x+2,y-1)+MapTemp(x+1,y-2)+MapTemp(x+1,y-1))=0 Then
MapTemp(x,y)=2
MapTemp(x,y-1)=2
DebugLog "ROOM2C forced into slot ("+(x)+", "+(y-1)+")"
MapTemp(x+1,y-1)=1
temp=1
EndIf
EndIf
End Select
If temp=1 Then
Room2CAmount[i]=Room2CAmount[i]+1
Room2Amount[i]=Room2Amount[i]+1
EndIf
EndIf
If temp=1 Then Exit
Next
If temp=1 Then Exit
Next
If temp=0 Then DebugLog "Couldn't place ROOM2C in zone "+i
EndIf
Next
Local MaxRooms% = 55*MapWidth/20
MaxRooms=Max(MaxRooms,Room1Amount[0]+Room1Amount[1]+Room1Amount[2]+1)
MaxRooms=Max(MaxRooms,Room2Amount[0]+Room2Amount[1]+Room2Amount[2]+1)
MaxRooms=Max(MaxRooms,Room2CAmount[0]+Room2CAmount[1]+Room2CAmount[2]+1)
MaxRooms=Max(MaxRooms,Room3Amount[0]+Room3Amount[1]+Room3Amount[2]+1)
MaxRooms=Max(MaxRooms,Room4Amount[0]+Room4Amount[1]+Room4Amount[2]+1)
Dim MapRoom$(ROOM4 + 1, MaxRooms)
;zone 1 --------------------------------------------------------------------------------------------------
Local min_pos = 1, max_pos = Room1Amount[0]-1
MapRoom(ROOM1, 0) = "start"
SetRoom("roompj", ROOM1, Floor(0.1*Float(Room1Amount[0])),min_pos,max_pos)
SetRoom("914", ROOM1, Floor(0.3*Float(Room1Amount[0])),min_pos,max_pos)
SetRoom("room1archive",ROOM1,Floor(0.5*Float(Room1Amount[0])),min_pos,max_pos)
SetRoom("room205", ROOM1, Floor(0.6*Float(Room1Amount[0])),min_pos,max_pos)
MapRoom(ROOM2C, 0) = "lockroom"
min_pos = 1
max_pos = Room2Amount[0]-1
MapRoom(ROOM2, 0) = "room2closets"
SetRoom("room2testroom2", ROOM2, Floor(0.1*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room2scps", ROOM2, Floor(0.2*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room2storage", ROOM2, Floor(0.3*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room2gw_b", ROOM2, Floor(0.4*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room2sl", ROOM2, Floor(0.5*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room012", ROOM2, Floor(0.55*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room2scps2",ROOM2,Floor(0.6*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room1123",ROOM2,Floor(0.7*Float(Room2Amount[0])),min_pos,max_pos)
SetRoom("room2elevator",ROOM2,Floor(0.85*Float(Room2Amount[0])),min_pos,max_pos)
MapRoom(ROOM3, Floor(Rnd(0.2,0.8)*Float(Room3Amount[0]))) = "room3storage"
MapRoom(ROOM2C, Floor(0.5*Float(Room2CAmount[0]))) = "room1162"
MapRoom(ROOM4, Floor(0.3*Float(Room4Amount[0]))) = "room4info"
;zone 2 --------------------------------------------------------------------------------------------------
min_pos = Room1Amount[0]
max_pos = Room1Amount[0]+Room1Amount[1]-1
SetRoom("room079", ROOM1, Room1Amount[0]+Floor(0.15*Float(Room1Amount[1])),min_pos,max_pos)
SetRoom("room106", ROOM1, Room1Amount[0]+Floor(0.3*Float(Room1Amount[1])),min_pos,max_pos)
SetRoom("008", ROOM1, Room1Amount[0]+Floor(0.4*Float(Room1Amount[1])),min_pos,max_pos)
SetRoom("room035", ROOM1, Room1Amount[0]+Floor(0.5*Float(Room1Amount[1])),min_pos,max_pos)
SetRoom("coffin", ROOM1, Room1Amount[0]+Floor(0.7*Float(Room1Amount[1])),min_pos,max_pos)
min_pos = Room2Amount[0]
max_pos = Room2Amount[0]+Room2Amount[1]-1
MapRoom(ROOM2, Room2Amount[0]+Floor(0.1*Float(Room2Amount[1]))) = "room2nuke"
SetRoom("room2tunnel", ROOM2, Room2Amount[0]+Floor(0.25*Float(Room2Amount[1])),min_pos,max_pos)
SetRoom("room049", ROOM2, Room2Amount[0]+Floor(0.4*Float(Room2Amount[1])),min_pos,max_pos)
SetRoom("room2shaft",ROOM2,Room2Amount[0]+Floor(0.6*Float(Room2Amount[1])),min_pos,max_pos)
SetRoom("testroom", ROOM2, Room2Amount[0]+Floor(0.7*Float(Room2Amount[1])),min_pos,max_pos)
SetRoom("room2servers", ROOM2, Room2Amount[0]+Floor(0.9*Room2Amount[1]),min_pos,max_pos)
MapRoom(ROOM3, Room3Amount[0]+Floor(0.3*Float(Room3Amount[1]))) = "room513"
MapRoom(ROOM3, Room3Amount[0]+Floor(0.6*Float(Room3Amount[1]))) = "room966"
MapRoom(ROOM2C, Room2CAmount[0]+Floor(0.5*Float(Room2CAmount[1]))) = "room2cpit"
;zone 3 --------------------------------------------------------------------------------------------------
MapRoom(ROOM1, Room1Amount[0]+Room1Amount[1]+Room1Amount[2]-2) = "exit1"
MapRoom(ROOM1, Room1Amount[0]+Room1Amount[1]+Room1Amount[2]-1) = "gateaentrance"
MapRoom(ROOM1, Room1Amount[0]+Room1Amount[1]) = "room1lifts"
min_pos = Room2Amount[0]+Room2Amount[1]
max_pos = Room2Amount[0]+Room2Amount[1]+Room2Amount[2]-1
MapRoom(ROOM2, min_pos+Floor(0.1*Float(Room2Amount[2]))) = "room2poffices"
SetRoom("room2cafeteria", ROOM2, min_pos+Floor(0.2*Float(Room2Amount[2])),min_pos,max_pos)
SetRoom("room2sroom", ROOM2, min_pos+Floor(0.3*Float(Room2Amount[2])),min_pos,max_pos)
SetRoom("room2servers2", ROOM2, min_pos+Floor(0.4*Room2Amount[2]),min_pos,max_pos)
SetRoom("room2offices", ROOM2, min_pos+Floor(0.45*Room2Amount[2]),min_pos,max_pos)
SetRoom("room2offices4", ROOM2, min_pos+Floor(0.5*Room2Amount[2]),min_pos,max_pos)
SetRoom("room860", ROOM2, min_pos+Floor(0.6*Room2Amount[2]),min_pos,max_pos)
SetRoom("medibay", ROOM2, min_pos+Floor(0.7*Float(Room2Amount[2])),min_pos,max_pos)
SetRoom("room2poffices2", ROOM2, min_pos+Floor(0.8*Room2Amount[2]),min_pos,max_pos)
SetRoom("room2offices2", ROOM2, min_pos+Floor(0.9*Float(Room2Amount[2])),min_pos,max_pos)
MapRoom(ROOM2C, Room2CAmount[0]+Room2CAmount[1]) = "room2ccont"
MapRoom(ROOM2C, Room2CAmount[0]+Room2CAmount[1]+1) = "lockroom2"
MapRoom(ROOM3, Room3Amount[0]+Room3Amount[1]+Floor(0.3*Float(Room3Amount[2]))) = "room3servers"
MapRoom(ROOM3, Room3Amount[0]+Room3Amount[1]+Floor(0.7*Float(Room3Amount[2]))) = "room3servers2"
;MapRoom(ROOM3, Room3Amount[0]+Room3Amount[1]) = "room3gw"
MapRoom(ROOM3, Room3Amount[0]+Room3Amount[1]+Floor(0.5*Float(Room3Amount[2]))) = "room3offices"
;----------------------- luodaan kartta --------------------------------
temp = 0
Local r.Rooms, spacing# = 8.0
For y = MapHeight - 1 To 1 Step - 1
;zone% = GetZone(y)
If y < MapHeight/3+1 Then
zone=3
ElseIf y < MapHeight*(2.0/3.0);-1
zone=2
Else
zone=1
EndIf
For x = 1 To MapWidth - 2
If MapTemp(x, y) = 255 Then
If y>MapHeight/2 Then ;zone = 2
r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, "checkpoint1")
Else ;If zone = 3
r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, "checkpoint2")
EndIf
ElseIf MapTemp(x, y) > 0
temp = Min(MapTemp(x + 1, y),1) + Min(MapTemp(x - 1, y),1) + Min(MapTemp(x, y + 1),1) + Min(MapTemp(x, y - 1),1)
Select temp ;viereisiss<EFBFBD> ruuduissa olevien huoneiden m<EFBFBD><EFBFBD>r<EFBFBD>
Case 1
If MapRoomID(ROOM1) < MaxRooms And MapName(x,y) = "" Then
If MapRoom(ROOM1, MapRoomID(ROOM1)) <> "" Then MapName(x, y) = MapRoom(ROOM1, MapRoomID(ROOM1))
EndIf
r = CreateRoom(zone, ROOM1, x * 8, 0, y * 8, MapName(x, y))
If MapTemp(x, y + 1) Then
r\angle = 180
TurnEntity(r\obj, 0, r\angle, 0)
ElseIf MapTemp(x - 1, y)
r\angle = 270
TurnEntity(r\obj, 0, r\angle, 0)
ElseIf MapTemp(x + 1, y)
r\angle = 90
TurnEntity(r\obj, 0, r\angle, 0)
Else
r\angle = 0
End If
MapRoomID(ROOM1)=MapRoomID(ROOM1)+1
Case 2
If MapTemp(x - 1, y)>0 And MapTemp(x + 1, y)>0 Then
If MapRoomID(ROOM2) < MaxRooms And MapName(x,y) = "" Then
If MapRoom(ROOM2, MapRoomID(ROOM2)) <> "" Then MapName(x, y) = MapRoom(ROOM2, MapRoomID(ROOM2))
EndIf
r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, MapName(x, y))
If Rand(2) = 1 Then r\angle = 90 Else r\angle = 270
TurnEntity(r\obj, 0, r\angle, 0)
MapRoomID(ROOM2)=MapRoomID(ROOM2)+1
ElseIf MapTemp(x, y - 1)>0 And MapTemp(x, y + 1)>0
If MapRoomID(ROOM2) < MaxRooms And MapName(x,y) = "" Then
If MapRoom(ROOM2, MapRoomID(ROOM2)) <> "" Then MapName(x, y) = MapRoom(ROOM2, MapRoomID(ROOM2))
EndIf
r = CreateRoom(zone, ROOM2, x * 8, 0, y * 8, MapName(x, y))
If Rand(2) = 1 Then r\angle = 180 Else r\angle = 0
TurnEntity(r\obj, 0, r\angle, 0)
MapRoomID(ROOM2)=MapRoomID(ROOM2)+1
Else
If MapRoomID(ROOM2C) < MaxRooms And MapName(x,y) = "" Then
If MapRoom(ROOM2C, MapRoomID(ROOM2C)) <> "" Then MapName(x, y) = MapRoom(ROOM2C, MapRoomID(ROOM2C))
EndIf
If MapTemp(x - 1, y)>0 And MapTemp(x, y + 1)>0 Then
r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y))
r\angle = 180
TurnEntity(r\obj, 0, r\angle, 0)
ElseIf MapTemp(x + 1, y)>0 And MapTemp(x, y + 1)>0
r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y))
r\angle = 90
TurnEntity(r\obj, 0, r\angle, 0)
ElseIf MapTemp(x - 1, y)>0 And MapTemp(x, y - 1)>0
r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y))
TurnEntity(r\obj, 0, 270, 0)
r\angle = 270
Else
r = CreateRoom(zone, ROOM2C, x * 8, 0, y * 8, MapName(x, y))
EndIf
MapRoomID(ROOM2C)=MapRoomID(ROOM2C)+1
EndIf
Case 3
If MapRoomID(ROOM3) < MaxRooms And MapName(x,y) = "" Then
If MapRoom(ROOM3, MapRoomID(ROOM3)) <> "" Then MapName(x, y) = MapRoom(ROOM3, MapRoomID(ROOM3))
EndIf
r = CreateRoom(zone, ROOM3, x * 8, 0, y * 8, MapName(x, y))
If (Not MapTemp(x, y - 1)) Then
TurnEntity(r\obj, 0, 180, 0)
r\angle = 180
ElseIf (Not MapTemp(x - 1, y))
TurnEntity(r\obj, 0, 90, 0)
r\angle = 90
ElseIf (Not MapTemp(x + 1, y))
TurnEntity(r\obj, 0, -90, 0)
r\angle = 270
End If
MapRoomID(ROOM3)=MapRoomID(ROOM3)+1
Case 4
If MapRoomID(ROOM4) < MaxRooms And MapName(x,y) = "" Then
If MapRoom(ROOM4, MapRoomID(ROOM4)) <> "" Then MapName(x, y) = MapRoom(ROOM4, MapRoomID(ROOM4))
EndIf
r = CreateRoom(zone, ROOM4, x * 8, 0, y * 8, MapName(x, y))
MapRoomID(ROOM4)=MapRoomID(ROOM4)+1
End Select
EndIf
Next
Next
r = CreateRoom(0, ROOM1, (MapWidth-1) * 8, 500, 8, "gatea")
MapRoomID(ROOM1)=MapRoomID(ROOM1)+1
r = CreateRoom(0, ROOM1, (MapWidth-1) * 8, 0, (MapHeight-1) * 8, "pocketdimension")
MapRoomID(ROOM1)=MapRoomID(ROOM1)+1
If IntroEnabled
r = CreateRoom(0, ROOM1, 8, 0, (MapHeight-1) * 8, "173")
MapRoomID(ROOM1)=MapRoomID(ROOM1)+1
EndIf
r = CreateRoom(0, ROOM1, 8, 800, 0, "dimension1499")
MapRoomID(ROOM1)=MapRoomID(ROOM1)+1
For r.Rooms = Each Rooms
PreventRoomOverlap(r)
Next
If 0 Then
Repeat
Cls
For x = 0 To MapWidth - 1
For y = 0 To MapHeight - 1
If MapTemp(x, y) = 0 Then
zone=GetZone(y)
Color 50*zone, 50*zone, 50*zone
Rect(x * 32, y * 32, 30, 30)
Else
If MapTemp(x, y) = 255 Then
Color 0,200,0
Else If MapTemp(x,y)=4 Then
Color 50,50,255
Else If MapTemp(x,y)=3 Then
Color 50,255,255
Else If MapTemp(x,y)=2 Then
Color 255,255,50
Else
Color 255, 255, 255
EndIf
Rect(x * 32, y * 32, 30, 30)
End If
Next
Next
For x = 0 To MapWidth - 1
For y = 0 To MapHeight - 1
If MouseX()>x*32 And MouseX()<x*32+32 Then
If MouseY()>y*32 And MouseY()<y*32+32 Then
Color 255, 0, 0
Else
Color 200, 200, 200
EndIf
Else
Color 200, 200, 200
EndIf
If MapTemp(x, y) > 0 Then
Text x * 32 +2, (y) * 32 + 2,MapTemp(x, y) +" "+ MapName(x,y)
End If
Next
Next
Flip
Until KeyHit(28)
EndIf
For y = 0 To MapHeight
For x = 0 To MapWidth
MapTemp(x, y) = Min(MapTemp(x, y),1)
Next
Next
Local d.Doors
Local shouldSpawnDoor%
For y = MapHeight To 0 Step -1
If y<I_Zone\Transition[1]-1 Then
zone=3
ElseIf y>=I_Zone\Transition[1]-1 And y<I_Zone\Transition[0]-1 Then
zone=2
Else
zone=1
EndIf
For x = MapWidth To 0 Step -1
If MapTemp(x,y) > 0 Then
If zone = 2 Then temp=2 Else temp=0
For r.Rooms = Each Rooms
r\angle = WrapAngle(r\angle)
If Int(r\x/8.0)=x And Int(r\z/8.0)=y Then
shouldSpawnDoor = False
Select r\RoomTemplate\Shape
Case ROOM1
If r\angle=90
shouldSpawnDoor = True
EndIf
Case ROOM2
If r\angle=90 Or r\angle=270
shouldSpawnDoor = True
EndIf
Case ROOM2C
If r\angle=0 Or r\angle=90
shouldSpawnDoor = True
EndIf
Case ROOM3
If r\angle=0 Or r\angle=180 Or r\angle=90
shouldSpawnDoor = True
EndIf
Default
shouldSpawnDoor = True
End Select
If shouldSpawnDoor
If (x+1)<(MapWidth+1)
If MapTemp(x + 1, y) > 0 Then
d.Doors = CreateDoor(r\zone, Float(x) * spacing + spacing / 2.0, 0, Float(y) * spacing, 90, r, Max(Rand(-3, 1), 0), temp)
r\AdjDoor[0] = d
EndIf
EndIf
EndIf
shouldSpawnDoor = False
Select r\RoomTemplate\Shape
Case ROOM1
If r\angle=180
shouldSpawnDoor = True
EndIf
Case ROOM2
If r\angle=0 Or r\angle=180
shouldSpawnDoor = True
EndIf
Case ROOM2C
If r\angle=180 Or r\angle=90
shouldSpawnDoor = True
EndIf
Case ROOM3
If r\angle=180 Or r\angle=90 Or r\angle=270
shouldSpawnDoor = True
EndIf
Default
shouldSpawnDoor = True
End Select
If shouldSpawnDoor
If (y+1)<(MapHeight+1)
If MapTemp(x, y + 1) > 0 Then
d.Doors = CreateDoor(r\zone, Float(x) * spacing, 0, Float(y) * spacing + spacing / 2.0, 0, r, Max(Rand(-3, 1), 0), temp)
r\AdjDoor[3] = d
EndIf
EndIf
EndIf
Exit
EndIf
Next
End If
Next
Next
For r.Rooms = Each Rooms
;If r\angle >= 360
; r\angle = r\angle-360
;EndIf
r\angle = WrapAngle(r\angle)
r\Adjacent[0]=Null
r\Adjacent[1]=Null
r\Adjacent[2]=Null
r\Adjacent[3]=Null
For r2.Rooms = Each Rooms
If r<>r2 Then
If r2\z=r\z Then
If (r2\x)=(r\x+8.0) Then
r\Adjacent[0]=r2
If r\AdjDoor[0] = Null Then r\AdjDoor[0] = r2\AdjDoor[2]
ElseIf (r2\x)=(r\x-8.0)
r\Adjacent[2]=r2
If r\AdjDoor[2] = Null Then r\AdjDoor[2] = r2\AdjDoor[0]
EndIf
ElseIf r2\x=r\x Then
If (r2\z)=(r\z-8.0) Then
r\Adjacent[1]=r2
If r\AdjDoor[1] = Null Then r\AdjDoor[1] = r2\AdjDoor[3]
ElseIf (r2\z)=(r\z+8.0)
r\Adjacent[3]=r2
If r\AdjDoor[3] = Null Then r\AdjDoor[3] = r2\AdjDoor[1]
EndIf
EndIf
EndIf
If (r\Adjacent[0]<>Null) And (r\Adjacent[1]<>Null) And (r\Adjacent[2]<>Null) And (r\Adjacent[3]<>Null) Then Exit
Next
Next
End Function

6
src/Options.gd Normal file
View file

@ -0,0 +1,6 @@
extends Node
var options = ConfigFile.new()
func _ready() -> void:
options.load("res://options.ini")

View file

@ -516,9 +516,9 @@ static func LoadRMesh(parentNode: Node3D, file: String):
model.rotation = Vector3(deg_to_rad(temp1), deg_to_rad(temp2), deg_to_rad(temp3)) model.rotation = Vector3(deg_to_rad(temp1), deg_to_rad(temp2), deg_to_rad(temp3))
#RotateEntity model,temp1,temp2,temp3 #RotateEntity model,temp1,temp2,temp3
# #
temp1 = reader.readFloat() temp1 = reader.readFloat() * WORLD_SCALE
temp2 = reader.readFloat() temp2 = reader.readFloat() * WORLD_SCALE
temp3 = reader.readFloat() temp3 = reader.readFloat() * WORLD_SCALE
model.scale = Vector3(temp1, temp2, temp3) model.scale = Vector3(temp1, temp2, temp3)
#ScaleEntity model,temp1,temp2,temp3 #ScaleEntity model,temp1,temp2,temp3

View file

@ -6,30 +6,59 @@ static func LoadModel(filePath: String):
var fileLines = file.get_as_text(true).split("\n") var fileLines = file.get_as_text(true).split("\n")
var meshDataStart = false var meshDataStart = false
var indexDataStart = false
var meshTextureCoordsStart = false
var textureNameStart = false
var textureName = ""
var texture: Texture2D = null
var meshDataLength = -1 var meshDataLength = -1
var uvsDataLength = -1
var indexDataLength = -1 var indexDataLength = -1
var verts = PackedVector3Array() var verts = PackedVector3Array()
var uvs = PackedVector2Array()
var indexes = PackedInt32Array() var indexes = PackedInt32Array()
for line in fileLines: for line in fileLines:
if meshDataStart: if meshDataStart or indexDataStart:
if meshDataLength == -1: if meshDataStart and meshDataLength == -1:
meshDataLength = int(line.strip_edges().split(";")[0]) meshDataLength = int(line.strip_edges().split(";")[0])
elif verts.size() == meshDataLength: elif indexDataStart and indexDataLength == -1:
indexDataLength = int(line.strip_edges().split(";")[0]) indexDataLength = int(line.strip_edges().split(";")[0])
elif meshDataStart:
if verts.size() < meshDataLength:
var pointData = line.strip_edges().split(";") var pointData = line.strip_edges().split(";")
if pointData.size() == 5:
meshDataStart = false
indexDataStart = true
verts.push_back(Vector3(float(pointData[0]), float(pointData[1]), float(pointData[2]))) verts.push_back(Vector3(float(pointData[0]), float(pointData[1]), float(pointData[2])))
elif indexDataStart:
if verts.size() >= meshDataLength and indexes.size() < indexes:
var indexParts = line.strip_edges().split(";") var indexParts = line.strip_edges().split(";")
var indexData = indexParts.split(",") if indexParts.size() == 4:
indexDataStart = false
var indexData = indexParts[1].split(",")
var amount = int(indexParts[0]) var amount = int(indexParts[0])
for i in range(amount): for i in range(amount):
indexes.push_back(int(indexData[i])) indexes.push_back(int(indexData[i]))
elif textureNameStart:
textureName = line.strip_edges().split(";")[0].replace("\"", "")
var texturePath = str("GFX/map/Props/", textureName)
texture = Global.GetTextureFromCache(texturePath)
if not texture:
texture = Global.LoadTexture(texturePath)
textureNameStart = false
elif meshTextureCoordsStart:
if uvsDataLength == -1:
uvsDataLength = int(line.strip_edges().split(";")[0])
else:
var uvParts = line.strip_edges().split(";")
if uvParts.size() == 4:
meshTextureCoordsStart = false
uvs.push_back(Vector2(float(uvParts[0]), float(uvParts[1])))
if line.strip_edges().begins_with("Mesh Skeleton"): if line.strip_edges().contains("Mesh "):
meshDataStart = true meshDataStart = true
elif line.strip_edges().contains("TextureFilename"):
textureNameStart = true
elif line.strip_edges().contains("MeshTextureCoords"):
meshTextureCoordsStart = true
var mesh = MeshInstance3D.new() var mesh = MeshInstance3D.new()
var arr_mesh = ArrayMesh.new() var arr_mesh = ArrayMesh.new()
@ -37,14 +66,15 @@ static func LoadModel(filePath: String):
arr.resize(Mesh.ARRAY_MAX) arr.resize(Mesh.ARRAY_MAX)
arr[Mesh.ARRAY_VERTEX]=verts arr[Mesh.ARRAY_VERTEX]=verts
arr[Mesh.ARRAY_TEX_UV]=uvs
arr[Mesh.ARRAY_INDEX]=indexes arr[Mesh.ARRAY_INDEX]=indexes
var meshInstance = MeshInstance3D.new() var meshInstance = MeshInstance3D.new()
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arr) arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arr)
meshInstance.mesh = arr_mesh meshInstance.mesh = arr_mesh
var mat = StandardMaterial3D.new() var mat = StandardMaterial3D.new()
mat.albedo_color = Color(randi() % 255 / 255.0, randi() % 255 / 255.0, randi() % 255 / 255.0) #mat.albedo_color = Color(randi() % 255 / 255.0, randi() % 255 / 255.0, randi() % 255 / 255.0)
#mat.albedo_texture = activeAlbedo mat.albedo_texture = texture
#mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA_DEPTH_PRE_PASS if activeAlbedoHasAlpha else BaseMaterial3D.TRANSPARENCY_DISABLED #mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA_DEPTH_PRE_PASS if activeAlbedoHasAlpha else BaseMaterial3D.TRANSPARENCY_DISABLED
meshInstance.set_surface_override_material(0, mat) meshInstance.set_surface_override_material(0, mat)
meshInstance.create_trimesh_collision() meshInstance.create_trimesh_collision()