
- Finished up healing wave, wall of fire, and stone wall - Added system for spells playing sound effects - Fixed enemy spell randomization from getting duplicate entries
158 lines
4.0 KiB
GDScript
158 lines
4.0 KiB
GDScript
class_name Data extends Node
|
|
|
|
enum Element{
|
|
NORMAL,
|
|
FIRE,
|
|
ICE,
|
|
POISON,
|
|
STONE,
|
|
HEALING
|
|
}
|
|
|
|
enum Difficulty{
|
|
EASY,
|
|
NORMAL,
|
|
HARD,
|
|
GAMER
|
|
}
|
|
|
|
enum Location{
|
|
MAINMENU,
|
|
CREDITS,
|
|
TAVERN,
|
|
ARENA,
|
|
DEAD
|
|
}
|
|
|
|
enum Rarity{
|
|
COMMON,
|
|
RARE,
|
|
LEGENDARY,
|
|
GODLIKE
|
|
}
|
|
|
|
@onready var musicPlayer: MusicPlayer = $/root/Root/MusicPlayer
|
|
@onready var opponentBook: Spellbook = load("res://Resources/Spellbooks/wizardSpellbook.tres")
|
|
@onready var soundEffectScene: PackedScene = load("res://Scenes/soundEffectPlayer.tscn")
|
|
|
|
@export var spellbook: Spellbook
|
|
@export var difficulty: Difficulty = Difficulty.NORMAL
|
|
@export var animations: Dictionary = {}
|
|
@export var player: Combatant
|
|
@export var opponent: Combatant
|
|
@export var loc: Location = Location.MAINMENU
|
|
@export var playing: bool = false
|
|
@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
|
|
@export var locations: Dictionary = {
|
|
Location.MAINMENU: "res://Scenes/UI/mainMenu.tscn",
|
|
Location.CREDITS: "",
|
|
Location.TAVERN: "res://Scenes/tavern.tscn",
|
|
Location.ARENA: "res://Scenes/arena.tscn"
|
|
}
|
|
|
|
func getSpellbook():
|
|
var spells: Array[Spell] = lockedSpells.duplicate()
|
|
spells.append_array(unlockedSpells)
|
|
#print("Initial List")
|
|
#for spel: Spell in spells:
|
|
#print(spel.name)
|
|
#print()
|
|
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
|
|
var options: Array[Spell] = spells.filter(func(spel): return spel.rarity == rar)
|
|
var count: int = 1
|
|
while (options.size() == 0):
|
|
rar = (int(rar) + 1) as Rarity
|
|
if (int(rar) >= 4): rar = 0
|
|
count += 1
|
|
if (count >= 4): return null
|
|
options = spells.filter(func(spel): return spel.rarity == rar)
|
|
var spell: Spell = options[randi_range(0, options.size() - 1)]
|
|
chosenSpells.append(spell)
|
|
spells.erase(spell)
|
|
#print("Chosen spell: " + spell.name)
|
|
#print("List after " + str(i) + " choices")
|
|
#for spel: Spell in spells:
|
|
#print(spel.name)
|
|
#print()
|
|
opponentBook.spells = chosenSpells
|
|
|
|
func getNewSpell() -> Spell:
|
|
var num: int = randi_range(0, 99)
|
|
var rar: Rarity
|
|
if (num < commonChance):
|
|
rar = Rarity.COMMON
|
|
elif (num < rareChance + commonChance):
|
|
rar = Rarity.RARE
|
|
elif (num < legendaryChance + rareChance + commonChance):
|
|
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
|
|
if (int(rar) >= 4): rar = 0
|
|
count += 1
|
|
if (count >= 4): return null
|
|
options = lockedSpells.filter(func(spel): return spel.rarity == rar)
|
|
var spell: Spell = options[randi_range(0, options.size() - 1)]
|
|
lockedSpells.erase(spell)
|
|
unlockedSpells.append(spell)
|
|
return spell
|
|
|
|
func playSound(sound: AudioStream):
|
|
var player: SoundEffectPlayer = soundEffectScene.instantiate()
|
|
player.stream = sound
|
|
get_tree().root.add_child(player)
|