Skip to content

Commit

Permalink
Merge pull request #8 from the-dev-bin/tyler/cleanup
Browse files Browse the repository at this point in the history
Bunch of stuff to get a working MVP out
  • Loading branch information
tylercchase authored Jul 27, 2024
2 parents 61b7318 + 1dc3bea commit a08323e
Show file tree
Hide file tree
Showing 41 changed files with 621 additions and 229 deletions.
18 changes: 18 additions & 0 deletions godot/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "GDScript: Launch Project",
"type": "godot",
"request": "launch",
"project": "${workspaceFolder}",
"debug_collisions": false,
"debug_paths": false,
"debug_navigation": false,
"additional_options": ""
}
]
}
4 changes: 2 additions & 2 deletions godot/enemies/enemy_actions/attack_action.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ extends EnemyAction

@export var damage: int

func process_action(player: Node, _enemies: Array[Node], params: Dictionary, _base_enemy: EnemyNode) -> void:
func process_action(player: Node, _enemies: Array[EnemyNode], params: Dictionary, _base_enemy: EnemyNode) -> void:
if player:
if params.has('damage'):
player.damage(params['damage'])
else:
printerr('params missing damage value')
queue_free()
queue_free()
9 changes: 9 additions & 0 deletions godot/enemies/enemy_actions/defend_action.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
extends EnemyAction

@export var defense: int

func process_action(player: Node, _enemies: Array[EnemyNode], params: Dictionary, base_enemy: EnemyNode) -> void:
if params.has('min_value'):
print('adding defense')
base_enemy.enemy.stats.add_defense(params['min_value'])
queue_free()
6 changes: 6 additions & 0 deletions godot/enemies/enemy_actions/defend_action.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://bv0lkaw0ba2x6"]

[ext_resource type="Script" path="res://enemies/enemy_actions/defend_action.gd" id="1_x1yp3"]

[node name="DefendAction" type="Node2D"]
script = ExtResource("1_x1yp3")
18 changes: 15 additions & 3 deletions godot/enemies/godot_enemy.tres
Original file line number Diff line number Diff line change
@@ -1,21 +1,33 @@
[gd_resource type="Resource" script_class="Enemy" load_steps=7 format=3 uid="uid://s4mog50ms2x1"]
[gd_resource type="Resource" script_class="Enemy" load_steps=9 format=3 uid="uid://s4mog50ms2x1"]

[ext_resource type="Script" path="res://scenes/enemy/EnemyResource.gd" id="1_0o1tj"]
[ext_resource type="Script" path="res://scenes/enemy/EnemyActionEntry.gd" id="1_aahbp"]
[ext_resource type="PackedScene" uid="uid://bpjytsy4xgl5g" path="res://enemies/enemy_actions/attack_action.tscn" id="2_tudl2"]
[ext_resource type="PackedScene" uid="uid://bv0lkaw0ba2x6" path="res://enemies/enemy_actions/defend_action.tscn" id="3_32b6j"]
[ext_resource type="Script" path="res://scenes/Stats.gd" id="3_edr8k"]

[sub_resource type="Resource" id="Resource_fro0g"]
script = ExtResource("1_aahbp")
likelihood = 10
id = ""
id = "generic_attack"
followup = ""
scene = ExtResource("2_tudl2")
params = {
"damage": 5
}
intent = 0

[sub_resource type="Resource" id="Resource_w0tuc"]
script = ExtResource("1_aahbp")
likelihood = 0
id = "defend_action"
followup = ""
scene = ExtResource("3_32b6j")
params = {
"min_value": 3
}
intent = 1

