2024-05-13 14:18:09 -04:00
|
|
|
class_name Data extends Node
|
2024-05-02 14:27:28 -04:00
|
|
|
|
|
|
|
enum Element{
|
|
|
|
NORMAL,
|
|
|
|
FIRE,
|
|
|
|
ICE,
|
|
|
|
POISON,
|
2024-05-28 22:07:10 -04:00
|
|
|
STONE,
|
|
|
|
HEALING
|
2024-05-02 14:27:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
enum Difficulty{
|
|
|
|
EASY,
|
|
|
|
NORMAL,
|
|
|
|
HARD,
|
|
|
|
GAMER
|
|
|
|
}
|
|
|
|
|
2024-05-09 22:21:58 -04:00
|
|
|
enum Location{
|
|
|
|
MAINMENU,
|
|
|
|
CREDITS,
|
|
|
|
TAVERN,
|
|
|
|
ARENA,
|
|
|
|
DEAD
|
|
|
|
}
|
|
|
|
|
2024-05-20 22:03:50 -04:00
|
|
|
enum Rarity{
|
|
|
|
COMMON,
|
|
|
|
RARE,
|
|
|
|
LEGENDARY,
|
2024-05-27 13:05:36 -04:00
|
|
|
GODLIKE
|
2024-05-20 22:03:50 -04:00
|
|
|
}
|
|
|
|
|
2024-05-27 19:54:22 -04:00
|
|
|
@onready var musicPlayer: MusicPlayer = $/root/Root/MusicPlayer
|
2024-05-30 15:56:16 -04:00
|
|
|
@onready var transitioner: SceneTransitioner = $/root/Root/SceneTransitioner
|
2024-05-28 22:07:10 -04:00
|
|
|
@onready var opponentBook: Spellbook = load("res://Resources/Spellbooks/wizardSpellbook.tres")
|
2024-05-29 16:13:26 -04:00
|
|
|
@onready var soundEffectScene: PackedScene = load("res://Scenes/soundEffectPlayer.tscn")
|
2024-05-27 19:54:22 -04:00
|
|
|
|
2024-05-30 15:56:16 -04:00
|
|
|
@export var forWeb: bool = true
|
2024-05-02 14:27:28 -04:00
|
|
|
@export var spellbook: Spellbook
|
|
|
|
@export var difficulty: Difficulty = Difficulty.NORMAL
|
2024-05-03 19:45:30 -04:00
|
|
|
@export var animations: Dictionary = {}
|
2024-05-07 21:43:09 -04:00
|
|
|
@export var player: Combatant
|
|
|
|
@export var opponent: Combatant
|
2024-05-09 22:21:58 -04:00
|
|
|
@export var loc: Location = Location.MAINMENU
|
2024-05-25 23:51:28 -04:00
|
|
|
@export var playing: bool = false
|
2024-05-27 13:05:36 -04:00
|
|
|
@export var lockedSpells: Array[Spell]
|
|
|
|
@export var unlockedSpells: Array[Spell]
|
|
|
|
@export var commonChance: int = 70
|
|
|
|
@export var rareChance: int = 24
|
|
|
|
@export var legendaryChance: int = 5
|
|
|
|
@export var godlikeChance: int = 1
|
2024-05-27 19:54:22 -04:00
|
|
|
@export var locations: Dictionary = {
|
|
|
|
Location.MAINMENU: "res://Scenes/UI/mainMenu.tscn",
|
|
|
|
Location.TAVERN: "res://Scenes/tavern.tscn",
|
|
|
|
Location.ARENA: "res://Scenes/arena.tscn"
|
|
|
|
}
|
2024-05-27 13:05:36 -04:00
|
|
|
|
2024-05-28 22:07:10 -04:00
|
|
|
func getSpellbook():
|
|
|
|
var spells: Array[Spell] = lockedSpells.duplicate()
|
|
|
|
spells.append_array(unlockedSpells)
|
|
|
|
var spellCount: int
|
|
|
|
var rarityChance: Dictionary
|
|
|
|
var rar: Rarity
|
|
|
|
var chosenSpells: Array[Spell] = []
|
|
|
|
match (difficulty):
|
|
|
|
Difficulty.EASY:
|
|
|
|
spellCount = 4
|
|
|
|
rarityChance = {
|
|
|
|
Rarity.COMMON: 85,
|
|
|
|
Rarity.RARE: 10,
|
|
|
|
Rarity.LEGENDARY: 5,
|
|
|
|
Rarity.GODLIKE: 0
|
|
|
|
}
|
|
|
|
Difficulty.NORMAL:
|
|
|
|
spellCount = 5
|
|
|
|
rarityChance = {
|
|
|
|
Rarity.COMMON: 65,
|
|
|
|
Rarity.RARE: 20,
|
|
|
|
Rarity.LEGENDARY: 14,
|
|
|
|
Rarity.GODLIKE: 1
|
|
|
|
}
|
|
|
|
Difficulty.HARD:
|
|
|
|
spellCount = 6
|
|
|
|
rarityChance = {
|
|
|
|
Rarity.COMMON: 50,
|
|
|
|
Rarity.RARE: 27,
|
|
|
|
Rarity.LEGENDARY: 22,
|
|
|
|
Rarity.GODLIKE: 1
|
|
|
|
}
|
|
|
|
Difficulty.GAMER:
|
|
|
|
spellCount = 6
|
|
|
|
rarityChance = {
|
|
|
|
Rarity.COMMON: 40,
|
|
|
|
Rarity.RARE: 30,
|
|
|
|
Rarity.LEGENDARY: 20,
|
|
|
|
Rarity.GODLIKE: 10
|
|
|
|
}
|
|
|
|
for i in range(spellCount):
|
|
|
|
var num: int = randi_range(0, 99)
|
|
|
|
if (num < rarityChance[Rarity.COMMON]):
|
|
|
|
rar = Rarity.COMMON
|
|
|
|
elif (num < rarityChance[Rarity.COMMON] + rarityChance[Rarity.RARE]):
|
|
|
|
rar = Rarity.RARE
|
|
|
|
elif (num < rarityChance[Rarity.COMMON] + rarityChance[Rarity.RARE] + rarityChance[Rarity.LEGENDARY]):
|
|
|
|
rar = Rarity.LEGENDARY
|
|
|
|
else:
|
|
|
|
rar = Rarity.GODLIKE
|
2024-05-29 16:13:26 -04:00
|
|
|
var options: Array[Spell] = spells.filter(func(spel): return spel.rarity == rar)
|
2024-05-28 22:07:10 -04:00
|
|
|
var count: int = 1
|
|
|
|
while (options.size() == 0):
|
|
|
|
rar = (int(rar) + 1) as Rarity
|
2024-05-29 20:50:12 -04:00
|
|
|
if (int(rar) >= 4): rar = 0 as Rarity
|
2024-05-28 22:07:10 -04:00
|
|
|
count += 1
|
|
|
|
if (count >= 4): return null
|
2024-05-29 16:13:26 -04:00
|
|
|
options = spells.filter(func(spel): return spel.rarity == rar)
|
2024-05-28 22:07:10 -04:00
|
|
|
var spell: Spell = options[randi_range(0, options.size() - 1)]
|
|
|
|
chosenSpells.append(spell)
|
|
|
|
spells.erase(spell)
|
|
|
|
opponentBook.spells = chosenSpells
|
|
|
|
|
2024-05-27 13:05:36 -04:00
|
|
|
func getNewSpell() -> Spell:
|
|
|
|
var num: int = randi_range(0, 99)
|
|
|
|
var rar: Rarity
|
|
|
|
if (num < commonChance):
|
|
|
|
rar = Rarity.COMMON
|
2024-05-27 19:54:22 -04:00
|
|
|
elif (num < rareChance + commonChance):
|
2024-05-27 13:05:36 -04:00
|
|
|
rar = Rarity.RARE
|
2024-05-27 19:54:22 -04:00
|
|
|
elif (num < legendaryChance + rareChance + commonChance):
|
2024-05-27 13:05:36 -04:00
|
|
|
rar = Rarity.LEGENDARY
|
|
|
|
else:
|
|
|
|
rar = Rarity.GODLIKE
|
|
|
|
var options: Array[Spell] = lockedSpells.filter(func(spel): return spel.rarity == rar)
|
|
|
|
var count: int = 1
|
|
|
|
while (options.size() == 0):
|
|
|
|
rar = (int(rar) + 1) as Rarity
|
2024-05-29 20:50:12 -04:00
|
|
|
if (int(rar) >= 4): rar = 0 as Rarity
|
2024-05-27 13:05:36 -04:00
|
|
|
count += 1
|
|
|
|
if (count >= 4): return null
|
2024-05-27 19:54:22 -04:00
|
|
|
options = lockedSpells.filter(func(spel): return spel.rarity == rar)
|
2024-05-27 13:05:36 -04:00
|
|
|
var spell: Spell = options[randi_range(0, options.size() - 1)]
|
|
|
|
lockedSpells.erase(spell)
|
|
|
|
unlockedSpells.append(spell)
|
|
|
|
return spell
|
2024-05-29 16:13:26 -04:00
|
|
|
|
|
|
|
func playSound(sound: AudioStream):
|
2024-05-29 20:50:12 -04:00
|
|
|
var soundPlayer: SoundEffectPlayer = soundEffectScene.instantiate()
|
|
|
|
soundPlayer.stream = sound
|
|
|
|
get_tree().root.add_child(soundPlayer)
|