extends Interaction var fireScene = preload("res://Skills/Arson/Fire.tscn") var smokeScene = preload("res://Skills/Arson/Smoke.tscn") @export var ashItemClass:Resource @export var flammability = 0 @export var weight = 0 var ashDropLocation:Vector2 var rng = RandomNumberGenerator.new() var flintSoundPlayer var lastSoundIndex = -1 var flintSounds = [] func _ready(): add_action("Burn", burn) initialize_flint_sounds() func initialize_flint_sounds(): flintSoundPlayer = $FlintSounds flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint1.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint2.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint3.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint4.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint5.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint6.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint7.mp3")) flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint8.mp3")) func burn(): play_flint_sound() if "item" in get_parent(): flammability = get_parent().item.flammability weight = get_parent().item.weight var fireChance = LevelManager.get_skill("arson").get_ignition_chance_by_stats(flammability, weight) if rng.randf_range(0, 100) <= fireChance: light_up() get_tree().call_group("FlagManager", "Arsoned") elif fireChance >= 0.5: smoke() func play_flint_sound(): var newIndex = rng.randi_range(0, flintSounds.size() - 1) if newIndex == lastSoundIndex: newIndex = rng.randi_range(0, flintSounds.size() - 1) flintSoundPlayer.stream = flintSounds[newIndex] flintSoundPlayer.play() lastSoundIndex = newIndex func light_up(): GlobalEvents.itemBurnt.emit(get_parent().item) var newFire = fireScene.instantiate() newFire.set_item_burning(get_parent().item) AchievementManager.burn_achievement_checks(get_parent().item) var target_global_pos = get_parent().global_position + Vector2(0, 5) get_parent().get_parent().add_child(newFire) newFire.global_position = target_global_pos newFire.set_item_burning(get_parent().item) if get_parent() == GameVariables.player.currentInteractingGroundItem: GameVariables.player.change_state("Idle") get_parent().queue_free() func smoke(): var newSmoke = smokeScene.instantiate() newSmoke.position = position + Vector2(0, -20) newSmoke.emitting = true get_parent().add_child(newSmoke) func generate_ash(): if ashItemClass == null: var baseItem = get_parent().item var ash = AshGenerator.generate_ash(baseItem) get_parent().set_item(ash)