[sub_resource type="Resource" id="Resource_uq4uh"]
script = ExtResource("3_edr8k")
max_health = 10
Expand All @@ -25,5 +37,5 @@ defense = 0
script = ExtResource("1_0o1tj")
name = "Godot Test Enemy"
sprite = "res://icon.svg"
actions = Array[ExtResource("1_aahbp")]([SubResource("Resource_fro0g")])
actions = Array[ExtResource("1_aahbp")]([SubResource("Resource_fro0g"), SubResource("Resource_w0tuc")])
stats = SubResource("Resource_uq4uh")
24 changes: 9 additions & 15 deletions godot/ingredient_actions/actions/attack_action.gd
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,15 @@ extends IngredientAction



func process_action(_player: Node, enemies: Array[Node], targeted_enemy: int) -> void:
var enemy: Node = enemies[targeted_enemy]
if enemy is EnemyNode:
var enemy_node: EnemyNode = enemy
var enemy_resource: Enemy = enemy_node.enemy
print('attacking for ' + str(attack_range[0]) + ' damage')
print('enemy health before: ' + str(enemy_resource.stats.current_health))
enemy_resource.stats.current_health -= attack_range[0]

enemy_node.current_health_label.text = str(enemy_resource.stats.current_health)
enemy_node.max_health_label.text = str(enemy_resource.stats.max_health)
var tween: Tween = enemy_node.create_tween()
tween.tween_property(enemy_node.health_bar, "value", enemy_resource.stats.current_health, 0.5)

print('enemy health after: ' + str(enemy_resource.stats.current_health))
func process_action(_player: Node, enemies: Array[EnemyNode], targeted_enemy: int) -> void:
if target == IngredientAction.TARGET.SINGLE:
var enemy: Node = enemies[targeted_enemy]
if enemy is EnemyNode:
var enemy_node: EnemyNode = enemy
var enemy_resource: Enemy = enemy_node.enemy
enemy_resource.stats.take_damage(randi_range(attack_range[0], attack_range[1]))

func _to_string() -> String:
if attack_range[0] == attack_range[1]:
return "Deal " + str(attack_range[0]) + " danage"
return "Deal " + str(attack_range[0]) + "-" + str(attack_range[1]) + " damage"
3 changes: 2 additions & 1 deletion godot/ingredient_actions/actions/defend_action.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ extends IngredientAction
@export var defense_value:int = 2


func process_action(_player: Node, _enemies: Array[Node], _targeted_enemy: int) -> void:
func process_action(_player: Node, _enemies: Array[EnemyNode], _targeted_enemy: int) -> void:
print('add ' + str(defense_value) + ' defense')
State.player_stats.add_defense(defense_value)


func _to_string() -> String:
Expand Down
2 changes: 1 addition & 1 deletion godot/ingredient_actions/ingredient_action.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ extends Resource

enum TARGET {SINGLE, DOUBLE, AOE}

func process_action(_player: Node, _enemies: Array[Node], _targeted_enemy: int) -> void:
func process_action(_player: Node, _enemies: Array[EnemyNode], _targeted_enemy: int) -> void:
pass

func _to_string() -> String:
Expand Down
Binary file added godot/music/potions-main-theme.ogg
Binary file not shown.
19 changes: 19 additions & 0 deletions godot/music/potions-main-theme.ogg.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[remap]

importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dn34lw724d2xn"
path="res://.godot/imported/potions-main-theme.ogg-d857c52a950a63c50c67885a226c2a36.oggvorbisstr"

[deps]

source_file="res://music/potions-main-theme.ogg"
dest_files=["res://.godot/imported/potions-main-theme.ogg-d857c52a950a63c50c67885a226c2a36.oggvorbisstr"]

[params]

loop=true
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
1 change: 1 addition & 0 deletions godot/project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ config/icon="res://icon.svg"

UserSettings="*res://settings/user_settings.gd"
State="*res://singletons/State.gd"
MusicPlayer="*res://scenes/music/music_player.tscn"

[debug]

Expand Down
27 changes: 26 additions & 1 deletion godot/scenes/Stats.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,30 @@ extends Resource

@export var max_health: int
var current_health: int
@export var defense: int
@export var defense: int = 0
var conditions: Array[String] # might not use yet

