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") @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) 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] = 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)] chosenSpells.append(spell) spells.erase(spell) 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