begin work on B3D parsing

This commit is contained in:
Holly Stubbs 2025-01-09 17:13:44 +00:00
parent ba37c23904
commit 8f5d2fcf9f
14 changed files with 84 additions and 9 deletions

View file

@ -1,8 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://bw0tk6ml7gayq"] [gd_scene load_steps=6 format=3 uid="uid://bw0tk6ml7gayq"]
[ext_resource type="Script" path="res://src/DynamicMap.gd" id="1_mytgt"] [ext_resource type="Script" path="res://src/DynamicMap.gd" id="1_mytgt"]
[ext_resource type="Script" path="res://src/TempDebugCamera.gd" id="2_co6fy"] [ext_resource type="Script" path="res://src/TempDebugCamera.gd" id="2_co6fy"]
[ext_resource type="PackedScene" uid="uid://dm33ofcbh8sht" path="res://scenes/world/Player.tscn" id="3_43xjf"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tvhkv"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tvhkv"]
@ -20,10 +19,6 @@ script = ExtResource("1_mytgt")
environment = SubResource("Environment_d5g72") environment = SubResource("Environment_d5g72")
[node name="CameraPivot" type="Node3D" parent="."] [node name="CameraPivot" type="Node3D" parent="."]
visible = false
[node name="Camera3D" type="Camera3D" parent="CameraPivot"] [node name="Camera3D" type="Camera3D" parent="CameraPivot"]
script = ExtResource("2_co6fy") script = ExtResource("2_co6fy")
[node name="Player" parent="." instance=ExtResource("3_43xjf")]
transform = Transform3D(0.999178, 0, 0.0405503, 0, 1, 0, -0.0405503, 0, 0.999178, 0, 0, 0)

View file

@ -1,10 +1,9 @@
extends Node3D extends Node3D
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
RMesh.LoadRMesh(self, "GFX\\map\\173bright_opt.rmesh") #RMesh.LoadRMesh(self, "GFX\\map\\machineroom_opt.rmesh")
B3D.Load("GFX\\npcs\\106_2.b3d")
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void: func _process(delta: float) -> void:

View file

@ -18,10 +18,14 @@ func _ready() -> void:
buttonList = $Buttons.get_children() buttonList = $Buttons.get_children()
$Buttons/NewGame.connect("clicked", newGame) $Buttons/NewGame.connect("clicked", newGame)
$Buttons/Quit.connect("clicked", quitGame)
func newGame(): func newGame():
print("clicked new game") print("clicked new game")
func quitGame():
get_tree().quit()
var jankyCounter = 0 var jankyCounter = 0
func _process(delta: float) -> void: func _process(delta: float) -> void:
if jankyCounter >= 5 and jankyFix.visible: if jankyCounter >= 5 and jankyFix.visible:

28
src/file_parsers/B3D.gd Normal file
View file

@ -0,0 +1,28 @@
class_name B3D
static func ReadChunk(reader:BufferStuffReader):
var chunk = B3DChunk.new()
chunk.name = reader.readBuffer(4).get_string_from_ascii()
var chunkSize = reader.readInt()
chunk.bytes = reader.readBuffer(chunkSize)
return chunk;
static func Load(filePath: String):
var correctedPath = filePath.replace("\\", "/")
var fileHandle = FileAccess.open(str("res://", correctedPath), FileAccess.READ)
var reader = BufferStuffReader.create(fileHandle.get_buffer(fileHandle.get_length()))
fileHandle.close()
var bb3dChunk = ReadChunk(reader)
print(bb3dChunk.name)
if bb3dChunk.name == "BB3D":
var bb3dReader = BufferStuffReader.create(bb3dChunk.bytes)
var version = bb3dReader.readInt()
if version == 1:
pass
else:
print(str("Unknown b3d version. ", version))
return null

5
src/objects/B3DAnim.gd Normal file
View file

@ -0,0 +1,5 @@
class_name B3DAnim
var flags: int
var frames: int
var fps: float

3
src/objects/B3DBone.gd Normal file
View file

@ -0,0 +1,3 @@
class_name B3DBone
var weights: Array = Array()

View file

@ -0,0 +1,4 @@
class_name B3DBoneWeight
var vertexId: int
var weight: float

8
src/objects/B3DBrush.gd Normal file
View file

@ -0,0 +1,8 @@
class_name B3DBrush
var name: String
var color: Color = Color(1, 1, 1, 1)
var shininess: float
var blend: int
var fx: int
var texture_id: PackedInt32Array = PackedInt32Array()

4
src/objects/B3DChunk.gd Normal file
View file

@ -0,0 +1,4 @@
class_name B3DChunk
var name: String = ""
var bytes: PackedByteArray

14
src/objects/B3DKeys.gd Normal file
View file

@ -0,0 +1,14 @@
class_name B3DKeys
var flags: int: set = _flagsUpdated
var keyframes: Array
var containsPosition: bool
var containsScale: bool
var containsRotation: bool
func _flagsUpdated(flagValue: int):
flags = flagValue
containsPosition = (flags & 1) != 0
containsScale = (flags & 2) != 0
containsRotation = (flags & 4) != 0

View file

@ -0,0 +1,6 @@
class_name B3DKeysKeyframe
var frame: int
var position: Vector3
var scale: Vector3
var rotation: Quaternion

5
src/objects/B3DMesh.gd Normal file
View file

@ -0,0 +1,5 @@
class_name B3DMesh
var brushId: int = -1
var vertsData # TODO: B3D_VRTS
var surfaces: Array # B3D_TRIS