signal health_changed
signal defense_changed

func _init() -> void:
current_health = max_health

func take_damage(value: int) -> void:
if defense < value:
value -= defense
defense -= value
current_health -= value
current_health = clamp(current_health, 0 , max_health)
defense = clamp(defense, 0, INF)
health_changed.emit(current_health)
defense_changed.emit(defense)
else:
defense -= value
defense = clamp(defense, 0, INF)
defense_changed.emit(defense)

func add_defense(value: int) -> void:
defense += value
defense = clamp(defense, 0, INF)
defense_changed.emit(defense)
5 changes: 5 additions & 0 deletions godot/scenes/cauldron/cauldron_slot.gd
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,8 @@ var available: bool = true :
var ingredient: Ingredient
var parent: CauldronSlot
var block_rotation: float


func _notification(what:int)->void:
if what == Node.NOTIFICATION_DRAG_END:
modulate = Color.WHITE
7 changes: 4 additions & 3 deletions godot/scenes/cauldron/cauldron_slot.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(0, 0, 0, 1)
border_blend = true

[node name="CauldronSlot" type="PanelContainer"]
custom_minimum_size = Vector2(34, 34)
custom_minimum_size = Vector2(32, 32)
offset_left = -16.0
offset_top = -16.0
offset_right = 16.0
offset_bottom = 16.0
offset_right = 18.0
offset_bottom = 18.0
mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_3hkv6")
script = ExtResource("1_2myce")
Expand Down
98 changes: 70 additions & 28 deletions godot/scenes/combat_arena/combat_arena.gd
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,47 @@ extends Node2D
@onready var ingredient_tooltip: IngredientTooltip = %IngredientTooltip
@onready var end_turn_button: Button = %EndTurnButton
@onready var player_node: Player = %Player
@onready var position_anchor: Control = %PositionAnchor
@onready var position_anchor: CanvasLayer = %PositionAnchor


@export var combat_end_scene: PackedScene
@export var combat_lose_scene: PackedScene
@export var game_end_screen: PackedScene
@export var test_loot_table: LootTable

@export var enemy_spawns: Array[EnemySpawnPoint] = []
var enemy_nodes: Array[EnemyNode] = []

var currently_targeted_enemy: int

func _ready() -> void:
%BattleEndButton.pressed.connect(end_battle)
cauldron.toggle_tooltip.connect(_on_toggle_tooltip)
ingredient_pouch.toggle_tooltip.connect(_on_toggle_tooltip)
end_turn_button.pressed.connect(_on_end_turn_button_pressed)

State.player_stats.health_changed.connect(_on_player_health_changed)
if State.map_node_parameters.has('enemies'):
var enemies: Array[Enemy] = State.map_node_parameters['enemies']
if enemies.size() > 2:
printerr('Enemies list too long')
return

print(enemies)
for i in enemies.size():
var enemy_spawn_point: EnemySpawnPoint = enemy_spawns[i]
enemy_spawn_point.spawn_enemy(enemies[i].duplicate(true))
var enemy = enemy_spawn_point.get_enemy_node()
enemy.update_intent()
enemy_nodes.push_back(enemy)
enemy_spawn_point.pressed.connect(_on_spawn_point_pressed.bind(i))
else:
printerr('State did not pass enemies to node')
var enemy_spawn_point: EnemySpawnPoint = $EnemySpawnPoint
enemy_spawn_point.spawn_enemy(load("res://enemies/godot_enemy.tres")) # for now just spawn in an enemy manually, later have defined encounters that we load in
var enemy: EnemyNode = enemy_spawn_point.get_enemy_node()
enemy.update_intent()

