From 8f5d2fcf9fe621baf3dc75e4253f63b56f8fd64b Mon Sep 17 00:00:00 2001 From: Holly Date: Thu, 9 Jan 2025 17:13:44 +0000 Subject: [PATCH] begin work on B3D parsing --- scenes/world/DynamicMap.tscn | 7 +------ src/DynamicMap.gd | 5 ++--- src/MainMenu.gd | 4 ++++ src/file_parsers/B3D.gd | 28 ++++++++++++++++++++++++++++ src/{ => file_parsers}/RMesh.gd | 0 src/{ => file_parsers}/X.gd | 0 src/objects/B3DAnim.gd | 5 +++++ src/objects/B3DBone.gd | 3 +++ src/objects/B3DBoneWeight.gd | 4 ++++ src/objects/B3DBrush.gd | 8 ++++++++ src/objects/B3DChunk.gd | 4 ++++ src/objects/B3DKeys.gd | 14 ++++++++++++++ src/objects/B3DKeysKeyframe.gd | 6 ++++++ src/objects/B3DMesh.gd | 5 +++++ 14 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 src/file_parsers/B3D.gd rename src/{ => file_parsers}/RMesh.gd (100%) rename src/{ => file_parsers}/X.gd (100%) create mode 100644 src/objects/B3DAnim.gd create mode 100644 src/objects/B3DBone.gd create mode 100644 src/objects/B3DBoneWeight.gd create mode 100644 src/objects/B3DBrush.gd create mode 100644 src/objects/B3DChunk.gd create mode 100644 src/objects/B3DKeys.gd create mode 100644 src/objects/B3DKeysKeyframe.gd create mode 100644 src/objects/B3DMesh.gd diff --git a/scenes/world/DynamicMap.tscn b/scenes/world/DynamicMap.tscn index d3f02ed..629ca83 100644 --- a/scenes/world/DynamicMap.tscn +++ b/scenes/world/DynamicMap.tscn @@ -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/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"] @@ -20,10 +19,6 @@ script = ExtResource("1_mytgt") environment = SubResource("Environment_d5g72") [node name="CameraPivot" type="Node3D" parent="."] -visible = false [node name="Camera3D" type="Camera3D" parent="CameraPivot"] 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) diff --git a/src/DynamicMap.gd b/src/DynamicMap.gd index 4911500..92b9516 100644 --- a/src/DynamicMap.gd +++ b/src/DynamicMap.gd @@ -1,10 +1,9 @@ extends Node3D - # Called when the node enters the scene tree for the first time. 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. func _process(delta: float) -> void: diff --git a/src/MainMenu.gd b/src/MainMenu.gd index 8c4919d..8dfc080 100644 --- a/src/MainMenu.gd +++ b/src/MainMenu.gd @@ -18,10 +18,14 @@ func _ready() -> void: buttonList = $Buttons.get_children() $Buttons/NewGame.connect("clicked", newGame) + $Buttons/Quit.connect("clicked", quitGame) func newGame(): print("clicked new game") +func quitGame(): + get_tree().quit() + var jankyCounter = 0 func _process(delta: float) -> void: if jankyCounter >= 5 and jankyFix.visible: diff --git a/src/file_parsers/B3D.gd b/src/file_parsers/B3D.gd new file mode 100644 index 0000000..f893024 --- /dev/null +++ b/src/file_parsers/B3D.gd @@ -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 diff --git a/src/RMesh.gd b/src/file_parsers/RMesh.gd similarity index 100% rename from src/RMesh.gd rename to src/file_parsers/RMesh.gd diff --git a/src/X.gd b/src/file_parsers/X.gd similarity index 100% rename from src/X.gd rename to src/file_parsers/X.gd diff --git a/src/objects/B3DAnim.gd b/src/objects/B3DAnim.gd new file mode 100644 index 0000000..8418426 --- /dev/null +++ b/src/objects/B3DAnim.gd @@ -0,0 +1,5 @@ +class_name B3DAnim + +var flags: int +var frames: int +var fps: float diff --git a/src/objects/B3DBone.gd b/src/objects/B3DBone.gd new file mode 100644 index 0000000..c42b3f1 --- /dev/null +++ b/src/objects/B3DBone.gd @@ -0,0 +1,3 @@ +class_name B3DBone + +var weights: Array = Array() diff --git a/src/objects/B3DBoneWeight.gd b/src/objects/B3DBoneWeight.gd new file mode 100644 index 0000000..df06cb2 --- /dev/null +++ b/src/objects/B3DBoneWeight.gd @@ -0,0 +1,4 @@ +class_name B3DBoneWeight + +var vertexId: int +var weight: float diff --git a/src/objects/B3DBrush.gd b/src/objects/B3DBrush.gd new file mode 100644 index 0000000..d829dd9 --- /dev/null +++ b/src/objects/B3DBrush.gd @@ -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() diff --git a/src/objects/B3DChunk.gd b/src/objects/B3DChunk.gd new file mode 100644 index 0000000..2ff75da --- /dev/null +++ b/src/objects/B3DChunk.gd @@ -0,0 +1,4 @@ +class_name B3DChunk + +var name: String = "" +var bytes: PackedByteArray diff --git a/src/objects/B3DKeys.gd b/src/objects/B3DKeys.gd new file mode 100644 index 0000000..4c70ea6 --- /dev/null +++ b/src/objects/B3DKeys.gd @@ -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 diff --git a/src/objects/B3DKeysKeyframe.gd b/src/objects/B3DKeysKeyframe.gd new file mode 100644 index 0000000..db88e19 --- /dev/null +++ b/src/objects/B3DKeysKeyframe.gd @@ -0,0 +1,6 @@ +class_name B3DKeysKeyframe + +var frame: int +var position: Vector3 +var scale: Vector3 +var rotation: Quaternion diff --git a/src/objects/B3DMesh.gd b/src/objects/B3DMesh.gd new file mode 100644 index 0000000..02b2154 --- /dev/null +++ b/src/objects/B3DMesh.gd @@ -0,0 +1,5 @@ +class_name B3DMesh + +var brushId: int = -1 +var vertsData # TODO: B3D_VRTS +var surfaces: Array # B3D_TRIS