-
Notifications
You must be signed in to change notification settings - Fork 228
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #34 from nhydock/character-growth
Add Character Growth
- Loading branch information
Showing
17 changed files
with
320 additions
and
39 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
extends Node | ||
|
||
var experience_earned : int = 0 | ||
var party : Array = [] | ||
var drops : Array = [] | ||
|
||
func initialize(battlers : Array): | ||
""" | ||
We rely on signals to only add experience of enemies that have been defeated. | ||
This allows us to support enemies running away and not receiving exp for them, | ||
as well as allowing the party to run away and only earn partial exp | ||
""" | ||
$Panel.visible = false | ||
party = [] | ||
experience_earned = 0 | ||
for battler in battlers: | ||
if not battler.party_member: | ||
battler.stats.connect("health_depleted", self, "_add_reward", [battler]) | ||
else: | ||
party.append(battler) | ||
|
||
func _add_reward(battler : Battler): | ||
experience_earned += battler.stats.experience | ||
# TODO add item drops | ||
|
||
func _reward_to_battlers() -> Array: | ||
""" | ||
Rewards the surviving party members with experience points | ||
@returns Array of Battlers who have leveled up | ||
""" | ||
var survived = [] | ||
for member in party: | ||
if member.stats.is_alive: | ||
survived.append(member) | ||
|
||
var exp_per_survivor = experience_earned / len(survived) | ||
var leveled_up = [] | ||
for member in survived: | ||
var level = member.stats.level | ||
member.stats.experience += exp_per_survivor | ||
if level < member.stats.level: | ||
leveled_up.append(member) | ||
return leveled_up | ||
|
||
func _on_victory(): | ||
""" | ||
On victory be sure to grant the battlers their earned exp | ||
and show the interface | ||
""" | ||
var leveled_up = _reward_to_battlers() | ||
$Panel.visible = true | ||
$Panel/Label.text = "EXP Earned %d" % experience_earned | ||
yield(get_tree().create_timer(2.0), "timeout") | ||
for battler in leveled_up: | ||
$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 | ||
yield(get_tree().create_timer(2.0), "timeout") | ||
$Panel.visible = false | ||
# TODO transition back to map | ||
|
||
func _on_flee(): | ||
""" | ||
End combat condition when the party flees | ||
""" | ||
experience_earned /= 2 | ||
_reward_to_battlers() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,17 @@ | ||
[gd_scene load_steps=5 format=2] | ||
[gd_scene load_steps=4 format=2] | ||
|
||
[ext_resource path="res://combat/battlers/Battler.tscn" type="PackedScene" id=1] | ||
[ext_resource path="res://animation/PorcupineAnim.tscn" type="PackedScene" id=2] | ||
[ext_resource path="res://combat/battlers/Job.tscn" type="PackedScene" id=3] | ||
[ext_resource path="res://combat/battlers/jobs/Porcupine.tres" type="Resource" id=4] | ||
[ext_resource path="res://combat/battlers/jobs/Porcupine.tres" type="Resource" id=3] | ||
|
||
[node name="Porcupine" index="0" instance=ExtResource( 1 )] | ||
[node name="Porcupine" instance=ExtResource( 1 )] | ||
|
||
[node name="PorcupineAnim" parent="Skin" index="0" instance=ExtResource( 2 )] | ||
|
||
[node name="Porcupine" parent="." index="1" instance=ExtResource( 3 )] | ||
_sections_unfolded = [ "skills", "starting_stats" ] | ||
starting_stats = ExtResource( 4 ) | ||
[node name="Job" parent="." index="1"] | ||
starting_stats = ExtResource( 3 ) | ||
starting_skills = [ ] | ||
|
||
[node name="InterfaceAnchor" parent="." index="4"] | ||
[node name="InterfaceAnchor" parent="." index="3"] | ||
position = Vector2( 0, 48.9708 ) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,49 @@ | ||
[gd_resource type="Resource" load_steps=2 format=2] | ||
[gd_resource type="Resource" load_steps=7 format=2] | ||
|
||
[ext_resource path="res://combat/battlers/jobs/StartingStats.gd" type="Script" id=1] | ||
[ext_resource path="res://combat/battlers/jobs/GrowthStats.gd" type="Script" id=1] | ||
|
||
[sub_resource type="Curve" id=1] | ||
|
||
min_value = 0.99 | ||
max_value = 210.0 | ||
bake_resolution = 10 | ||
_data = [ Vector2( 0, 0 ), 0.0, 210.0, 0, 1, Vector2( 1, 210 ), 210.0, 0.0, 1, 0 ] | ||
|
||
[sub_resource type="Curve" id=3] | ||
|
||
min_value = 0.0 | ||
max_value = 999.0 | ||
bake_resolution = 10 | ||
_data = [ Vector2( 0, 68.7313 ), 0.0, 0.0, 0, 0, Vector2( 0.168959, 376.423 ), 1283.12, 1283.12, 0, 0, Vector2( 1, 999 ), 2386.91, 0.0, 0, 0 ] | ||
|
||
[sub_resource type="Curve" id=4] | ||
|
||
min_value = 0.0 | ||
max_value = 80.0 | ||
bake_resolution = 10 | ||
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.603628, 45.632 ), 6.7181, 291.117, 0, 0, Vector2( 1, 80 ), 0.0, 0.0, 0, 0 ] | ||
|
||
[sub_resource type="Curve" id=5] | ||
|
||
min_value = 0.99 | ||
max_value = 145.0 | ||
bake_resolution = 10 | ||
_data = [ Vector2( 0, 3 ), 0.0, 0.0, 0, 0, Vector2( 0.992522, 145 ), 198.8, 0.0, 0, 0 ] | ||
|
||
[sub_resource type="Curve" id=6] | ||
|
||
min_value = 0.99 | ||
max_value = 233.0 | ||
bake_resolution = 10 | ||
_data = [ Vector2( 0, 8 ), 0.0, 803.058, 0, 0, Vector2( 0.251992, 114.45 ), -17.2645, 224.438, 0, 0, Vector2( 1, 233 ), 184.979, 0.0, 0, 0 ] | ||
|
||
[resource] | ||
|
||
script = ExtResource( 1 ) | ||
job_name = "Fighter" | ||
max_health = 15 | ||
max_mana = 4 | ||
strength = 4 | ||
defense = 1 | ||
speed = 5 | ||
experience_curve = [ 0, 5, 15, 50, 120, 200, 325, 500, 800, 1250 ] | ||
max_health_curve = SubResource( 3 ) | ||
max_mana_curve = SubResource( 4 ) | ||
strength_curve = SubResource( 6 ) | ||
defense_curve = SubResource( 1 ) | ||
speed_curve = SubResource( 5 ) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
extends StartingStats | ||
|
||
class_name GrowthStats | ||
|
||
var MAX_LEVEL : int setget ,_get_max_level | ||
var _interpolated_level : float | ||
export var experience_curve : Array | ||
export var max_health_curve : Curve | ||
export var max_mana_curve : Curve | ||
export var strength_curve : Curve | ||
export var defense_curve : Curve | ||
export var speed_curve : Curve | ||
|
||
func _get_max_level() -> int: | ||
return len(experience_curve) | ||
|
||
func _get_interpolated_level() -> float: | ||
return float(level) / float(self.MAX_LEVEL) | ||
|
||
func _set_experience(value : int = 0): | ||
""" | ||
Calculate level, which updates all stats | ||
""" | ||
experience = value | ||
var l = level | ||
while l + 1 < self.MAX_LEVEL && experience > experience_curve[l + 1]: | ||
l += 1 | ||
level = l | ||
_interpolated_level = float(level) / float(self.MAX_LEVEL) | ||
|
||
func _get_max_health() -> int: | ||
return int(max_health_curve.interpolate_baked(_interpolated_level)) | ||
|
||
func _get_max_mana() -> int: | ||
return int(max_mana_curve.interpolate_baked(_interpolated_level)) | ||
|
||
func _get_strength() -> int: | ||
return int(strength_curve.interpolate_baked(_interpolated_level)) | ||
|
||
func _get_defense() -> int: | ||
return int(defense_curve.interpolate_baked(_interpolated_level)) | ||
|
||
func _get_speed() -> int: | ||
return int(speed_curve.interpolate_baked(_interpolated_level)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.