Extensive work on VFX for the guild, assets for the world, and portrait variance. Work on quests. Extra work on User Flow completion and file saving.

This commit is contained in:
2025-09-04 07:46:55 -04:00
parent 149ee993dc
commit 48e335f56a
134 changed files with 2232 additions and 288 deletions

View File

@@ -1,5 +1,11 @@
class_name Adventurer extends Node
class Appearance extends Resource:
var hair_color : String
var hair_type : int
var skin_color : String
var eye_color : String
var eye_type : int
enum Gender{
MASC,
@@ -17,12 +23,11 @@ var max_energy : int = 1
var level : int = 1
var exp : int = 0
var job : JobData
var appearance : Appearance
var stats : StatBlock
var gold : int = 0
var quest : Quest
var weapon : Weapon
var armor : Armor
var accessory : Accessory
var equipment : Array = [null, null, null]
var inventory : Dictionary[Vector2, Item] = {}
var inventory_size : Vector2i = Vector2i(3,2)
var inventory_count : int = 0
@@ -45,7 +50,7 @@ func generate() -> void:
stats.CHA = randi_range(job.min_CHA, job.max_CHA)
stats.FAI = randi_range(job.min_FAI, job.max_FAI)
stats.LUK = randi_range(job.min_LUK, job.max_LUK)
generate_appearance()
max_life = stats.STR * 10 + stats.CHA * 10
max_energy = stats.INT * 10 + stats.FAI * 10
life = max_life
@@ -64,7 +69,6 @@ func gain_level() -> void:
level += 1
#TODO: Make stats improve based on job
Game.notice("%s has reached level %d!" % [full_name(), level])
#TODO: Make Sideview display level up
changed.emit()
levelled.emit()
@@ -115,6 +119,50 @@ func pickup_item(item : Item) -> void:
inventory_count+=1
changed.emit()
func equip_item(from : Vector2, slot : Item.Slots) -> void:
if !inventory.has(from):
printerr("Cannot equip item from %s, it is empty!" % [from])
var itm = inventory[from]
if !itm.can_equip_slot(slot):
printerr("Cannot equip item from %s to %s, it is the wrong type!" % [from, Item.slot_name(slot)])
if !job.can_equip(itm):
printerr("Cannot equip item from %s to %s, %s cannot equip it!" % [from, Item.slot_name(slot), job.name])
if equipment[slot] != null:
inventory[from] = equipment[slot]
remove_stats_from_item(itm)
else:
inventory.erase(from)
equipment[slot] = itm
apply_stats_from_item(itm)
#Apply Stats from
func remove_stats_from_item(itm : Item) -> void:
stats.STR -= stats.STR
stats.DEX-= stats.DEX
stats.INT-= stats.INT
stats.CHA-= stats.CHA
stats.FAI-= stats.FAI
stats.LUK-= stats.LUK
stats.PATK-= stats.PATK
stats.MATK-= stats.MATK
stats.PDEF-= stats.PDEF
stats.MDEF-= stats.MDEF
func apply_stats_from_item(itm : Item) -> void:
stats.STR += stats.STR
stats.DEX+= stats.DEX
stats.INT+= stats.INT
stats.CHA+= stats.CHA
stats.FAI+= stats.FAI
stats.LUK+= stats.LUK
stats.PATK+= stats.PATK
stats.MATK+= stats.MATK
stats.PDEF+= stats.PDEF
stats.MDEF+= stats.MDEF
func move_item(from : Vector2, to: Vector2) -> void:
if !inventory.has(from):
printerr("Cannot move item from %s to %s, %s is empty!" % [from, to, from])
@@ -126,3 +174,14 @@ func move_item(from : Vector2, to: Vector2) -> void:
inventory.erase(from)
inventory[to] = itm
changed.emit()
func generate_appearance(features=null) -> void:
if features == null:
appearance = Appearance.new()
#TODO: Handle different types of hair and eyes
appearance.hair_color = AdventurerPortrait.random_color(ColorVariant.Types.HAIR)
#appearance.hair_type = randi_range(0,len(job.portrait.hair_types) - 1)
appearance.eye_color = AdventurerPortrait.random_color(ColorVariant.Types.EYES)
#appearance.eye_type = randi_range(0,len(job.portrait.eye_types) - 1)
appearance.skin_color = AdventurerPortrait.random_color(ColorVariant.Types.SKIN)
changed.emit()