├── .gitattributes ├── .gitignore ├── 00_Globals ├── global_audio_manager.gd ├── global_audio_manager.gd.uid ├── global_effect_manager.gd ├── global_effect_manager.gd.uid ├── global_effects │ ├── damage_text.gd │ ├── damage_text.gd.uid │ └── damage_text.tscn ├── global_level_manager.gd ├── global_level_manager.gd.uid ├── global_player_manager.gd ├── global_player_manager.gd.uid ├── global_save_manager.gd └── global_save_manager.gd.uid ├── Enemies ├── Scripts │ ├── drop_data.gd │ ├── drop_data.gd.uid │ ├── enemy.gd │ ├── enemy.gd.uid │ ├── enemy_state_machine.gd │ ├── enemy_state_machine.gd.uid │ ├── pathfinder.gd │ ├── pathfinder.gd.uid │ ├── states │ │ ├── enemy_state.gd │ │ ├── enemy_state.gd.uid │ │ ├── enemy_state_chase.gd │ │ ├── enemy_state_chase.gd.uid │ │ ├── enemy_state_destroy.gd │ │ ├── enemy_state_destroy.gd.uid │ │ ├── enemy_state_idle.gd │ │ ├── enemy_state_idle.gd.uid │ │ ├── enemy_state_stun.gd │ │ ├── enemy_state_stun.gd.uid │ │ ├── enemy_state_wander.gd │ │ └── enemy_state_wander.gd.uid │ ├── vision_area.gd │ └── vision_area.gd.uid ├── Slime │ ├── DestroySmoke.png │ ├── DestroySmoke.png.import │ ├── Slime.png │ ├── Slime.png.import │ ├── hit_00.wav │ ├── hit_00.wav.import │ ├── hit_01.wav │ ├── hit_01.wav.import │ └── slime.tscn ├── goblin │ ├── goblin.png │ ├── goblin.png.import │ └── goblin.tscn ├── pathfinder.tscn └── vision_area.tscn ├── GUI ├── dialog_system │ ├── audio │ │ ├── voice_blip.wav │ │ └── voice_blip.wav.import │ ├── dialog_choice_theme.tres │ ├── dialog_system.tscn │ ├── icons │ │ ├── answer_bubble.svg │ │ ├── answer_bubble.svg.import │ │ ├── chat_bubble.svg │ │ ├── chat_bubble.svg.import │ │ ├── chat_bubbles.svg │ │ ├── chat_bubbles.svg.import │ │ ├── picture_bubble.svg │ │ ├── picture_bubble.svg.import │ │ ├── question_bubble.svg │ │ ├── question_bubble.svg.import │ │ ├── star_bubble.svg │ │ ├── star_bubble.svg.import │ │ ├── text_bubble.svg │ │ └── text_bubble.svg.import │ ├── scripts │ │ ├── dialog_portrait.gd │ │ ├── dialog_portrait.gd.uid │ │ ├── dialog_system.gd │ │ └── dialog_system.gd.uid │ └── sprites │ │ ├── text-bubble.png │ │ └── text-bubble.png.import ├── fonts │ ├── Abaddon Bold.ttf │ ├── Abaddon Bold.ttf.import │ ├── Abaddon Light.ttf │ ├── Abaddon Light.ttf.import │ ├── m5x7.ttf │ └── m5x7.ttf.import ├── pause_menu │ ├── inventory │ │ ├── inventory_slot.tscn │ │ ├── player_inventory.tres │ │ └── scripts │ │ │ ├── inventory_data.gd │ │ │ ├── inventory_data.gd.uid │ │ │ ├── inventory_slot_ui.gd │ │ │ ├── inventory_slot_ui.gd.uid │ │ │ ├── inventory_ui.gd │ │ │ ├── inventory_ui.gd.uid │ │ │ ├── slot_data.gd │ │ │ └── slot_data.gd.uid │ ├── pause_menu.gd │ ├── pause_menu.gd.uid │ ├── pause_menu.tscn │ ├── quests │ │ ├── checkbox.png │ │ ├── checkbox.png.import │ │ ├── quest_item.gd │ │ ├── quest_item.gd.uid │ │ ├── quest_item.tscn │ │ ├── quest_step_item.gd │ │ ├── quest_step_item.gd.uid │ │ └── quest_step_item.tscn │ ├── quests_ui.gd │ ├── quests_ui.gd.uid │ └── stats │ │ ├── stats.gd │ │ ├── stats.gd.uid │ │ └── stats.tscn ├── player_hud │ ├── boss-hp.png │ ├── boss-hp.png.import │ ├── gui-health.png │ ├── gui-health.png.import │ ├── heart_gui.gd │ ├── heart_gui.gd.uid │ ├── heart_gui.tscn │ ├── notification.wav │ ├── notification.wav.import │ ├── notifications.gd │ ├── notifications.gd.uid │ ├── panel_notification.png │ ├── panel_notification.png.import │ ├── player_hud.gd │ ├── player_hud.gd.uid │ └── player_hud.tscn ├── scene_transition │ ├── scene_transition.gd │ ├── scene_transition.gd.uid │ └── scene_transition.tscn └── shop_menu │ ├── audio │ ├── error.wav │ ├── error.wav.import │ ├── open_shop.wav │ ├── open_shop.wav.import │ ├── purchase.wav │ └── purchase.wav.import │ ├── shop_item_button.gd │ ├── shop_item_button.gd.uid │ ├── shop_item_button.tscn │ ├── shop_menu.gd │ ├── shop_menu.gd.uid │ └── shop_menu.tscn ├── GeneralNodes ├── EnemyCounter │ ├── enemy_counter.gd │ ├── enemy_counter.gd.uid │ └── enemy_counter.tscn ├── HitBox │ ├── hit_box.gd │ ├── hit_box.gd.uid │ └── hit_box.tscn ├── HurtBox │ ├── hurt_box.gd │ ├── hurt_box.gd.uid │ └── hurt_box.tscn ├── ItemDropper │ ├── dungeon_discovery.wav │ ├── dungeon_discovery.wav.import │ ├── item_dropper.gd │ ├── item_dropper.gd.uid │ └── item_dropper.tscn ├── ItemMagnet │ ├── item_magnet.gd │ ├── item_magnet.gd.uid │ └── item_magnet.tscn ├── PersistentDataHandler │ ├── persistent-data-handler.gd │ ├── persistent-data-handler.gd.uid │ └── persistent-data-handler.tscn └── footstep_audio_2d │ ├── footstep_01.wav │ ├── footstep_01.wav.import │ ├── footstep_02.wav │ ├── footstep_02.wav.import │ ├── footstep_03.wav │ ├── footstep_03.wav.import │ ├── footstep_audio_2d.gd │ ├── footstep_audio_2d.gd.uid │ └── footstep_audio_2d.tscn ├── Interactables ├── TreasureChest │ ├── treasure-chest.gd │ ├── treasure-chest.gd.uid │ ├── treasure-chest.png │ ├── treasure-chest.png.import │ ├── treasure-chest.tscn │ ├── treasure-open.wav │ └── treasure-open.wav.import ├── dialog │ ├── dialog_interaction.tscn │ ├── scripts │ │ ├── dialog_branch.gd │ │ ├── dialog_branch.gd.uid │ │ ├── dialog_choice.gd │ │ ├── dialog_choice.gd.uid │ │ ├── dialog_interaction.gd │ │ ├── dialog_interaction.gd.uid │ │ ├── dialog_item.gd │ │ ├── dialog_item.gd.uid │ │ ├── dialog_text.gd │ │ └── dialog_text.gd.uid │ └── sprites │ │ ├── dialog_interactable.png │ │ └── dialog_interactable.png.import ├── dungeon │ ├── barred_door.tscn │ ├── bars_open.wav │ ├── bars_open.wav.import │ ├── dungeon_props.png │ ├── dungeon_props.png.import │ ├── lever-01.wav │ ├── lever-01.wav.import │ ├── lever-02.wav │ ├── lever-02.wav.import │ ├── locked_door.tscn │ ├── locked_door.wav │ ├── locked_door.wav.import │ ├── pressure_plate.tscn │ ├── push_stone.wav │ ├── push_stone.wav.import │ ├── pushable_statue.tscn │ ├── scripts │ │ ├── barred_door.gd │ │ ├── barred_door.gd.uid │ │ ├── locked_door.gd │ │ ├── locked_door.gd.uid │ │ ├── pressure_plate.gd │ │ ├── pressure_plate.gd.uid │ │ ├── pushable_statue.gd │ │ └── pushable_statue.gd.uid │ ├── unlock_door.wav │ └── unlock_door.wav.import ├── shopkeeper │ ├── shopkeeper.gd │ ├── shopkeeper.gd.uid │ └── shopkeeper.tscn └── throwable │ ├── throwable.gd │ ├── throwable.gd.uid │ └── throwable.tscn ├── Items ├── a_ninja_suit.tres ├── a_tunic.tres ├── apple.tres ├── gem.tres ├── item_effects │ ├── hp-up.wav │ ├── hp-up.wav.import │ ├── item_effect.gd │ ├── item_effect.gd.uid │ ├── item_effect_heal.gd │ └── item_effect_heal.gd.uid ├── item_pickup │ ├── item_pickup.gd │ ├── item_pickup.gd.uid │ ├── item_pickup.tscn │ ├── item_pickup.wav │ └── item_pickup.wav.import ├── key_dungeon.tres ├── magical_flute.tres ├── potion.tres ├── scripts │ ├── equipable_item_data.gd │ ├── equipable_item_data.gd.uid │ ├── equipable_item_modifier.gd │ ├── equipable_item_modifier.gd.uid │ ├── item_data.gd │ └── item_data.gd.uid ├── sprites │ ├── flute.png │ ├── flute.png.import │ ├── gear.png │ ├── gear.png.import │ ├── items.png │ └── items.png.import ├── stone.tres ├── w_iron_sword.tres └── w_katana.tres ├── LICENSE ├── Levels ├── Area01 │ ├── 01.tscn │ ├── 02.tscn │ ├── 02_shop.tscn │ └── 03.tscn ├── Dungeon01 │ ├── 01.tscn │ ├── 02.tscn │ ├── 03.tscn │ ├── 04.tscn │ └── dark_wizard │ │ ├── audio │ │ ├── boss_beam.wav │ │ ├── boss_beam.wav.import │ │ ├── boss_destroy.wav │ │ ├── boss_destroy.wav.import │ │ ├── boss_fireball.wav │ │ ├── boss_fireball.wav.import │ │ ├── boss_fireball_hit.wav │ │ ├── boss_fireball_hit.wav.import │ │ ├── boss_hurt.wav │ │ └── boss_hurt.wav.import │ │ ├── energy_beam.tscn │ │ ├── energy_explosion.tscn │ │ ├── energy_orb.tscn │ │ ├── script │ │ ├── beam_attack.gd │ │ ├── beam_attack.gd.uid │ │ ├── dark_wizard_boss.gd │ │ ├── dark_wizard_boss.gd.uid │ │ ├── energy_beam_sprite.gd │ │ ├── energy_beam_sprite.gd.uid │ │ ├── energy_orb.gd │ │ └── energy_orb.gd.uid │ │ └── sprites │ │ ├── boss-cloak.png │ │ ├── boss-cloak.png.import │ │ ├── boss-hand.png │ │ ├── boss-hand.png.import │ │ ├── energy-beam-large.png │ │ ├── energy-beam-large.png.import │ │ ├── energy-beam.png │ │ ├── energy-beam.png.import │ │ ├── energy-explosion.png │ │ └── energy-explosion.png.import ├── level_transition.tscn ├── level_transition_interact.tscn ├── music │ ├── example_music_01.ogg │ ├── example_music_01.ogg.import │ ├── example_music_02.ogg │ ├── example_music_02.ogg.import │ ├── example_music_03.ogg │ └── example_music_03.ogg.import ├── player_spawn.tscn ├── playground.tscn └── scripts │ ├── level.gd │ ├── level.gd.uid │ ├── level_transition.gd │ ├── level_transition.gd.uid │ ├── level_transition_interact.gd │ ├── level_transition_interact.gd.uid │ ├── player_spawn.gd │ └── player_spawn.gd.uid ├── Player ├── Sprites │ ├── AttackSprite01.png │ ├── AttackSprite01.png.import │ ├── ExamplePlayerSprite.png.import │ ├── PlayerSprite02.png.import │ ├── Shadow.png │ ├── Shadow.png.import │ ├── boomerang.png │ ├── boomerang.png.import │ ├── player_sprite.png │ ├── player_sprite.png.import │ ├── player_sprite_ninja_suit.png │ ├── player_sprite_ninja_suit.png.import │ ├── player_sprite_sword.png │ ├── player_sprite_sword.png.import │ ├── player_sprite_sword_katana.png │ ├── player_sprite_sword_katana.png.import │ ├── spin_effect.png │ └── spin_effect.png.import ├── audio │ ├── SwordSwoosh.wav │ ├── SwordSwoosh.wav.import │ ├── boomerang.wav │ ├── boomerang.wav.import │ ├── catch.wav │ ├── catch.wav.import │ ├── charged.wav │ ├── charged.wav.import │ ├── exhausted.wav │ ├── exhausted.wav.import │ ├── hit_player.wav │ ├── hit_player.wav.import │ ├── hm_.wav │ ├── hm_.wav.import │ ├── hmm.wav │ ├── hmm.wav.import │ ├── huwh.wav │ ├── huwh.wav.import │ ├── hwaah.wav │ ├── hwaah.wav.import │ ├── hyah.wav │ ├── hyah.wav.import │ ├── level_up_jingle.wav │ ├── level_up_jingle.wav.import │ ├── spin-attack.wav │ ├── spin-attack.wav.import │ ├── throw.wav │ └── throw.wav.import ├── boomerang.tscn ├── pla660.tmp ├── player.tscn └── scripts │ ├── abilities │ ├── abilities.gd │ ├── abilities.gd.uid │ ├── boomerang.gd │ └── boomerang.gd.uid │ ├── player.gd │ ├── player.gd.uid │ ├── player_camera.gd │ ├── player_camera.gd.uid │ ├── player_interactions_host.gd │ ├── player_interactions_host.gd.uid │ ├── player_sprite.gd │ ├── player_sprite.gd.uid │ ├── player_state_machine.gd │ ├── player_state_machine.gd.uid │ ├── push_area.gd │ ├── push_area.gd.uid │ └── states │ ├── state.gd │ ├── state.gd.uid │ ├── state_attack.gd │ ├── state_attack.gd.uid │ ├── state_carry.gd │ ├── state_carry.gd.uid │ ├── state_charge_attack.gd │ ├── state_charge_attack.gd.uid │ ├── state_dash.gd │ ├── state_dash.gd.uid │ ├── state_death.gd │ ├── state_death.gd.uid │ ├── state_idle.gd │ ├── state_idle.gd.uid │ ├── state_lift.gd │ ├── state_lift.gd.uid │ ├── state_stun.gd │ ├── state_stun.gd.uid │ ├── state_walk.gd │ └── state_walk.gd.uid ├── Props ├── Plants │ ├── plant.gd │ ├── plant.gd.uid │ └── plant.tscn ├── Sprites │ ├── Props.png │ └── Props.png.import ├── pot │ ├── pot.tscn │ ├── pot_destroy.wav │ └── pot_destroy.wav.import └── torches │ ├── torch.png │ ├── torch.png.import │ ├── torch_dungeon.tscn │ ├── torch_light_flicker.gd │ └── torch_light_flicker.gd.uid ├── README.md ├── Tile Maps ├── Sprites │ ├── Grass-01.png │ ├── Grass-01.png.import │ ├── dungeon.png │ ├── dungeon.png.import │ ├── dungeon_entrance.png │ ├── dungeon_entrance.png.import │ ├── shop.png │ └── shop.png.import ├── dungeon_tiles_01.tscn ├── grass-tiles-01.tscn ├── level_tile_map_layer.gd ├── level_tile_map_layer.gd.uid └── shop_tilemap_layer.tscn ├── aarpg-tutorial-icon.png ├── aarpg-tutorial-icon.png.import ├── addons └── michael_games_editor_plugins │ ├── assets │ ├── cursor.png │ ├── cursor.png.import │ ├── fonts │ │ ├── LibreBaskerville-Bold.ttf │ │ ├── LibreBaskerville-Bold.ttf.import │ │ ├── LibreBaskerville-Italic.ttf │ │ ├── LibreBaskerville-Italic.ttf.import │ │ ├── LibreBaskerville-Regular.ttf │ │ ├── LibreBaskerville-Regular.ttf.import │ │ ├── Oswald-VariableFont_wght.ttf │ │ ├── Oswald-VariableFont_wght.ttf.import │ │ ├── m6x11.ttf │ │ ├── m6x11.ttf.import │ │ ├── m6x11plus.ttf │ │ └── m6x11plus.ttf.import │ ├── triangle.png │ └── triangle.png.import │ ├── juice_my_editor.gd │ ├── juice_my_editor.gd.uid │ ├── juice_my_editor.tscn │ ├── juice_my_editor_node.gd │ ├── juice_my_editor_node.gd.uid │ ├── juice_notifs.gd │ ├── juice_notifs.gd.uid │ ├── juice_notifs.tscn │ ├── plugin.cfg │ ├── shortcut_label.gd │ ├── shortcut_label.gd.uid │ ├── shortcut_label.tscn │ ├── stream_image_backdrop.gd │ ├── stream_image_backdrop.gd.uid │ └── stream_image_backdrop.tscn ├── blackboard.tscn ├── default_bus_layout.tres ├── icon.svg ├── icon.svg.import ├── notes.txt ├── npc ├── 00_npcs │ ├── 00_hero.tres │ ├── npc_01.tres │ ├── npc_02.tres │ └── shopkeeper.tres ├── icons │ ├── npc.svg │ ├── npc.svg.import │ ├── npc_behavior.svg │ └── npc_behavior.svg.import ├── npc.tscn ├── npc_behavior_patrol.tscn ├── npc_behavior_wander.tscn ├── patrol_location.tscn ├── scripts │ ├── npc.gd │ ├── npc.gd.uid │ ├── npc_behavior.gd │ ├── npc_behavior.gd.uid │ ├── npc_behavior_patrol.gd │ ├── npc_behavior_patrol.gd.uid │ ├── npc_behavior_wander.gd │ ├── npc_behavior_wander.gd.uid │ ├── npc_resource.gd │ ├── npc_resource.gd.uid │ ├── patrol_location.gd │ └── patrol_location.gd.uid └── sprites │ ├── npc_sprite.png │ ├── npc_sprite.png.import │ ├── npc_sprite_02.png │ ├── npc_sprite_02.png.import │ ├── portraits │ ├── hero_portrait.png │ ├── hero_portrait.png.import │ ├── npc_portrait_01.png │ ├── npc_portrait_01.png.import │ ├── npc_portrait_02.png │ ├── npc_portrait_02.png.import │ ├── portrait_placeholder.png │ └── portrait_placeholder.png.import │ ├── shopkeeper.png │ └── shopkeeper.png.import ├── project.godot ├── quests ├── long_quest.tres ├── recover_lost_flute.tres ├── scripts │ ├── global_quest_manager.gd │ ├── global_quest_manager.gd.uid │ ├── quest_resource.gd │ ├── quest_resource.gd.uid │ ├── quest_reward_item.gd │ └── quest_reward_item.gd.uid ├── short_quest.tres └── utility_nodes │ ├── icons │ ├── quest_advance.png │ ├── quest_advance.png.import │ ├── quest_switch.png │ └── quest_switch.png.import │ ├── quest_activated_switch.gd │ ├── quest_activated_switch.gd.uid │ ├── quest_activated_switch.tscn │ ├── quest_advance_trigger.gd │ ├── quest_advance_trigger.gd.uid │ ├── quest_advance_trigger.tscn │ ├── quest_node.gd │ └── quest_node.gd.uid ├── shaders and materials └── light_material.tres └── title_scene ├── audio ├── MichaelGamesJingle.wav ├── MichaelGamesJingle.wav.import ├── menu_focus.wav ├── menu_focus.wav.import ├── menu_select.wav ├── menu_select.wav.import ├── waves.mp3 └── waves.mp3.import ├── splash_scene.tscn ├── sprites ├── Michael Games.png ├── Michael Games.png.import ├── title.png └── title.png.import ├── title_scene.gd ├── title_scene.gd.uid └── title_scene.tscn /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | 4 | # Godot-specific ignores 5 | .import/ 6 | export.cfg 7 | export_presets.cfg 8 | 9 | # Imported translations (automatically generated from CSV files) 10 | *.translation 11 | 12 | # Mono-specific ignores 13 | .mono/ 14 | data_*/ 15 | mono_crash.*.json 16 | -------------------------------------------------------------------------------- /00_Globals/global_audio_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bvcmk5wnpw54f 2 | -------------------------------------------------------------------------------- /00_Globals/global_effect_manager.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | const DAMAGE_TEXT = preload("res://00_Globals/global_effects/damage_text.tscn") 4 | 5 | 6 | 7 | func damage_text( _damage : int, _pos : Vector2 ) -> void: 8 | var _t : DamageText = DAMAGE_TEXT.instantiate() 9 | add_child( _t ) 10 | _t.start( str( _damage ), _pos ) 11 | pass 12 | -------------------------------------------------------------------------------- /00_Globals/global_effect_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://8d8a5polafyq 2 | -------------------------------------------------------------------------------- /00_Globals/global_effects/damage_text.gd: -------------------------------------------------------------------------------- 1 | class_name DamageText extends Node2D 2 | 3 | var travel_distance : Vector2 = Vector2( 10, -20 ) 4 | 5 | 6 | func start( _text : String, _pos : Vector2 ) -> void: 7 | $Label.text = _text 8 | global_position = _pos 9 | 10 | # animate the node 11 | travel_distance.y *= randf_range( 0.5, 1.5 ) 12 | travel_distance.x *= randf_range( -1.5, 1.5 ) 13 | 14 | var duration : float = randf_range( 0.75, 1.25 ) 15 | 16 | var tween : Tween = create_tween().set_parallel( true ) 17 | tween.set_ease( Tween.EASE_OUT ) 18 | tween.set_trans( Tween.TRANS_QUAD ) 19 | # tween position 20 | tween.tween_property( self, "global_position", global_position + travel_distance, duration ) 21 | # tween modulate 22 | tween.tween_property( self, "modulate", Color(1, 1, 1, 0), duration ).set_ease( Tween.EASE_IN ) 23 | # free the node 24 | tween.chain().tween_callback( self.queue_free ) 25 | pass 26 | -------------------------------------------------------------------------------- /00_Globals/global_effects/damage_text.gd.uid: -------------------------------------------------------------------------------- 1 | uid://sp734jlfvu7c 2 | -------------------------------------------------------------------------------- /00_Globals/global_effects/damage_text.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://vqmsq1f8nkry"] 2 | 3 | [ext_resource type="Script" uid="uid://sp734jlfvu7c" path="res://00_Globals/global_effects/damage_text.gd" id="1_fy2ui"] 4 | [ext_resource type="FontFile" uid="uid://cnrqk38ddqqwy" path="res://GUI/fonts/m5x7.ttf" id="1_un2ol"] 5 | 6 | [node name="DamageText" type="Node2D"] 7 | z_index = 10 8 | script = ExtResource("1_fy2ui") 9 | 10 | [node name="Label" type="Label" parent="."] 11 | offset_left = -47.0 12 | offset_top = -12.0 13 | offset_right = 47.0 14 | offset_bottom = 6.0 15 | theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) 16 | theme_override_constants/shadow_offset_x = 0 17 | theme_override_fonts/font = ExtResource("1_un2ol") 18 | text = "99" 19 | horizontal_alignment = 1 20 | -------------------------------------------------------------------------------- /00_Globals/global_level_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bw2sohyjqr2s3 2 | -------------------------------------------------------------------------------- /00_Globals/global_player_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bsmy6mmq5q2w2 2 | -------------------------------------------------------------------------------- /00_Globals/global_save_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c0yaiy0lt6jhm 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/drop_data.gd: -------------------------------------------------------------------------------- 1 | class_name DropData extends Resource 2 | 3 | @export var item : ItemData 4 | @export_range( 0, 100, 1, "suffix:%" ) var probability : float = 100 5 | @export_range( 1, 10, 1, "suffix:items" ) var min_amount : int = 1 6 | @export_range( 1, 10, 1, "suffix:items" ) var max_amount : int = 1 7 | 8 | func get_drop_count() -> int: 9 | if randf_range( 0, 100 ) >= probability: 10 | return 0 11 | return randi_range( min_amount, max_amount ) 12 | -------------------------------------------------------------------------------- /Enemies/Scripts/drop_data.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dyht4twncfbe 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/enemy.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bm01dty876pk3 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/enemy_state_machine.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ktscfjqbpjb 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/pathfinder.gd.uid: -------------------------------------------------------------------------------- 1 | uid://brfcetstaofmn 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state.gd: -------------------------------------------------------------------------------- 1 | class_name EnemyState extends Node 2 | 3 | 4 | ## Stores a reference to the enemy that this state belongs to 5 | var enemy : Enemy 6 | var state_machine : EnemyStateMachine 7 | 8 | 9 | ## What happens when we initialize this state? 10 | func init() -> void: 11 | pass 12 | 13 | 14 | ## What happens when the enemy enters this State? 15 | func enter() -> void: 16 | pass 17 | 18 | 19 | ## What happens when the enemy exits this State? 20 | func exit() -> void: 21 | pass 22 | 23 | 24 | ## What happens during the _process update in this State? 25 | func process( _delta : float ) -> EnemyState: 26 | return null 27 | 28 | 29 | ## What happens during the _physics_process update in this State? 30 | func physics( _delta : float ) -> EnemyState: 31 | return null 32 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state.gd.uid: -------------------------------------------------------------------------------- 1 | uid://rdkpwedh8htn 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state_chase.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c3achloxgf8vs 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state_destroy.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dn05nlarga6ay 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state_idle.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ky7luyeckccy 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state_stun.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dggp8jtenlplh 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/states/enemy_state_wander.gd.uid: -------------------------------------------------------------------------------- 1 | uid://p4obixqhn4pp 2 | -------------------------------------------------------------------------------- /Enemies/Scripts/vision_area.gd: -------------------------------------------------------------------------------- 1 | class_name VisionArea extends Area2D 2 | 3 | signal player_entered() 4 | signal player_exited() 5 | 6 | 7 | func _ready() -> void: 8 | body_entered.connect( _on_body_enter ) 9 | body_exited.connect( _on_body_exit ) 10 | 11 | var p = get_parent() 12 | if p is Enemy: 13 | p.direction_changed.connect( _on_direction_change ) 14 | 15 | 16 | 17 | func _on_body_enter( _b : Node2D ) -> void: 18 | if _b is Player: 19 | player_entered.emit() 20 | pass 21 | 22 | 23 | func _on_body_exit( _b : Node2D ) -> void: 24 | if _b is Player: 25 | player_exited.emit() 26 | pass 27 | 28 | 29 | func _on_direction_change( new_direction : Vector2 ) -> void: 30 | match new_direction: 31 | Vector2.DOWN: 32 | rotation_degrees = 0 33 | Vector2.UP: 34 | rotation_degrees = 180 35 | Vector2.LEFT: 36 | rotation_degrees = 90 37 | Vector2.RIGHT: 38 | rotation_degrees = -90 39 | _: 40 | rotation_degrees = 0 41 | pass 42 | -------------------------------------------------------------------------------- /Enemies/Scripts/vision_area.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b1yt7elyow30y 2 | -------------------------------------------------------------------------------- /Enemies/Slime/DestroySmoke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Enemies/Slime/DestroySmoke.png -------------------------------------------------------------------------------- /Enemies/Slime/DestroySmoke.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://vs661oue3c1g" 6 | path="res://.godot/imported/DestroySmoke.png-4c509d84002ea89209f31fc8182dda06.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Enemies/Slime/DestroySmoke.png" 14 | dest_files=["res://.godot/imported/DestroySmoke.png-4c509d84002ea89209f31fc8182dda06.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Enemies/Slime/Slime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Enemies/Slime/Slime.png -------------------------------------------------------------------------------- /Enemies/Slime/Slime.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dfb1ouyn4kesq" 6 | path="res://.godot/imported/Slime.png-ba9221fbb370bff3f2793d278aef25c1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Enemies/Slime/Slime.png" 14 | dest_files=["res://.godot/imported/Slime.png-ba9221fbb370bff3f2793d278aef25c1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Enemies/Slime/hit_00.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Enemies/Slime/hit_00.wav -------------------------------------------------------------------------------- /Enemies/Slime/hit_00.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://jq0tgmmg5c80" 6 | path="res://.godot/imported/hit_00.wav-ac938bce4917c9974dd7d32729daca6e.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/Slime/hit_00.wav" 11 | dest_files=["res://.godot/imported/hit_00.wav-ac938bce4917c9974dd7d32729daca6e.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/Slime/hit_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Enemies/Slime/hit_01.wav -------------------------------------------------------------------------------- /Enemies/Slime/hit_01.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://d1jsxmech6qvu" 6 | path="res://.godot/imported/hit_01.wav-24213b87f1218cbd8d164ef6a516b9ef.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Enemies/Slime/hit_01.wav" 11 | dest_files=["res://.godot/imported/hit_01.wav-24213b87f1218cbd8d164ef6a516b9ef.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Enemies/goblin/goblin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Enemies/goblin/goblin.png -------------------------------------------------------------------------------- /Enemies/goblin/goblin.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://duuvsin2bmq41" 6 | path="res://.godot/imported/goblin.png-677b2e1d480f99d1237d0aa04e1be031.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Enemies/goblin/goblin.png" 14 | dest_files=["res://.godot/imported/goblin.png-677b2e1d480f99d1237d0aa04e1be031.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Enemies/vision_area.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bmxmydv0m20du"] 2 | 3 | [ext_resource type="Script" uid="uid://b1yt7elyow30y" path="res://Enemies/Scripts/vision_area.gd" id="1_y7im5"] 4 | 5 | [node name="VisionArea" type="Area2D"] 6 | collision_layer = 0 7 | monitorable = false 8 | script = ExtResource("1_y7im5") 9 | -------------------------------------------------------------------------------- /GUI/dialog_system/audio/voice_blip.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/dialog_system/audio/voice_blip.wav -------------------------------------------------------------------------------- /GUI/dialog_system/audio/voice_blip.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dhn5vek5sbvej" 6 | path="res://.godot/imported/voice_blip.wav-70cd0fd71976225666f8902fa9275ebc.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/dialog_system/audio/voice_blip.wav" 11 | dest_files=["res://.godot/imported/voice_blip.wav-70cd0fd71976225666f8902fa9275ebc.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/answer_bubble.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://gpgvxpfexuju" 6 | path="res://.godot/imported/answer_bubble.svg-c720a4e4551c33ba93094a363768a929.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/answer_bubble.svg" 14 | dest_files=["res://.godot/imported/answer_bubble.svg-c720a4e4551c33ba93094a363768a929.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/chat_bubble.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/chat_bubble.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://7a5hgopkr12d" 6 | path="res://.godot/imported/chat_bubble.svg-a04a3b1a8c4995eaca621c1d99df9c64.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/chat_bubble.svg" 14 | dest_files=["res://.godot/imported/chat_bubble.svg-a04a3b1a8c4995eaca621c1d99df9c64.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/chat_bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/chat_bubbles.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://csypwud65s782" 6 | path="res://.godot/imported/chat_bubbles.svg-970dd6efd288612ae07022e08879202f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/chat_bubbles.svg" 14 | dest_files=["res://.godot/imported/chat_bubbles.svg-970dd6efd288612ae07022e08879202f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/picture_bubble.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ci8r8hr4esnlt" 6 | path="res://.godot/imported/picture_bubble.svg-ad3d88c49fdb3ebc770ec1ac9cafa293.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/picture_bubble.svg" 14 | dest_files=["res://.godot/imported/picture_bubble.svg-ad3d88c49fdb3ebc770ec1ac9cafa293.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/question_bubble.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b40kvpfg6g4ue" 6 | path="res://.godot/imported/question_bubble.svg-4277174bd2da9a121ee6c0c3ec1b6780.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/question_bubble.svg" 14 | dest_files=["res://.godot/imported/question_bubble.svg-4277174bd2da9a121ee6c0c3ec1b6780.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/star_bubble.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/star_bubble.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dh43kuqlgtty1" 6 | path="res://.godot/imported/star_bubble.svg-6a384597ce841a53a597cf73df7ae811.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/star_bubble.svg" 14 | dest_files=["res://.godot/imported/star_bubble.svg-6a384597ce841a53a597cf73df7ae811.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/icons/text_bubble.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b8gf5jt8sujkj" 6 | path="res://.godot/imported/text_bubble.svg-0d677c0cdc731cbf92561de2b95fc720.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/icons/text_bubble.svg" 14 | dest_files=["res://.godot/imported/text_bubble.svg-0d677c0cdc731cbf92561de2b95fc720.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /GUI/dialog_system/scripts/dialog_portrait.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ods08yjoggjt 2 | -------------------------------------------------------------------------------- /GUI/dialog_system/scripts/dialog_system.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bffsawinvj4do 2 | -------------------------------------------------------------------------------- /GUI/dialog_system/sprites/text-bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/dialog_system/sprites/text-bubble.png -------------------------------------------------------------------------------- /GUI/dialog_system/sprites/text-bubble.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://be3gd407wfvy4" 6 | path="res://.godot/imported/text-bubble.png-787afbc3e07d534a91c0e1b1e6fb95af.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/dialog_system/sprites/text-bubble.png" 14 | dest_files=["res://.godot/imported/text-bubble.png-787afbc3e07d534a91c0e1b1e6fb95af.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /GUI/fonts/Abaddon Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/fonts/Abaddon Bold.ttf -------------------------------------------------------------------------------- /GUI/fonts/Abaddon Bold.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://o7gqnagfnby2" 6 | path="res://.godot/imported/Abaddon Bold.ttf-ffc1a1ce97027dba9d4741e19915865f.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/fonts/Abaddon Bold.ttf" 11 | dest_files=["res://.godot/imported/Abaddon Bold.ttf-ffc1a1ce97027dba9d4741e19915865f.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /GUI/fonts/Abaddon Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/fonts/Abaddon Light.ttf -------------------------------------------------------------------------------- /GUI/fonts/Abaddon Light.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://ufo0hj0jkl1o" 6 | path="res://.godot/imported/Abaddon Light.ttf-9c2223e4b61ca68f5db862721ef73ff8.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/fonts/Abaddon Light.ttf" 11 | dest_files=["res://.godot/imported/Abaddon Light.ttf-9c2223e4b61ca68f5db862721ef73ff8.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /GUI/fonts/m5x7.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/fonts/m5x7.ttf -------------------------------------------------------------------------------- /GUI/fonts/m5x7.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://cnrqk38ddqqwy" 6 | path="res://.godot/imported/m5x7.ttf-efb1b90301989e46a462a5e4140a42d5.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/fonts/m5x7.ttf" 11 | dest_files=["res://.godot/imported/m5x7.ttf-efb1b90301989e46a462a5e4140a42d5.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /GUI/pause_menu/inventory/scripts/inventory_data.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bxx16sir64hty 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/inventory/scripts/inventory_slot_ui.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dsy4e5o2emmtl 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/inventory/scripts/inventory_ui.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b34ukmw1e7pax 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/inventory/scripts/slot_data.gd: -------------------------------------------------------------------------------- 1 | class_name SlotData extends Resource 2 | 3 | @export var item_data : ItemData 4 | @export var quantity : int = 0 : set = set_quantity 5 | 6 | 7 | func set_quantity( value : int ) -> void: 8 | quantity = value 9 | if Engine.is_editor_hint(): 10 | return 11 | if quantity < 1: 12 | emit_changed() 13 | -------------------------------------------------------------------------------- /GUI/pause_menu/inventory/scripts/slot_data.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dju5abgrax1ej 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/pause_menu.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ia628h6yaojv 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests/checkbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/pause_menu/quests/checkbox.png -------------------------------------------------------------------------------- /GUI/pause_menu/quests/checkbox.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bl88i4tylbjqd" 6 | path="res://.godot/imported/checkbox.png-29013c9ea98bbaa1046d4c32a8e8523a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/pause_menu/quests/checkbox.png" 14 | dest_files=["res://.godot/imported/checkbox.png-29013c9ea98bbaa1046d4c32a8e8523a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests/quest_item.gd: -------------------------------------------------------------------------------- 1 | class_name QuestItem extends Button 2 | 3 | var quest : Quest 4 | 5 | @onready var title_label: Label = $TitleLabel 6 | @onready var step_label: Label = $StepLabel 7 | 8 | 9 | func intialize( q_data : Quest, q_state ) -> void: 10 | quest = q_data 11 | title_label.text = q_data.title 12 | 13 | if q_state.is_complete: 14 | step_label.text = "Completed" 15 | step_label.modulate = Color.LIGHT_GREEN 16 | else: 17 | var step_count : int = q_data.steps.size() 18 | var completed_count : int = q_state.completed_steps.size() 19 | step_label.text = "quest step: " + str(completed_count) + "/" + str(step_count) 20 | pass 21 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests/quest_item.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dskpktnf34srq 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests/quest_step_item.gd: -------------------------------------------------------------------------------- 1 | class_name QuestStepItem extends Control 2 | 3 | @onready var label: Label = $Label 4 | @onready var sprite_2d: Sprite2D = $Sprite2D 5 | 6 | 7 | 8 | func initialize( step : String, is_complete : bool ) -> void: 9 | label.text = step 10 | if is_complete == true: 11 | sprite_2d.frame = 1 12 | else: 13 | sprite_2d.frame = 0 14 | pass 15 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests/quest_step_item.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cfv1puswojtce 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests/quest_step_item.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://dxfstusrlgtqu"] 2 | 3 | [ext_resource type="Script" uid="uid://cfv1puswojtce" path="res://GUI/pause_menu/quests/quest_step_item.gd" id="1_2ed12"] 4 | [ext_resource type="Texture2D" uid="uid://bl88i4tylbjqd" path="res://GUI/pause_menu/quests/checkbox.png" id="2_i03w0"] 5 | 6 | [node name="QuestStepItem" type="Control"] 7 | clip_contents = true 8 | custom_minimum_size = Vector2(215, 22) 9 | layout_mode = 3 10 | anchors_preset = 0 11 | offset_right = 215.0 12 | offset_bottom = 22.0 13 | script = ExtResource("1_2ed12") 14 | 15 | [node name="Label" type="Label" parent="."] 16 | modulate = Color(0.607843, 0.678431, 0.717647, 1) 17 | layout_mode = 0 18 | offset_left = 19.0 19 | offset_right = 59.0 20 | offset_bottom = 18.0 21 | text = "step" 22 | 23 | [node name="Sprite2D" type="Sprite2D" parent="."] 24 | position = Vector2(8, 8) 25 | texture = ExtResource("2_i03w0") 26 | hframes = 2 27 | -------------------------------------------------------------------------------- /GUI/pause_menu/quests_ui.gd.uid: -------------------------------------------------------------------------------- 1 | uid://v8exnhqk3spq 2 | -------------------------------------------------------------------------------- /GUI/pause_menu/stats/stats.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c5t0q35cvoa7a 2 | -------------------------------------------------------------------------------- /GUI/player_hud/boss-hp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/player_hud/boss-hp.png -------------------------------------------------------------------------------- /GUI/player_hud/boss-hp.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://gb4q1nfypaax" 6 | path="res://.godot/imported/boss-hp.png-27f87b8de827cf90df7653b8464143fb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/player_hud/boss-hp.png" 14 | dest_files=["res://.godot/imported/boss-hp.png-27f87b8de827cf90df7653b8464143fb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /GUI/player_hud/gui-health.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/player_hud/gui-health.png -------------------------------------------------------------------------------- /GUI/player_hud/gui-health.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c214trc1y0053" 6 | path="res://.godot/imported/gui-health.png-aef036b7ece4ade13823322a2db2c0de.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/player_hud/gui-health.png" 14 | dest_files=["res://.godot/imported/gui-health.png-aef036b7ece4ade13823322a2db2c0de.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /GUI/player_hud/heart_gui.gd: -------------------------------------------------------------------------------- 1 | class_name HeartGUI extends Control 2 | 3 | 4 | @onready var sprite = $Sprite2D 5 | 6 | 7 | var value : int = 2 : 8 | set( _value ): 9 | value = _value 10 | update_sprite() 11 | 12 | 13 | func update_sprite() -> void: 14 | sprite.frame = value 15 | 16 | -------------------------------------------------------------------------------- /GUI/player_hud/heart_gui.gd.uid: -------------------------------------------------------------------------------- 1 | uid://drvk8t2g3khfa 2 | -------------------------------------------------------------------------------- /GUI/player_hud/heart_gui.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cnikqj3ie6vv0"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://c214trc1y0053" path="res://GUI/player_hud/gui-health.png" id="1_lgsf3"] 4 | [ext_resource type="Script" uid="uid://drvk8t2g3khfa" path="res://GUI/player_hud/heart_gui.gd" id="1_or207"] 5 | 6 | [node name="Heart" type="Control"] 7 | custom_minimum_size = Vector2(9, 9) 8 | layout_mode = 3 9 | anchors_preset = 0 10 | script = ExtResource("1_or207") 11 | 12 | [node name="Sprite2D" type="Sprite2D" parent="."] 13 | texture = ExtResource("1_lgsf3") 14 | centered = false 15 | hframes = 7 16 | vframes = 2 17 | -------------------------------------------------------------------------------- /GUI/player_hud/notification.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/player_hud/notification.wav -------------------------------------------------------------------------------- /GUI/player_hud/notification.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://c7me4bm1wcsua" 6 | path="res://.godot/imported/notification.wav-c3b915a2b3398d00cd0a0ba2fd58e34c.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/player_hud/notification.wav" 11 | dest_files=["res://.godot/imported/notification.wav-c3b915a2b3398d00cd0a0ba2fd58e34c.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /GUI/player_hud/notifications.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c63jv3sl2cvvx 2 | -------------------------------------------------------------------------------- /GUI/player_hud/panel_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/player_hud/panel_notification.png -------------------------------------------------------------------------------- /GUI/player_hud/panel_notification.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dw1xqovae8s7k" 6 | path="res://.godot/imported/panel_notification.png-d657fba93c1888ac93f194630b1b095e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://GUI/player_hud/panel_notification.png" 14 | dest_files=["res://.godot/imported/panel_notification.png-d657fba93c1888ac93f194630b1b095e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /GUI/player_hud/player_hud.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bw213tx6ibmkk 2 | -------------------------------------------------------------------------------- /GUI/scene_transition/scene_transition.gd: -------------------------------------------------------------------------------- 1 | extends CanvasLayer 2 | 3 | @onready var animation_player: AnimationPlayer = $Control/AnimationPlayer 4 | 5 | 6 | func fade_out() -> bool: 7 | animation_player.play("fade_out") 8 | await animation_player.animation_finished 9 | return true 10 | 11 | 12 | func fade_in() -> bool: 13 | animation_player.play("fade_in") 14 | #await animation_player.animation_finished 15 | return true 16 | -------------------------------------------------------------------------------- /GUI/scene_transition/scene_transition.gd.uid: -------------------------------------------------------------------------------- 1 | uid://che60dcavsrav 2 | -------------------------------------------------------------------------------- /GUI/shop_menu/audio/error.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/shop_menu/audio/error.wav -------------------------------------------------------------------------------- /GUI/shop_menu/audio/error.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://c318mk5yvve55" 6 | path="res://.godot/imported/error.wav-91dcc4e49ede98cbe520f3406f67931d.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/shop_menu/audio/error.wav" 11 | dest_files=["res://.godot/imported/error.wav-91dcc4e49ede98cbe520f3406f67931d.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=2 25 | -------------------------------------------------------------------------------- /GUI/shop_menu/audio/open_shop.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/shop_menu/audio/open_shop.wav -------------------------------------------------------------------------------- /GUI/shop_menu/audio/open_shop.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://ctd8qcobpfe0d" 6 | path="res://.godot/imported/open_shop.wav-4c72390d3d54fc1e2ba33a7fbf6210c0.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/shop_menu/audio/open_shop.wav" 11 | dest_files=["res://.godot/imported/open_shop.wav-4c72390d3d54fc1e2ba33a7fbf6210c0.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=2 25 | -------------------------------------------------------------------------------- /GUI/shop_menu/audio/purchase.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GUI/shop_menu/audio/purchase.wav -------------------------------------------------------------------------------- /GUI/shop_menu/audio/purchase.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bnjt2lvucbcf7" 6 | path="res://.godot/imported/purchase.wav-5c9239be6b79c38eb140791ddd189ff5.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GUI/shop_menu/audio/purchase.wav" 11 | dest_files=["res://.godot/imported/purchase.wav-5c9239be6b79c38eb140791ddd189ff5.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=2 25 | -------------------------------------------------------------------------------- /GUI/shop_menu/shop_item_button.gd: -------------------------------------------------------------------------------- 1 | class_name ShopItemButton extends Button 2 | 3 | var item : ItemData 4 | 5 | 6 | func setup_item( _item : ItemData ) -> void: 7 | item = _item 8 | $Label.text = item.name 9 | $PriceLabel.text = str( item.cost ) 10 | $TextureRect.texture = item.texture 11 | -------------------------------------------------------------------------------- /GUI/shop_menu/shop_item_button.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cqqogeprsce2g 2 | -------------------------------------------------------------------------------- /GUI/shop_menu/shop_menu.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cfwsq4jpru03i 2 | -------------------------------------------------------------------------------- /GeneralNodes/EnemyCounter/enemy_counter.gd: -------------------------------------------------------------------------------- 1 | class_name EnemyCounter extends Node2D 2 | 3 | 4 | signal enemies_defeated 5 | 6 | 7 | func _ready() -> void: 8 | child_exiting_tree.connect( _on_enemy_destroyed ) 9 | pass 10 | 11 | 12 | func _on_enemy_destroyed( e : Node2D ) -> void: 13 | if e is Enemy: 14 | if enemy_count() <= 1: 15 | enemies_defeated.emit() 16 | pass 17 | 18 | 19 | func enemy_count() -> int: 20 | var _count : int = 0 21 | for c in get_children(): 22 | if c is Enemy: 23 | _count += 1 24 | return _count 25 | -------------------------------------------------------------------------------- /GeneralNodes/EnemyCounter/enemy_counter.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dewiosnhwit3o 2 | -------------------------------------------------------------------------------- /GeneralNodes/EnemyCounter/enemy_counter.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://b63km2avcjbgb"] 2 | 3 | [ext_resource type="Script" uid="uid://dewiosnhwit3o" path="res://GeneralNodes/EnemyCounter/enemy_counter.gd" id="1_2d55a"] 4 | 5 | [node name="EnemyCounter" type="Node2D"] 6 | y_sort_enabled = true 7 | script = ExtResource("1_2d55a") 8 | -------------------------------------------------------------------------------- /GeneralNodes/HitBox/hit_box.gd: -------------------------------------------------------------------------------- 1 | class_name HitBox extends Area2D 2 | 3 | signal damaged( hurt_box : HurtBox ) 4 | 5 | # Called when the node enters the scene tree for the first time. 6 | func _ready(): 7 | pass # Replace with function body. 8 | 9 | 10 | 11 | func take_damage( hurt_box : HurtBox ) -> void: 12 | damaged.emit( hurt_box ) 13 | -------------------------------------------------------------------------------- /GeneralNodes/HitBox/hit_box.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c7i57v7ybv7uw 2 | -------------------------------------------------------------------------------- /GeneralNodes/HitBox/hit_box.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://c041sb462wu22"] 2 | 3 | [ext_resource type="Script" uid="uid://c7i57v7ybv7uw" path="res://GeneralNodes/HitBox/hit_box.gd" id="1_6q87k"] 4 | 5 | [node name="HitBox" type="Area2D"] 6 | collision_layer = 256 7 | collision_mask = 0 8 | monitoring = false 9 | script = ExtResource("1_6q87k") 10 | -------------------------------------------------------------------------------- /GeneralNodes/HurtBox/hurt_box.gd: -------------------------------------------------------------------------------- 1 | class_name HurtBox extends Area2D 2 | 3 | signal did_damage 4 | 5 | @export var damage : int = 1 6 | 7 | # Called when the node enters the scene tree for the first time. 8 | func _ready(): 9 | area_entered.connect( _area_entered ) 10 | pass # Replace with function body. 11 | 12 | 13 | 14 | func _area_entered( a : Area2D ) -> void: 15 | if a is HitBox: 16 | did_damage.emit() 17 | a.take_damage( self ) 18 | pass 19 | -------------------------------------------------------------------------------- /GeneralNodes/HurtBox/hurt_box.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dn3nqgx436vyt 2 | -------------------------------------------------------------------------------- /GeneralNodes/HurtBox/hurt_box.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://cpvl4rru3x52v"] 2 | 3 | [ext_resource type="Script" uid="uid://dn3nqgx436vyt" path="res://GeneralNodes/HurtBox/hurt_box.gd" id="1_8iv5o"] 4 | 5 | [node name="HurtBox" type="Area2D"] 6 | collision_layer = 0 7 | collision_mask = 2 8 | monitorable = false 9 | script = ExtResource("1_8iv5o") 10 | -------------------------------------------------------------------------------- /GeneralNodes/ItemDropper/dungeon_discovery.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GeneralNodes/ItemDropper/dungeon_discovery.wav -------------------------------------------------------------------------------- /GeneralNodes/ItemDropper/dungeon_discovery.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://8wyvb6nisvdo" 6 | path="res://.godot/imported/dungeon_discovery.wav-fac1b6930c3428a9a5343a6b8fd711b1.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GeneralNodes/ItemDropper/dungeon_discovery.wav" 11 | dest_files=["res://.godot/imported/dungeon_discovery.wav-fac1b6930c3428a9a5343a6b8fd711b1.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /GeneralNodes/ItemDropper/item_dropper.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c62jakwy6ggl0 2 | -------------------------------------------------------------------------------- /GeneralNodes/ItemMagnet/item_magnet.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dcoojjfi0d6ua 2 | -------------------------------------------------------------------------------- /GeneralNodes/ItemMagnet/item_magnet.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://ciqutdcievlur"] 2 | 3 | [ext_resource type="Script" uid="uid://dcoojjfi0d6ua" path="res://GeneralNodes/ItemMagnet/item_magnet.gd" id="1_j606o"] 4 | [ext_resource type="AudioStream" uid="uid://cl4y2eoe5b40w" path="res://Player/audio/catch.wav" id="2_8qlsr"] 5 | 6 | [node name="ItemMagnet" type="Area2D"] 7 | collision_layer = 0 8 | monitorable = false 9 | script = ExtResource("1_j606o") 10 | 11 | [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] 12 | stream = ExtResource("2_8qlsr") 13 | -------------------------------------------------------------------------------- /GeneralNodes/PersistentDataHandler/persistent-data-handler.gd: -------------------------------------------------------------------------------- 1 | class_name PersistentDataHandler extends Node 2 | 3 | signal data_loaded 4 | var value : bool = false 5 | 6 | 7 | func _ready() -> void: 8 | get_value() 9 | pass 10 | 11 | 12 | func set_value() -> void: 13 | SaveManager.add_persistent_value( _get_name() ) 14 | pass 15 | 16 | 17 | func get_value() -> void: 18 | value = SaveManager.check_persistent_value( _get_name() ) 19 | data_loaded.emit() 20 | pass 21 | 22 | 23 | func remove_value() -> void: 24 | SaveManager.remove_persistent_value( _get_name() ) 25 | pass 26 | 27 | 28 | func _get_name() -> String: 29 | return get_tree().current_scene.scene_file_path + "/" + get_parent().name + "/" + name 30 | -------------------------------------------------------------------------------- /GeneralNodes/PersistentDataHandler/persistent-data-handler.gd.uid: -------------------------------------------------------------------------------- 1 | uid://uqrsfoga5e2s 2 | -------------------------------------------------------------------------------- /GeneralNodes/PersistentDataHandler/persistent-data-handler.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://de52jxqemilpu"] 2 | 3 | [ext_resource type="Script" uid="uid://uqrsfoga5e2s" path="res://GeneralNodes/PersistentDataHandler/persistent-data-handler.gd" id="1_au5qa"] 4 | 5 | [node name="PersistentDataHandler" type="Node"] 6 | script = ExtResource("1_au5qa") 7 | -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GeneralNodes/footstep_audio_2d/footstep_01.wav -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_01.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://d0s7c4x6vvv8r" 6 | path="res://.godot/imported/footstep_01.wav-8f632bbff18c18ef062bac675d81f4ec.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GeneralNodes/footstep_audio_2d/footstep_01.wav" 11 | dest_files=["res://.godot/imported/footstep_01.wav-8f632bbff18c18ef062bac675d81f4ec.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_02.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GeneralNodes/footstep_audio_2d/footstep_02.wav -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_02.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dsi77t43iegk7" 6 | path="res://.godot/imported/footstep_02.wav-bfe10106aa422265679e4caf6968c0f2.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GeneralNodes/footstep_audio_2d/footstep_02.wav" 11 | dest_files=["res://.godot/imported/footstep_02.wav-bfe10106aa422265679e4caf6968c0f2.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_03.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/GeneralNodes/footstep_audio_2d/footstep_03.wav -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_03.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://qjmhov4qtufs" 6 | path="res://.godot/imported/footstep_03.wav-d33091606f6203c8fa3408648e0727cc.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://GeneralNodes/footstep_audio_2d/footstep_03.wav" 11 | dest_files=["res://.godot/imported/footstep_03.wav-d33091606f6203c8fa3408648e0727cc.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_audio_2d.gd: -------------------------------------------------------------------------------- 1 | class_name FootstepAudio2D extends AudioStreamPlayer2D 2 | 3 | var stream_randomizer : AudioStreamRandomizer 4 | @export var footstep_variants : Array[ AudioStream ] 5 | 6 | 7 | func _ready() -> void: 8 | stream_randomizer = stream 9 | 10 | 11 | func play_footstep() -> void: 12 | get_footstep_type() 13 | play() 14 | 15 | 16 | func get_footstep_type() -> void: 17 | for t in get_tree().get_nodes_in_group( "tilemaps" ): 18 | if t is TileMapLayer: 19 | if t.tile_set.get_custom_data_layer_by_name( "footstep_type" ) == -1: 20 | continue 21 | var cell : Vector2i = t.local_to_map( t.to_local( global_position ) ) 22 | var data : TileData = t.get_cell_tile_data( cell ) 23 | if data: 24 | var type = data.get_custom_data( "footstep_type" ) 25 | if type == null: 26 | continue 27 | #stream = footstep_variants[ type ] 28 | stream_randomizer.set_stream( 0, footstep_variants[ type ] ) 29 | pass 30 | pass 31 | pass 32 | -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_audio_2d.gd.uid: -------------------------------------------------------------------------------- 1 | uid://i1k3uiqi4g32 2 | -------------------------------------------------------------------------------- /GeneralNodes/footstep_audio_2d/footstep_audio_2d.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3 uid="uid://dkahyrrrdtwhv"] 2 | 3 | [ext_resource type="Script" uid="uid://i1k3uiqi4g32" path="res://GeneralNodes/footstep_audio_2d/footstep_audio_2d.gd" id="1_02ak3"] 4 | [ext_resource type="AudioStream" uid="uid://qjmhov4qtufs" path="res://GeneralNodes/footstep_audio_2d/footstep_03.wav" id="1_03fn2"] 5 | [ext_resource type="AudioStream" uid="uid://dsi77t43iegk7" path="res://GeneralNodes/footstep_audio_2d/footstep_02.wav" id="3_p0pye"] 6 | [ext_resource type="AudioStream" uid="uid://d0s7c4x6vvv8r" path="res://GeneralNodes/footstep_audio_2d/footstep_01.wav" id="4_mynmk"] 7 | 8 | [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_odvol"] 9 | random_pitch = 1.13 10 | random_volume_offset_db = 2.0 11 | streams_count = 1 12 | 13 | [node name="FootstepAudio2D" type="AudioStreamPlayer2D"] 14 | stream = SubResource("AudioStreamRandomizer_odvol") 15 | volume_db = -16.0 16 | script = ExtResource("1_02ak3") 17 | footstep_variants = Array[AudioStream]([ExtResource("1_03fn2"), ExtResource("3_p0pye"), ExtResource("4_mynmk")]) 18 | -------------------------------------------------------------------------------- /Interactables/TreasureChest/treasure-chest.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cgmg5ln1r0wcb 2 | -------------------------------------------------------------------------------- /Interactables/TreasureChest/treasure-chest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/TreasureChest/treasure-chest.png -------------------------------------------------------------------------------- /Interactables/TreasureChest/treasure-chest.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwx6cdfhun1y4" 6 | path="res://.godot/imported/treasure-chest.png-0043e47e026a433ad01a32ea29d9199b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Interactables/TreasureChest/treasure-chest.png" 14 | dest_files=["res://.godot/imported/treasure-chest.png-0043e47e026a433ad01a32ea29d9199b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Interactables/TreasureChest/treasure-open.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/TreasureChest/treasure-open.wav -------------------------------------------------------------------------------- /Interactables/TreasureChest/treasure-open.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://uyg2cjrpspr5" 6 | path="res://.godot/imported/treasure-open.wav-fbc0456a5f10bec7d5da792bcd847c07.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/TreasureChest/treasure-open.wav" 11 | dest_files=["res://.godot/imported/treasure-open.wav-fbc0456a5f10bec7d5da792bcd847c07.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/dialog/scripts/dialog_branch.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c80ln4eok2stu 2 | -------------------------------------------------------------------------------- /Interactables/dialog/scripts/dialog_choice.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bhoxv42n8rdsq 2 | -------------------------------------------------------------------------------- /Interactables/dialog/scripts/dialog_interaction.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cbqe6keabesn 2 | -------------------------------------------------------------------------------- /Interactables/dialog/scripts/dialog_item.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c1rvwk3ustfv 2 | -------------------------------------------------------------------------------- /Interactables/dialog/scripts/dialog_text.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon( "res://GUI/dialog_system/icons/text_bubble.svg" ) 3 | class_name DialogText extends DialogItem 4 | 5 | @export_multiline var text : String = "Placeholder text" : set = _set_text 6 | 7 | 8 | 9 | func _set_text( value : String ) -> void: 10 | text = value 11 | if Engine.is_editor_hint(): 12 | if example_dialog != null: 13 | _set_editor_display() 14 | 15 | 16 | func _set_editor_display() -> void: 17 | example_dialog.set_dialog_text( self ) 18 | example_dialog.content.visible_characters = -1 19 | pass 20 | -------------------------------------------------------------------------------- /Interactables/dialog/scripts/dialog_text.gd.uid: -------------------------------------------------------------------------------- 1 | uid://7qrcj0xrfdwc 2 | -------------------------------------------------------------------------------- /Interactables/dialog/sprites/dialog_interactable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dialog/sprites/dialog_interactable.png -------------------------------------------------------------------------------- /Interactables/dialog/sprites/dialog_interactable.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c7618mlo6ajma" 6 | path="res://.godot/imported/dialog_interactable.png-74767f99a1f71aceeae0d30aebf6d247.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Interactables/dialog/sprites/dialog_interactable.png" 14 | dest_files=["res://.godot/imported/dialog_interactable.png-74767f99a1f71aceeae0d30aebf6d247.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Interactables/dungeon/bars_open.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/bars_open.wav -------------------------------------------------------------------------------- /Interactables/dungeon/bars_open.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://c6xa7m21ojqaq" 6 | path="res://.godot/imported/bars_open.wav-935b151726780805fe97766b4c14084f.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/dungeon/bars_open.wav" 11 | dest_files=["res://.godot/imported/bars_open.wav-935b151726780805fe97766b4c14084f.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/dungeon/dungeon_props.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/dungeon_props.png -------------------------------------------------------------------------------- /Interactables/dungeon/dungeon_props.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cbcm3770x2tgd" 6 | path="res://.godot/imported/dungeon_props.png-efac48749301c019019c6b8d3f2e2326.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Interactables/dungeon/dungeon_props.png" 14 | dest_files=["res://.godot/imported/dungeon_props.png-efac48749301c019019c6b8d3f2e2326.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Interactables/dungeon/lever-01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/lever-01.wav -------------------------------------------------------------------------------- /Interactables/dungeon/lever-01.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dvxranhjjsh6u" 6 | path="res://.godot/imported/lever-01.wav-c1b98d92bfd538c02d6eb01b327c4fa2.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/dungeon/lever-01.wav" 11 | dest_files=["res://.godot/imported/lever-01.wav-c1b98d92bfd538c02d6eb01b327c4fa2.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/dungeon/lever-02.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/lever-02.wav -------------------------------------------------------------------------------- /Interactables/dungeon/lever-02.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://d237d8xykxbux" 6 | path="res://.godot/imported/lever-02.wav-a00c481e8b21905a16b6c6443f22dfd4.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/dungeon/lever-02.wav" 11 | dest_files=["res://.godot/imported/lever-02.wav-a00c481e8b21905a16b6c6443f22dfd4.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/dungeon/locked_door.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/locked_door.wav -------------------------------------------------------------------------------- /Interactables/dungeon/locked_door.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://ck2d7svu6m2dv" 6 | path="res://.godot/imported/locked_door.wav-16c56a73cb291c61a1c16aae1d94f304.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/dungeon/locked_door.wav" 11 | dest_files=["res://.godot/imported/locked_door.wav-16c56a73cb291c61a1c16aae1d94f304.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/dungeon/pressure_plate.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://ch2oxh3rsa2fr"] 2 | 3 | [ext_resource type="Script" uid="uid://dq3o3cqog3yxa" path="res://Interactables/dungeon/scripts/pressure_plate.gd" id="1_603rd"] 4 | [ext_resource type="Texture2D" uid="uid://cbcm3770x2tgd" path="res://Interactables/dungeon/dungeon_props.png" id="2_aqjcl"] 5 | 6 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_xy5g3"] 7 | size = Vector2(8, 8) 8 | 9 | [node name="PressurePlate" type="Node2D"] 10 | script = ExtResource("1_603rd") 11 | 12 | [node name="Sprite2D" type="Sprite2D" parent="."] 13 | z_index = -1 14 | texture = ExtResource("2_aqjcl") 15 | region_enabled = true 16 | region_rect = Rect2(416, 64, 32, 32) 17 | 18 | [node name="Area2D" type="Area2D" parent="."] 19 | collision_layer = 0 20 | collision_mask = 273 21 | monitorable = false 22 | 23 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] 24 | shape = SubResource("RectangleShape2D_xy5g3") 25 | 26 | [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] 27 | -------------------------------------------------------------------------------- /Interactables/dungeon/push_stone.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/push_stone.wav -------------------------------------------------------------------------------- /Interactables/dungeon/push_stone.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://7qnbmax1ajmq" 6 | path="res://.godot/imported/push_stone.wav-e624b1ed93899bf4397348805aa44f6d.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/dungeon/push_stone.wav" 11 | dest_files=["res://.godot/imported/push_stone.wav-e624b1ed93899bf4397348805aa44f6d.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=2 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/dungeon/scripts/barred_door.gd: -------------------------------------------------------------------------------- 1 | class_name BarredDoor extends Node2D 2 | 3 | 4 | @onready var animation_player: AnimationPlayer = $AnimationPlayer 5 | 6 | 7 | 8 | func _ready() -> void: 9 | pass 10 | 11 | 12 | 13 | func open_door() -> void: 14 | animation_player.play( "open_door" ) 15 | pass 16 | 17 | 18 | func close_door() -> void: 19 | animation_player.play( "close_door" ) 20 | pass 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Interactables/dungeon/scripts/barred_door.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c7bxikexw25sm 2 | -------------------------------------------------------------------------------- /Interactables/dungeon/scripts/locked_door.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c1b08v2bc1iqh 2 | -------------------------------------------------------------------------------- /Interactables/dungeon/scripts/pressure_plate.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dq3o3cqog3yxa 2 | -------------------------------------------------------------------------------- /Interactables/dungeon/scripts/pushable_statue.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bnf28lpfqtapi 2 | -------------------------------------------------------------------------------- /Interactables/dungeon/unlock_door.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Interactables/dungeon/unlock_door.wav -------------------------------------------------------------------------------- /Interactables/dungeon/unlock_door.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://qmisdb43u5k1" 6 | path="res://.godot/imported/unlock_door.wav-b49fafa75335a4e32b725c29bff09541.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Interactables/dungeon/unlock_door.wav" 11 | dest_files=["res://.godot/imported/unlock_door.wav-b49fafa75335a4e32b725c29bff09541.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Interactables/shopkeeper/shopkeeper.gd: -------------------------------------------------------------------------------- 1 | class_name Shopkeeper extends Node2D 2 | 3 | @export var shop_inventory : Array[ ItemData ] 4 | 5 | @onready var dialog_branch_yes: DialogBranch = $NPC/DialogInteraction/DialogChoice/DialogBranch 6 | 7 | 8 | 9 | func _ready() -> void: 10 | dialog_branch_yes.selected.connect( show_shop_menu ) 11 | pass 12 | 13 | 14 | func show_shop_menu() -> void: 15 | print("Show the shop") 16 | ShopMenu.show_menu( shop_inventory ) 17 | pass 18 | -------------------------------------------------------------------------------- /Interactables/shopkeeper/shopkeeper.gd.uid: -------------------------------------------------------------------------------- 1 | uid://81hvwtju8j7n 2 | -------------------------------------------------------------------------------- /Interactables/throwable/throwable.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dron6o5f1043m 2 | -------------------------------------------------------------------------------- /Interactables/throwable/throwable.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://dp08lk5aufvli"] 2 | 3 | [ext_resource type="Script" uid="uid://dron6o5f1043m" path="res://Interactables/throwable/throwable.gd" id="1_a6bbh"] 4 | [ext_resource type="PackedScene" uid="uid://cpvl4rru3x52v" path="res://GeneralNodes/HurtBox/hurt_box.tscn" id="2_xu4fk"] 5 | 6 | [node name="Throwable" type="Area2D"] 7 | collision_layer = 0 8 | collision_mask = 4 9 | monitorable = false 10 | script = ExtResource("1_a6bbh") 11 | 12 | [node name="HurtBox" parent="." instance=ExtResource("2_xu4fk")] 13 | collision_mask = 256 14 | -------------------------------------------------------------------------------- /Items/gem.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="ItemData" load_steps=5 format=3 uid="uid://cixpflhl0cjvo"] 2 | 3 | [ext_resource type="Script" uid="uid://bwq22ry1guuwt" path="res://Items/item_effects/item_effect.gd" id="1_axjn8"] 4 | [ext_resource type="Script" uid="uid://b405hrw22am82" path="res://Items/scripts/item_data.gd" id="1_g6vl3"] 5 | [ext_resource type="Texture2D" uid="uid://bmjan6873e3h5" path="res://Items/sprites/items.png" id="2_ap4ly"] 6 | 7 | [sub_resource type="AtlasTexture" id="AtlasTexture_7aa43"] 8 | atlas = ExtResource("2_ap4ly") 9 | region = Rect2(0, 0, 32, 32) 10 | 11 | [resource] 12 | script = ExtResource("1_g6vl3") 13 | name = "Gem" 14 | description = "A valuable gem!" 15 | texture = SubResource("AtlasTexture_7aa43") 16 | cost = 1 17 | effects = Array[ExtResource("1_axjn8")]([]) 18 | -------------------------------------------------------------------------------- /Items/item_effects/hp-up.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Items/item_effects/hp-up.wav -------------------------------------------------------------------------------- /Items/item_effects/hp-up.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bwnitghsawfi0" 6 | path="res://.godot/imported/hp-up.wav-9d935ac3b880ce47ab2669117abd135b.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Items/item_effects/hp-up.wav" 11 | dest_files=["res://.godot/imported/hp-up.wav-9d935ac3b880ce47ab2669117abd135b.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Items/item_effects/item_effect.gd: -------------------------------------------------------------------------------- 1 | class_name ItemEffect extends Resource 2 | 3 | @export var use_description : String 4 | 5 | 6 | func use() -> void: 7 | pass 8 | -------------------------------------------------------------------------------- /Items/item_effects/item_effect.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bwq22ry1guuwt 2 | -------------------------------------------------------------------------------- /Items/item_effects/item_effect_heal.gd: -------------------------------------------------------------------------------- 1 | class_name ItemEffectHeal extends ItemEffect 2 | 3 | @export var heal_amount : int = 1 4 | @export var audio : AudioStream 5 | 6 | 7 | func use() -> void: 8 | PlayerManager.player.update_hp( heal_amount ) 9 | PauseMenu.play_audio( audio ) 10 | -------------------------------------------------------------------------------- /Items/item_effects/item_effect_heal.gd.uid: -------------------------------------------------------------------------------- 1 | uid://lhem15j5m6we 2 | -------------------------------------------------------------------------------- /Items/item_pickup/item_pickup.gd.uid: -------------------------------------------------------------------------------- 1 | uid://efs3r0txblyn 2 | -------------------------------------------------------------------------------- /Items/item_pickup/item_pickup.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Items/item_pickup/item_pickup.wav -------------------------------------------------------------------------------- /Items/item_pickup/item_pickup.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dqkscpjlwebc0" 6 | path="res://.godot/imported/item_pickup.wav-8e4761674a856f0b708df376885994aa.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Items/item_pickup/item_pickup.wav" 11 | dest_files=["res://.godot/imported/item_pickup.wav-8e4761674a856f0b708df376885994aa.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Items/key_dungeon.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="ItemData" load_steps=5 format=3 uid="uid://dsahpb7gtws3g"] 2 | 3 | [ext_resource type="Script" uid="uid://bwq22ry1guuwt" path="res://Items/item_effects/item_effect.gd" id="1_3e852"] 4 | [ext_resource type="Script" uid="uid://b405hrw22am82" path="res://Items/scripts/item_data.gd" id="1_7mdpg"] 5 | [ext_resource type="Texture2D" uid="uid://bmjan6873e3h5" path="res://Items/sprites/items.png" id="2_abfbw"] 6 | 7 | [sub_resource type="AtlasTexture" id="AtlasTexture_xrpx2"] 8 | atlas = ExtResource("2_abfbw") 9 | region = Rect2(224, 0, 32, 32) 10 | 11 | [resource] 12 | script = ExtResource("1_7mdpg") 13 | name = "Dungeon Key" 14 | description = "Looks like a standard key. Who knows what kind of doors it will unlock?" 15 | texture = SubResource("AtlasTexture_xrpx2") 16 | cost = 150 17 | effects = Array[ExtResource("1_3e852")]([]) 18 | -------------------------------------------------------------------------------- /Items/magical_flute.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="ItemData" load_steps=4 format=3 uid="uid://bc035w7hy8e2o"] 2 | 3 | [ext_resource type="Script" uid="uid://bwq22ry1guuwt" path="res://Items/item_effects/item_effect.gd" id="1_b2ehb"] 4 | [ext_resource type="Script" uid="uid://b405hrw22am82" path="res://Items/scripts/item_data.gd" id="2_j8bvl"] 5 | [ext_resource type="Texture2D" uid="uid://dl00h6igbpofn" path="res://Items/sprites/flute.png" id="3_srqxh"] 6 | 7 | [resource] 8 | script = ExtResource("2_j8bvl") 9 | name = "Nero's Magical Flute" 10 | description = "This it the Magical Flute that Nero lost in the dungeon!" 11 | texture = ExtResource("3_srqxh") 12 | cost = 0 13 | effects = Array[ExtResource("1_b2ehb")]([]) 14 | -------------------------------------------------------------------------------- /Items/scripts/equipable_item_data.gd: -------------------------------------------------------------------------------- 1 | class_name EquipableItemData extends ItemData 2 | 3 | enum Type { WEAPON, ARMOR, AMULET, RING } 4 | @export var type : Type = Type.WEAPON 5 | @export var modifiers : Array[ EquipableItemModifier ] 6 | @export var sprite_texture : Texture 7 | -------------------------------------------------------------------------------- /Items/scripts/equipable_item_data.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c5iq7u0bmbjjq 2 | -------------------------------------------------------------------------------- /Items/scripts/equipable_item_modifier.gd: -------------------------------------------------------------------------------- 1 | class_name EquipableItemModifier extends Resource 2 | 3 | enum Type { HEALTH, ATTACK, DEFENSE, SPEED } 4 | @export var type : Type = Type.HEALTH 5 | @export var value : int = 1 6 | -------------------------------------------------------------------------------- /Items/scripts/equipable_item_modifier.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cvlavxf8cfh2r 2 | -------------------------------------------------------------------------------- /Items/scripts/item_data.gd: -------------------------------------------------------------------------------- 1 | class_name ItemData extends Resource 2 | 3 | @export var name : String = "" 4 | @export_multiline var description : String = "" 5 | @export var texture : Texture2D 6 | @export var cost : int = 10 7 | 8 | @export_category("Item Use Effects") 9 | @export var effects : Array[ ItemEffect ] 10 | 11 | 12 | func use() -> bool: 13 | if effects.size() == 0: 14 | return false 15 | 16 | for e in effects: 17 | if e: 18 | e.use() 19 | return true 20 | -------------------------------------------------------------------------------- /Items/scripts/item_data.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b405hrw22am82 2 | -------------------------------------------------------------------------------- /Items/sprites/flute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Items/sprites/flute.png -------------------------------------------------------------------------------- /Items/sprites/flute.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dl00h6igbpofn" 6 | path="res://.godot/imported/flute.png-6f7cc3251b694e00a33fdc8d600f92c3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Items/sprites/flute.png" 14 | dest_files=["res://.godot/imported/flute.png-6f7cc3251b694e00a33fdc8d600f92c3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Items/sprites/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Items/sprites/gear.png -------------------------------------------------------------------------------- /Items/sprites/gear.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d2b30nmoynyc2" 6 | path="res://.godot/imported/gear.png-05ec228c6bd652f530ec253f570f43fb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Items/sprites/gear.png" 14 | dest_files=["res://.godot/imported/gear.png-05ec228c6bd652f530ec253f570f43fb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Items/sprites/items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Items/sprites/items.png -------------------------------------------------------------------------------- /Items/sprites/items.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bmjan6873e3h5" 6 | path="res://.godot/imported/items.png-24e9197577ce25e8b70b6b4b14f4a4a6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Items/sprites/items.png" 14 | dest_files=["res://.godot/imported/items.png-24e9197577ce25e8b70b6b4b14f4a4a6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Items/stone.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="ItemData" load_steps=5 format=3 uid="uid://c0co5vj5hgk12"] 2 | 3 | [ext_resource type="Script" uid="uid://b405hrw22am82" path="res://Items/scripts/item_data.gd" id="1_6wwgd"] 4 | [ext_resource type="Script" uid="uid://bwq22ry1guuwt" path="res://Items/item_effects/item_effect.gd" id="1_gqhqt"] 5 | [ext_resource type="Texture2D" uid="uid://bmjan6873e3h5" path="res://Items/sprites/items.png" id="2_o7eoo"] 6 | 7 | [sub_resource type="AtlasTexture" id="AtlasTexture_sn00s"] 8 | atlas = ExtResource("2_o7eoo") 9 | region = Rect2(64, 0, 32, 32) 10 | 11 | [resource] 12 | script = ExtResource("1_6wwgd") 13 | name = "Stone" 14 | description = "Who doesn't love collecting rocks?" 15 | texture = SubResource("AtlasTexture_sn00s") 16 | cost = 10 17 | effects = Array[ExtResource("1_gqhqt")]([]) 18 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_beam.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/audio/boss_beam.wav -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_beam.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://by5dsao4harb2" 6 | path="res://.godot/imported/boss_beam.wav-4c4d0554b4fd3e75cb5a12cc92818309.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/Dungeon01/dark_wizard/audio/boss_beam.wav" 11 | dest_files=["res://.godot/imported/boss_beam.wav-4c4d0554b4fd3e75cb5a12cc92818309.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_destroy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/audio/boss_destroy.wav -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_destroy.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://b5yd3deroq2i8" 6 | path="res://.godot/imported/boss_destroy.wav-481baf9ccc31feeb9adf29be36d2d324.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/Dungeon01/dark_wizard/audio/boss_destroy.wav" 11 | dest_files=["res://.godot/imported/boss_destroy.wav-481baf9ccc31feeb9adf29be36d2d324.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_fireball.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/audio/boss_fireball.wav -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_fireball.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bb5nnm7rrak8o" 6 | path="res://.godot/imported/boss_fireball.wav-5af2446607363bbdc3f271db0ced7346.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/Dungeon01/dark_wizard/audio/boss_fireball.wav" 11 | dest_files=["res://.godot/imported/boss_fireball.wav-5af2446607363bbdc3f271db0ced7346.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_fireball_hit.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/audio/boss_fireball_hit.wav -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_fireball_hit.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://cokijl78200bl" 6 | path="res://.godot/imported/boss_fireball_hit.wav-9c0dd3dfb5f383480894e31d5f2f2b71.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/Dungeon01/dark_wizard/audio/boss_fireball_hit.wav" 11 | dest_files=["res://.godot/imported/boss_fireball_hit.wav-9c0dd3dfb5f383480894e31d5f2f2b71.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_hurt.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/audio/boss_hurt.wav -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/audio/boss_hurt.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://crnnfraha4kvi" 6 | path="res://.godot/imported/boss_hurt.wav-828e223e2a04ce279f969f0634a83b04.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/Dungeon01/dark_wizard/audio/boss_hurt.wav" 11 | dest_files=["res://.godot/imported/boss_hurt.wav-828e223e2a04ce279f969f0634a83b04.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/script/beam_attack.gd: -------------------------------------------------------------------------------- 1 | class_name BeamAttack extends Node2D 2 | 3 | @export var use_timer : bool = false 4 | @export var time_between_attacks : float = 3 5 | 6 | @onready var animation_player: AnimationPlayer = $AnimationPlayer 7 | 8 | 9 | 10 | func _ready() -> void: 11 | if use_timer == true: 12 | attack_delay() 13 | pass # Replace with function body. 14 | 15 | 16 | 17 | func attack() -> void: 18 | animation_player.play( "attack" ) 19 | await animation_player.animation_finished 20 | animation_player.play( "default" ) 21 | if use_timer == true: 22 | attack_delay() 23 | 24 | 25 | 26 | func attack_delay() -> void: 27 | await get_tree().create_timer( time_between_attacks ).timeout 28 | attack() 29 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/script/beam_attack.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ce3swbbiuss7m 2 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/script/dark_wizard_boss.gd.uid: -------------------------------------------------------------------------------- 1 | uid://j4py0ng56jx4 2 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/script/energy_beam_sprite.gd: -------------------------------------------------------------------------------- 1 | extends Sprite2D 2 | 3 | 4 | @export var speed : float = 100 5 | 6 | var rect : Rect2 7 | 8 | func _ready() -> void: 9 | rect = self.region_rect 10 | 11 | 12 | # Called every frame. 'delta' is the elapsed time since the previous frame. 13 | func _process(delta: float) -> void: 14 | region_rect.position += Vector2( speed * delta, 0 ) 15 | pass 16 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/script/energy_beam_sprite.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dap1fmwxi0uix 2 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/script/energy_orb.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dqy5oib4xpv4e 2 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/boss-cloak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/sprites/boss-cloak.png -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/boss-cloak.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bra05ahxi0gin" 6 | path="res://.godot/imported/boss-cloak.png-ed28d13dfd382be6d09aa6981ea35244.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Levels/Dungeon01/dark_wizard/sprites/boss-cloak.png" 14 | dest_files=["res://.godot/imported/boss-cloak.png-ed28d13dfd382be6d09aa6981ea35244.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/boss-hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/sprites/boss-hand.png -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/boss-hand.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cxawdw6nbh356" 6 | path="res://.godot/imported/boss-hand.png-ed5076e54a37ce328de8c01bf27299fb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Levels/Dungeon01/dark_wizard/sprites/boss-hand.png" 14 | dest_files=["res://.godot/imported/boss-hand.png-ed5076e54a37ce328de8c01bf27299fb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/energy-beam-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/sprites/energy-beam-large.png -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/energy-beam-large.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cob1616ang8i5" 6 | path="res://.godot/imported/energy-beam-large.png-fd4717290db10bb2f3050f1ef8c33f5f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Levels/Dungeon01/dark_wizard/sprites/energy-beam-large.png" 14 | dest_files=["res://.godot/imported/energy-beam-large.png-fd4717290db10bb2f3050f1ef8c33f5f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/energy-beam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/sprites/energy-beam.png -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/energy-beam.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dpdp2jjw18el2" 6 | path="res://.godot/imported/energy-beam.png-a853e602924b41f52d8b4b7c9151a828.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Levels/Dungeon01/dark_wizard/sprites/energy-beam.png" 14 | dest_files=["res://.godot/imported/energy-beam.png-a853e602924b41f52d8b4b7c9151a828.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/energy-explosion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/Dungeon01/dark_wizard/sprites/energy-explosion.png -------------------------------------------------------------------------------- /Levels/Dungeon01/dark_wizard/sprites/energy-explosion.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://droi6y3sam6u4" 6 | path="res://.godot/imported/energy-explosion.png-c7c4e6821534f3f324cf6adbd420048e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Levels/Dungeon01/dark_wizard/sprites/energy-explosion.png" 14 | dest_files=["res://.godot/imported/energy-explosion.png-c7c4e6821534f3f324cf6adbd420048e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Levels/level_transition.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://vlpiuopcomwi"] 2 | 3 | [ext_resource type="Script" uid="uid://bukaqvt4pao3a" path="res://Levels/scripts/level_transition.gd" id="1_qr8du"] 4 | 5 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_qauyy"] 6 | resource_local_to_scene = true 7 | size = Vector2(32, 64) 8 | 9 | [node name="LevelTransition" type="Area2D"] 10 | collision_layer = 0 11 | monitorable = false 12 | script = ExtResource("1_qr8du") 13 | 14 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 15 | position = Vector2(-16, 0) 16 | shape = SubResource("RectangleShape2D_qauyy") 17 | debug_color = Color(0.662745, 0, 1, 0.419608) 18 | -------------------------------------------------------------------------------- /Levels/level_transition_interact.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cecpvxcr0tved"] 2 | 3 | [ext_resource type="Script" uid="uid://dcntpfvw0e4a0" path="res://Levels/scripts/level_transition_interact.gd" id="1_3citu"] 4 | 5 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_iilt6"] 6 | resource_local_to_scene = true 7 | size = Vector2(32, 32) 8 | 9 | [node name="LevelTransitionInteract" type="Area2D"] 10 | collision_layer = 0 11 | collision_mask = 4 12 | monitorable = false 13 | script = ExtResource("1_3citu") 14 | 15 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 16 | position = Vector2(0, -16) 17 | shape = SubResource("RectangleShape2D_iilt6") 18 | debug_color = Color(0.662745, 0, 1, 0.419608) 19 | -------------------------------------------------------------------------------- /Levels/music/example_music_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/music/example_music_01.ogg -------------------------------------------------------------------------------- /Levels/music/example_music_01.ogg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="oggvorbisstr" 4 | type="AudioStreamOggVorbis" 5 | uid="uid://io7jxqk648xa" 6 | path="res://.godot/imported/example_music_01.ogg-5737df881e2a9f358d875b20ff14c265.oggvorbisstr" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/music/example_music_01.ogg" 11 | dest_files=["res://.godot/imported/example_music_01.ogg-5737df881e2a9f358d875b20ff14c265.oggvorbisstr"] 12 | 13 | [params] 14 | 15 | loop=true 16 | loop_offset=0.0 17 | bpm=0.0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /Levels/music/example_music_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/music/example_music_02.ogg -------------------------------------------------------------------------------- /Levels/music/example_music_02.ogg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="oggvorbisstr" 4 | type="AudioStreamOggVorbis" 5 | uid="uid://bg0uwtt8v0qps" 6 | path="res://.godot/imported/example_music_02.ogg-44548dcf0a569b1cab0c599c76d8ddb1.oggvorbisstr" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/music/example_music_02.ogg" 11 | dest_files=["res://.godot/imported/example_music_02.ogg-44548dcf0a569b1cab0c599c76d8ddb1.oggvorbisstr"] 12 | 13 | [params] 14 | 15 | loop=true 16 | loop_offset=0.0 17 | bpm=0.0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /Levels/music/example_music_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Levels/music/example_music_03.ogg -------------------------------------------------------------------------------- /Levels/music/example_music_03.ogg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="oggvorbisstr" 4 | type="AudioStreamOggVorbis" 5 | uid="uid://bss1hbkoufxql" 6 | path="res://.godot/imported/example_music_03.ogg-c44c87950432cfc97419df968e4b022b.oggvorbisstr" 7 | 8 | [deps] 9 | 10 | source_file="res://Levels/music/example_music_03.ogg" 11 | dest_files=["res://.godot/imported/example_music_03.ogg-c44c87950432cfc97419df968e4b022b.oggvorbisstr"] 12 | 13 | [params] 14 | 15 | loop=true 16 | loop_offset=0.0 17 | bpm=0.0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /Levels/player_spawn.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://dr4blo7ya448q"] 2 | 3 | [ext_resource type="Script" uid="uid://jdnxjygmgenq" path="res://Levels/scripts/player_spawn.gd" id="1_3xp62"] 4 | [ext_resource type="Texture2D" uid="uid://d3nmq8hjxv1d6" path="res://Player/Sprites/player_sprite.png" id="2_mcbia"] 5 | 6 | [node name="PlayerSpawn" type="Node2D"] 7 | script = ExtResource("1_3xp62") 8 | 9 | [node name="Sprite2D" type="Sprite2D" parent="."] 10 | modulate = Color(0.298039, 1, 0.431373, 0.796078) 11 | position = Vector2(0, -20) 12 | texture = ExtResource("2_mcbia") 13 | hframes = 16 14 | vframes = 8 15 | -------------------------------------------------------------------------------- /Levels/scripts/level.gd: -------------------------------------------------------------------------------- 1 | class_name Level extends Node2D 2 | 3 | @export var music : AudioStream 4 | 5 | 6 | 7 | func _ready() -> void: 8 | self.y_sort_enabled = true 9 | PlayerManager.set_as_parent( self ) 10 | LevelManager.level_load_started.connect( _free_level ) 11 | AudioManager.play_music( music ) 12 | 13 | 14 | 15 | func _free_level() -> void: 16 | PlayerManager.unparent_player( self ) 17 | queue_free() 18 | -------------------------------------------------------------------------------- /Levels/scripts/level.gd.uid: -------------------------------------------------------------------------------- 1 | uid://d2eyblbal755o 2 | -------------------------------------------------------------------------------- /Levels/scripts/level_transition.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bukaqvt4pao3a 2 | -------------------------------------------------------------------------------- /Levels/scripts/level_transition_interact.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name LevelTransitionInteract extends LevelTransition 3 | 4 | 5 | func _ready() -> void: 6 | super() 7 | area_entered.connect( _on_area_entered ) 8 | area_exited.connect( _on_area_exited ) 9 | 10 | 11 | func player_interact() -> void: 12 | _player_entered( PlayerManager.player ) 13 | pass 14 | 15 | 16 | func _on_area_entered( _a : Area2D ) -> void: 17 | PlayerManager.interact_pressed.connect( player_interact ) 18 | pass 19 | 20 | 21 | func _on_area_exited( _a : Area2D ) -> void: 22 | PlayerManager.interact_pressed.disconnect( player_interact ) 23 | pass 24 | 25 | 26 | func _update_area() -> void: 27 | super() 28 | collision_shape.shape.size = Vector2( 32, 32 ) 29 | -------------------------------------------------------------------------------- /Levels/scripts/level_transition_interact.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dcntpfvw0e4a0 2 | -------------------------------------------------------------------------------- /Levels/scripts/player_spawn.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | 4 | func _ready() -> void: 5 | visible = false 6 | if PlayerManager.player_spawned == false: 7 | PlayerManager.set_player_position( global_position ) 8 | PlayerManager.player_spawned = true 9 | -------------------------------------------------------------------------------- /Levels/scripts/player_spawn.gd.uid: -------------------------------------------------------------------------------- 1 | uid://jdnxjygmgenq 2 | -------------------------------------------------------------------------------- /Player/Sprites/AttackSprite01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/AttackSprite01.png -------------------------------------------------------------------------------- /Player/Sprites/AttackSprite01.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b3nnlf0oh5oco" 6 | path="res://.godot/imported/AttackSprite01.png-a353dabb17e684057aa9decebf8dcc22.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/AttackSprite01.png" 14 | dest_files=["res://.godot/imported/AttackSprite01.png-a353dabb17e684057aa9decebf8dcc22.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/ExamplePlayerSprite.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ccvm0bl46hnwo" 6 | path="res://.godot/imported/ExamplePlayerSprite.png-1a0713d9e212d397b05cebe8c8b9b26c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/ExamplePlayerSprite.png" 14 | dest_files=["res://.godot/imported/ExamplePlayerSprite.png-1a0713d9e212d397b05cebe8c8b9b26c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/PlayerSprite02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b3cfpikyg8h3v" 6 | path="res://.godot/imported/PlayerSprite02.png-ce9d001717ebf7bf2d0b7f359222e7d8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/PlayerSprite02.png" 14 | dest_files=["res://.godot/imported/PlayerSprite02.png-ce9d001717ebf7bf2d0b7f359222e7d8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/Shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/Shadow.png -------------------------------------------------------------------------------- /Player/Sprites/Shadow.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dxda6pdclrpa" 6 | path="res://.godot/imported/Shadow.png-30e68cc453bd3dfb3929821f6e4fa4be.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/Shadow.png" 14 | dest_files=["res://.godot/imported/Shadow.png-30e68cc453bd3dfb3929821f6e4fa4be.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/boomerang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/boomerang.png -------------------------------------------------------------------------------- /Player/Sprites/boomerang.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c3fker5i76tw0" 6 | path="res://.godot/imported/boomerang.png-9088f0d3a0aec2b6802d7d24e629971f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/boomerang.png" 14 | dest_files=["res://.godot/imported/boomerang.png-9088f0d3a0aec2b6802d7d24e629971f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/player_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/player_sprite.png -------------------------------------------------------------------------------- /Player/Sprites/player_sprite.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d3nmq8hjxv1d6" 6 | path="res://.godot/imported/player_sprite.png-b725e88656dbe70f8a11b96831749ee0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/player_sprite.png" 14 | dest_files=["res://.godot/imported/player_sprite.png-b725e88656dbe70f8a11b96831749ee0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/player_sprite_ninja_suit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/player_sprite_ninja_suit.png -------------------------------------------------------------------------------- /Player/Sprites/player_sprite_ninja_suit.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ccbphnkvbmi6h" 6 | path="res://.godot/imported/player_sprite_ninja_suit.png-35646021292b64dcdf16f245805f4e7b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/player_sprite_ninja_suit.png" 14 | dest_files=["res://.godot/imported/player_sprite_ninja_suit.png-35646021292b64dcdf16f245805f4e7b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/player_sprite_sword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/player_sprite_sword.png -------------------------------------------------------------------------------- /Player/Sprites/player_sprite_sword.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://fg8lhaso7usk" 6 | path="res://.godot/imported/player_sprite_sword.png-e1f60c386845e8034c0ee67631ddc862.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/player_sprite_sword.png" 14 | dest_files=["res://.godot/imported/player_sprite_sword.png-e1f60c386845e8034c0ee67631ddc862.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/player_sprite_sword_katana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/player_sprite_sword_katana.png -------------------------------------------------------------------------------- /Player/Sprites/player_sprite_sword_katana.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bd0c644w7wme2" 6 | path="res://.godot/imported/player_sprite_sword_katana.png-1e9a28bf9f12e12f20f20bce7b57eeec.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/player_sprite_sword_katana.png" 14 | dest_files=["res://.godot/imported/player_sprite_sword_katana.png-1e9a28bf9f12e12f20f20bce7b57eeec.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/Sprites/spin_effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/Sprites/spin_effect.png -------------------------------------------------------------------------------- /Player/Sprites/spin_effect.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bqlto87dhifhn" 6 | path="res://.godot/imported/spin_effect.png-a7fd265f1c1a150875f7ca9a4fb75d67.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Player/Sprites/spin_effect.png" 14 | dest_files=["res://.godot/imported/spin_effect.png-a7fd265f1c1a150875f7ca9a4fb75d67.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Player/audio/SwordSwoosh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/SwordSwoosh.wav -------------------------------------------------------------------------------- /Player/audio/SwordSwoosh.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://djgew73osuei" 6 | path="res://.godot/imported/SwordSwoosh.wav-becdece7c98872eab8b1ea06def51f2a.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/SwordSwoosh.wav" 11 | dest_files=["res://.godot/imported/SwordSwoosh.wav-becdece7c98872eab8b1ea06def51f2a.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/boomerang.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/boomerang.wav -------------------------------------------------------------------------------- /Player/audio/boomerang.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dtv7aveay4k4" 6 | path="res://.godot/imported/boomerang.wav-3388d0c1e54c17a149dba44c767efbb8.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/boomerang.wav" 11 | dest_files=["res://.godot/imported/boomerang.wav-3388d0c1e54c17a149dba44c767efbb8.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=2 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/catch.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/catch.wav -------------------------------------------------------------------------------- /Player/audio/catch.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://cl4y2eoe5b40w" 6 | path="res://.godot/imported/catch.wav-d992d65b3e3b8aa08a89fa1be6e8d8dc.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/catch.wav" 11 | dest_files=["res://.godot/imported/catch.wav-d992d65b3e3b8aa08a89fa1be6e8d8dc.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/charged.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/charged.wav -------------------------------------------------------------------------------- /Player/audio/charged.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://cyb6cn6cb5eck" 6 | path="res://.godot/imported/charged.wav-f1e0f89c7bb8e403f76b782a70957e0f.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/charged.wav" 11 | dest_files=["res://.godot/imported/charged.wav-f1e0f89c7bb8e403f76b782a70957e0f.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/exhausted.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/exhausted.wav -------------------------------------------------------------------------------- /Player/audio/exhausted.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://d2m7c7jmeedu0" 6 | path="res://.godot/imported/exhausted.wav-72387b5194860430386d439652ccc6e1.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/exhausted.wav" 11 | dest_files=["res://.godot/imported/exhausted.wav-72387b5194860430386d439652ccc6e1.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/hit_player.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/hit_player.wav -------------------------------------------------------------------------------- /Player/audio/hit_player.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://cawdgk7twqcxt" 6 | path="res://.godot/imported/hit_player.wav-112a2f79b456cf96e06cd8ba004e96de.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/hit_player.wav" 11 | dest_files=["res://.godot/imported/hit_player.wav-112a2f79b456cf96e06cd8ba004e96de.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/hm_.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/hm_.wav -------------------------------------------------------------------------------- /Player/audio/hm_.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://c0er10d7pdijg" 6 | path="res://.godot/imported/hm_.wav-db72e40ec721be451fd0257ecbd3c9a9.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/hm_.wav" 11 | dest_files=["res://.godot/imported/hm_.wav-db72e40ec721be451fd0257ecbd3c9a9.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/hmm.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/hmm.wav -------------------------------------------------------------------------------- /Player/audio/hmm.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bq4hg6ctjs2dw" 6 | path="res://.godot/imported/hmm.wav-a2878f723ef69d6046df5491291376a0.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/hmm.wav" 11 | dest_files=["res://.godot/imported/hmm.wav-a2878f723ef69d6046df5491291376a0.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/huwh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/huwh.wav -------------------------------------------------------------------------------- /Player/audio/huwh.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dkbhvl50ijrnx" 6 | path="res://.godot/imported/huwh.wav-ab1bfb8267f893444d4870b0e8864bfb.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/huwh.wav" 11 | dest_files=["res://.godot/imported/huwh.wav-ab1bfb8267f893444d4870b0e8864bfb.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/hwaah.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/hwaah.wav -------------------------------------------------------------------------------- /Player/audio/hwaah.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://db7poj5jgjgy" 6 | path="res://.godot/imported/hwaah.wav-b437c94c41a1c0575c567e28da579d19.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/hwaah.wav" 11 | dest_files=["res://.godot/imported/hwaah.wav-b437c94c41a1c0575c567e28da579d19.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/hyah.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/hyah.wav -------------------------------------------------------------------------------- /Player/audio/hyah.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://l23vvwtmydo8" 6 | path="res://.godot/imported/hyah.wav-bb7f969085160dadec0e1581e6958949.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/hyah.wav" 11 | dest_files=["res://.godot/imported/hyah.wav-bb7f969085160dadec0e1581e6958949.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/level_up_jingle.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/level_up_jingle.wav -------------------------------------------------------------------------------- /Player/audio/level_up_jingle.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bohmwbmrmqwd5" 6 | path="res://.godot/imported/level_up_jingle.wav-576b67c631baecb321947eed005c3234.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/level_up_jingle.wav" 11 | dest_files=["res://.godot/imported/level_up_jingle.wav-576b67c631baecb321947eed005c3234.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/spin-attack.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/spin-attack.wav -------------------------------------------------------------------------------- /Player/audio/spin-attack.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dxq1ukv3mr2q1" 6 | path="res://.godot/imported/spin-attack.wav-a548ae9fa2cf58aa56036c73c3cef9ec.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/spin-attack.wav" 11 | dest_files=["res://.godot/imported/spin-attack.wav-a548ae9fa2cf58aa56036c73c3cef9ec.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/audio/throw.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Player/audio/throw.wav -------------------------------------------------------------------------------- /Player/audio/throw.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://ccg1xl4m2ge8o" 6 | path="res://.godot/imported/throw.wav-a2865b71cfa5356703288e524d114a9b.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Player/audio/throw.wav" 11 | dest_files=["res://.godot/imported/throw.wav-a2865b71cfa5356703288e524d114a9b.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Player/scripts/abilities/abilities.gd: -------------------------------------------------------------------------------- 1 | class_name PlayerAbilities extends Node 2 | 3 | const BOOMERANG = preload("res://Player/boomerang.tscn") 4 | 5 | enum abilities { BOOMERANG, GRAPPLE } 6 | 7 | var selected_ability = abilities.BOOMERANG 8 | var player : Player 9 | var boomerang_instance : Boomerang = null 10 | 11 | 12 | 13 | func _ready() -> void: 14 | player = PlayerManager.player 15 | 16 | 17 | 18 | func _unhandled_input(event: InputEvent) -> void: 19 | if event.is_action_pressed( "ability" ): 20 | if selected_ability == abilities.BOOMERANG: 21 | boomerang_ability() 22 | pass 23 | 24 | 25 | func boomerang_ability() -> void: 26 | if boomerang_instance != null: 27 | return 28 | 29 | var _b = BOOMERANG.instantiate() as Boomerang 30 | player.add_sibling( _b ) 31 | _b.global_position = player.global_position 32 | 33 | var throw_direction = player.direction 34 | if throw_direction == Vector2.ZERO: 35 | throw_direction = player.cardinal_direction 36 | 37 | _b.throw( throw_direction ) 38 | boomerang_instance = _b 39 | pass 40 | 41 | 42 | -------------------------------------------------------------------------------- /Player/scripts/abilities/abilities.gd.uid: -------------------------------------------------------------------------------- 1 | uid://borh5gy3njj8k 2 | -------------------------------------------------------------------------------- /Player/scripts/abilities/boomerang.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ccuh77gau1yn8 2 | -------------------------------------------------------------------------------- /Player/scripts/player.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b7e6raial18mb 2 | -------------------------------------------------------------------------------- /Player/scripts/player_camera.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b6cf2mm5leuys 2 | -------------------------------------------------------------------------------- /Player/scripts/player_interactions_host.gd: -------------------------------------------------------------------------------- 1 | class_name PlayerInteractionsHost extends Node2D 2 | 3 | @onready var player : Player = $".." 4 | 5 | 6 | # Called when the node enters the scene tree for the first time. 7 | func _ready(): 8 | player.direction_changed.connect( _update_direction ) 9 | pass # Replace with function body. 10 | 11 | 12 | func _update_direction( new_direction : Vector2 ) -> void: 13 | match new_direction: 14 | Vector2.DOWN: 15 | rotation_degrees = 0 16 | Vector2.UP: 17 | rotation_degrees = 180 18 | Vector2.LEFT: 19 | rotation_degrees = 90 20 | Vector2.RIGHT: 21 | rotation_degrees = -90 22 | _: 23 | rotation_degrees = 0 24 | pass 25 | 26 | -------------------------------------------------------------------------------- /Player/scripts/player_interactions_host.gd.uid: -------------------------------------------------------------------------------- 1 | uid://uqapv8bltas2 2 | -------------------------------------------------------------------------------- /Player/scripts/player_sprite.gd: -------------------------------------------------------------------------------- 1 | extends Sprite2D 2 | 3 | const FRAME_COUNT : int = 128 4 | 5 | @onready var weapon_below: Sprite2D = $Sprite2D_Weapon_Below 6 | @onready var weapon_above: Sprite2D = $Sprite2D_Weapon_Above 7 | 8 | 9 | func _ready() -> void: 10 | PlayerManager.INVENTORY_DATA.equipment_changed.connect( _on_equipment_changed ) 11 | SaveManager.game_loaded.connect( _on_equipment_changed ) 12 | pass 13 | 14 | 15 | 16 | func _process( _delta: float ) -> void: 17 | weapon_below.frame = frame 18 | weapon_above.frame = frame + FRAME_COUNT 19 | pass 20 | 21 | 22 | 23 | func _on_equipment_changed() -> void: 24 | var equipment : Array[ SlotData ] = PlayerManager.INVENTORY_DATA.equipment_slots() 25 | texture = equipment[ 0 ].item_data.sprite_texture 26 | weapon_below.texture = equipment[ 1 ].item_data.sprite_texture 27 | weapon_above.texture = equipment[ 1 ].item_data.sprite_texture 28 | pass 29 | -------------------------------------------------------------------------------- /Player/scripts/player_sprite.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cfr1sv1mqq0lf 2 | -------------------------------------------------------------------------------- /Player/scripts/player_state_machine.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bl7bevj0k4spc 2 | -------------------------------------------------------------------------------- /Player/scripts/push_area.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | 3 | 4 | func _ready() -> void: 5 | body_entered.connect( _on_body_entered ) 6 | body_exited.connect( _on_body_exited ) 7 | 8 | 9 | func _on_body_entered( b : Node2D ) -> void: 10 | if b is PushableStatue: 11 | b.push_direction = PlayerManager.player.direction 12 | pass 13 | 14 | 15 | func _on_body_exited( b : Node2D ) -> void: 16 | if b is PushableStatue: 17 | b.push_direction = Vector2.ZERO 18 | pass 19 | -------------------------------------------------------------------------------- /Player/scripts/push_area.gd.uid: -------------------------------------------------------------------------------- 1 | uid://drmpr3xpyacm1 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state.gd: -------------------------------------------------------------------------------- 1 | class_name State extends Node 2 | 3 | ## Stores a reference to the player that this State belongs to 4 | static var player: Player 5 | static var state_machine: PlayerStateMachine 6 | 7 | func _ready(): 8 | pass # Replace with function body. 9 | 10 | 11 | ## What happens when we initialize this state? 12 | func init() -> void: 13 | pass 14 | 15 | 16 | ## What happens when the player enters this State? 17 | func enter() -> void: 18 | pass 19 | 20 | 21 | ## What happens when the player exits this State? 22 | func exit() -> void: 23 | pass 24 | 25 | 26 | ## What happens during the _process update in this State? 27 | func process( _delta : float ) -> State: 28 | return null 29 | 30 | 31 | ## What happens during the _physics_process update in this State? 32 | func physics( _delta : float ) -> State: 33 | return null 34 | 35 | 36 | ## What happens with input events in this State? 37 | func handle_input( _event: InputEvent ) -> State: 38 | return null 39 | -------------------------------------------------------------------------------- /Player/scripts/states/state.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dh33ungej8n6j 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_attack.gd.uid: -------------------------------------------------------------------------------- 1 | uid://brxt453p4en6r 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_carry.gd.uid: -------------------------------------------------------------------------------- 1 | uid://by4twmo0mdixl 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_charge_attack.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cor72ltffhvg4 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_dash.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dbo3c1w031clu 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_death.gd: -------------------------------------------------------------------------------- 1 | class_name State_Death extends State 2 | 3 | @export var exhaust_audio : AudioStream 4 | @onready var audio : AudioStreamPlayer2D = $"../../Audio/AudioStreamPlayer2D" 5 | 6 | 7 | 8 | ## What happens when we initialize this state? 9 | func init() -> void: 10 | pass 11 | 12 | 13 | ## What happens when the player enters this State? 14 | func enter() -> void: 15 | player.animation_player.play( "death" ) 16 | audio.stream = exhaust_audio 17 | audio.play() 18 | PlayerHud.show_game_over_screen() 19 | AudioManager.play_music( null ) 20 | pass 21 | 22 | 23 | ## What happens when the player exits this State? 24 | func exit() -> void: 25 | pass 26 | 27 | 28 | ## What happens during the _process update in this State? 29 | func process( _delta : float ) -> State: 30 | player.velocity = Vector2.ZERO 31 | return null 32 | 33 | 34 | ## What happens during the _physics_process update in this State? 35 | func physics( _delta : float ) -> State: 36 | return null 37 | 38 | 39 | ## What happens with input events in this State? 40 | func handle_input( _event: InputEvent ) -> State: 41 | return null 42 | -------------------------------------------------------------------------------- /Player/scripts/states/state_death.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dbm16y8n8apf 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_idle.gd.uid: -------------------------------------------------------------------------------- 1 | uid://qwkletx8xkdj 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_lift.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dx15lk6y18tbj 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_stun.gd.uid: -------------------------------------------------------------------------------- 1 | uid://balw8bf16tnb1 2 | -------------------------------------------------------------------------------- /Player/scripts/states/state_walk.gd.uid: -------------------------------------------------------------------------------- 1 | uid://6je8bp3f2twi 2 | -------------------------------------------------------------------------------- /Props/Plants/plant.gd: -------------------------------------------------------------------------------- 1 | class_name Plant extends Node2D 2 | 3 | @onready var animation_player: AnimationPlayer = $AnimationPlayer 4 | 5 | 6 | # Called when the node enters the scene tree for the first time. 7 | func _ready(): 8 | $HitBox.damaged.connect( take_damage ) 9 | pass # Replace with function body. 10 | 11 | 12 | func take_damage( _damage : HurtBox ) -> void: 13 | animation_player.play("destroy") 14 | await animation_player.animation_finished 15 | queue_free() 16 | pass 17 | 18 | -------------------------------------------------------------------------------- /Props/Plants/plant.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dc2ole5s83b38 2 | -------------------------------------------------------------------------------- /Props/Sprites/Props.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Props/Sprites/Props.png -------------------------------------------------------------------------------- /Props/Sprites/Props.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cvm3p4rqs1a8y" 6 | path="res://.godot/imported/Props.png-64d9c2c8cfc74aa6d4ef206e2ca73999.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Props/Sprites/Props.png" 14 | dest_files=["res://.godot/imported/Props.png-64d9c2c8cfc74aa6d4ef206e2ca73999.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Props/pot/pot_destroy.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Props/pot/pot_destroy.wav -------------------------------------------------------------------------------- /Props/pot/pot_destroy.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://6i4co4xfo64" 6 | path="res://.godot/imported/pot_destroy.wav-5e48f0021b10345ffed806a554b0b0db.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://Props/pot/pot_destroy.wav" 11 | dest_files=["res://.godot/imported/pot_destroy.wav-5e48f0021b10345ffed806a554b0b0db.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /Props/torches/torch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Props/torches/torch.png -------------------------------------------------------------------------------- /Props/torches/torch.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dhrq64arl0j8q" 6 | path="res://.godot/imported/torch.png-0eb2a8ae799f5567fa8bfa615dff75be.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Props/torches/torch.png" 14 | dest_files=["res://.godot/imported/torch.png-0eb2a8ae799f5567fa8bfa615dff75be.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Props/torches/torch_light_flicker.gd: -------------------------------------------------------------------------------- 1 | extends PointLight2D 2 | 3 | 4 | 5 | func _ready() -> void: 6 | flicker() 7 | 8 | 9 | 10 | func flicker() -> void: 11 | energy = randf() * 0.1 + 0.9 12 | scale = Vector2( 1, 1 ) * energy 13 | await get_tree().create_timer( 0.1333 ).timeout 14 | flicker() 15 | pass 16 | -------------------------------------------------------------------------------- /Props/torches/torch_light_flicker.gd.uid: -------------------------------------------------------------------------------- 1 | uid://d3qwjb8j7b0xq 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 2D Action Adventure RPG Tutorial 4 | 5 | *Michael Games /// https://www.youtube.com/@MichaelGamesOfficial /// https://michaelgames.itch.io/* 6 | 7 | Code Repository for the Michael Games Action Adventure RPG Tutorial Series project. 8 | 9 | This Repository contains the complete project (currently under development) for my YouTube tutorial series. 10 | 11 | The series covers how to build a top down 2D game that features action, adventure and light RPG mechanics, in Godot 4 using GD Script. 12 | 13 | Tutorial Series Playlist: https://www.youtube.com/playlist?list=PLfcCiyd_V9GH8M9xd_QKlyU8jryGcy3Xa 14 | -------------------------------------------------------------------------------- /Tile Maps/Sprites/Grass-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Tile Maps/Sprites/Grass-01.png -------------------------------------------------------------------------------- /Tile Maps/Sprites/Grass-01.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d01qv0qqg01ba" 6 | path="res://.godot/imported/Grass-01.png-41eec86b62a9dad25022328ee9362f55.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Tile Maps/Sprites/Grass-01.png" 14 | dest_files=["res://.godot/imported/Grass-01.png-41eec86b62a9dad25022328ee9362f55.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Tile Maps/Sprites/dungeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Tile Maps/Sprites/dungeon.png -------------------------------------------------------------------------------- /Tile Maps/Sprites/dungeon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cnpolkv2ibqxu" 6 | path="res://.godot/imported/dungeon.png-76896205d5527f507b849928a7fc1b06.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Tile Maps/Sprites/dungeon.png" 14 | dest_files=["res://.godot/imported/dungeon.png-76896205d5527f507b849928a7fc1b06.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Tile Maps/Sprites/dungeon_entrance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Tile Maps/Sprites/dungeon_entrance.png -------------------------------------------------------------------------------- /Tile Maps/Sprites/dungeon_entrance.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://fwby631k8pda" 6 | path="res://.godot/imported/dungeon_entrance.png-3a41f9bcbb257274e25be365fad17f0e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Tile Maps/Sprites/dungeon_entrance.png" 14 | dest_files=["res://.godot/imported/dungeon_entrance.png-3a41f9bcbb257274e25be365fad17f0e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Tile Maps/Sprites/shop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/Tile Maps/Sprites/shop.png -------------------------------------------------------------------------------- /Tile Maps/Sprites/shop.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bemeay5b84y1p" 6 | path="res://.godot/imported/shop.png-a1a0504b57c95772d3352fc745a2f497.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://Tile Maps/Sprites/shop.png" 14 | dest_files=["res://.godot/imported/shop.png-a1a0504b57c95772d3352fc745a2f497.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /Tile Maps/level_tile_map_layer.gd: -------------------------------------------------------------------------------- 1 | class_name LevelTileMapLayer extends TileMapLayer 2 | 3 | @export var tile_size : float = 32 4 | @export var update_bounds : bool = true 5 | 6 | 7 | # Called when the node enters the scene tree for the first time. 8 | func _ready(): 9 | if update_bounds: 10 | LevelManager.change_tilemap_bounds( _get_tilemap_bounds() ) 11 | pass # Replace with function body. 12 | 13 | 14 | func _get_tilemap_bounds() -> Array[ Vector2 ]: 15 | var bounds : Array[ Vector2 ] = [] 16 | bounds.append( 17 | Vector2( get_used_rect().position * tile_size ) + position 18 | ) 19 | bounds.append( 20 | Vector2( get_used_rect().end * tile_size ) + position 21 | ) 22 | return bounds 23 | -------------------------------------------------------------------------------- /Tile Maps/level_tile_map_layer.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bwx222a4l2s5v 2 | -------------------------------------------------------------------------------- /aarpg-tutorial-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/aarpg-tutorial-icon.png -------------------------------------------------------------------------------- /aarpg-tutorial-icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://jquio1mxdgjw" 6 | path="res://.godot/imported/aarpg-tutorial-icon.png-286157c8631197443c482be9b8a523a9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://aarpg-tutorial-icon.png" 14 | dest_files=["res://.godot/imported/aarpg-tutorial-icon.png-286157c8631197443c482be9b8a523a9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/cursor.png -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/cursor.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cgsvi1hd4ou18" 6 | path="res://.godot/imported/cursor.png-523f4751fd3a5c9e9978fd306600ef38.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/michael_games_editor_plugins/assets/cursor.png" 14 | dest_files=["res://.godot/imported/cursor.png-523f4751fd3a5c9e9978fd306600ef38.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Bold.ttf -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Bold.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://b0udh2pruq7p0" 6 | path="res://.godot/imported/LibreBaskerville-Bold.ttf-13352698c09b1c7e9d977b19bac486c9.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Bold.ttf" 11 | dest_files=["res://.godot/imported/LibreBaskerville-Bold.ttf-13352698c09b1c7e9d977b19bac486c9.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Italic.ttf -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Italic.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://df3pvj6w4celp" 6 | path="res://.godot/imported/LibreBaskerville-Italic.ttf-3e7de74646b3c3b2c3c6c93d540a919b.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Italic.ttf" 11 | dest_files=["res://.godot/imported/LibreBaskerville-Italic.ttf-3e7de74646b3c3b2c3c6c93d540a919b.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Regular.ttf -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Regular.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://b1jsd0xtoslsf" 6 | path="res://.godot/imported/LibreBaskerville-Regular.ttf-b4a443d4d7263876b08cd1b051a6d2c4.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/michael_games_editor_plugins/assets/fonts/LibreBaskerville-Regular.ttf" 11 | dest_files=["res://.godot/imported/LibreBaskerville-Regular.ttf-b4a443d4d7263876b08cd1b051a6d2c4.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/Oswald-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/fonts/Oswald-VariableFont_wght.ttf -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/Oswald-VariableFont_wght.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://brgumcgqqwy6" 6 | path="res://.godot/imported/Oswald-VariableFont_wght.ttf-d7762be38755aeaa69ba06b15cd38f16.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/michael_games_editor_plugins/assets/fonts/Oswald-VariableFont_wght.ttf" 11 | dest_files=["res://.godot/imported/Oswald-VariableFont_wght.ttf-d7762be38755aeaa69ba06b15cd38f16.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/m6x11.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/fonts/m6x11.ttf -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/m6x11.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://be1n6lth2hx0h" 6 | path="res://.godot/imported/m6x11.ttf-f27cbb8c8af3befec071dbe5e2a41588.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/michael_games_editor_plugins/assets/fonts/m6x11.ttf" 11 | dest_files=["res://.godot/imported/m6x11.ttf-f27cbb8c8af3befec071dbe5e2a41588.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=0 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/m6x11plus.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/fonts/m6x11plus.ttf -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/fonts/m6x11plus.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://c5ee0dl2lopao" 6 | path="res://.godot/imported/m6x11plus.ttf-ca77d717aed731e6584d173e0106b6f3.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/michael_games_editor_plugins/assets/fonts/m6x11plus.ttf" 11 | dest_files=["res://.godot/imported/m6x11plus.ttf-ca77d717aed731e6584d173e0106b6f3.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=0 17 | generate_mipmaps=false 18 | disable_embedded_bitmaps=true 19 | multichannel_signed_distance_field=false 20 | msdf_pixel_range=8 21 | msdf_size=48 22 | allow_system_fallback=true 23 | force_autohinter=false 24 | hinting=1 25 | subpixel_positioning=1 26 | keep_rounding_remainders=true 27 | oversampling=0.0 28 | Fallbacks=null 29 | fallbacks=[] 30 | Compress=null 31 | compress=true 32 | preload=[] 33 | language_support={} 34 | script_support={} 35 | opentype_features={} 36 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/addons/michael_games_editor_plugins/assets/triangle.png -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/assets/triangle.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b615v4yepa33b" 6 | path="res://.godot/imported/triangle.png-6c359cfe07033c9f14c93c3a892e62f6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/michael_games_editor_plugins/assets/triangle.png" 14 | dest_files=["res://.godot/imported/triangle.png-6c359cfe07033c9f14c93c3a892e62f6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/juice_my_editor.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | var juice_box 5 | var juice_notifs : JuiceNotifs 6 | var profile_control : Control 7 | 8 | func _enter_tree() -> void: 9 | juice_notifs = preload("res://addons/michael_games_editor_plugins/juice_notifs.tscn").instantiate() as JuiceNotifs 10 | get_tree().root.add_child( juice_notifs ) 11 | scene_changed.connect( _on_scene_changed ) 12 | profile_control = load("res://addons/michael_games_editor_plugins/stream_image_backdrop.tscn").instantiate() as Control 13 | add_control_to_dock( EditorPlugin.DOCK_SLOT_RIGHT_BL, profile_control ) 14 | pass 15 | 16 | 17 | func _on_scene_changed( n ) -> void: 18 | juice_notifs.show_scene_notification( n ) 19 | pass 20 | 21 | 22 | func _exit_tree() -> void: 23 | juice_notifs.queue_free() 24 | remove_control_from_docks( profile_control ) 25 | profile_control.queue_free() 26 | pass 27 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/juice_my_editor.gd.uid: -------------------------------------------------------------------------------- 1 | uid://662j8b58i3ko 2 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/juice_my_editor.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://uqogtk7q00he"] 2 | 3 | [ext_resource type="Script" uid="uid://7kgvmvfhnacx" path="res://addons/michael_games_editor_plugins/juice_my_editor_node.gd" id="1_lggn6"] 4 | 5 | [node name="JuiceMyEditor" type="Control"] 6 | layout_mode = 3 7 | anchors_preset = 0 8 | mouse_filter = 2 9 | script = ExtResource("1_lggn6") 10 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/juice_my_editor_node.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Control 3 | 4 | var file_system_dock : FileSystemDock 5 | var editor_file_system : EditorFileSystem 6 | var editor_plugin : EditorPlugin 7 | 8 | 9 | func _ready() -> void: 10 | file_system_dock = EditorInterface.get_file_system_dock() 11 | editor_file_system = EditorInterface.get_resource_filesystem() 12 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/juice_my_editor_node.gd.uid: -------------------------------------------------------------------------------- 1 | uid://7kgvmvfhnacx 2 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/juice_notifs.gd.uid: -------------------------------------------------------------------------------- 1 | uid://3jcw0bumjb4f 2 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Michael Games Editor Plugins" 4 | description="" 5 | author="Michael Games" 6 | version="" 7 | script="juice_my_editor.gd" 8 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/shortcut_label.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name ShortcutLabel extends Control 3 | 4 | signal on_destroy 5 | 6 | var val : String = "" 7 | 8 | @onready var shortcut_label: Label = %ShortcutLabel 9 | @onready var timer: Timer = $Timer 10 | @onready var animation_player: AnimationPlayer = $AnimationPlayer 11 | 12 | 13 | func _ready() -> void: 14 | animation_player.play("show") 15 | timer.timeout.connect( destroy_me ) 16 | 17 | 18 | func set_label( _val : String ) -> void: 19 | val = _val 20 | shortcut_label.text = format_text( _val ) 21 | 22 | 23 | func format_text( _str : String ) -> String: 24 | return _str.replace("+", " + ") 25 | 26 | 27 | func destroy_me() -> void: 28 | animation_player.play("hide") 29 | await animation_player.animation_finished 30 | on_destroy.emit() 31 | queue_free() 32 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/shortcut_label.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bk624dgiwd3ro 2 | -------------------------------------------------------------------------------- /addons/michael_games_editor_plugins/stream_image_backdrop.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bavc6b2xl7quc 2 | -------------------------------------------------------------------------------- /default_bus_layout.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="AudioBusLayout" format=3 uid="uid://dpd6838vjdkdh"] 2 | 3 | [resource] 4 | bus/1/name = &"SFX" 5 | bus/1/solo = false 6 | bus/1/mute = false 7 | bus/1/bypass_fx = false 8 | bus/1/volume_db = 0.0 9 | bus/1/send = &"Master" 10 | bus/2/name = &"Music" 11 | bus/2/solo = false 12 | bus/2/mute = true 13 | bus/2/bypass_fx = false 14 | bus/2/volume_db = -10.0692 15 | bus/2/send = &"Master" 16 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bgv1wnf180t7p" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /notes.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | X) Initiate quest with Nero 5 | X) Quest should make the cave/dungeon available 6 | --) Fixed the Statue 7 | 3) Connect/integtrate the boss into the quest 8 | 4) Add a discoverable magical flute item 9 | 5) Complete the quest by returning the flute to Nero (NPC) 10 | -------------------------------------------------------------------------------- /npc/00_npcs/00_hero.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="NPCResource" load_steps=4 format=3 uid="uid://cdc3sykvmnn27"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dgc6kndy4kcip" path="res://npc/sprites/portraits/hero_portrait.png" id="1_pj24m"] 4 | [ext_resource type="Script" uid="uid://vdkoe1ao4p7n" path="res://npc/scripts/npc_resource.gd" id="2_2ld5c"] 5 | [ext_resource type="Texture2D" uid="uid://dhh0vwwt33q08" path="res://npc/sprites/npc_sprite_02.png" id="3_jiuqv"] 6 | 7 | [resource] 8 | script = ExtResource("2_2ld5c") 9 | npc_name = "Hero" 10 | sprite = ExtResource("3_jiuqv") 11 | portrait = ExtResource("1_pj24m") 12 | dialog_audio_pitch = 1.0 13 | -------------------------------------------------------------------------------- /npc/00_npcs/npc_01.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="NPCResource" load_steps=4 format=3 uid="uid://csvi3x1wp3gy6"] 2 | 3 | [ext_resource type="Script" uid="uid://vdkoe1ao4p7n" path="res://npc/scripts/npc_resource.gd" id="1_pd3hp"] 4 | [ext_resource type="Texture2D" uid="uid://cbjnt02b5xojv" path="res://npc/sprites/portraits/npc_portrait_01.png" id="1_y8f7e"] 5 | [ext_resource type="Texture2D" uid="uid://2701oi0fk3t0" path="res://npc/sprites/npc_sprite.png" id="3_epnud"] 6 | 7 | [resource] 8 | script = ExtResource("1_pd3hp") 9 | npc_name = "Oren" 10 | sprite = ExtResource("3_epnud") 11 | portrait = ExtResource("1_y8f7e") 12 | dialog_audio_pitch = 0.5 13 | -------------------------------------------------------------------------------- /npc/00_npcs/npc_02.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="NPCResource" load_steps=4 format=3 uid="uid://bqfxxks18ou8u"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dtoir2hf614xm" path="res://npc/sprites/portraits/npc_portrait_02.png" id="1_lkxcd"] 4 | [ext_resource type="Script" uid="uid://vdkoe1ao4p7n" path="res://npc/scripts/npc_resource.gd" id="2_87af4"] 5 | [ext_resource type="Texture2D" uid="uid://dhh0vwwt33q08" path="res://npc/sprites/npc_sprite_02.png" id="3_jv0ng"] 6 | 7 | [resource] 8 | script = ExtResource("2_87af4") 9 | npc_name = "Nero" 10 | sprite = ExtResource("3_jv0ng") 11 | portrait = ExtResource("1_lkxcd") 12 | dialog_audio_pitch = 1.5 13 | -------------------------------------------------------------------------------- /npc/00_npcs/shopkeeper.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="NPCResource" load_steps=4 format=3 uid="uid://527g3dhfubbt"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://12bt811ovbyp" path="res://npc/sprites/portraits/portrait_placeholder.png" id="1_uk2ly"] 4 | [ext_resource type="Script" uid="uid://vdkoe1ao4p7n" path="res://npc/scripts/npc_resource.gd" id="1_ynxkf"] 5 | [ext_resource type="Texture2D" uid="uid://dsao26414cmyd" path="res://npc/sprites/shopkeeper.png" id="3_7yjm8"] 6 | 7 | [resource] 8 | script = ExtResource("1_ynxkf") 9 | npc_name = "Shopkeeper" 10 | sprite = ExtResource("3_7yjm8") 11 | portrait = ExtResource("1_uk2ly") 12 | dialog_audio_pitch = 1.8 13 | metadata/_custom_type_script = "uid://vdkoe1ao4p7n" 14 | -------------------------------------------------------------------------------- /npc/icons/npc.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bvwpnxupm5nwj" 6 | path="res://.godot/imported/npc.svg-c1901a2cf4f675a5f9bd6ab70c643b6a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/icons/npc.svg" 14 | dest_files=["res://.godot/imported/npc.svg-c1901a2cf4f675a5f9bd6ab70c643b6a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /npc/icons/npc_behavior.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bjiggc4wj3ni5" 6 | path="res://.godot/imported/npc_behavior.svg-f21146a4635496f2b3496fed5e1a5554.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/icons/npc_behavior.svg" 14 | dest_files=["res://.godot/imported/npc_behavior.svg-f21146a4635496f2b3496fed5e1a5554.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /npc/npc_behavior_patrol.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dpenv0euqqlkg"] 2 | 3 | [ext_resource type="Script" uid="uid://me4qx1l50fsb" path="res://npc/scripts/npc_behavior_patrol.gd" id="1_yln8h"] 4 | 5 | [node name="NpcBehaviorPatrol" type="Node2D"] 6 | script = ExtResource("1_yln8h") 7 | 8 | [node name="Timer" type="Timer" parent="."] 9 | one_shot = true 10 | -------------------------------------------------------------------------------- /npc/npc_behavior_wander.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://dapdr3ojo2pha"] 2 | 3 | [ext_resource type="Script" uid="uid://x152poqmwaa3" path="res://npc/scripts/npc_behavior_wander.gd" id="1_euo1i"] 4 | 5 | [sub_resource type="CircleShape2D" id="CircleShape2D_ox6xc"] 6 | radius = 32.0 7 | 8 | [node name="NpcWanderBehavior" type="Node2D"] 9 | script = ExtResource("1_euo1i") 10 | 11 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 12 | shape = SubResource("CircleShape2D_ox6xc") 13 | debug_color = Color(1, 0.788235, 0.223529, 0.0352941) 14 | -------------------------------------------------------------------------------- /npc/scripts/npc.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dtp7vb8p3dpd6 2 | -------------------------------------------------------------------------------- /npc/scripts/npc_behavior.gd: -------------------------------------------------------------------------------- 1 | @icon( "res://npc/icons/npc_behavior.svg" ) 2 | class_name NPCBehavior extends Node2D 3 | 4 | var npc : NPC 5 | 6 | 7 | 8 | func _ready() -> void: 9 | var p = get_parent() 10 | if p is NPC: 11 | npc = p as NPC 12 | npc.do_behavior_enabled.connect( start ) 13 | 14 | 15 | func start() -> void: 16 | pass 17 | -------------------------------------------------------------------------------- /npc/scripts/npc_behavior.gd.uid: -------------------------------------------------------------------------------- 1 | uid://k5ieq2ekegh6 2 | -------------------------------------------------------------------------------- /npc/scripts/npc_behavior_patrol.gd.uid: -------------------------------------------------------------------------------- 1 | uid://me4qx1l50fsb 2 | -------------------------------------------------------------------------------- /npc/scripts/npc_behavior_wander.gd.uid: -------------------------------------------------------------------------------- 1 | uid://x152poqmwaa3 2 | -------------------------------------------------------------------------------- /npc/scripts/npc_resource.gd: -------------------------------------------------------------------------------- 1 | class_name NPCResource extends Resource 2 | 3 | 4 | @export var npc_name : String = "" 5 | @export var sprite : Texture 6 | @export var portrait : Texture 7 | @export_range(0.5, 1.8, 0.02) var dialog_audio_pitch : float = 1.0 8 | -------------------------------------------------------------------------------- /npc/scripts/npc_resource.gd.uid: -------------------------------------------------------------------------------- 1 | uid://vdkoe1ao4p7n 2 | -------------------------------------------------------------------------------- /npc/scripts/patrol_location.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name PatrolLocation extends Node2D 3 | 4 | signal transform_changed 5 | 6 | @export var wait_time : float = 0.0 : 7 | set( v ): 8 | wait_time = v 9 | _update_wait_time_label() 10 | 11 | var target_position : Vector2 = Vector2.ZERO 12 | 13 | 14 | 15 | func _enter_tree() -> void: 16 | set_notify_transform( true ) 17 | 18 | 19 | func _notification( what: int ) -> void: 20 | if what == NOTIFICATION_TRANSFORM_CHANGED: 21 | transform_changed.emit() 22 | 23 | 24 | func _ready() -> void: 25 | target_position = global_position 26 | _update_wait_time_label() 27 | 28 | if Engine.is_editor_hint(): 29 | return 30 | 31 | $Sprite2D.queue_free() 32 | 33 | 34 | 35 | func update_label( _s : String ) -> void: 36 | $Sprite2D/Label.text = _s 37 | 38 | 39 | 40 | func update_line( next_location : Vector2 ) -> void: 41 | var line : Line2D = $Sprite2D/Line2D 42 | line.points[ 1 ] = next_location - position 43 | 44 | 45 | 46 | func _update_wait_time_label() -> void: 47 | if Engine.is_editor_hint(): 48 | $Sprite2D/Label2.text = "wait: " + str( snappedf( wait_time, 0.1 ) ) + "s" 49 | -------------------------------------------------------------------------------- /npc/scripts/patrol_location.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dwh2u1ajcyfw4 2 | -------------------------------------------------------------------------------- /npc/sprites/npc_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/npc_sprite.png -------------------------------------------------------------------------------- /npc/sprites/npc_sprite.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://2701oi0fk3t0" 6 | path="res://.godot/imported/npc_sprite.png-305fa6f1506fda7a3002293f984593d1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/npc_sprite.png" 14 | dest_files=["res://.godot/imported/npc_sprite.png-305fa6f1506fda7a3002293f984593d1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /npc/sprites/npc_sprite_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/npc_sprite_02.png -------------------------------------------------------------------------------- /npc/sprites/npc_sprite_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dhh0vwwt33q08" 6 | path="res://.godot/imported/npc_sprite_02.png-2ae7917210613fd6b8ea8320a52ee3ea.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/npc_sprite_02.png" 14 | dest_files=["res://.godot/imported/npc_sprite_02.png-2ae7917210613fd6b8ea8320a52ee3ea.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /npc/sprites/portraits/hero_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/portraits/hero_portrait.png -------------------------------------------------------------------------------- /npc/sprites/portraits/hero_portrait.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dgc6kndy4kcip" 6 | path="res://.godot/imported/hero_portrait.png-690f7643dd09529b2262fe4eca5e5cfa.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/portraits/hero_portrait.png" 14 | dest_files=["res://.godot/imported/hero_portrait.png-690f7643dd09529b2262fe4eca5e5cfa.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /npc/sprites/portraits/npc_portrait_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/portraits/npc_portrait_01.png -------------------------------------------------------------------------------- /npc/sprites/portraits/npc_portrait_01.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cbjnt02b5xojv" 6 | path="res://.godot/imported/npc_portrait_01.png-0d842fbb89fe27788e3aacb25efe8d8e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/portraits/npc_portrait_01.png" 14 | dest_files=["res://.godot/imported/npc_portrait_01.png-0d842fbb89fe27788e3aacb25efe8d8e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /npc/sprites/portraits/npc_portrait_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/portraits/npc_portrait_02.png -------------------------------------------------------------------------------- /npc/sprites/portraits/npc_portrait_02.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dtoir2hf614xm" 6 | path="res://.godot/imported/npc_portrait_02.png-86a1956206db42b673650875e4d3b765.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/portraits/npc_portrait_02.png" 14 | dest_files=["res://.godot/imported/npc_portrait_02.png-86a1956206db42b673650875e4d3b765.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /npc/sprites/portraits/portrait_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/portraits/portrait_placeholder.png -------------------------------------------------------------------------------- /npc/sprites/portraits/portrait_placeholder.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://12bt811ovbyp" 6 | path="res://.godot/imported/portrait_placeholder.png-fe3059b7305b9c22b310e3c0f74bbfaa.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/portraits/portrait_placeholder.png" 14 | dest_files=["res://.godot/imported/portrait_placeholder.png-fe3059b7305b9c22b310e3c0f74bbfaa.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /npc/sprites/shopkeeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/npc/sprites/shopkeeper.png -------------------------------------------------------------------------------- /npc/sprites/shopkeeper.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dsao26414cmyd" 6 | path="res://.godot/imported/shopkeeper.png-a35623c0bb382785ce6845fd7ee10a4a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://npc/sprites/shopkeeper.png" 14 | dest_files=["res://.godot/imported/shopkeeper.png-a35623c0bb382785ce6845fd7ee10a4a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /quests/scripts/global_quest_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b2st2ahvxhl3r 2 | -------------------------------------------------------------------------------- /quests/scripts/quest_resource.gd: -------------------------------------------------------------------------------- 1 | class_name Quest extends Resource 2 | 3 | @export var title : String 4 | @export_multiline var description : String 5 | 6 | @export var steps : Array[ String ] 7 | 8 | @export var reward_xp : int 9 | @export var reward_items : Array[ QuestRewardItem ] = [] 10 | -------------------------------------------------------------------------------- /quests/scripts/quest_resource.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ej3xbi7xbvg1 2 | -------------------------------------------------------------------------------- /quests/scripts/quest_reward_item.gd: -------------------------------------------------------------------------------- 1 | class_name QuestRewardItem extends Resource 2 | 3 | @export var item : ItemData 4 | @export var quantity : int = 1 5 | -------------------------------------------------------------------------------- /quests/scripts/quest_reward_item.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b73hijmin5dn2 2 | -------------------------------------------------------------------------------- /quests/short_quest.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="Quest" load_steps=3 format=3 uid="uid://bped8nmqt0pgm"] 2 | 3 | [ext_resource type="Script" uid="uid://b73hijmin5dn2" path="res://quests/scripts/quest_reward_item.gd" id="1_sq38t"] 4 | [ext_resource type="Script" uid="uid://ej3xbi7xbvg1" path="res://quests/scripts/quest_resource.gd" id="2_csw1s"] 5 | 6 | [resource] 7 | script = ExtResource("2_csw1s") 8 | title = "Short Quest" 9 | description = "An example short quest, with only one step required to complete it." 10 | steps = Array[String](["Complete Quest"]) 11 | reward_xp = 10 12 | reward_items = Array[ExtResource("1_sq38t")]([]) 13 | -------------------------------------------------------------------------------- /quests/utility_nodes/icons/quest_advance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/quests/utility_nodes/icons/quest_advance.png -------------------------------------------------------------------------------- /quests/utility_nodes/icons/quest_advance.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c5v0i0n6bupo0" 6 | path="res://.godot/imported/quest_advance.png-58f1da2c4057052d8ea5bbb36827bc16.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://quests/utility_nodes/icons/quest_advance.png" 14 | dest_files=["res://.godot/imported/quest_advance.png-58f1da2c4057052d8ea5bbb36827bc16.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /quests/utility_nodes/icons/quest_switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/quests/utility_nodes/icons/quest_switch.png -------------------------------------------------------------------------------- /quests/utility_nodes/icons/quest_switch.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://fstjrvqapjrp" 6 | path="res://.godot/imported/quest_switch.png-8f5fab9b5625db7f1042aee558be8526.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://quests/utility_nodes/icons/quest_switch.png" 14 | dest_files=["res://.godot/imported/quest_switch.png-8f5fab9b5625db7f1042aee558be8526.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /quests/utility_nodes/quest_activated_switch.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cj17f33sisctc 2 | -------------------------------------------------------------------------------- /quests/utility_nodes/quest_activated_switch.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cwby8egx8vwx2"] 2 | 3 | [ext_resource type="Script" uid="uid://cj17f33sisctc" path="res://quests/utility_nodes/quest_activated_switch.gd" id="1_rtkku"] 4 | [ext_resource type="Texture2D" uid="uid://fstjrvqapjrp" path="res://quests/utility_nodes/icons/quest_switch.png" id="2_hhn2m"] 5 | 6 | [node name="QuestActivatedSwitch" type="Node2D"] 7 | script = ExtResource("1_rtkku") 8 | 9 | [node name="Sprite2D" type="Sprite2D" parent="."] 10 | z_index = 10 11 | position = Vector2(-10, -18) 12 | texture = ExtResource("2_hhn2m") 13 | -------------------------------------------------------------------------------- /quests/utility_nodes/quest_advance_trigger.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon( "res://quests/utility_nodes/icons/quest_advance.png" ) 3 | class_name QuestAdvanceTrigger extends QuestNode 4 | 5 | signal advanced 6 | 7 | @export_category( "Parent Signal Connection" ) 8 | @export var signal_name : String = "" 9 | 10 | 11 | 12 | func _ready() -> void: 13 | if Engine.is_editor_hint(): 14 | return 15 | if has_node("Sprite2D"): 16 | $Sprite2D.queue_free() 17 | if signal_name != "": 18 | if get_parent().has_signal( signal_name ): 19 | get_parent().connect( signal_name, advance_quest ) 20 | pass 21 | 22 | 23 | 24 | func advance_quest() -> void: 25 | if linked_quest == null: 26 | return 27 | await get_tree().process_frame 28 | advanced.emit() 29 | var _title : String = linked_quest.title 30 | var _step : String = get_step() 31 | 32 | if _step == "N/A": 33 | _step = "" 34 | 35 | QuestManager.update_quest( _title, _step, quest_complete ) 36 | pass 37 | -------------------------------------------------------------------------------- /quests/utility_nodes/quest_advance_trigger.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b6dytxnramtp4 2 | -------------------------------------------------------------------------------- /quests/utility_nodes/quest_advance_trigger.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://b523kljtfiar7"] 2 | 3 | [ext_resource type="Script" uid="uid://b6dytxnramtp4" path="res://quests/utility_nodes/quest_advance_trigger.gd" id="1_f7je4"] 4 | [ext_resource type="Texture2D" uid="uid://c5v0i0n6bupo0" path="res://quests/utility_nodes/icons/quest_advance.png" id="2_m0lyb"] 5 | 6 | [node name="QuestAdvanceTrigger" type="Node2D"] 7 | script = ExtResource("1_f7je4") 8 | 9 | [node name="Sprite2D" type="Sprite2D" parent="."] 10 | z_index = 10 11 | position = Vector2(10, -18) 12 | texture = ExtResource("2_m0lyb") 13 | -------------------------------------------------------------------------------- /quests/utility_nodes/quest_node.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dnv8ywhtc2gbn 2 | -------------------------------------------------------------------------------- /shaders and materials/light_material.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="CanvasItemMaterial" format=3 uid="uid://b7nld0pj1g7cq"] 2 | 3 | [resource] 4 | blend_mode = 1 5 | light_mode = 1 6 | -------------------------------------------------------------------------------- /title_scene/audio/MichaelGamesJingle.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/title_scene/audio/MichaelGamesJingle.wav -------------------------------------------------------------------------------- /title_scene/audio/MichaelGamesJingle.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dkr2shgx2s1xr" 6 | path="res://.godot/imported/MichaelGamesJingle.wav-4c1e1fcc17ba499575c915be77407349.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://title_scene/audio/MichaelGamesJingle.wav" 11 | dest_files=["res://.godot/imported/MichaelGamesJingle.wav-4c1e1fcc17ba499575c915be77407349.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /title_scene/audio/menu_focus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/title_scene/audio/menu_focus.wav -------------------------------------------------------------------------------- /title_scene/audio/menu_focus.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://bs7rsijo2pb3f" 6 | path="res://.godot/imported/menu_focus.wav-02b23abe21a14001b61d3d23b7aaa932.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://title_scene/audio/menu_focus.wav" 11 | dest_files=["res://.godot/imported/menu_focus.wav-02b23abe21a14001b61d3d23b7aaa932.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /title_scene/audio/menu_select.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/title_scene/audio/menu_select.wav -------------------------------------------------------------------------------- /title_scene/audio/menu_select.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://08aqunggwta1" 6 | path="res://.godot/imported/menu_select.wav-2863744766c9b57038c2f7cf008519ea.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://title_scene/audio/menu_select.wav" 11 | dest_files=["res://.godot/imported/menu_select.wav-2863744766c9b57038c2f7cf008519ea.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /title_scene/audio/waves.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/title_scene/audio/waves.mp3 -------------------------------------------------------------------------------- /title_scene/audio/waves.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://cph6d67x0q2hx" 6 | path="res://.godot/imported/waves.mp3-980d1d2cba7c94235676a118953f968e.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://title_scene/audio/waves.mp3" 11 | dest_files=["res://.godot/imported/waves.mp3-980d1d2cba7c94235676a118953f968e.mp3str"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /title_scene/sprites/Michael Games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/title_scene/sprites/Michael Games.png -------------------------------------------------------------------------------- /title_scene/sprites/Michael Games.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://djv71txg5q3sk" 6 | path="res://.godot/imported/Michael Games.png-bb5d11a90c0ef119bc0b7c76bfdfcfb3.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://title_scene/sprites/Michael Games.png" 14 | dest_files=["res://.godot/imported/Michael Games.png-bb5d11a90c0ef119bc0b7c76bfdfcfb3.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /title_scene/sprites/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelmalaska/aarpg-tutorial/424628cd8e8d427f87caafd9eafe9f59b062ea22/title_scene/sprites/title.png -------------------------------------------------------------------------------- /title_scene/sprites/title.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ddmcvrb1ufo3g" 6 | path="res://.godot/imported/title.png-5498a54d74b71921e3ff58e74ebdf55e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://title_scene/sprites/title.png" 14 | dest_files=["res://.godot/imported/title.png-5498a54d74b71921e3ff58e74ebdf55e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /title_scene/title_scene.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c2mayusmuuk6r 2 | --------------------------------------------------------------------------------