diff --git a/godot/combat/Rewards.gd b/godot/combat/Rewards.gd index 85c153683b85e8c91e8c5d7806f04004d9329168..79fd3ced9ee97c718809b00fe6ca13221b5a2f62 100644 --- a/godot/combat/Rewards.gd +++ b/godot/combat/Rewards.gd @@ -13,6 +13,7 @@ func initialize(battlers : Array): $Panel.visible = false party = [] experience_earned = 0 + randomize() for battler in battlers: if not battler.party_member: battler.stats.connect("health_depleted", self, "_add_reward", [battler]) @@ -20,8 +21,18 @@ func initialize(battlers : Array): party.append(battler) func _add_reward(battler : Battler): + """ + Appends dictionaries with the form { 'item': Item.tres, 'amount': amount } of dropped items to the drops array. + """ experience_earned += battler.stats.experience - # TODO add item drops + for drop in battler.drops: + if drop.chance - randf() > drop.chance: + continue + var amount : int = 1 if drop.max_amount == 1 else round(rand_range(drop.min_amount, drop.max_amount)) + drops.append({ + 'item': drop.item, + 'amount': amount + }) func _reward_to_battlers() -> Array: """ @@ -56,7 +67,7 @@ func on_battle_completed(): $Panel/Label.text = "%s Leveled Up to %d" % [battler.name, battler.stats.level + 1] yield(get_tree().create_timer(2.0), "timeout") for drop in drops: - $Panel/Label.text = "Found %s" % drop.name + $Panel/Label.text = "Found %s %s(s)" % [drop.amount, drop.item.name] yield(get_tree().create_timer(2.0), "timeout") $Panel.visible = false diff --git a/godot/combat/battlers/Battler.gd b/godot/combat/battlers/Battler.gd index 1cf3bfd78c7bbb4c17ef92f5f3fdd732985665eb..86311ee635f5a8b0dfbbabb25c1f4b693900ec37 100644 --- a/godot/combat/battlers/Battler.gd +++ b/godot/combat/battlers/Battler.gd @@ -7,6 +7,7 @@ export var template : Resource const DEFAULT_CHANCE = 0.75 var stats : CharacterStats +var drops : Array onready var lifebar_anchor = $InterfaceAnchor onready var skin = $Skin onready var actions = $Actions @@ -26,6 +27,9 @@ func _ready() -> void: var _t = template as BattlerTemplate actions.initialize(_t.skills) + + drops = _t.drops + skin.add_child(_t.anim.instance()) if stats == null: var starting_stats = _t.stats as CharacterStats diff --git a/godot/combat/battlers/BattlerTemplate.gd b/godot/combat/battlers/BattlerTemplate.gd index ba7094eaf42fa43c1461ae7a3a8bb7b7430c7a90..f55c00c43d97366744ebaba850a75d6ecdf1c604 100644 --- a/godot/combat/battlers/BattlerTemplate.gd +++ b/godot/combat/battlers/BattlerTemplate.gd @@ -5,3 +5,20 @@ class_name BattlerTemplate export var anim : PackedScene export var stats : Resource export var skills : Array + +""" +For drops, we're currently using an Array of dictionaries +Example: + { + 'item': Sword.tres, + 'min_amount': 1, + 'max_amount': 1, + 'chance': 0.5 + }, { + 'item': Potion.tres, + 'min_amount': 3, + 'max_amount': 20, + 'chance': 0.25 + }, +""" +export var drops : Array \ No newline at end of file diff --git a/godot/combat/battlers/enemies/Porcupine.tres b/godot/combat/battlers/enemies/Porcupine.tres deleted file mode 100644 index 6c58c5f4b6a10e55753d57f5aab98c8fc19cdbd8..0000000000000000000000000000000000000000 --- a/godot/combat/battlers/enemies/Porcupine.tres +++ /dev/null @@ -1,13 +0,0 @@ -[gd_resource type="Resource" load_steps=4 format=2] - -[ext_resource path="res://animation/PorcupineAnim.tscn" type="PackedScene" id=1] -[ext_resource path="res://combat/battlers/BattlerTemplate.gd" type="Script" id=2] -[ext_resource path="res://combat/battlers/jobs/Porcupine.tres" type="Resource" id=3] - -[resource] - -script = ExtResource( 2 ) -anim = ExtResource( 1 ) -stats = ExtResource( 3 ) -skills = [ ] - diff --git a/godot/combat/battlers/enemies/porcupine/Porcupine.tres b/godot/combat/battlers/enemies/porcupine/Porcupine.tres new file mode 100644 index 0000000000000000000000000000000000000000..7aeac566c56072571eb9a812f584ecb803891c2e --- /dev/null +++ b/godot/combat/battlers/enemies/porcupine/Porcupine.tres @@ -0,0 +1,20 @@ +[gd_resource type="Resource" load_steps=5 format=2] + +[ext_resource path="res://animation/PorcupineAnim.tscn" type="PackedScene" id=1] +[ext_resource path="res://items/Potion.tres" type="Resource" id=2] +[ext_resource path="res://combat/battlers/BattlerTemplate.gd" type="Script" id=3] +[ext_resource path="res://combat/battlers/jobs/Porcupine.tres" type="Resource" id=4] + +[resource] + +script = ExtResource( 3 ) +anim = ExtResource( 1 ) +stats = ExtResource( 4 ) +skills = [ ] +drops = [ { +"chance": 0.75, +"item": ExtResource( 2 ), +"max_amount": 4, +"min_amount": 2 +} ] + diff --git a/godot/combat/battlers/enemies/StrongerPorcupine.tres b/godot/combat/battlers/enemies/porcupine/StrongerPorcupine.tres similarity index 100% rename from godot/combat/battlers/enemies/StrongerPorcupine.tres rename to godot/combat/battlers/enemies/porcupine/StrongerPorcupine.tres diff --git a/godot/combat/battlers/formations/PorcupineFormation001.tscn b/godot/combat/battlers/formations/PorcupineFormation001.tscn index d57d61f5201aff393cd1048fc98388dfbb5b863c..e7f2542a5b9a554aacac4c3e862bfd499a4fe7b1 100644 --- a/godot/combat/battlers/formations/PorcupineFormation001.tscn +++ b/godot/combat/battlers/formations/PorcupineFormation001.tscn @@ -3,8 +3,9 @@ [ext_resource path="res://combat/battlers/Formation.gd" type="Script" id=1] [ext_resource path="res://combat/background/StonePlatform.tscn" type="PackedScene" id=2] [ext_resource path="res://combat/battlers/formations/FormationMember.tscn" type="PackedScene" id=3] -[ext_resource path="res://combat/battlers/enemies/Porcupine.tres" type="Resource" id=4] -[ext_resource path="res://combat/battlers/enemies/StrongerPorcupine.tres" type="Resource" id=5] +[ext_resource path="res://combat/battlers/enemies/porcupine/Porcupine.tres" type="Resource" id=4] +[ext_resource path="res://combat/battlers/enemies/porcupine/StrongerPorcupine.tres" type="Resource" id=5] + [node name="Formation" type="Node"] script = ExtResource( 1 )