var enemy_spawn_point: EnemySpawnPoint = $EnemySpawnPoint
enemy_spawn_point.spawn_enemy(load("res://enemies/godot_enemy.tres")) # for now just spawn in an enemy manually, later have defined encounters that we load in
var enemy: EnemyNode = enemy_spawn_point.get_enemy_node()
enemy.update_intent()
enemy_spawn_point.pressed.connect(_on_spawn_point_pressed.bind(0))
enemy_nodes.push_back(enemy)
for enemy in enemy_spawns:
enemy.set_selected_crosshair(false)



func _on_toggle_tooltip(ingredient: Ingredient, tooltip_position: Variant) -> void:
Expand All @@ -44,29 +59,56 @@ func _on_toggle_tooltip(ingredient: Ingredient, tooltip_position: Variant) -> vo

func _on_end_turn_button_pressed():
print('ending players turn')
var enemy_spawn_point: EnemySpawnPoint = $EnemySpawnPoint
var enemy: EnemyNode = enemy_spawn_point.get_enemy_node()
# var enemy_spawn_point: EnemySpawnPoint = $EnemySpawnPoint
# var enemy: EnemyNode = enemy_spawn_point.get_enemy_node()
for ingredient in cauldron.get_ingredients():
if ingredient.action:
ingredient.action.process_action(player_node, [enemy], 0)
ingredient.action.process_action(player_node, enemy_nodes, currently_targeted_enemy)
ingredient_pouch.add_blocks_to_trash(cauldron.get_ingredients())
cauldron.clear_board()




# again, should eventually take into account all enemies
var action_entry: EnemyActionEntry = enemy.get_action()
var action: EnemyAction = action_entry.scene.instantiate()
add_child(action)
action.process_action(player_node, [enemy], action_entry.params, enemy)
enemy.update_intent()
ingredient_pouch.clear_hand()
ingredient_pouch.draw_hand()
for enemy_spawn in get_alive_enemies():
# again, should eventually take into account all enemies
var enemy = enemy_spawn.get_enemy_node()
var action_entry: EnemyActionEntry = enemy.get_action()
var action: EnemyAction = action_entry.scene.instantiate()
add_child(action)
var alive_enemies : Array[EnemyNode] = []
alive_enemies.assign(get_alive_enemies().map(func (node): return node.get_enemy_node()))
action.process_action(player_node, alive_enemies , action_entry.params, enemy)
enemy.update_intent()
ingredient_pouch.clear_hand()
ingredient_pouch.draw_hand()
if get_alive_enemies().size() <= 0:
end_battle()

func end_battle():
var thing: CombatEndScene = combat_end_scene.instantiate()
position_anchor.add_child(thing)
thing.setup(test_loot_table)
if State.map_node_parameters.has('boss'):
var thing = game_end_screen.instantiate()
position_anchor.add_child(thing)
else:
var thing: CombatEndScene = combat_end_scene.instantiate()
position_anchor.add_child(thing)
thing.setup(test_loot_table)
process_mode = PROCESS_MODE_DISABLED # pause background since we're done with battle and don't want interactions to work there
# the anchor control node is setup to process always and isn't affected by this

func _on_player_health_changed(new_health):
if new_health <= 0:
var thing = combat_lose_scene.instantiate()
position_anchor.add_child(thing)
process_mode = PROCESS_MODE_DISABLED

func _on_spawn_point_pressed(index: int) -> void:
for enemy in enemy_spawns:
enemy.set_selected_crosshair(false)
enemy_spawns[index].set_selected_crosshair(true)
currently_targeted_enemy = index

func get_alive_enemies() -> Array[EnemySpawnPoint]:
print(enemy_spawns[0].enemy)
var temp = enemy_spawns.filter(func (spawn: EnemySpawnPoint): return spawn.enemy != null)
return temp.filter(func (spawn: EnemySpawnPoint): return spawn.enemy.stats.current_health > 0)

func get_first_alive_enemy() -> EnemySpawnPoint:
var temp = get_alive_enemies()
return temp[0]
Loading

0 comments on commit a08323e

Please sign in to comment.