From bd42aa79636100543d9264c9d5cf83cdb17f6db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Melvin=20Wei=C3=9F?= Date: Tue, 23 Sep 2025 15:50:34 +0200 Subject: [PATCH] Proper Item Pool Handling --- items/generic/item_pool.gd | 4 ++++ items/generic/item_pool.gd.uid | 1 + items/generic/item_pool.tres | 18 ++++++++++++++++++ items/generic/item_spawn.gd | 26 ++++++++------------------ items/generic/item_spawn.tscn | 11 +---------- main.tscn | 6 +----- player/sword.tscn | 8 ++++---- world/earth.gd | 2 +- 8 files changed, 38 insertions(+), 38 deletions(-) create mode 100644 items/generic/item_pool.gd create mode 100644 items/generic/item_pool.gd.uid create mode 100644 items/generic/item_pool.tres diff --git a/items/generic/item_pool.gd b/items/generic/item_pool.gd new file mode 100644 index 0000000..71bc2c2 --- /dev/null +++ b/items/generic/item_pool.gd @@ -0,0 +1,4 @@ +class_name ItemPool extends Resource +@export var common : Array[PackedScene] +@export var rare : Array[PackedScene] +@export var unique : Array[PackedScene] diff --git a/items/generic/item_pool.gd.uid b/items/generic/item_pool.gd.uid new file mode 100644 index 0000000..ebdc82d --- /dev/null +++ b/items/generic/item_pool.gd.uid @@ -0,0 +1 @@ +uid://bgbqefa6h7ckv diff --git a/items/generic/item_pool.tres b/items/generic/item_pool.tres new file mode 100644 index 0000000..5035d1b --- /dev/null +++ b/items/generic/item_pool.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" load_steps=11 format=3 uid="uid://m6yj45qvoecs"] + +[ext_resource type="PackedScene" uid="uid://b00185vygcka1" path="res://items/immediate_items/heal_item/heal_item.tscn" id="1_2l6sh"] +[ext_resource type="PackedScene" uid="uid://wc7kgtomy6xm" path="res://items/permanent_items/extrajump/extrajump.tscn" id="2_rli0f"] +[ext_resource type="PackedScene" uid="uid://gwctb2xqsbj" path="res://items/immediate_items/healthup/healthup.tscn" id="3_g002j"] +[ext_resource type="PackedScene" uid="uid://ewe36lqcjojk" path="res://items/active_items/updash/updash.tscn" id="4_vpswe"] +[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="5_jwi73"] +[ext_resource type="PackedScene" uid="uid://bbpf28ohayd8n" path="res://items/permanent_items/backslash/backslash.tscn" id="6_73uum"] +[ext_resource type="Script" uid="uid://bgbqefa6h7ckv" path="res://items/generic/item_pool.gd" id="6_rli0f"] +[ext_resource type="PackedScene" uid="uid://bpgo1djj8f1rg" path="res://items/permanent_items/high_jump/high_jump.tscn" id="7_k6eth"] +[ext_resource type="PackedScene" uid="uid://bwtdls58ajair" path="res://items/permanent_items/upslash/upslash.tscn" id="8_8cxou"] +[ext_resource type="PackedScene" uid="uid://dy17xhg1yrl0o" path="res://items/active_items/horizontal_dash/horizontal_dash.tscn" id="9_esvgx"] + +[resource] +script = ExtResource("6_rli0f") +common = Array[PackedScene]([ExtResource("1_2l6sh")]) +rare = Array[PackedScene]([ExtResource("2_rli0f"), ExtResource("3_g002j"), ExtResource("4_vpswe"), ExtResource("5_jwi73")]) +unique = Array[PackedScene]([ExtResource("6_73uum"), ExtResource("7_k6eth"), ExtResource("8_8cxou"), ExtResource("9_esvgx")]) diff --git a/items/generic/item_spawn.gd b/items/generic/item_spawn.gd index f331a30..0082c96 100644 --- a/items/generic/item_spawn.gd +++ b/items/generic/item_spawn.gd @@ -1,14 +1,12 @@ class_name ItemSpawn extends Node2D -@export var common_items : Array[PackedScene] -@export var rare_items : Array[PackedScene] -static var unique_items : Array[PackedScene] = [] +static var item_pool : ItemPool = ResourceLoader.load("res://items/generic/item_pool.tres","ItemPool",ResourceLoader.CACHE_MODE_IGNORE) @export var rarity_bonus : float = 0 @export var guarantee_rare : bool = false -@export var unique_base_chance = .02 -@export var rare_base_chance = .04 +@export var unique_base_chance = 0.08 +@export var rare_base_chance = .16 @export var unique_bonus_multiplier = .025 @export var rare_bonus_multiplier = .1 @@ -19,27 +17,19 @@ func choose_pool() -> Array[PackedScene]: var rare_chance = rare_base_chance + rare_bonus_multiplier * rarity_bonus var random = randf() - if random < unique_chance && unique_items.size() > 0: + if random < unique_chance && item_pool.unique.size() > 0: remove_after_spawn = true - return unique_items + return item_pool.unique elif random < unique_chance + rare_chance || guarantee_rare: - return rare_items - return common_items + return item_pool.rare + return item_pool.common func _ready(): var pool = choose_pool() var index = randi_range(0, pool.size() - 1) var packed_scene : PackedScene = pool[index] if remove_after_spawn: - unique_items.remove_at(index) + item_pool.unique.remove_at(index) var object = packed_scene.instantiate() add_child.call_deferred(object) object.reparent.call_deferred(get_parent()) - -static func refill_unique_item_pool(): - unique_items = [ - load("res://items/permanent_items/backslash/backslash.tscn"), - load("res://items/permanent_items/high_jump/high_jump.tscn"), - load("res://items/permanent_items/upslash/upslash.tscn"), - load("res://items/active_items/horizontal_dash/horizontal_dash.tscn") - ] diff --git a/items/generic/item_spawn.tscn b/items/generic/item_spawn.tscn index 87c5d6e..ed399fc 100644 --- a/items/generic/item_spawn.tscn +++ b/items/generic/item_spawn.tscn @@ -1,19 +1,10 @@ -[gd_scene load_steps=8 format=3 uid="uid://xj0of571aur1"] +[gd_scene load_steps=3 format=3 uid="uid://xj0of571aur1"] [ext_resource type="Script" uid="uid://b8em61mqgdi58" path="res://items/generic/item_spawn.gd" id="1_ms6tn"] -[ext_resource type="PackedScene" uid="uid://b00185vygcka1" path="res://items/immediate_items/heal_item/heal_item.tscn" id="2_w6i8k"] [ext_resource type="PackedScene" uid="uid://chs0u61f45nau" path="res://utils/earth_aligner.tscn" id="3_5pwuf"] -[ext_resource type="PackedScene" uid="uid://gwctb2xqsbj" path="res://items/immediate_items/healthup/healthup.tscn" id="3_yi7ag"] -[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="4_v0ua0"] -[ext_resource type="PackedScene" uid="uid://ewe36lqcjojk" path="res://items/active_items/updash/updash.tscn" id="5_uitgx"] -[ext_resource type="PackedScene" uid="uid://wc7kgtomy6xm" path="res://items/permanent_items/extrajump/extrajump.tscn" id="6_xqgya"] [node name="ItemSpawn" type="Node2D"] script = ExtResource("1_ms6tn") -common_items = Array[PackedScene]([ExtResource("2_w6i8k")]) -rare_items = Array[PackedScene]([ExtResource("4_v0ua0"), ExtResource("5_uitgx"), ExtResource("3_yi7ag"), ExtResource("6_xqgya")]) -unique_base_chance = 0.05 -rare_base_chance = 0.1 metadata/_custom_type_script = "uid://b8em61mqgdi58" [node name="EarthAligner" parent="." instance=ExtResource("3_5pwuf")] diff --git a/main.tscn b/main.tscn index 2a284d8..c26f383 100644 --- a/main.tscn +++ b/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://cxo6bq26huau7"] +[gd_scene load_steps=14 format=3 uid="uid://cxo6bq26huau7"] [ext_resource type="PackedScene" uid="uid://cmaovvr15b3qk" path="res://player/player.tscn" id="2_1bvp3"] [ext_resource type="Texture2D" uid="uid://d3fpq76anm4t7" path="res://world/Background Prototype/Background prototype.png" id="3_kek77"] @@ -13,7 +13,6 @@ [ext_resource type="PackedScene" uid="uid://ca5ndobertnp4" path="res://water/water.tscn" id="10_4c57u"] [ext_resource type="Script" uid="uid://cpaskpj67pnaj" path="res://enemies/boss/boss_spawner.gd" id="10_efxa6"] [ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"] -[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="14_w48qg"] [node name="main" type="Node2D"] @@ -89,9 +88,6 @@ texture = ExtResource("3_kek77") script = ExtResource("10_efxa6") boss = ExtResource("11_efxa6") -[node name="Bow" parent="." instance=ExtResource("14_w48qg")] -position = Vector2(128, -3178) - [connection signal="active_item_changed" from="Player" to="UIOverlay/ItemUI" method="_on_player_active_item_changed"] [connection signal="health_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_health_changed"] [connection signal="max_hp_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_max_hp_changed"] diff --git a/player/sword.tscn b/player/sword.tscn index 54b3db7..d1a8c5f 100644 --- a/player/sword.tscn +++ b/player/sword.tscn @@ -4,8 +4,8 @@ [ext_resource type="Texture2D" uid="uid://b8aih0qr3hssc" path="res://player/sword.png" id="2_hv1tj"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_e4ynd"] -radius = 18.048504 -height = 36.097008 +radius = 18.288715 +height = 36.57743 [sub_resource type="SpriteFrames" id="SpriteFrames_fahsa"] animations = [{ @@ -23,9 +23,9 @@ collision_mask = 18 script = ExtResource("1_hv1tj") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(-18.97778, 0.61333394) +position = Vector2(-27, 0.613) rotation = 1.5708 -scale = Vector2(-0.635, -1.5) +scale = Vector2(-0.635, -1.1) shape = SubResource("CapsuleShape2D_e4ynd") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] diff --git a/world/earth.gd b/world/earth.gd index e58099b..9f01e7c 100644 --- a/world/earth.gd +++ b/world/earth.gd @@ -1,7 +1,7 @@ extends Node2D func _ready() -> void: - ItemSpawn.refill_unique_item_pool() + ItemSpawn.item_pool = ResourceLoader.load("res://items/generic/item_pool.tres","ItemPool",ResourceLoader.CACHE_MODE_IGNORE) func get_grid() -> Grid: return $Grid