From 51da541c303167eb0aef697f2f2ad4c21f2baeb5 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Wed, 21 Jan 2026 21:53:58 +1300 Subject: [PATCH 1/4] models: add hammer.glb import file The hammer must be imported at scale 10. --- models/hammer.glb.import | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 models/hammer.glb.import diff --git a/models/hammer.glb.import b/models/hammer.glb.import new file mode 100644 index 0000000..1c68feb --- /dev/null +++ b/models/hammer.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://5eo56lcgets6" +path="res://.godot/imported/hammer.glb-f03f7fd2a3e43a744c3151200ca3ddce.scn" + +[deps] + +source_file="res://models/hammer.glb" +dest_files=["res://.godot/imported/hammer.glb-f03f7fd2a3e43a744c3151200ca3ddce.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=10.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 From 2067317a097729bc6d7868e7fdd46692e185f120 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Thu, 22 Jan 2026 14:27:00 +1300 Subject: [PATCH 2/4] player: remove ui_backpack keybind --- player/player.gd | 7 ------- project.godot | 5 ----- 2 files changed, 12 deletions(-) diff --git a/player/player.gd b/player/player.gd index 0967747..eea6a69 100644 --- a/player/player.gd +++ b/player/player.gd @@ -148,13 +148,6 @@ func _physics_process(delta): die() # UI and backpack keys - if Input.is_action_pressed("ui_backpack"): - var mesg = "Equipped: " + $Pivot/Container/Gear.gear_name() + "\nBackpack: " - for node in $Backpack.get_children(): - if not node is Gear: - continue - mesg += node.name + "." + node.gear_name() + " " - message(mesg) if Input.is_action_just_pressed("backpack_1"): use_backpack_slot("1") if Input.is_action_just_pressed("backpack_2"): diff --git a/project.godot b/project.godot index 9eaffc3..5a31f85 100644 --- a/project.godot +++ b/project.godot @@ -72,11 +72,6 @@ gear_use={ "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) ] } -ui_backpack={ -"deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) -] -} backpack_1={ "deadzone": 0.2, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":49,"physical_keycode":0,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null) From d395bb6f26542f389a2b6f137f5d0ad7e0d5222b Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Thu, 22 Jan 2026 14:28:40 +1300 Subject: [PATCH 3/4] player: make spawn @onready, make gear_slots const --- player/player.gd | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/player/player.gd b/player/player.gd index eea6a69..3bbcb14 100644 --- a/player/player.gd +++ b/player/player.gd @@ -4,13 +4,15 @@ class_name Player extends CharacterBody3D @export var jump_power = 32 @export var fall_speed = 86 +const gear_slots = ["1", "2", "3"] + +@onready var spawn = Vector3(position) + var health = 100 var suspended = false -var spawn = Vector3.ZERO var direction = Vector3.ZERO var target_velocity = Vector3.ZERO var initial_gear = null -var gear_slots = ["1", "2", "3"] func resize_ui(): var bpui_h = 200 @@ -134,7 +136,6 @@ func move_player(x, z): direction += camera_basis.x * x func _ready(): - spawn = Vector3(position) initial_gear = $Pivot/Container/Gear.duplicate() get_viewport().size_changed.connect(resize_ui) resize_ui() From 9b229e5d8ff44797aa12c4dd9090fe7b149e3f95 Mon Sep 17 00:00:00 2001 From: Jeremy Baxter Date: Thu, 22 Jan 2026 14:29:59 +1300 Subject: [PATCH 4/4] player: handle gears on respawn Use a preloaded scene to give the player the starting gear rather than making a duplicate of the gear on spawn, and strip any gears from the backpack on death. Remove Gear from the editor scene tree and add it on respawn(). --- player/player.gd | 18 +++++++++++++++--- player/player.tscn | 5 +---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/player/player.gd b/player/player.gd index 3bbcb14..fe99f5a 100644 --- a/player/player.gd +++ b/player/player.gd @@ -8,11 +8,12 @@ const gear_slots = ["1", "2", "3"] @onready var spawn = Vector3(position) +var starting_gear = preload("res://gears/ball.tscn") + var health = 100 var suspended = false var direction = Vector3.ZERO var target_velocity = Vector3.ZERO -var initial_gear = null func resize_ui(): var bpui_h = 200 @@ -40,6 +41,12 @@ func die(): suspended = true visible = false $BackpackUI.visible = false + + # strip gears + for gear in $Backpack.get_children(): + gear.queue_free() + $Pivot/Container/Gear.queue_free() + $RespawnTimer.start() message("Le gone") @@ -49,6 +56,12 @@ func respawn(): health = 100 visible = true suspended = false + + # add starting gear + var gear = starting_gear.instantiate() + $Pivot/Container.add_child(gear) + + make_backpack_ui() $BackpackUI.visible = true # Backpack functions @@ -136,10 +149,9 @@ func move_player(x, z): direction += camera_basis.x * x func _ready(): - initial_gear = $Pivot/Container/Gear.duplicate() get_viewport().size_changed.connect(resize_ui) resize_ui() - make_backpack_ui() + respawn() func _physics_process(delta): if suspended: diff --git a/player/player.tscn b/player/player.tscn index a067efe..3da27e3 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=9 format=4 uid="uid://cfceg80unq0pe"] +[gd_scene load_steps=8 format=4 uid="uid://cfceg80unq0pe"] [ext_resource type="Script" uid="uid://djeyfi7vm2vw0" path="res://player/player.gd" id="1_onrkg"] [ext_resource type="Script" uid="uid://oi6sint7jkc6" path="res://player/camera_gimbal.gd" id="2_onrkg"] [ext_resource type="Texture2D" uid="uid://cfb0gbwm57hm4" path="res://models/player_0.png" id="3_hqtel"] -[ext_resource type="PackedScene" uid="uid://c117buhmmkvkt" path="res://gears/ball.tscn" id="3_yw30f"] [sub_resource type="BoxShape3D" id="BoxShape3D_onrkg"] size = Vector3(2, 5, 1) @@ -67,8 +66,6 @@ skeleton = NodePath("") [node name="Container" type="Node3D" parent="Pivot"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 2.5, -1.5) -[node name="Gear" parent="Pivot/Container" instance=ExtResource("3_yw30f")] - [node name="CameraGimbal" type="Node3D" parent="."] script = ExtResource("2_onrkg")