├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── assets ├── materials │ ├── gradient_screen_uv.tres │ ├── outline.tres │ └── player_material.tres ├── textures │ ├── aqua.png │ ├── aqua.png.import │ ├── floor_nature.png │ ├── floor_nature.png.import │ ├── floor_objects.png │ ├── floor_objects.png.import │ ├── floor_objects_big.png │ ├── floor_objects_big.png.import │ ├── floor_objects_med.png │ ├── floor_objects_med.png.import │ ├── footstep.png │ ├── footstep.png.import │ ├── fx.png │ ├── fx.png.import │ ├── item_knife.png │ ├── item_knife.png.import │ ├── items_eyefruit.png │ ├── items_eyefruit.png.import │ ├── items_knife.png │ ├── items_knife.png.import │ ├── mobs.png │ ├── mobs.png.import │ ├── solid_0.png │ ├── solid_0.png.import │ ├── ui │ │ ├── ui_buttons1.png │ │ ├── ui_buttons1.png.import │ │ ├── ui_buttons2.png │ │ ├── ui_buttons2.png.import │ │ ├── ui_buttons8.png │ │ └── ui_buttons8.png.import │ ├── water_floor_0.png │ ├── water_floor_0.png.import │ ├── water_plant_0.png │ ├── water_plant_0.png.import │ ├── water_ripple_0.png │ └── water_ripple_0.png.import └── ui │ └── THEME.tres ├── default_env.tres ├── icon.png ├── icon.png.import ├── project.godot ├── repo_images ├── rpg_0.png └── rpg_0.png.import ├── scenes ├── BACKGROUND.tscn ├── FOOTSTEP.tscn ├── FX.tscn ├── ITEM.tscn ├── MOB.tscn ├── NEWPLAYER.tscn ├── PLAYER.tscn ├── UI.tscn └── WORLD.tscn └── scripts ├── ACTOR.gd ├── FOOTSTEP.gd ├── INTERACTABLE.gd ├── ITEM.gd ├── MOB.gd ├── PLAYER.gd ├── UI.gd ├── WORLD.gd └── autoload ├── GAMESTATE.gd ├── GLOBALS.gd └── UUID.gd /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Godot-specific ignores 3 | .import/ 4 | export.cfg 5 | export_presets.cfg 6 | 7 | # Mono-specific ignores 8 | .mono/ 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Godot RPG Tutorial by NovemberDev 2 | 3 | This is a 2D rpg I built for a video on my channel: 4 | 5 | ## Screenshot 6 | ![Screenshot](repo_images/rpg_0.png) 7 | 8 | ## Video 9 | [![NovemberDev RPG Tutorial](https://img.youtube.com/vi/gIllVrLRDxM/0.jpg)](https://www.youtube.com/watch?v=gIllVrLRDxM) 10 | 11 | Link: https://www.youtube.com/watch?v=gIllVrLRDxM -------------------------------------------------------------------------------- /assets/materials/gradient_screen_uv.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=2 format=2] 2 | 3 | [sub_resource type="Shader" id=1] 4 | code = "shader_type canvas_item; 5 | 6 | void fragment() { 7 | COLOR = texture(TEXTURE, SCREEN_UV); 8 | COLOR.rgb += 0.3 * SCREEN_UV.y * 2.0; 9 | }" 10 | 11 | [resource] 12 | shader = SubResource( 1 ) 13 | -------------------------------------------------------------------------------- /assets/materials/outline.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=2 format=2] 2 | 3 | [sub_resource type="Shader" id=1] 4 | code = "shader_type canvas_item; 5 | render_mode unshaded; 6 | 7 | uniform float width : hint_range(0.0, 16.0); 8 | uniform vec4 outline_color : hint_color; 9 | 10 | void fragment() 11 | { 12 | vec2 size = vec2(width) / vec2(textureSize(TEXTURE, 0)); 13 | 14 | vec4 sprite_color = texture(TEXTURE, UV); 15 | 16 | float alpha = sprite_color.a; 17 | alpha += texture(TEXTURE, UV + vec2(0.0, -size.y)).a; 18 | alpha += texture(TEXTURE, UV + vec2(size.x, -size.y)).a; 19 | alpha += texture(TEXTURE, UV + vec2(size.x, 0.0)).a; 20 | alpha += texture(TEXTURE, UV + vec2(size.x, size.y)).a; 21 | alpha += texture(TEXTURE, UV + vec2(0.0, size.y)).a; 22 | alpha += texture(TEXTURE, UV + vec2(-size.x, size.y)).a; 23 | alpha += texture(TEXTURE, UV + vec2(-size.x, 0.0)).a; 24 | alpha += texture(TEXTURE, UV + vec2(-size.x, -size.y)).a; 25 | vec3 final_color = mix(outline_color.rgb, sprite_color.rgb, sprite_color.a); 26 | COLOR = vec4(final_color, clamp(alpha, 0.0, 1.0)); 27 | }" 28 | 29 | [resource] 30 | resource_local_to_scene = true 31 | shader = SubResource( 1 ) 32 | shader_param/width = 1.44989 33 | shader_param/outline_color = Color( 1, 0, 0.305882, 1 ) 34 | -------------------------------------------------------------------------------- /assets/materials/player_material.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=4 format=2] 2 | 3 | [sub_resource type="Shader" id=19] 4 | code = "shader_type canvas_item; 5 | 6 | uniform vec2 scale; 7 | uniform sampler2D noise; 8 | uniform vec2 distortion_scale; 9 | uniform vec4 ghost_color : hint_color; 10 | uniform float intensity; 11 | uniform float speed; 12 | uniform float health; 13 | 14 | void fragment() { 15 | if(health > 0.0) { 16 | COLOR = texture(TEXTURE, UV); 17 | } else { 18 | float distortion = texture(noise, SCREEN_UV*scale*distortion_scale + TIME*speed).x; 19 | distortion -= 0.5; 20 | COLOR = texture(TEXTURE, UV - distortion * (intensity * UV.y)) * ghost_color; 21 | } 22 | }" 23 | custom_defines = "" 24 | 25 | [sub_resource type="OpenSimplexNoise" id=20] 26 | 27 | [sub_resource type="NoiseTexture" id=21] 28 | seamless = true 29 | noise = SubResource( 20 ) 30 | 31 | [resource] 32 | shader = SubResource( 19 ) 33 | shader_param/scale = Vector2( 1, 1 ) 34 | shader_param/distortion_scale = Vector2( 1, 1 ) 35 | shader_param/ghost_color = Color( 0.4, 1, 0.505882, 0.784314 ) 36 | shader_param/intensity = 0.06 37 | shader_param/speed = 0.1 38 | shader_param/health = 100.0 39 | shader_param/noise = SubResource( 21 ) 40 | -------------------------------------------------------------------------------- /assets/textures/aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/aqua.png -------------------------------------------------------------------------------- /assets/textures/aqua.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/aqua.png-3e20948af46c2b2c795cb65ee22aafc7.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/aqua.png" 13 | dest_files=[ "res://.import/aqua.png-3e20948af46c2b2c795cb65ee22aafc7.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/floor_nature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/floor_nature.png -------------------------------------------------------------------------------- /assets/textures/floor_nature.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/floor_nature.png-5aabf6448a9729cb93cfd2d1746169ba.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/floor_nature.png" 13 | dest_files=[ "res://.import/floor_nature.png-5aabf6448a9729cb93cfd2d1746169ba.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/floor_objects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/floor_objects.png -------------------------------------------------------------------------------- /assets/textures/floor_objects.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/floor_objects.png-f87a4ae38f3dbc47e5d0a32abab8060a.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/floor_objects.png" 13 | dest_files=[ "res://.import/floor_objects.png-f87a4ae38f3dbc47e5d0a32abab8060a.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/floor_objects_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/floor_objects_big.png -------------------------------------------------------------------------------- /assets/textures/floor_objects_big.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/floor_objects_big.png-2ad877d12813036933e5ea09f3c42bc7.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/floor_objects_big.png" 13 | dest_files=[ "res://.import/floor_objects_big.png-2ad877d12813036933e5ea09f3c42bc7.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/floor_objects_med.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/floor_objects_med.png -------------------------------------------------------------------------------- /assets/textures/floor_objects_med.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/floor_objects_med.png-2b853e60e5737c139dc83a706fe65c90.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/floor_objects_med.png" 13 | dest_files=[ "res://.import/floor_objects_med.png-2b853e60e5737c139dc83a706fe65c90.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/footstep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/footstep.png -------------------------------------------------------------------------------- /assets/textures/footstep.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/footstep.png-c9d580a4f73dd12c7880952194beb312.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/footstep.png" 13 | dest_files=[ "res://.import/footstep.png-c9d580a4f73dd12c7880952194beb312.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/fx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/fx.png -------------------------------------------------------------------------------- /assets/textures/fx.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/fx.png-bd630842bc43532b3c7eb88d653ad974.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/fx.png" 13 | dest_files=[ "res://.import/fx.png-bd630842bc43532b3c7eb88d653ad974.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/item_knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/item_knife.png -------------------------------------------------------------------------------- /assets/textures/item_knife.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/item_knife.png-6b63063208cd224dc20ad61b35017100.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/item_knife.png" 13 | dest_files=[ "res://.import/item_knife.png-6b63063208cd224dc20ad61b35017100.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/items_eyefruit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/items_eyefruit.png -------------------------------------------------------------------------------- /assets/textures/items_eyefruit.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/items_eyefruit.png-203382a7da2cd8448d8d43df3399da5a.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/items_eyefruit.png" 13 | dest_files=[ "res://.import/items_eyefruit.png-203382a7da2cd8448d8d43df3399da5a.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/items_knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/items_knife.png -------------------------------------------------------------------------------- /assets/textures/items_knife.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/items_knife.png-ba74dfb41e0bf345f0ae0c9dea9396c7.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/items_knife.png" 13 | dest_files=[ "res://.import/items_knife.png-ba74dfb41e0bf345f0ae0c9dea9396c7.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/mobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/mobs.png -------------------------------------------------------------------------------- /assets/textures/mobs.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/mobs.png-684b9839e7d8514d3439bed83f5a1120.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/mobs.png" 13 | dest_files=[ "res://.import/mobs.png-684b9839e7d8514d3439bed83f5a1120.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/solid_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/solid_0.png -------------------------------------------------------------------------------- /assets/textures/solid_0.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/solid_0.png-400e39d030dca249999a3c3cfdf33f6e.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/solid_0.png" 13 | dest_files=[ "res://.import/solid_0.png-400e39d030dca249999a3c3cfdf33f6e.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/ui/ui_buttons1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/ui/ui_buttons1.png -------------------------------------------------------------------------------- /assets/textures/ui/ui_buttons1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/ui_buttons1.png-85dde6fd6fb79887c5f53855d6e9b26a.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/ui/ui_buttons1.png" 13 | dest_files=[ "res://.import/ui_buttons1.png-85dde6fd6fb79887c5f53855d6e9b26a.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/ui/ui_buttons2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/ui/ui_buttons2.png -------------------------------------------------------------------------------- /assets/textures/ui/ui_buttons2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/ui_buttons2.png-4c5a361e8bafb1592b8df872579fe54b.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/ui/ui_buttons2.png" 13 | dest_files=[ "res://.import/ui_buttons2.png-4c5a361e8bafb1592b8df872579fe54b.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/ui/ui_buttons8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/ui/ui_buttons8.png -------------------------------------------------------------------------------- /assets/textures/ui/ui_buttons8.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/ui_buttons8.png-efdeb6ac9d73856914de6343f68d1fbd.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/ui/ui_buttons8.png" 13 | dest_files=[ "res://.import/ui_buttons8.png-efdeb6ac9d73856914de6343f68d1fbd.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/water_floor_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/water_floor_0.png -------------------------------------------------------------------------------- /assets/textures/water_floor_0.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/water_floor_0.png-21a97b38375f932a095f10c541d53b58.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/water_floor_0.png" 13 | dest_files=[ "res://.import/water_floor_0.png-21a97b38375f932a095f10c541d53b58.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/water_plant_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/water_plant_0.png -------------------------------------------------------------------------------- /assets/textures/water_plant_0.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/water_plant_0.png-2ebe46b5d268b8ecb5f7a5eaa1a25d6f.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/water_plant_0.png" 13 | dest_files=[ "res://.import/water_plant_0.png-2ebe46b5d268b8ecb5f7a5eaa1a25d6f.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/textures/water_ripple_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/assets/textures/water_ripple_0.png -------------------------------------------------------------------------------- /assets/textures/water_ripple_0.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/water_ripple_0.png-b93dc3674c8dc53cb67accc933dedaf4.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/textures/water_ripple_0.png" 13 | dest_files=[ "res://.import/water_ripple_0.png-b93dc3674c8dc53cb67accc933dedaf4.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=1 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /default_env.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Environment" load_steps=2 format=2] 2 | 3 | [sub_resource type="ProceduralSky" id=1] 4 | 5 | [resource] 6 | background_mode = 2 7 | background_sky = SubResource( 1 ) 8 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/icon.png -------------------------------------------------------------------------------- /icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://icon.png" 13 | dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=true 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=4 10 | 11 | _global_script_classes=[ { 12 | "base": "KinematicBody2D", 13 | "class": "ACTOR", 14 | "language": "GDScript", 15 | "path": "res://scripts/ACTOR.gd" 16 | }, { 17 | "base": "StaticBody2D", 18 | "class": "INTERACTABLE", 19 | "language": "GDScript", 20 | "path": "res://scripts/INTERACTABLE.gd" 21 | } ] 22 | _global_script_class_icons={ 23 | "ACTOR": "", 24 | "INTERACTABLE": "" 25 | } 26 | 27 | [application] 28 | 29 | config/name="novemberdev_rpg" 30 | run/main_scene="res://scenes/WORLD.tscn" 31 | config/icon="res://icon.png" 32 | 33 | [autoload] 34 | 35 | GLOBALS="*res://scripts/autoload/GLOBALS.gd" 36 | UUID="*res://scripts/autoload/UUID.gd" 37 | GAMESTATE="*res://scripts/autoload/GAMESTATE.gd" 38 | 39 | [display] 40 | 41 | window/stretch/mode="2d" 42 | window/stretch/aspect="expand" 43 | 44 | [importer_defaults] 45 | 46 | texture={ 47 | "compress/bptc_ldr": 0, 48 | "compress/hdr_mode": 0, 49 | "compress/lossy_quality": 0.7, 50 | "compress/mode": 0, 51 | "compress/normal_map": 0, 52 | "detect_3d": false, 53 | "flags/anisotropic": false, 54 | "flags/filter": false, 55 | "flags/mipmaps": false, 56 | "flags/repeat": 0, 57 | "flags/srgb": 2, 58 | "process/HDR_as_SRGB": false, 59 | "process/fix_alpha_border": true, 60 | "process/invert_color": false, 61 | "process/premult_alpha": false, 62 | "size_limit": 0, 63 | "stream": false, 64 | "svg/scale": 1.0 65 | } 66 | 67 | [input] 68 | 69 | attack={ 70 | "deadzone": 0.5, 71 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null) 72 | ] 73 | } 74 | interact={ 75 | "deadzone": 0.5, 76 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null) 77 | ] 78 | } 79 | inventory={ 80 | "deadzone": 0.5, 81 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null) 82 | ] 83 | } 84 | 85 | [rendering] 86 | 87 | environment/default_environment="res://default_env.tres" 88 | -------------------------------------------------------------------------------- /repo_images/rpg_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovemberDev/novemberdev-rpg-godot-tutorial/3235aa22ce20a0fdc8fc46f1d5d8ec2d92a4d2c0/repo_images/rpg_0.png -------------------------------------------------------------------------------- /repo_images/rpg_0.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/rpg_0.png-851776dfa299fb1a1d4976f4386c2a3d.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://repo_images/rpg_0.png" 13 | dest_files=[ "res://.import/rpg_0.png-851776dfa299fb1a1d4976f4386c2a3d.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=false 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /scenes/BACKGROUND.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=17 format=2] 2 | 3 | [ext_resource path="res://assets/textures/water_floor_0.png" type="Texture" id=1] 4 | [ext_resource path="res://assets/textures/water_ripple_0.png" type="Texture" id=2] 5 | [ext_resource path="res://assets/textures/water_plant_0.png" type="Texture" id=3] 6 | [ext_resource path="res://assets/textures/solid_0.png" type="Texture" id=4] 7 | [ext_resource path="res://assets/materials/gradient_screen_uv.tres" type="Material" id=5] 8 | 9 | [sub_resource type="TileSet" id=1] 10 | 0/name = "water_floor_0.png 0" 11 | 0/texture = ExtResource( 1 ) 12 | 0/tex_offset = Vector2( 0, 0 ) 13 | 0/modulate = Color( 1, 1, 1, 1 ) 14 | 0/region = Rect2( 0, 0, 256, 256 ) 15 | 0/tile_mode = 0 16 | 0/occluder_offset = Vector2( 0, 0 ) 17 | 0/navigation_offset = Vector2( 0, 0 ) 18 | 0/shape_offset = Vector2( 0, 0 ) 19 | 0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 20 | 0/shape_one_way = false 21 | 0/shape_one_way_margin = 0.0 22 | 0/shapes = [ ] 23 | 0/z_index = 0 24 | 25 | [sub_resource type="TileSet" id=2] 26 | 0/name = "water_plant_0.png 0" 27 | 0/texture = ExtResource( 3 ) 28 | 0/tex_offset = Vector2( 0, 0 ) 29 | 0/modulate = Color( 1, 1, 1, 1 ) 30 | 0/region = Rect2( 0, 0, 32, 64 ) 31 | 0/tile_mode = 0 32 | 0/occluder_offset = Vector2( 0, 0 ) 33 | 0/navigation_offset = Vector2( 0, 0 ) 34 | 0/shape_offset = Vector2( 0, 0 ) 35 | 0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 36 | 0/shape_one_way = false 37 | 0/shape_one_way_margin = 0.0 38 | 0/shapes = [ ] 39 | 0/z_index = 0 40 | 41 | [sub_resource type="Shader" id=3] 42 | code = "shader_type canvas_item; 43 | 44 | uniform vec2 scale; 45 | uniform sampler2D noise; 46 | uniform vec4 color_key : hint_color; 47 | uniform vec2 distortion_scale; 48 | uniform float intensity; 49 | uniform float speed; 50 | 51 | void fragment() { 52 | COLOR = texture(SCREEN_TEXTURE, SCREEN_UV - (texture(noise, SCREEN_UV*scale*distortion_scale + TIME*speed).x - 0.5) * intensity); 53 | COLOR.a *= 0.5; 54 | }" 55 | 56 | [sub_resource type="OpenSimplexNoise" id=4] 57 | 58 | [sub_resource type="NoiseTexture" id=5] 59 | width = 256 60 | height = 256 61 | seamless = true 62 | noise = SubResource( 4 ) 63 | 64 | [sub_resource type="ShaderMaterial" id=6] 65 | shader = SubResource( 3 ) 66 | shader_param/scale = Vector2( 1, 0.8 ) 67 | shader_param/color_key = Color( 0.741176, 0.603922, 0.709804, 1 ) 68 | shader_param/distortion_scale = Vector2( 2, 6 ) 69 | shader_param/intensity = 1.0 70 | shader_param/speed = 0.04 71 | shader_param/noise = SubResource( 5 ) 72 | 73 | [sub_resource type="Shader" id=7] 74 | code = "shader_type canvas_item; 75 | 76 | uniform vec2 scale; 77 | uniform sampler2D noise; 78 | uniform vec2 distortion_scale; 79 | uniform float intensity; 80 | uniform float speed; 81 | 82 | void vertex() { 83 | UV *= 500.0; 84 | } 85 | 86 | void fragment() { 87 | COLOR = texture(TEXTURE, UV - texture(noise, UV*scale*distortion_scale + TIME*speed).x - 0.5 * intensity); 88 | COLOR.a *= 0.43; 89 | }" 90 | 91 | [sub_resource type="OpenSimplexNoise" id=8] 92 | period = 158.5 93 | persistence = 0.369 94 | lacunarity = 0.77 95 | 96 | [sub_resource type="NoiseTexture" id=9] 97 | width = 256 98 | height = 256 99 | seamless = true 100 | noise = SubResource( 8 ) 101 | 102 | [sub_resource type="ShaderMaterial" id=10] 103 | shader = SubResource( 7 ) 104 | shader_param/scale = Vector2( 2, 6 ) 105 | shader_param/distortion_scale = Vector2( 1, 1 ) 106 | shader_param/intensity = 1.0 107 | shader_param/speed = 0.1 108 | shader_param/noise = SubResource( 9 ) 109 | 110 | [sub_resource type="Animation" id=11] 111 | length = 2.0 112 | tracks/0/type = "value" 113 | tracks/0/path = NodePath("floor:modulate") 114 | tracks/0/interp = 2 115 | tracks/0/loop_wrap = true 116 | tracks/0/imported = false 117 | tracks/0/enabled = true 118 | tracks/0/keys = { 119 | "times": PoolRealArray( 0, 2 ), 120 | "transitions": PoolRealArray( 1, 1 ), 121 | "update": 0, 122 | "values": [ Color( 0.298039, 1, 0.968627, 1 ), Color( 0.298039, 1, 0.968627, 1 ) ] 123 | } 124 | 125 | [node name="BACKGROUND" type="Node2D"] 126 | z_index = -500 127 | 128 | [node name="floor" type="Sprite" parent="."] 129 | modulate = Color( 0.298039, 1, 0.968627, 1 ) 130 | material = ExtResource( 5 ) 131 | scale = Vector2( 1024, 1024 ) 132 | texture = ExtResource( 4 ) 133 | 134 | [node name="floor_detail" type="TileMap" parent="."] 135 | modulate = Color( 1, 1, 1, 0.254902 ) 136 | tile_set = SubResource( 1 ) 137 | cell_size = Vector2( 256, 256 ) 138 | format = 1 139 | tile_data = PoolIntArray( -131074, 0, 0, -196608, 0, 0, -196606, 0, 0, -196604, 0, 0, -196602, 0, 0, -65539, 0, 0, -65537, 0, 0, -131071, 0, 0, -131069, 0, 0, -131067, 0, 0, -131065, 0, 0, -2, 0, 0, -65536, 0, 0, -65534, 0, 0, -65532, 0, 0, -65530, 0, 0, 65533, 0, 0, 65535, 0, 0, 1, 0, 0, 3, 0, 0, 5, 0, 0, 7, 0, 0, 131070, 0, 0, 65536, 0, 0, 65538, 0, 0, 65540, 0, 0, 65542, 0, 0, 196605, 0, 0, 196607, 0, 0, 131073, 0, 0, 131075, 0, 0, 131077, 0, 0, 131079, 0, 0, 262142, 0, 0, 196608, 0, 0, 196610, 0, 0, 196612, 0, 0, 196614, 0, 0, 327677, 0, 0, 327679, 0, 0, 262145, 0, 0, 262147, 0, 0, 262149, 0, 0, 262151, 0, 0, 393214, 0, 0, 327680, 0, 0, 327682, 0, 0, 327684, 0, 0, 327686, 0, 0 ) 140 | 141 | [node name="water_plant" type="TileMap" parent="."] 142 | tile_set = SubResource( 2 ) 143 | cell_size = Vector2( 32, 64 ) 144 | format = 1 145 | tile_data = PoolIntArray( -589796, 0, 0, -524284, 0, 0, -524276, 0, 0, -393215, 0, 0, -393203, 0, 0, -393199, 0, 0, -393185, 0, 0, -393179, 0, 0, -327675, 0, 0, -327651, 0, 0, -196615, 0, 0, -262140, 0, 0, -262128, 0, 0, -262118, 0, 0, -131085, 0, 0, -131077, 0, 0, -131064, 0, 0, -131052, 0, 0, -131029, 0, 0, -65521, 0, 0, -65499, 0, 0, -65489, 0, 0, 1, 0, 0, 28, 0, 0, 65555, 0, 0, 196598, 0, 0, 131074, 0, 0, 196619, 0, 0, 196631, 0, 0, 196641, 0, 0, 196645, 0, 0, 196652, 0, 0, 196653, 0, 0, 327673, 0, 0, 327679, 0, 0, 327696, 0, 0, 327709, 0, 0, 327728, 0, 0, 393257, 0, 0, 458758, 0, 0, 458776, 0, 0, 589819, 0, 0, 524323, 0, 0, 655348, 0, 0, 589839, 0, 0, 589851, 0, 0, 589874, 0, 0, 655402, 0, 0, 786425, 0, 0, 720929, 0, 0, 786439, 0, 0, 786448, 0, 0, 851996, 0, 0, 852006, 0, 0, 852011, 0, 0, 983036, 0, 0, 917514, 0, 0, 917526, 0, 0, 917540, 0, 0, 917555, 0, 0, 983056, 0, 0, 983085, 0, 0, 1114102, 0, 0, 1048609, 0, 0, 1114137, 0, 0, 1179649, 0, 0, 1245198, 0, 0, 1245213, 0, 0, 1310735, 0, 0, 1441785, 0, 0 ) 146 | 147 | [node name="water_distortion" type="Sprite" parent="."] 148 | visible = false 149 | material = SubResource( 6 ) 150 | position = Vector2( 92, 92 ) 151 | scale = Vector2( 256, 256 ) 152 | texture = ExtResource( 4 ) 153 | 154 | [node name="water_ripples" type="Sprite" parent="."] 155 | visible = false 156 | material = SubResource( 10 ) 157 | position = Vector2( 550, 606 ) 158 | scale = Vector2( 256, 256 ) 159 | texture = ExtResource( 2 ) 160 | 161 | [node name="water_ripples_dark" type="Sprite" parent="."] 162 | visible = false 163 | modulate = Color( 0, 0, 0, 0.282353 ) 164 | material = SubResource( 10 ) 165 | position = Vector2( 556, 615 ) 166 | scale = Vector2( 256, 256 ) 167 | texture = ExtResource( 2 ) 168 | __meta__ = { 169 | "_editor_description_": "w" 170 | } 171 | 172 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 173 | anims/floor_transition = SubResource( 11 ) 174 | -------------------------------------------------------------------------------- /scenes/FOOTSTEP.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=13 format=2] 2 | 3 | [ext_resource path="res://scripts/FOOTSTEP.gd" type="Script" id=1] 4 | [ext_resource path="res://assets/textures/footstep.png" type="Texture" id=2] 5 | 6 | 7 | 8 | 9 | [sub_resource type="AtlasTexture" id=4] 10 | atlas = ExtResource( 2 ) 11 | region = Rect2( 48, 0, 16, 16 ) 12 | 13 | [sub_resource type="AtlasTexture" id=5] 14 | atlas = ExtResource( 2 ) 15 | region = Rect2( 64, 0, 16, 16 ) 16 | 17 | [sub_resource type="AtlasTexture" id=6] 18 | atlas = ExtResource( 2 ) 19 | region = Rect2( 80, 0, 16, 16 ) 20 | 21 | [sub_resource type="AtlasTexture" id=1] 22 | atlas = ExtResource( 2 ) 23 | region = Rect2( 0, 0, 16, 16 ) 24 | 25 | [sub_resource type="AtlasTexture" id=2] 26 | atlas = ExtResource( 2 ) 27 | region = Rect2( 16, 0, 16, 16 ) 28 | 29 | [sub_resource type="AtlasTexture" id=3] 30 | atlas = ExtResource( 2 ) 31 | region = Rect2( 32, 0, 16, 16 ) 32 | 33 | [sub_resource type="AtlasTexture" id=7] 34 | atlas = ExtResource( 2 ) 35 | region = Rect2( 96, 0, 16, 16 ) 36 | 37 | [sub_resource type="AtlasTexture" id=8] 38 | atlas = ExtResource( 2 ) 39 | region = Rect2( 112, 0, 16, 16 ) 40 | 41 | [sub_resource type="AtlasTexture" id=9] 42 | atlas = ExtResource( 2 ) 43 | region = Rect2( 128, 0, 16, 16 ) 44 | 45 | [sub_resource type="SpriteFrames" id=10] 46 | animations = [ { 47 | "frames": [ SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ], 48 | "loop": false, 49 | "name": "back", 50 | "speed": 1.0 51 | }, { 52 | "frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ) ], 53 | "loop": false, 54 | "name": "front", 55 | "speed": 1.0 56 | }, { 57 | "frames": [ SubResource( 7 ), SubResource( 8 ), SubResource( 9 ) ], 58 | "loop": false, 59 | "name": "side", 60 | "speed": 1.0 61 | } ] 62 | 63 | [node name="FOOTSTEP" type="AnimatedSprite"] 64 | modulate = Color( 1, 1, 1, 0.305882 ) 65 | frames = SubResource( 10 ) 66 | animation = "back" 67 | script = ExtResource( 1 ) 68 | -------------------------------------------------------------------------------- /scenes/FX.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=2] 2 | 3 | [ext_resource path="res://assets/textures/fx.png" type="Texture" id=1] 4 | 5 | 6 | [sub_resource type="Animation" id=1] 7 | resource_name = "action" 8 | length = 0.75 9 | step = 0.125 10 | tracks/0/type = "value" 11 | tracks/0/path = NodePath("Sprite:frame") 12 | tracks/0/interp = 2 13 | tracks/0/loop_wrap = true 14 | tracks/0/imported = false 15 | tracks/0/enabled = true 16 | tracks/0/keys = { 17 | "times": PoolRealArray( 0 ), 18 | "transitions": PoolRealArray( 1 ), 19 | "update": 1, 20 | "values": [ 0 ] 21 | } 22 | tracks/1/type = "value" 23 | tracks/1/path = NodePath("Sprite:scale") 24 | tracks/1/interp = 2 25 | tracks/1/loop_wrap = true 26 | tracks/1/imported = false 27 | tracks/1/enabled = true 28 | tracks/1/keys = { 29 | "times": PoolRealArray( 0, 0.5 ), 30 | "transitions": PoolRealArray( 1, 1 ), 31 | "update": 0, 32 | "values": [ Vector2( 0.166667, 0.166667 ), Vector2( 0.583333, 0.583333 ) ] 33 | } 34 | tracks/2/type = "value" 35 | tracks/2/path = NodePath("Sprite:position") 36 | tracks/2/interp = 2 37 | tracks/2/loop_wrap = true 38 | tracks/2/imported = false 39 | tracks/2/enabled = true 40 | tracks/2/keys = { 41 | "times": PoolRealArray( 0 ), 42 | "transitions": PoolRealArray( 1 ), 43 | "update": 0, 44 | "values": [ Vector2( 0, 0 ) ] 45 | } 46 | tracks/3/type = "value" 47 | tracks/3/path = NodePath("Sprite:rotation_degrees") 48 | tracks/3/interp = 2 49 | tracks/3/loop_wrap = true 50 | tracks/3/imported = false 51 | tracks/3/enabled = true 52 | tracks/3/keys = { 53 | "times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5 ), 54 | "transitions": PoolRealArray( 1, 1, 1, 1, 1 ), 55 | "update": 0, 56 | "values": [ 0.0, 44.9999, 135.0, 225.0, 315.0 ] 57 | } 58 | tracks/4/type = "value" 59 | tracks/4/path = NodePath("Sprite:modulate") 60 | tracks/4/interp = 1 61 | tracks/4/loop_wrap = true 62 | tracks/4/imported = false 63 | tracks/4/enabled = true 64 | tracks/4/keys = { 65 | "times": PoolRealArray( 0, 0.1, 0.5, 0.75 ), 66 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 67 | "update": 0, 68 | "values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] 69 | } 70 | 71 | [sub_resource type="Animation" id=2] 72 | resource_name = "hit" 73 | length = 0.375 74 | step = 0.125 75 | tracks/0/type = "value" 76 | tracks/0/path = NodePath("Sprite:frame") 77 | tracks/0/interp = 2 78 | tracks/0/loop_wrap = true 79 | tracks/0/imported = false 80 | tracks/0/enabled = true 81 | tracks/0/keys = { 82 | "times": PoolRealArray( 0 ), 83 | "transitions": PoolRealArray( 1 ), 84 | "update": 1, 85 | "values": [ 2 ] 86 | } 87 | tracks/1/type = "value" 88 | tracks/1/path = NodePath("Sprite:scale") 89 | tracks/1/interp = 2 90 | tracks/1/loop_wrap = true 91 | tracks/1/imported = false 92 | tracks/1/enabled = true 93 | tracks/1/keys = { 94 | "times": PoolRealArray( 0, 0.375 ), 95 | "transitions": PoolRealArray( 1, 1 ), 96 | "update": 0, 97 | "values": [ Vector2( 0.1, 0.1 ), Vector2( 1, 0.45 ) ] 98 | } 99 | tracks/2/type = "value" 100 | tracks/2/path = NodePath("Sprite:position") 101 | tracks/2/interp = 2 102 | tracks/2/loop_wrap = true 103 | tracks/2/imported = false 104 | tracks/2/enabled = true 105 | tracks/2/keys = { 106 | "times": PoolRealArray( 0 ), 107 | "transitions": PoolRealArray( 1 ), 108 | "update": 0, 109 | "values": [ Vector2( 0, 0 ) ] 110 | } 111 | tracks/3/type = "value" 112 | tracks/3/path = NodePath("Sprite:modulate") 113 | tracks/3/interp = 1 114 | tracks/3/loop_wrap = true 115 | tracks/3/imported = false 116 | tracks/3/enabled = true 117 | tracks/3/keys = { 118 | "times": PoolRealArray( 0, 0.1, 0.25, 0.375 ), 119 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 120 | "update": 0, 121 | "values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0.490196 ), Color( 1, 1, 1, 0.490196 ), Color( 1, 1, 1, 0 ) ] 122 | } 123 | 124 | [sub_resource type="Animation" id=3] 125 | length = 0.75 126 | step = 0.125 127 | tracks/0/type = "value" 128 | tracks/0/path = NodePath("Sprite:frame") 129 | tracks/0/interp = 2 130 | tracks/0/loop_wrap = true 131 | tracks/0/imported = false 132 | tracks/0/enabled = true 133 | tracks/0/keys = { 134 | "times": PoolRealArray( 0 ), 135 | "transitions": PoolRealArray( 1 ), 136 | "update": 1, 137 | "values": [ 1 ] 138 | } 139 | tracks/1/type = "value" 140 | tracks/1/path = NodePath("Sprite:scale") 141 | tracks/1/interp = 2 142 | tracks/1/loop_wrap = true 143 | tracks/1/imported = false 144 | tracks/1/enabled = true 145 | tracks/1/keys = { 146 | "times": PoolRealArray( 0, 0.5, 0.75 ), 147 | "transitions": PoolRealArray( 1, 1, 1 ), 148 | "update": 0, 149 | "values": [ Vector2( 0.166667, 0.166667 ), Vector2( 0.45, 0.45 ), Vector2( 0.166667, 0.166667 ) ] 150 | } 151 | tracks/2/type = "value" 152 | tracks/2/path = NodePath("Sprite:position") 153 | tracks/2/interp = 2 154 | tracks/2/loop_wrap = true 155 | tracks/2/imported = false 156 | tracks/2/enabled = true 157 | tracks/2/keys = { 158 | "times": PoolRealArray( 0 ), 159 | "transitions": PoolRealArray( 1 ), 160 | "update": 0, 161 | "values": [ Vector2( 0, 0 ) ] 162 | } 163 | tracks/3/type = "value" 164 | tracks/3/path = NodePath("Sprite:rotation_degrees") 165 | tracks/3/interp = 2 166 | tracks/3/loop_wrap = true 167 | tracks/3/imported = false 168 | tracks/3/enabled = true 169 | tracks/3/keys = { 170 | "times": PoolRealArray( 0, 0.75 ), 171 | "transitions": PoolRealArray( 1, 1 ), 172 | "update": 0, 173 | "values": [ 0.0, 180.0 ] 174 | } 175 | tracks/4/type = "value" 176 | tracks/4/path = NodePath("Sprite:modulate") 177 | tracks/4/interp = 1 178 | tracks/4/loop_wrap = true 179 | tracks/4/imported = false 180 | tracks/4/enabled = true 181 | tracks/4/keys = { 182 | "times": PoolRealArray( 0, 0.1, 0.5, 0.75 ), 183 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 184 | "update": 0, 185 | "values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] 186 | } 187 | 188 | [node name="FX" type="Node2D"] 189 | scale = Vector2( 2, 2 ) 190 | 191 | [node name="Sprite" type="Sprite" parent="."] 192 | modulate = Color( 1, 1, 1, 0 ) 193 | scale = Vector2( 0.166667, 0.166667 ) 194 | texture = ExtResource( 1 ) 195 | hframes = 3 196 | 197 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 198 | anims/action = SubResource( 1 ) 199 | anims/hit = SubResource( 2 ) 200 | anims/spawn = SubResource( 3 ) 201 | -------------------------------------------------------------------------------- /scenes/ITEM.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=7 format=2] 2 | 3 | [ext_resource path="res://assets/textures/items_knife.png" type="Texture" id=1] 4 | [ext_resource path="res://assets/materials/outline.tres" type="Material" id=2] 5 | [ext_resource path="res://scripts/ITEM.gd" type="Script" id=3] 6 | 7 | [sub_resource type="Animation" id=1] 8 | resource_name = "despawn" 9 | length = 0.5 10 | tracks/0/type = "value" 11 | tracks/0/path = NodePath("Sprite:modulate") 12 | tracks/0/interp = 1 13 | tracks/0/loop_wrap = true 14 | tracks/0/imported = false 15 | tracks/0/enabled = true 16 | tracks/0/keys = { 17 | "times": PoolRealArray( 0, 0.4 ), 18 | "transitions": PoolRealArray( 1, 1 ), 19 | "update": 0, 20 | "values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] 21 | } 22 | tracks/1/type = "method" 23 | tracks/1/path = NodePath("..") 24 | tracks/1/interp = 1 25 | tracks/1/loop_wrap = true 26 | tracks/1/imported = false 27 | tracks/1/enabled = true 28 | tracks/1/keys = { 29 | "times": PoolRealArray( 0.4 ), 30 | "transitions": PoolRealArray( 1 ), 31 | "values": [ { 32 | "args": [ ], 33 | "method": "queue_free" 34 | } ] 35 | } 36 | 37 | [sub_resource type="Animation" id=2] 38 | resource_name = "select" 39 | loop = true 40 | step = 0.01 41 | tracks/0/type = "value" 42 | tracks/0/path = NodePath("Sprite:material:shader_param/width") 43 | tracks/0/interp = 2 44 | tracks/0/loop_wrap = true 45 | tracks/0/imported = false 46 | tracks/0/enabled = true 47 | tracks/0/keys = { 48 | "times": PoolRealArray( 0, 0.5, 1 ), 49 | "transitions": PoolRealArray( 1, 1, 1 ), 50 | "update": 0, 51 | "values": [ 0.0, 1.5, 0.0 ] 52 | } 53 | 54 | [sub_resource type="CircleShape2D" id=3] 55 | 56 | [node name="ITEM" type="StaticBody2D" groups=[ 57 | "interactable", 58 | ]] 59 | collision_layer = 2 60 | collision_mask = 2147483650 61 | script = ExtResource( 3 ) 62 | 63 | [node name="MODEL" type="Node2D" parent="."] 64 | scale = Vector2( 0.5, 0.5 ) 65 | 66 | [node name="Sprite" type="Sprite" parent="MODEL"] 67 | material = ExtResource( 2 ) 68 | texture = ExtResource( 1 ) 69 | 70 | [node name="AnimationPlayer" type="AnimationPlayer" parent="MODEL"] 71 | anims/despawn = SubResource( 1 ) 72 | anims/select = SubResource( 2 ) 73 | 74 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 75 | shape = SubResource( 3 ) 76 | -------------------------------------------------------------------------------- /scenes/MOB.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=26 format=2] 2 | 3 | [ext_resource path="res://scenes/FX.tscn" type="PackedScene" id=1] 4 | [ext_resource path="res://scripts/MOB.gd" type="Script" id=2] 5 | [ext_resource path="res://assets/textures/mobs.png" type="Texture" id=5] 6 | 7 | [sub_resource type="AtlasTexture" id=1] 8 | atlas = ExtResource( 5 ) 9 | region = Rect2( 128, 0, 16, 16 ) 10 | 11 | [sub_resource type="AtlasTexture" id=2] 12 | atlas = ExtResource( 5 ) 13 | region = Rect2( 144, 0, 16, 16 ) 14 | 15 | [sub_resource type="AtlasTexture" id=3] 16 | atlas = ExtResource( 5 ) 17 | region = Rect2( 160, 0, 16, 16 ) 18 | 19 | [sub_resource type="AtlasTexture" id=4] 20 | atlas = ExtResource( 5 ) 21 | region = Rect2( 144, 0, 16, 16 ) 22 | 23 | [sub_resource type="AtlasTexture" id=5] 24 | atlas = ExtResource( 5 ) 25 | region = Rect2( 64, 0, 16, 16 ) 26 | 27 | [sub_resource type="AtlasTexture" id=6] 28 | atlas = ExtResource( 5 ) 29 | region = Rect2( 80, 0, 16, 16 ) 30 | 31 | [sub_resource type="AtlasTexture" id=7] 32 | atlas = ExtResource( 5 ) 33 | region = Rect2( 192, 0, 16, 16 ) 34 | 35 | [sub_resource type="AtlasTexture" id=8] 36 | atlas = ExtResource( 5 ) 37 | region = Rect2( 208, 0, 16, 16 ) 38 | 39 | [sub_resource type="AtlasTexture" id=9] 40 | atlas = ExtResource( 5 ) 41 | region = Rect2( 192, 0, 16, 16 ) 42 | 43 | [sub_resource type="AtlasTexture" id=10] 44 | atlas = ExtResource( 5 ) 45 | region = Rect2( 224, 0, 16, 16 ) 46 | 47 | [sub_resource type="AtlasTexture" id=11] 48 | atlas = ExtResource( 5 ) 49 | region = Rect2( 256, 0, 16, 16 ) 50 | 51 | [sub_resource type="AtlasTexture" id=12] 52 | atlas = ExtResource( 5 ) 53 | region = Rect2( 272, 0, 16, 16 ) 54 | 55 | [sub_resource type="AtlasTexture" id=13] 56 | atlas = ExtResource( 5 ) 57 | region = Rect2( 288, 0, 16, 16 ) 58 | 59 | [sub_resource type="AtlasTexture" id=14] 60 | atlas = ExtResource( 5 ) 61 | region = Rect2( 272, 0, 16, 16 ) 62 | 63 | [sub_resource type="AtlasTexture" id=15] 64 | atlas = ExtResource( 5 ) 65 | region = Rect2( 0, 0, 16, 16 ) 66 | 67 | [sub_resource type="AtlasTexture" id=16] 68 | atlas = ExtResource( 5 ) 69 | region = Rect2( 16, 0, 16, 16 ) 70 | 71 | [sub_resource type="AtlasTexture" id=17] 72 | atlas = ExtResource( 5 ) 73 | region = Rect2( 32, 0, 16, 16 ) 74 | 75 | [sub_resource type="SpriteFrames" id=18] 76 | animations = [ { 77 | "frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ) ], 78 | "loop": true, 79 | "name": "stingray", 80 | "speed": 5.0 81 | }, { 82 | "frames": [ SubResource( 5 ), SubResource( 6 ) ], 83 | "loop": true, 84 | "name": "turtle", 85 | "speed": 5.0 86 | }, { 87 | "frames": [ SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ) ], 88 | "loop": true, 89 | "name": "squid", 90 | "speed": 5.0 91 | }, { 92 | "frames": [ SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 14 ) ], 93 | "loop": true, 94 | "name": "seahorse", 95 | "speed": 5.0 96 | }, { 97 | "frames": [ SubResource( 15 ), SubResource( 16 ), SubResource( 17 ) ], 98 | "loop": true, 99 | "name": "crab", 100 | "speed": 5.0 101 | } ] 102 | 103 | [sub_resource type="Animation" id=19] 104 | resource_name = "damage" 105 | length = 0.35 106 | step = 0.01 107 | tracks/0/type = "value" 108 | tracks/0/path = NodePath("Sprite:modulate") 109 | tracks/0/interp = 2 110 | tracks/0/loop_wrap = true 111 | tracks/0/imported = false 112 | tracks/0/enabled = true 113 | tracks/0/keys = { 114 | "times": PoolRealArray( 0, 0.05, 0.12, 0.35 ), 115 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 116 | "update": 0, 117 | "values": [ Color( 1, 1, 1, 1 ), Color( 1, 0, 0, 1 ), Color( 1, 0.243137, 0.243137, 1 ), Color( 1, 1, 1, 1 ) ] 118 | } 119 | 120 | [sub_resource type="Animation" id=20] 121 | resource_name = "death" 122 | tracks/0/type = "value" 123 | tracks/0/path = NodePath("Sprite:modulate") 124 | tracks/0/interp = 1 125 | tracks/0/loop_wrap = true 126 | tracks/0/imported = false 127 | tracks/0/enabled = true 128 | tracks/0/keys = { 129 | "times": PoolRealArray( 0, 1 ), 130 | "transitions": PoolRealArray( 1, 1 ), 131 | "update": 0, 132 | "values": [ Color( 1, 0, 0, 1 ), Color( 1, 1, 1, 0 ) ] 133 | } 134 | tracks/1/type = "method" 135 | tracks/1/path = NodePath("..") 136 | tracks/1/interp = 1 137 | tracks/1/loop_wrap = true 138 | tracks/1/imported = false 139 | tracks/1/enabled = true 140 | tracks/1/keys = { 141 | "times": PoolRealArray( 1 ), 142 | "transitions": PoolRealArray( 1 ), 143 | "values": [ { 144 | "args": [ ], 145 | "method": "queue_free" 146 | } ] 147 | } 148 | 149 | [sub_resource type="CircleShape2D" id=21] 150 | radius = 4.463 151 | 152 | [sub_resource type="CircleShape2D" id=22] 153 | radius = 57.1058 154 | 155 | [node name="MOB" type="KinematicBody2D" groups=[ 156 | "mob", 157 | ]] 158 | script = ExtResource( 2 ) 159 | 160 | [node name="MODEL" type="Node2D" parent="."] 161 | scale = Vector2( 0.5, 0.5 ) 162 | 163 | [node name="FX" parent="MODEL" instance=ExtResource( 1 )] 164 | 165 | [node name="Sprite" type="AnimatedSprite" parent="MODEL"] 166 | scale = Vector2( 2, 2 ) 167 | frames = SubResource( 18 ) 168 | animation = "seahorse" 169 | playing = true 170 | 171 | [node name="AnimationPlayer" type="AnimationPlayer" parent="MODEL"] 172 | anims/damage = SubResource( 19 ) 173 | anims/death = SubResource( 20 ) 174 | 175 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 176 | shape = SubResource( 21 ) 177 | 178 | [node name="InteractSensor" type="Area2D" parent="."] 179 | 180 | [node name="CollisionShape2D" type="CollisionShape2D" parent="InteractSensor"] 181 | shape = SubResource( 22 ) 182 | -------------------------------------------------------------------------------- /scenes/NEWPLAYER.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=49 format=2] 2 | 3 | [ext_resource path="res://assets/textures/aqua.png" type="Texture" id=1] 4 | [ext_resource path="res://scripts/PLAYER.gd" type="Script" id=2] 5 | [ext_resource path="res://assets/textures/item_knife.png" type="Texture" id=3] 6 | [ext_resource path="res://scenes/FX.tscn" type="PackedScene" id=4] 7 | [ext_resource path="res://assets/materials/player_material.tres" type="Material" id=5] 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | [sub_resource type="RectangleShape2D" id=1] 16 | extents = Vector2( 6, 2 ) 17 | 18 | [sub_resource type="Animation" id=2] 19 | resource_name = "damage" 20 | length = 0.3 21 | step = 0.01 22 | tracks/0/type = "value" 23 | tracks/0/path = NodePath("Sprite:modulate") 24 | tracks/0/interp = 2 25 | tracks/0/loop_wrap = true 26 | tracks/0/imported = false 27 | tracks/0/enabled = true 28 | tracks/0/keys = { 29 | "times": PoolRealArray( 0, 0.02, 0.3 ), 30 | "transitions": PoolRealArray( 1, 1, 1 ), 31 | "update": 0, 32 | "values": [ Color( 1, 1, 1, 1 ), Color( 1, 0, 0, 1 ), Color( 1, 1, 1, 1 ) ] 33 | } 34 | 35 | [sub_resource type="Animation" id=3] 36 | length = 0.1 37 | loop = true 38 | step = 0.25 39 | tracks/0/type = "value" 40 | tracks/0/path = NodePath("Sprite:frame") 41 | tracks/0/interp = 1 42 | tracks/0/loop_wrap = true 43 | tracks/0/imported = false 44 | tracks/0/enabled = true 45 | tracks/0/keys = { 46 | "times": PoolRealArray( 0 ), 47 | "transitions": PoolRealArray( 1 ), 48 | "update": 1, 49 | "values": [ 8 ] 50 | } 51 | tracks/1/type = "value" 52 | tracks/1/path = NodePath("Sprite:flip_h") 53 | tracks/1/interp = 1 54 | tracks/1/loop_wrap = true 55 | tracks/1/imported = false 56 | tracks/1/enabled = true 57 | tracks/1/keys = { 58 | "times": PoolRealArray( 0 ), 59 | "transitions": PoolRealArray( 1 ), 60 | "update": 1, 61 | "values": [ false ] 62 | } 63 | tracks/2/type = "value" 64 | tracks/2/path = NodePath("LEFTHAND:frame") 65 | tracks/2/interp = 1 66 | tracks/2/loop_wrap = true 67 | tracks/2/imported = false 68 | tracks/2/enabled = true 69 | tracks/2/keys = { 70 | "times": PoolRealArray( 0 ), 71 | "transitions": PoolRealArray( 1 ), 72 | "update": 1, 73 | "values": [ 8 ] 74 | } 75 | tracks/3/type = "value" 76 | tracks/3/path = NodePath("LEFTHAND:flip_h") 77 | tracks/3/interp = 1 78 | tracks/3/loop_wrap = true 79 | tracks/3/imported = false 80 | tracks/3/enabled = true 81 | tracks/3/keys = { 82 | "times": PoolRealArray( 0 ), 83 | "transitions": PoolRealArray( 1 ), 84 | "update": 1, 85 | "values": [ true ] 86 | } 87 | tracks/4/type = "value" 88 | tracks/4/path = NodePath("RIGHTHAND:frame") 89 | tracks/4/interp = 1 90 | tracks/4/loop_wrap = true 91 | tracks/4/imported = false 92 | tracks/4/enabled = true 93 | tracks/4/keys = { 94 | "times": PoolRealArray( 0 ), 95 | "transitions": PoolRealArray( 1 ), 96 | "update": 1, 97 | "values": [ 8 ] 98 | } 99 | tracks/5/type = "value" 100 | tracks/5/path = NodePath("RIGHTHAND:flip_h") 101 | tracks/5/interp = 1 102 | tracks/5/loop_wrap = true 103 | tracks/5/imported = false 104 | tracks/5/enabled = true 105 | tracks/5/keys = { 106 | "times": PoolRealArray( 0 ), 107 | "transitions": PoolRealArray( 1 ), 108 | "update": 1, 109 | "values": [ false ] 110 | } 111 | tracks/6/type = "value" 112 | tracks/6/path = NodePath("RIGHTHAND:z_index") 113 | tracks/6/interp = 1 114 | tracks/6/loop_wrap = true 115 | tracks/6/imported = false 116 | tracks/6/enabled = true 117 | tracks/6/keys = { 118 | "times": PoolRealArray( 0 ), 119 | "transitions": PoolRealArray( 1 ), 120 | "update": 1, 121 | "values": [ 0 ] 122 | } 123 | tracks/7/type = "value" 124 | tracks/7/path = NodePath("LEFTHAND:z_index") 125 | tracks/7/interp = 1 126 | tracks/7/loop_wrap = true 127 | tracks/7/imported = false 128 | tracks/7/enabled = true 129 | tracks/7/keys = { 130 | "times": PoolRealArray( 0 ), 131 | "transitions": PoolRealArray( 1 ), 132 | "update": 1, 133 | "values": [ 0 ] 134 | } 135 | 136 | [sub_resource type="Animation" id=4] 137 | length = 0.1 138 | loop = true 139 | step = 0.25 140 | tracks/0/type = "value" 141 | tracks/0/path = NodePath("Sprite:frame") 142 | tracks/0/interp = 1 143 | tracks/0/loop_wrap = true 144 | tracks/0/imported = false 145 | tracks/0/enabled = true 146 | tracks/0/keys = { 147 | "times": PoolRealArray( 0 ), 148 | "transitions": PoolRealArray( 1 ), 149 | "update": 1, 150 | "values": [ 0 ] 151 | } 152 | tracks/1/type = "value" 153 | tracks/1/path = NodePath("Sprite:flip_h") 154 | tracks/1/interp = 1 155 | tracks/1/loop_wrap = true 156 | tracks/1/imported = false 157 | tracks/1/enabled = true 158 | tracks/1/keys = { 159 | "times": PoolRealArray( 0 ), 160 | "transitions": PoolRealArray( 1 ), 161 | "update": 1, 162 | "values": [ false ] 163 | } 164 | tracks/2/type = "value" 165 | tracks/2/path = NodePath("LEFTHAND:flip_h") 166 | tracks/2/interp = 1 167 | tracks/2/loop_wrap = true 168 | tracks/2/imported = false 169 | tracks/2/enabled = true 170 | tracks/2/keys = { 171 | "times": PoolRealArray( 0 ), 172 | "transitions": PoolRealArray( 1 ), 173 | "update": 1, 174 | "values": [ false ] 175 | } 176 | tracks/3/type = "value" 177 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 178 | tracks/3/interp = 1 179 | tracks/3/loop_wrap = true 180 | tracks/3/imported = false 181 | tracks/3/enabled = true 182 | tracks/3/keys = { 183 | "times": PoolRealArray( 0 ), 184 | "transitions": PoolRealArray( 1 ), 185 | "update": 1, 186 | "values": [ true ] 187 | } 188 | tracks/4/type = "value" 189 | tracks/4/path = NodePath("RIGHTHAND:z_index") 190 | tracks/4/interp = 1 191 | tracks/4/loop_wrap = true 192 | tracks/4/imported = false 193 | tracks/4/enabled = true 194 | tracks/4/keys = { 195 | "times": PoolRealArray( 0 ), 196 | "transitions": PoolRealArray( 1 ), 197 | "update": 1, 198 | "values": [ 0 ] 199 | } 200 | tracks/5/type = "value" 201 | tracks/5/path = NodePath("LEFTHAND:z_index") 202 | tracks/5/interp = 1 203 | tracks/5/loop_wrap = true 204 | tracks/5/imported = false 205 | tracks/5/enabled = true 206 | tracks/5/keys = { 207 | "times": PoolRealArray( 0 ), 208 | "transitions": PoolRealArray( 1 ), 209 | "update": 1, 210 | "values": [ 0 ] 211 | } 212 | tracks/6/type = "value" 213 | tracks/6/path = NodePath("RIGHTHAND:frame") 214 | tracks/6/interp = 1 215 | tracks/6/loop_wrap = true 216 | tracks/6/imported = false 217 | tracks/6/enabled = true 218 | tracks/6/keys = { 219 | "times": PoolRealArray( 0 ), 220 | "transitions": PoolRealArray( 1 ), 221 | "update": 1, 222 | "values": [ 0 ] 223 | } 224 | tracks/7/type = "value" 225 | tracks/7/path = NodePath("LEFTHAND:frame") 226 | tracks/7/interp = 1 227 | tracks/7/loop_wrap = true 228 | tracks/7/imported = false 229 | tracks/7/enabled = true 230 | tracks/7/keys = { 231 | "times": PoolRealArray( 0 ), 232 | "transitions": PoolRealArray( 1 ), 233 | "update": 1, 234 | "values": [ 0 ] 235 | } 236 | 237 | [sub_resource type="Animation" id=5] 238 | length = 0.1 239 | loop = true 240 | step = 0.25 241 | tracks/0/type = "value" 242 | tracks/0/path = NodePath("Sprite:frame") 243 | tracks/0/interp = 1 244 | tracks/0/loop_wrap = true 245 | tracks/0/imported = false 246 | tracks/0/enabled = true 247 | tracks/0/keys = { 248 | "times": PoolRealArray( 0 ), 249 | "transitions": PoolRealArray( 1 ), 250 | "update": 1, 251 | "values": [ 4 ] 252 | } 253 | tracks/1/type = "value" 254 | tracks/1/path = NodePath("Sprite:flip_h") 255 | tracks/1/interp = 1 256 | tracks/1/loop_wrap = true 257 | tracks/1/imported = false 258 | tracks/1/enabled = true 259 | tracks/1/keys = { 260 | "times": PoolRealArray( 0 ), 261 | "transitions": PoolRealArray( 1 ), 262 | "update": 1, 263 | "values": [ true ] 264 | } 265 | tracks/2/type = "value" 266 | tracks/2/path = NodePath("LEFTHAND:frame") 267 | tracks/2/interp = 1 268 | tracks/2/loop_wrap = true 269 | tracks/2/imported = false 270 | tracks/2/enabled = true 271 | tracks/2/keys = { 272 | "times": PoolRealArray( 0 ), 273 | "transitions": PoolRealArray( 1 ), 274 | "update": 1, 275 | "values": [ 6 ] 276 | } 277 | tracks/3/type = "value" 278 | tracks/3/path = NodePath("LEFTHAND:flip_h") 279 | tracks/3/interp = 1 280 | tracks/3/loop_wrap = true 281 | tracks/3/imported = false 282 | tracks/3/enabled = true 283 | tracks/3/keys = { 284 | "times": PoolRealArray( 0 ), 285 | "transitions": PoolRealArray( 1 ), 286 | "update": 1, 287 | "values": [ true ] 288 | } 289 | tracks/4/type = "value" 290 | tracks/4/path = NodePath("RIGHTHAND:frame") 291 | tracks/4/interp = 1 292 | tracks/4/loop_wrap = true 293 | tracks/4/imported = false 294 | tracks/4/enabled = true 295 | tracks/4/keys = { 296 | "times": PoolRealArray( 0 ), 297 | "transitions": PoolRealArray( 1 ), 298 | "update": 1, 299 | "values": [ 6 ] 300 | } 301 | tracks/5/type = "value" 302 | tracks/5/path = NodePath("RIGHTHAND:flip_h") 303 | tracks/5/interp = 1 304 | tracks/5/loop_wrap = true 305 | tracks/5/imported = false 306 | tracks/5/enabled = true 307 | tracks/5/keys = { 308 | "times": PoolRealArray( 0 ), 309 | "transitions": PoolRealArray( 1 ), 310 | "update": 1, 311 | "values": [ true ] 312 | } 313 | tracks/6/type = "value" 314 | tracks/6/path = NodePath("RIGHTHAND:z_index") 315 | tracks/6/interp = 1 316 | tracks/6/loop_wrap = true 317 | tracks/6/imported = false 318 | tracks/6/enabled = true 319 | tracks/6/keys = { 320 | "times": PoolRealArray( 0 ), 321 | "transitions": PoolRealArray( 1 ), 322 | "update": 1, 323 | "values": [ -1 ] 324 | } 325 | tracks/7/type = "value" 326 | tracks/7/path = NodePath("LEFTHAND:z_index") 327 | tracks/7/interp = 1 328 | tracks/7/loop_wrap = true 329 | tracks/7/imported = false 330 | tracks/7/enabled = true 331 | tracks/7/keys = { 332 | "times": PoolRealArray( 0 ), 333 | "transitions": PoolRealArray( 1 ), 334 | "update": 1, 335 | "values": [ 0 ] 336 | } 337 | 338 | [sub_resource type="Animation" id=6] 339 | length = 0.1 340 | loop = true 341 | step = 0.25 342 | tracks/0/type = "value" 343 | tracks/0/path = NodePath("Sprite:frame") 344 | tracks/0/interp = 1 345 | tracks/0/loop_wrap = true 346 | tracks/0/imported = false 347 | tracks/0/enabled = true 348 | tracks/0/keys = { 349 | "times": PoolRealArray( 0 ), 350 | "transitions": PoolRealArray( 1 ), 351 | "update": 1, 352 | "values": [ 4 ] 353 | } 354 | tracks/1/type = "value" 355 | tracks/1/path = NodePath("Sprite:flip_h") 356 | tracks/1/interp = 1 357 | tracks/1/loop_wrap = true 358 | tracks/1/imported = false 359 | tracks/1/enabled = true 360 | tracks/1/keys = { 361 | "times": PoolRealArray( 0 ), 362 | "transitions": PoolRealArray( 1 ), 363 | "update": 1, 364 | "values": [ false ] 365 | } 366 | tracks/2/type = "value" 367 | tracks/2/path = NodePath("LEFTHAND:frame") 368 | tracks/2/interp = 1 369 | tracks/2/loop_wrap = true 370 | tracks/2/imported = false 371 | tracks/2/enabled = true 372 | tracks/2/keys = { 373 | "times": PoolRealArray( 0 ), 374 | "transitions": PoolRealArray( 1 ), 375 | "update": 1, 376 | "values": [ 6 ] 377 | } 378 | tracks/3/type = "value" 379 | tracks/3/path = NodePath("LEFTHAND:flip_h") 380 | tracks/3/interp = 1 381 | tracks/3/loop_wrap = true 382 | tracks/3/imported = false 383 | tracks/3/enabled = true 384 | tracks/3/keys = { 385 | "times": PoolRealArray( 0 ), 386 | "transitions": PoolRealArray( 1 ), 387 | "update": 1, 388 | "values": [ false ] 389 | } 390 | tracks/4/type = "value" 391 | tracks/4/path = NodePath("RIGHTHAND:frame") 392 | tracks/4/interp = 1 393 | tracks/4/loop_wrap = true 394 | tracks/4/imported = false 395 | tracks/4/enabled = true 396 | tracks/4/keys = { 397 | "times": PoolRealArray( 0 ), 398 | "transitions": PoolRealArray( 1 ), 399 | "update": 1, 400 | "values": [ 6 ] 401 | } 402 | tracks/5/type = "value" 403 | tracks/5/path = NodePath("RIGHTHAND:flip_h") 404 | tracks/5/interp = 1 405 | tracks/5/loop_wrap = true 406 | tracks/5/imported = false 407 | tracks/5/enabled = true 408 | tracks/5/keys = { 409 | "times": PoolRealArray( 0 ), 410 | "transitions": PoolRealArray( 1 ), 411 | "update": 1, 412 | "values": [ false ] 413 | } 414 | tracks/6/type = "value" 415 | tracks/6/path = NodePath("RIGHTHAND:z_index") 416 | tracks/6/interp = 1 417 | tracks/6/loop_wrap = true 418 | tracks/6/imported = false 419 | tracks/6/enabled = true 420 | tracks/6/keys = { 421 | "times": PoolRealArray( 0 ), 422 | "transitions": PoolRealArray( 1 ), 423 | "update": 1, 424 | "values": [ 0 ] 425 | } 426 | tracks/7/type = "value" 427 | tracks/7/path = NodePath("LEFTHAND:z_index") 428 | tracks/7/interp = 1 429 | tracks/7/loop_wrap = true 430 | tracks/7/imported = false 431 | tracks/7/enabled = true 432 | tracks/7/keys = { 433 | "times": PoolRealArray( 0 ), 434 | "transitions": PoolRealArray( 1 ), 435 | "update": 1, 436 | "values": [ -1 ] 437 | } 438 | 439 | [sub_resource type="Animation" id=7] 440 | resource_name = "stab_back_left" 441 | length = 0.75 442 | step = 0.25 443 | tracks/0/type = "value" 444 | tracks/0/path = NodePath("Sprite:frame") 445 | tracks/0/interp = 1 446 | tracks/0/loop_wrap = true 447 | tracks/0/imported = false 448 | tracks/0/enabled = true 449 | tracks/0/keys = { 450 | "times": PoolRealArray( 0, 0.25, 0.5 ), 451 | "transitions": PoolRealArray( 1, 1, 1 ), 452 | "update": 1, 453 | "values": [ 17, 8, 16 ] 454 | } 455 | tracks/1/type = "value" 456 | tracks/1/path = NodePath("Sprite:flip_h") 457 | tracks/1/interp = 1 458 | tracks/1/loop_wrap = true 459 | tracks/1/imported = false 460 | tracks/1/enabled = true 461 | tracks/1/keys = { 462 | "times": PoolRealArray( 0 ), 463 | "transitions": PoolRealArray( 1 ), 464 | "update": 1, 465 | "values": [ false ] 466 | } 467 | tracks/2/type = "value" 468 | tracks/2/path = NodePath("LEFTHAND:flip_h") 469 | tracks/2/interp = 1 470 | tracks/2/loop_wrap = true 471 | tracks/2/imported = false 472 | tracks/2/enabled = true 473 | tracks/2/keys = { 474 | "times": PoolRealArray( 0 ), 475 | "transitions": PoolRealArray( 1 ), 476 | "update": 1, 477 | "values": [ true ] 478 | } 479 | tracks/3/type = "value" 480 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 481 | tracks/3/interp = 1 482 | tracks/3/loop_wrap = true 483 | tracks/3/imported = false 484 | tracks/3/enabled = true 485 | tracks/3/keys = { 486 | "times": PoolRealArray( 0 ), 487 | "transitions": PoolRealArray( 1 ), 488 | "update": 1, 489 | "values": [ false ] 490 | } 491 | tracks/4/type = "value" 492 | tracks/4/path = NodePath("RIGHTHAND:z_index") 493 | tracks/4/interp = 1 494 | tracks/4/loop_wrap = true 495 | tracks/4/imported = false 496 | tracks/4/enabled = true 497 | tracks/4/keys = { 498 | "times": PoolRealArray( 0 ), 499 | "transitions": PoolRealArray( 1 ), 500 | "update": 1, 501 | "values": [ 0 ] 502 | } 503 | tracks/5/type = "value" 504 | tracks/5/path = NodePath("LEFTHAND:z_index") 505 | tracks/5/interp = 1 506 | tracks/5/loop_wrap = true 507 | tracks/5/imported = false 508 | tracks/5/enabled = true 509 | tracks/5/keys = { 510 | "times": PoolRealArray( 0 ), 511 | "transitions": PoolRealArray( 1 ), 512 | "update": 1, 513 | "values": [ 0 ] 514 | } 515 | tracks/6/type = "value" 516 | tracks/6/path = NodePath("LEFTHAND:frame") 517 | tracks/6/interp = 1 518 | tracks/6/loop_wrap = true 519 | tracks/6/imported = false 520 | tracks/6/enabled = true 521 | tracks/6/keys = { 522 | "times": PoolRealArray( 0, 0.25, 0.5 ), 523 | "transitions": PoolRealArray( 1, 1, 1 ), 524 | "update": 1, 525 | "values": [ 16, 8, 17 ] 526 | } 527 | tracks/7/type = "value" 528 | tracks/7/path = NodePath("RIGHTHAND:frame") 529 | tracks/7/interp = 1 530 | tracks/7/loop_wrap = true 531 | tracks/7/imported = false 532 | tracks/7/enabled = true 533 | tracks/7/keys = { 534 | "times": PoolRealArray( 0, 0.25, 0.5 ), 535 | "transitions": PoolRealArray( 1, 1, 1 ), 536 | "update": 1, 537 | "values": [ 16, 8, 17 ] 538 | } 539 | tracks/8/type = "method" 540 | tracks/8/path = NodePath("..") 541 | tracks/8/interp = 1 542 | tracks/8/loop_wrap = true 543 | tracks/8/imported = false 544 | tracks/8/enabled = true 545 | tracks/8/keys = { 546 | "times": PoolRealArray( 0, 0.75 ), 547 | "transitions": PoolRealArray( 1, 1 ), 548 | "values": [ { 549 | "args": [ ], 550 | "method": "stop_control" 551 | }, { 552 | "args": [ ], 553 | "method": "apply_damage" 554 | } ] 555 | } 556 | 557 | [sub_resource type="Animation" id=8] 558 | resource_name = "stab_back_right" 559 | length = 0.75 560 | step = 0.25 561 | tracks/0/type = "value" 562 | tracks/0/path = NodePath("Sprite:frame") 563 | tracks/0/interp = 1 564 | tracks/0/loop_wrap = true 565 | tracks/0/imported = false 566 | tracks/0/enabled = true 567 | tracks/0/keys = { 568 | "times": PoolRealArray( 0, 0.25, 0.5 ), 569 | "transitions": PoolRealArray( 1, 1, 1 ), 570 | "update": 1, 571 | "values": [ 16, 8, 17 ] 572 | } 573 | tracks/1/type = "value" 574 | tracks/1/path = NodePath("Sprite:flip_h") 575 | tracks/1/interp = 1 576 | tracks/1/loop_wrap = true 577 | tracks/1/imported = false 578 | tracks/1/enabled = true 579 | tracks/1/keys = { 580 | "times": PoolRealArray( 0 ), 581 | "transitions": PoolRealArray( 1 ), 582 | "update": 1, 583 | "values": [ false ] 584 | } 585 | tracks/2/type = "value" 586 | tracks/2/path = NodePath("LEFTHAND:flip_h") 587 | tracks/2/interp = 1 588 | tracks/2/loop_wrap = true 589 | tracks/2/imported = false 590 | tracks/2/enabled = true 591 | tracks/2/keys = { 592 | "times": PoolRealArray( 0 ), 593 | "transitions": PoolRealArray( 1 ), 594 | "update": 1, 595 | "values": [ true ] 596 | } 597 | tracks/3/type = "value" 598 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 599 | tracks/3/interp = 1 600 | tracks/3/loop_wrap = true 601 | tracks/3/imported = false 602 | tracks/3/enabled = true 603 | tracks/3/keys = { 604 | "times": PoolRealArray( 0 ), 605 | "transitions": PoolRealArray( 1 ), 606 | "update": 1, 607 | "values": [ false ] 608 | } 609 | tracks/4/type = "value" 610 | tracks/4/path = NodePath("RIGHTHAND:z_index") 611 | tracks/4/interp = 1 612 | tracks/4/loop_wrap = true 613 | tracks/4/imported = false 614 | tracks/4/enabled = true 615 | tracks/4/keys = { 616 | "times": PoolRealArray( 0 ), 617 | "transitions": PoolRealArray( 1 ), 618 | "update": 1, 619 | "values": [ 0 ] 620 | } 621 | tracks/5/type = "value" 622 | tracks/5/path = NodePath("LEFTHAND:z_index") 623 | tracks/5/interp = 1 624 | tracks/5/loop_wrap = true 625 | tracks/5/imported = false 626 | tracks/5/enabled = true 627 | tracks/5/keys = { 628 | "times": PoolRealArray( 0 ), 629 | "transitions": PoolRealArray( 1 ), 630 | "update": 1, 631 | "values": [ 0 ] 632 | } 633 | tracks/6/type = "value" 634 | tracks/6/path = NodePath("LEFTHAND:frame") 635 | tracks/6/interp = 1 636 | tracks/6/loop_wrap = true 637 | tracks/6/imported = false 638 | tracks/6/enabled = true 639 | tracks/6/keys = { 640 | "times": PoolRealArray( 0, 0.25, 0.5 ), 641 | "transitions": PoolRealArray( 1, 1, 1 ), 642 | "update": 1, 643 | "values": [ 16, 8, 17 ] 644 | } 645 | tracks/7/type = "value" 646 | tracks/7/path = NodePath("RIGHTHAND:frame") 647 | tracks/7/interp = 1 648 | tracks/7/loop_wrap = true 649 | tracks/7/imported = false 650 | tracks/7/enabled = true 651 | tracks/7/keys = { 652 | "times": PoolRealArray( 0, 0.25, 0.5 ), 653 | "transitions": PoolRealArray( 1, 1, 1 ), 654 | "update": 1, 655 | "values": [ 16, 8, 17 ] 656 | } 657 | tracks/8/type = "method" 658 | tracks/8/path = NodePath("..") 659 | tracks/8/interp = 1 660 | tracks/8/loop_wrap = true 661 | tracks/8/imported = false 662 | tracks/8/enabled = true 663 | tracks/8/keys = { 664 | "times": PoolRealArray( 0, 0.75 ), 665 | "transitions": PoolRealArray( 1, 1 ), 666 | "values": [ { 667 | "args": [ ], 668 | "method": "stop_control" 669 | }, { 670 | "args": [ ], 671 | "method": "apply_damage" 672 | } ] 673 | } 674 | 675 | [sub_resource type="Animation" id=9] 676 | resource_name = "stab_front_left" 677 | length = 0.75 678 | step = 0.25 679 | tracks/0/type = "value" 680 | tracks/0/path = NodePath("Sprite:frame") 681 | tracks/0/interp = 1 682 | tracks/0/loop_wrap = true 683 | tracks/0/imported = false 684 | tracks/0/enabled = true 685 | tracks/0/keys = { 686 | "times": PoolRealArray( 0, 0.25, 0.5 ), 687 | "transitions": PoolRealArray( 1, 1, 1 ), 688 | "update": 1, 689 | "values": [ 12, 0, 13 ] 690 | } 691 | tracks/1/type = "value" 692 | tracks/1/path = NodePath("Sprite:flip_h") 693 | tracks/1/interp = 1 694 | tracks/1/loop_wrap = true 695 | tracks/1/imported = false 696 | tracks/1/enabled = true 697 | tracks/1/keys = { 698 | "times": PoolRealArray( 0 ), 699 | "transitions": PoolRealArray( 1 ), 700 | "update": 1, 701 | "values": [ false ] 702 | } 703 | tracks/2/type = "value" 704 | tracks/2/path = NodePath("LEFTHAND:flip_h") 705 | tracks/2/interp = 1 706 | tracks/2/loop_wrap = true 707 | tracks/2/imported = false 708 | tracks/2/enabled = true 709 | tracks/2/keys = { 710 | "times": PoolRealArray( 0 ), 711 | "transitions": PoolRealArray( 1 ), 712 | "update": 1, 713 | "values": [ false ] 714 | } 715 | tracks/3/type = "value" 716 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 717 | tracks/3/interp = 1 718 | tracks/3/loop_wrap = true 719 | tracks/3/imported = false 720 | tracks/3/enabled = true 721 | tracks/3/keys = { 722 | "times": PoolRealArray( 0 ), 723 | "transitions": PoolRealArray( 1 ), 724 | "update": 1, 725 | "values": [ true ] 726 | } 727 | tracks/4/type = "value" 728 | tracks/4/path = NodePath("RIGHTHAND:z_index") 729 | tracks/4/interp = 1 730 | tracks/4/loop_wrap = true 731 | tracks/4/imported = false 732 | tracks/4/enabled = true 733 | tracks/4/keys = { 734 | "times": PoolRealArray( 0 ), 735 | "transitions": PoolRealArray( 1 ), 736 | "update": 1, 737 | "values": [ 0 ] 738 | } 739 | tracks/5/type = "value" 740 | tracks/5/path = NodePath("LEFTHAND:z_index") 741 | tracks/5/interp = 1 742 | tracks/5/loop_wrap = true 743 | tracks/5/imported = false 744 | tracks/5/enabled = true 745 | tracks/5/keys = { 746 | "times": PoolRealArray( 0 ), 747 | "transitions": PoolRealArray( 1 ), 748 | "update": 1, 749 | "values": [ 0 ] 750 | } 751 | tracks/6/type = "value" 752 | tracks/6/path = NodePath("LEFTHAND:frame") 753 | tracks/6/interp = 1 754 | tracks/6/loop_wrap = true 755 | tracks/6/imported = false 756 | tracks/6/enabled = true 757 | tracks/6/keys = { 758 | "times": PoolRealArray( 0, 0.25, 0.5 ), 759 | "transitions": PoolRealArray( 1, 1, 1 ), 760 | "update": 1, 761 | "values": [ 12, 0, 13 ] 762 | } 763 | tracks/7/type = "value" 764 | tracks/7/path = NodePath("RIGHTHAND:frame") 765 | tracks/7/interp = 1 766 | tracks/7/loop_wrap = true 767 | tracks/7/imported = false 768 | tracks/7/enabled = true 769 | tracks/7/keys = { 770 | "times": PoolRealArray( 0, 0.25, 0.5 ), 771 | "transitions": PoolRealArray( 1, 1, 1 ), 772 | "update": 1, 773 | "values": [ 12, 0, 13 ] 774 | } 775 | tracks/8/type = "method" 776 | tracks/8/path = NodePath("..") 777 | tracks/8/interp = 1 778 | tracks/8/loop_wrap = true 779 | tracks/8/imported = false 780 | tracks/8/enabled = true 781 | tracks/8/keys = { 782 | "times": PoolRealArray( 0, 0.75 ), 783 | "transitions": PoolRealArray( 1, 1 ), 784 | "values": [ { 785 | "args": [ ], 786 | "method": "stop_control" 787 | }, { 788 | "args": [ ], 789 | "method": "apply_damage" 790 | } ] 791 | } 792 | 793 | [sub_resource type="Animation" id=10] 794 | resource_name = "stab_front_right" 795 | length = 0.75 796 | step = 0.25 797 | tracks/0/type = "value" 798 | tracks/0/path = NodePath("Sprite:frame") 799 | tracks/0/interp = 1 800 | tracks/0/loop_wrap = true 801 | tracks/0/imported = false 802 | tracks/0/enabled = true 803 | tracks/0/keys = { 804 | "times": PoolRealArray( 0, 0.25, 0.5 ), 805 | "transitions": PoolRealArray( 1, 1, 1 ), 806 | "update": 1, 807 | "values": [ 13, 0, 12 ] 808 | } 809 | tracks/1/type = "value" 810 | tracks/1/path = NodePath("Sprite:flip_h") 811 | tracks/1/interp = 1 812 | tracks/1/loop_wrap = true 813 | tracks/1/imported = false 814 | tracks/1/enabled = true 815 | tracks/1/keys = { 816 | "times": PoolRealArray( 0 ), 817 | "transitions": PoolRealArray( 1 ), 818 | "update": 1, 819 | "values": [ false ] 820 | } 821 | tracks/2/type = "value" 822 | tracks/2/path = NodePath("LEFTHAND:flip_h") 823 | tracks/2/interp = 1 824 | tracks/2/loop_wrap = true 825 | tracks/2/imported = false 826 | tracks/2/enabled = true 827 | tracks/2/keys = { 828 | "times": PoolRealArray( 0 ), 829 | "transitions": PoolRealArray( 1 ), 830 | "update": 1, 831 | "values": [ false ] 832 | } 833 | tracks/3/type = "value" 834 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 835 | tracks/3/interp = 1 836 | tracks/3/loop_wrap = true 837 | tracks/3/imported = false 838 | tracks/3/enabled = true 839 | tracks/3/keys = { 840 | "times": PoolRealArray( 0 ), 841 | "transitions": PoolRealArray( 1 ), 842 | "update": 1, 843 | "values": [ true ] 844 | } 845 | tracks/4/type = "value" 846 | tracks/4/path = NodePath("RIGHTHAND:z_index") 847 | tracks/4/interp = 1 848 | tracks/4/loop_wrap = true 849 | tracks/4/imported = false 850 | tracks/4/enabled = true 851 | tracks/4/keys = { 852 | "times": PoolRealArray( 0 ), 853 | "transitions": PoolRealArray( 1 ), 854 | "update": 1, 855 | "values": [ 0 ] 856 | } 857 | tracks/5/type = "value" 858 | tracks/5/path = NodePath("LEFTHAND:z_index") 859 | tracks/5/interp = 1 860 | tracks/5/loop_wrap = true 861 | tracks/5/imported = false 862 | tracks/5/enabled = true 863 | tracks/5/keys = { 864 | "times": PoolRealArray( 0 ), 865 | "transitions": PoolRealArray( 1 ), 866 | "update": 1, 867 | "values": [ 0 ] 868 | } 869 | tracks/6/type = "value" 870 | tracks/6/path = NodePath("LEFTHAND:frame") 871 | tracks/6/interp = 1 872 | tracks/6/loop_wrap = true 873 | tracks/6/imported = false 874 | tracks/6/enabled = true 875 | tracks/6/keys = { 876 | "times": PoolRealArray( 0, 0.25, 0.5 ), 877 | "transitions": PoolRealArray( 1, 1, 1 ), 878 | "update": 1, 879 | "values": [ 12, 0, 13 ] 880 | } 881 | tracks/7/type = "value" 882 | tracks/7/path = NodePath("RIGHTHAND:frame") 883 | tracks/7/interp = 1 884 | tracks/7/loop_wrap = true 885 | tracks/7/imported = false 886 | tracks/7/enabled = true 887 | tracks/7/keys = { 888 | "times": PoolRealArray( 0, 0.25, 0.5 ), 889 | "transitions": PoolRealArray( 1, 1, 1 ), 890 | "update": 1, 891 | "values": [ 12, 0, 13 ] 892 | } 893 | tracks/8/type = "method" 894 | tracks/8/path = NodePath("..") 895 | tracks/8/interp = 1 896 | tracks/8/loop_wrap = true 897 | tracks/8/imported = false 898 | tracks/8/enabled = true 899 | tracks/8/keys = { 900 | "times": PoolRealArray( 0, 0.75 ), 901 | "transitions": PoolRealArray( 1, 1 ), 902 | "values": [ { 903 | "args": [ ], 904 | "method": "stop_control" 905 | }, { 906 | "args": [ ], 907 | "method": "apply_damage" 908 | } ] 909 | } 910 | 911 | [sub_resource type="Animation" id=11] 912 | resource_name = "stab_side_left_left" 913 | length = 0.75 914 | step = 0.25 915 | tracks/0/type = "value" 916 | tracks/0/path = NodePath("Sprite:frame") 917 | tracks/0/interp = 1 918 | tracks/0/loop_wrap = true 919 | tracks/0/imported = false 920 | tracks/0/enabled = true 921 | tracks/0/keys = { 922 | "times": PoolRealArray( 0, 0.25, 0.5 ), 923 | "transitions": PoolRealArray( 1, 1, 1 ), 924 | "update": 1, 925 | "values": [ 14, 6, 15 ] 926 | } 927 | tracks/1/type = "value" 928 | tracks/1/path = NodePath("Sprite:flip_h") 929 | tracks/1/interp = 1 930 | tracks/1/loop_wrap = true 931 | tracks/1/imported = false 932 | tracks/1/enabled = true 933 | tracks/1/keys = { 934 | "times": PoolRealArray( 0 ), 935 | "transitions": PoolRealArray( 1 ), 936 | "update": 1, 937 | "values": [ true ] 938 | } 939 | tracks/2/type = "value" 940 | tracks/2/path = NodePath("LEFTHAND:flip_h") 941 | tracks/2/interp = 1 942 | tracks/2/loop_wrap = true 943 | tracks/2/imported = false 944 | tracks/2/enabled = true 945 | tracks/2/keys = { 946 | "times": PoolRealArray( 0 ), 947 | "transitions": PoolRealArray( 1 ), 948 | "update": 1, 949 | "values": [ true ] 950 | } 951 | tracks/3/type = "value" 952 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 953 | tracks/3/interp = 1 954 | tracks/3/loop_wrap = true 955 | tracks/3/imported = false 956 | tracks/3/enabled = true 957 | tracks/3/keys = { 958 | "times": PoolRealArray( 0 ), 959 | "transitions": PoolRealArray( 1 ), 960 | "update": 1, 961 | "values": [ true ] 962 | } 963 | tracks/4/type = "value" 964 | tracks/4/path = NodePath("RIGHTHAND:z_index") 965 | tracks/4/interp = 1 966 | tracks/4/loop_wrap = true 967 | tracks/4/imported = false 968 | tracks/4/enabled = true 969 | tracks/4/keys = { 970 | "times": PoolRealArray( 0 ), 971 | "transitions": PoolRealArray( 1 ), 972 | "update": 1, 973 | "values": [ 0 ] 974 | } 975 | tracks/5/type = "value" 976 | tracks/5/path = NodePath("LEFTHAND:z_index") 977 | tracks/5/interp = 1 978 | tracks/5/loop_wrap = true 979 | tracks/5/imported = false 980 | tracks/5/enabled = true 981 | tracks/5/keys = { 982 | "times": PoolRealArray( 0 ), 983 | "transitions": PoolRealArray( 1 ), 984 | "update": 1, 985 | "values": [ 0 ] 986 | } 987 | tracks/6/type = "value" 988 | tracks/6/path = NodePath("LEFTHAND:frame") 989 | tracks/6/interp = 1 990 | tracks/6/loop_wrap = true 991 | tracks/6/imported = false 992 | tracks/6/enabled = true 993 | tracks/6/keys = { 994 | "times": PoolRealArray( 0, 0.25, 0.5 ), 995 | "transitions": PoolRealArray( 1, 1, 1 ), 996 | "update": 1, 997 | "values": [ 14, 6, 15 ] 998 | } 999 | tracks/7/type = "value" 1000 | tracks/7/path = NodePath("RIGHTHAND:frame") 1001 | tracks/7/interp = 1 1002 | tracks/7/loop_wrap = true 1003 | tracks/7/imported = false 1004 | tracks/7/enabled = true 1005 | tracks/7/keys = { 1006 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1007 | "transitions": PoolRealArray( 1, 1, 1 ), 1008 | "update": 1, 1009 | "values": [ 15, 6, 14 ] 1010 | } 1011 | tracks/8/type = "method" 1012 | tracks/8/path = NodePath("..") 1013 | tracks/8/interp = 1 1014 | tracks/8/loop_wrap = true 1015 | tracks/8/imported = false 1016 | tracks/8/enabled = true 1017 | tracks/8/keys = { 1018 | "times": PoolRealArray( 0, 0.75 ), 1019 | "transitions": PoolRealArray( 1, 1 ), 1020 | "values": [ { 1021 | "args": [ ], 1022 | "method": "stop_control" 1023 | }, { 1024 | "args": [ ], 1025 | "method": "apply_damage" 1026 | } ] 1027 | } 1028 | 1029 | [sub_resource type="Animation" id=12] 1030 | resource_name = "stab_side_left_right" 1031 | length = 0.75 1032 | step = 0.25 1033 | tracks/0/type = "value" 1034 | tracks/0/path = NodePath("Sprite:frame") 1035 | tracks/0/interp = 1 1036 | tracks/0/loop_wrap = true 1037 | tracks/0/imported = false 1038 | tracks/0/enabled = true 1039 | tracks/0/keys = { 1040 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1041 | "transitions": PoolRealArray( 1, 1, 1 ), 1042 | "update": 1, 1043 | "values": [ 15, 6, 14 ] 1044 | } 1045 | tracks/1/type = "value" 1046 | tracks/1/path = NodePath("Sprite:flip_h") 1047 | tracks/1/interp = 1 1048 | tracks/1/loop_wrap = true 1049 | tracks/1/imported = false 1050 | tracks/1/enabled = true 1051 | tracks/1/keys = { 1052 | "times": PoolRealArray( 0 ), 1053 | "transitions": PoolRealArray( 1 ), 1054 | "update": 1, 1055 | "values": [ true ] 1056 | } 1057 | tracks/2/type = "value" 1058 | tracks/2/path = NodePath("LEFTHAND:flip_h") 1059 | tracks/2/interp = 1 1060 | tracks/2/loop_wrap = true 1061 | tracks/2/imported = false 1062 | tracks/2/enabled = true 1063 | tracks/2/keys = { 1064 | "times": PoolRealArray( 0 ), 1065 | "transitions": PoolRealArray( 1 ), 1066 | "update": 1, 1067 | "values": [ true ] 1068 | } 1069 | tracks/3/type = "value" 1070 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 1071 | tracks/3/interp = 1 1072 | tracks/3/loop_wrap = true 1073 | tracks/3/imported = false 1074 | tracks/3/enabled = true 1075 | tracks/3/keys = { 1076 | "times": PoolRealArray( 0 ), 1077 | "transitions": PoolRealArray( 1 ), 1078 | "update": 1, 1079 | "values": [ true ] 1080 | } 1081 | tracks/4/type = "value" 1082 | tracks/4/path = NodePath("RIGHTHAND:z_index") 1083 | tracks/4/interp = 1 1084 | tracks/4/loop_wrap = true 1085 | tracks/4/imported = false 1086 | tracks/4/enabled = true 1087 | tracks/4/keys = { 1088 | "times": PoolRealArray( 0 ), 1089 | "transitions": PoolRealArray( 1 ), 1090 | "update": 1, 1091 | "values": [ -1 ] 1092 | } 1093 | tracks/5/type = "value" 1094 | tracks/5/path = NodePath("LEFTHAND:z_index") 1095 | tracks/5/interp = 1 1096 | tracks/5/loop_wrap = true 1097 | tracks/5/imported = false 1098 | tracks/5/enabled = true 1099 | tracks/5/keys = { 1100 | "times": PoolRealArray( 0 ), 1101 | "transitions": PoolRealArray( 1 ), 1102 | "update": 1, 1103 | "values": [ -1 ] 1104 | } 1105 | tracks/6/type = "value" 1106 | tracks/6/path = NodePath("LEFTHAND:frame") 1107 | tracks/6/interp = 1 1108 | tracks/6/loop_wrap = true 1109 | tracks/6/imported = false 1110 | tracks/6/enabled = true 1111 | tracks/6/keys = { 1112 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1113 | "transitions": PoolRealArray( 1, 1, 1 ), 1114 | "update": 1, 1115 | "values": [ 14, 6, 15 ] 1116 | } 1117 | tracks/7/type = "value" 1118 | tracks/7/path = NodePath("RIGHTHAND:frame") 1119 | tracks/7/interp = 1 1120 | tracks/7/loop_wrap = true 1121 | tracks/7/imported = false 1122 | tracks/7/enabled = true 1123 | tracks/7/keys = { 1124 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1125 | "transitions": PoolRealArray( 1, 1, 1 ), 1126 | "update": 1, 1127 | "values": [ 14, 6, 15 ] 1128 | } 1129 | tracks/8/type = "method" 1130 | tracks/8/path = NodePath("..") 1131 | tracks/8/interp = 1 1132 | tracks/8/loop_wrap = true 1133 | tracks/8/imported = false 1134 | tracks/8/enabled = true 1135 | tracks/8/keys = { 1136 | "times": PoolRealArray( 0, 0.75 ), 1137 | "transitions": PoolRealArray( 1, 1 ), 1138 | "values": [ { 1139 | "args": [ ], 1140 | "method": "stop_control" 1141 | }, { 1142 | "args": [ ], 1143 | "method": "apply_damage" 1144 | } ] 1145 | } 1146 | 1147 | [sub_resource type="Animation" id=13] 1148 | resource_name = "stab_side_right_left" 1149 | length = 0.75 1150 | step = 0.25 1151 | tracks/0/type = "value" 1152 | tracks/0/path = NodePath("Sprite:frame") 1153 | tracks/0/interp = 1 1154 | tracks/0/loop_wrap = true 1155 | tracks/0/imported = false 1156 | tracks/0/enabled = true 1157 | tracks/0/keys = { 1158 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1159 | "transitions": PoolRealArray( 1, 1, 1 ), 1160 | "update": 1, 1161 | "values": [ 15, 6, 14 ] 1162 | } 1163 | tracks/1/type = "value" 1164 | tracks/1/path = NodePath("Sprite:flip_h") 1165 | tracks/1/interp = 1 1166 | tracks/1/loop_wrap = true 1167 | tracks/1/imported = false 1168 | tracks/1/enabled = true 1169 | tracks/1/keys = { 1170 | "times": PoolRealArray( 0 ), 1171 | "transitions": PoolRealArray( 1 ), 1172 | "update": 1, 1173 | "values": [ false ] 1174 | } 1175 | tracks/2/type = "value" 1176 | tracks/2/path = NodePath("LEFTHAND:flip_h") 1177 | tracks/2/interp = 1 1178 | tracks/2/loop_wrap = true 1179 | tracks/2/imported = false 1180 | tracks/2/enabled = true 1181 | tracks/2/keys = { 1182 | "times": PoolRealArray( 0 ), 1183 | "transitions": PoolRealArray( 1 ), 1184 | "update": 1, 1185 | "values": [ false ] 1186 | } 1187 | tracks/3/type = "value" 1188 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 1189 | tracks/3/interp = 1 1190 | tracks/3/loop_wrap = true 1191 | tracks/3/imported = false 1192 | tracks/3/enabled = true 1193 | tracks/3/keys = { 1194 | "times": PoolRealArray( 0 ), 1195 | "transitions": PoolRealArray( 1 ), 1196 | "update": 1, 1197 | "values": [ false ] 1198 | } 1199 | tracks/4/type = "value" 1200 | tracks/4/path = NodePath("RIGHTHAND:z_index") 1201 | tracks/4/interp = 1 1202 | tracks/4/loop_wrap = true 1203 | tracks/4/imported = false 1204 | tracks/4/enabled = true 1205 | tracks/4/keys = { 1206 | "times": PoolRealArray( 0 ), 1207 | "transitions": PoolRealArray( 1 ), 1208 | "update": 1, 1209 | "values": [ 0 ] 1210 | } 1211 | tracks/5/type = "value" 1212 | tracks/5/path = NodePath("LEFTHAND:z_index") 1213 | tracks/5/interp = 1 1214 | tracks/5/loop_wrap = true 1215 | tracks/5/imported = false 1216 | tracks/5/enabled = true 1217 | tracks/5/keys = { 1218 | "times": PoolRealArray( 0 ), 1219 | "transitions": PoolRealArray( 1 ), 1220 | "update": 1, 1221 | "values": [ -1 ] 1222 | } 1223 | tracks/6/type = "value" 1224 | tracks/6/path = NodePath("LEFTHAND:frame") 1225 | tracks/6/interp = 1 1226 | tracks/6/loop_wrap = true 1227 | tracks/6/imported = false 1228 | tracks/6/enabled = true 1229 | tracks/6/keys = { 1230 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1231 | "transitions": PoolRealArray( 1, 1, 1 ), 1232 | "update": 1, 1233 | "values": [ 14, 6, 15 ] 1234 | } 1235 | tracks/7/type = "value" 1236 | tracks/7/path = NodePath("RIGHTHAND:frame") 1237 | tracks/7/interp = 1 1238 | tracks/7/loop_wrap = true 1239 | tracks/7/imported = false 1240 | tracks/7/enabled = true 1241 | tracks/7/keys = { 1242 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1243 | "transitions": PoolRealArray( 1, 1, 1 ), 1244 | "update": 1, 1245 | "values": [ 14, 6, 15 ] 1246 | } 1247 | tracks/8/type = "method" 1248 | tracks/8/path = NodePath("..") 1249 | tracks/8/interp = 1 1250 | tracks/8/loop_wrap = true 1251 | tracks/8/imported = false 1252 | tracks/8/enabled = true 1253 | tracks/8/keys = { 1254 | "times": PoolRealArray( 0, 0.75 ), 1255 | "transitions": PoolRealArray( 1, 1 ), 1256 | "values": [ { 1257 | "args": [ ], 1258 | "method": "stop_control" 1259 | }, { 1260 | "args": [ ], 1261 | "method": "apply_damage" 1262 | } ] 1263 | } 1264 | 1265 | [sub_resource type="Animation" id=14] 1266 | resource_name = "stab_side_right_right" 1267 | length = 0.75 1268 | step = 0.25 1269 | tracks/0/type = "value" 1270 | tracks/0/path = NodePath("Sprite:frame") 1271 | tracks/0/interp = 1 1272 | tracks/0/loop_wrap = true 1273 | tracks/0/imported = false 1274 | tracks/0/enabled = true 1275 | tracks/0/keys = { 1276 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1277 | "transitions": PoolRealArray( 1, 1, 1 ), 1278 | "update": 1, 1279 | "values": [ 14, 6, 15 ] 1280 | } 1281 | tracks/1/type = "value" 1282 | tracks/1/path = NodePath("Sprite:flip_h") 1283 | tracks/1/interp = 1 1284 | tracks/1/loop_wrap = true 1285 | tracks/1/imported = false 1286 | tracks/1/enabled = true 1287 | tracks/1/keys = { 1288 | "times": PoolRealArray( 0 ), 1289 | "transitions": PoolRealArray( 1 ), 1290 | "update": 1, 1291 | "values": [ false ] 1292 | } 1293 | tracks/2/type = "value" 1294 | tracks/2/path = NodePath("LEFTHAND:flip_h") 1295 | tracks/2/interp = 1 1296 | tracks/2/loop_wrap = true 1297 | tracks/2/imported = false 1298 | tracks/2/enabled = true 1299 | tracks/2/keys = { 1300 | "times": PoolRealArray( 0 ), 1301 | "transitions": PoolRealArray( 1 ), 1302 | "update": 1, 1303 | "values": [ false ] 1304 | } 1305 | tracks/3/type = "value" 1306 | tracks/3/path = NodePath("RIGHTHAND:flip_h") 1307 | tracks/3/interp = 1 1308 | tracks/3/loop_wrap = true 1309 | tracks/3/imported = false 1310 | tracks/3/enabled = true 1311 | tracks/3/keys = { 1312 | "times": PoolRealArray( 0 ), 1313 | "transitions": PoolRealArray( 1 ), 1314 | "update": 1, 1315 | "values": [ false ] 1316 | } 1317 | tracks/4/type = "value" 1318 | tracks/4/path = NodePath("RIGHTHAND:z_index") 1319 | tracks/4/interp = 1 1320 | tracks/4/loop_wrap = true 1321 | tracks/4/imported = false 1322 | tracks/4/enabled = true 1323 | tracks/4/keys = { 1324 | "times": PoolRealArray( 0 ), 1325 | "transitions": PoolRealArray( 1 ), 1326 | "update": 1, 1327 | "values": [ 0 ] 1328 | } 1329 | tracks/5/type = "value" 1330 | tracks/5/path = NodePath("LEFTHAND:z_index") 1331 | tracks/5/interp = 1 1332 | tracks/5/loop_wrap = true 1333 | tracks/5/imported = false 1334 | tracks/5/enabled = true 1335 | tracks/5/keys = { 1336 | "times": PoolRealArray( 0 ), 1337 | "transitions": PoolRealArray( 1 ), 1338 | "update": 1, 1339 | "values": [ -1 ] 1340 | } 1341 | tracks/6/type = "value" 1342 | tracks/6/path = NodePath("LEFTHAND:frame") 1343 | tracks/6/interp = 1 1344 | tracks/6/loop_wrap = true 1345 | tracks/6/imported = false 1346 | tracks/6/enabled = true 1347 | tracks/6/keys = { 1348 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1349 | "transitions": PoolRealArray( 1, 1, 1 ), 1350 | "update": 1, 1351 | "values": [ 15, 6, 14 ] 1352 | } 1353 | tracks/7/type = "value" 1354 | tracks/7/path = NodePath("RIGHTHAND:frame") 1355 | tracks/7/interp = 1 1356 | tracks/7/loop_wrap = true 1357 | tracks/7/imported = false 1358 | tracks/7/enabled = true 1359 | tracks/7/keys = { 1360 | "times": PoolRealArray( 0, 0.25, 0.5 ), 1361 | "transitions": PoolRealArray( 1, 1, 1 ), 1362 | "update": 1, 1363 | "values": [ 14, 6, 15 ] 1364 | } 1365 | tracks/8/type = "method" 1366 | tracks/8/path = NodePath("..") 1367 | tracks/8/interp = 1 1368 | tracks/8/loop_wrap = true 1369 | tracks/8/imported = false 1370 | tracks/8/enabled = true 1371 | tracks/8/keys = { 1372 | "times": PoolRealArray( 0, 0.75 ), 1373 | "transitions": PoolRealArray( 1, 1 ), 1374 | "values": [ { 1375 | "args": [ ], 1376 | "method": "stop_control" 1377 | }, { 1378 | "args": [ ], 1379 | "method": "apply_damage" 1380 | } ] 1381 | } 1382 | 1383 | [sub_resource type="Animation" id=15] 1384 | loop = true 1385 | step = 0.25 1386 | tracks/0/type = "value" 1387 | tracks/0/path = NodePath("Sprite:frame") 1388 | tracks/0/interp = 1 1389 | tracks/0/loop_wrap = true 1390 | tracks/0/imported = false 1391 | tracks/0/enabled = true 1392 | tracks/0/keys = { 1393 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1394 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1395 | "update": 1, 1396 | "values": [ 9, 10, 11, 8 ] 1397 | } 1398 | tracks/1/type = "value" 1399 | tracks/1/path = NodePath("Sprite:flip_h") 1400 | tracks/1/interp = 1 1401 | tracks/1/loop_wrap = true 1402 | tracks/1/imported = false 1403 | tracks/1/enabled = true 1404 | tracks/1/keys = { 1405 | "times": PoolRealArray( 0 ), 1406 | "transitions": PoolRealArray( 1 ), 1407 | "update": 1, 1408 | "values": [ false ] 1409 | } 1410 | tracks/2/type = "value" 1411 | tracks/2/path = NodePath("LEFTHAND:frame") 1412 | tracks/2/interp = 1 1413 | tracks/2/loop_wrap = true 1414 | tracks/2/imported = false 1415 | tracks/2/enabled = true 1416 | tracks/2/keys = { 1417 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1418 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1419 | "update": 1, 1420 | "values": [ 11, 10, 9, 10 ] 1421 | } 1422 | tracks/3/type = "value" 1423 | tracks/3/path = NodePath("LEFTHAND:flip_h") 1424 | tracks/3/interp = 1 1425 | tracks/3/loop_wrap = true 1426 | tracks/3/imported = false 1427 | tracks/3/enabled = true 1428 | tracks/3/keys = { 1429 | "times": PoolRealArray( 0 ), 1430 | "transitions": PoolRealArray( 1 ), 1431 | "update": 1, 1432 | "values": [ true ] 1433 | } 1434 | tracks/4/type = "value" 1435 | tracks/4/path = NodePath("RIGHTHAND:frame") 1436 | tracks/4/interp = 1 1437 | tracks/4/loop_wrap = true 1438 | tracks/4/imported = false 1439 | tracks/4/enabled = true 1440 | tracks/4/keys = { 1441 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1442 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1443 | "update": 1, 1444 | "values": [ 9, 10, 11, 10 ] 1445 | } 1446 | tracks/5/type = "value" 1447 | tracks/5/path = NodePath("RIGHTHAND:flip_h") 1448 | tracks/5/interp = 1 1449 | tracks/5/loop_wrap = true 1450 | tracks/5/imported = false 1451 | tracks/5/enabled = true 1452 | tracks/5/keys = { 1453 | "times": PoolRealArray( 0 ), 1454 | "transitions": PoolRealArray( 1 ), 1455 | "update": 1, 1456 | "values": [ false ] 1457 | } 1458 | tracks/6/type = "value" 1459 | tracks/6/path = NodePath("RIGHTHAND:z_index") 1460 | tracks/6/interp = 1 1461 | tracks/6/loop_wrap = true 1462 | tracks/6/imported = false 1463 | tracks/6/enabled = true 1464 | tracks/6/keys = { 1465 | "times": PoolRealArray( 0 ), 1466 | "transitions": PoolRealArray( 1 ), 1467 | "update": 1, 1468 | "values": [ 0 ] 1469 | } 1470 | tracks/7/type = "value" 1471 | tracks/7/path = NodePath("LEFTHAND:z_index") 1472 | tracks/7/interp = 1 1473 | tracks/7/loop_wrap = true 1474 | tracks/7/imported = false 1475 | tracks/7/enabled = true 1476 | tracks/7/keys = { 1477 | "times": PoolRealArray( 0 ), 1478 | "transitions": PoolRealArray( 1 ), 1479 | "update": 1, 1480 | "values": [ 0 ] 1481 | } 1482 | tracks/8/type = "method" 1483 | tracks/8/path = NodePath("..") 1484 | tracks/8/interp = 1 1485 | tracks/8/loop_wrap = true 1486 | tracks/8/imported = false 1487 | tracks/8/enabled = true 1488 | tracks/8/keys = { 1489 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1490 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1491 | "values": [ { 1492 | "args": [ "back", false ], 1493 | "method": "footstep" 1494 | }, { 1495 | "args": [ "back", true ], 1496 | "method": "footstep" 1497 | }, { 1498 | "args": [ "back", false ], 1499 | "method": "footstep" 1500 | }, { 1501 | "args": [ "back", true ], 1502 | "method": "footstep" 1503 | } ] 1504 | } 1505 | 1506 | [sub_resource type="Animation" id=16] 1507 | loop = true 1508 | step = 0.25 1509 | tracks/0/type = "value" 1510 | tracks/0/path = NodePath("Sprite:frame") 1511 | tracks/0/interp = 1 1512 | tracks/0/loop_wrap = true 1513 | tracks/0/imported = false 1514 | tracks/0/enabled = true 1515 | tracks/0/keys = { 1516 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1517 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1518 | "update": 1, 1519 | "values": [ 1, 2, 3, 2 ] 1520 | } 1521 | tracks/1/type = "value" 1522 | tracks/1/path = NodePath("Sprite:flip_h") 1523 | tracks/1/interp = 1 1524 | tracks/1/loop_wrap = true 1525 | tracks/1/imported = false 1526 | tracks/1/enabled = true 1527 | tracks/1/keys = { 1528 | "times": PoolRealArray( 0 ), 1529 | "transitions": PoolRealArray( 1 ), 1530 | "update": 1, 1531 | "values": [ false ] 1532 | } 1533 | tracks/2/type = "value" 1534 | tracks/2/path = NodePath("LEFTHAND:frame") 1535 | tracks/2/interp = 1 1536 | tracks/2/loop_wrap = true 1537 | tracks/2/imported = false 1538 | tracks/2/enabled = true 1539 | tracks/2/keys = { 1540 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1541 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1542 | "update": 1, 1543 | "values": [ 1, 2, 3, 2 ] 1544 | } 1545 | tracks/3/type = "value" 1546 | tracks/3/path = NodePath("LEFTHAND:flip_h") 1547 | tracks/3/interp = 1 1548 | tracks/3/loop_wrap = true 1549 | tracks/3/imported = false 1550 | tracks/3/enabled = true 1551 | tracks/3/keys = { 1552 | "times": PoolRealArray( 0 ), 1553 | "transitions": PoolRealArray( 1 ), 1554 | "update": 1, 1555 | "values": [ false ] 1556 | } 1557 | tracks/4/type = "value" 1558 | tracks/4/path = NodePath("RIGHTHAND:frame") 1559 | tracks/4/interp = 1 1560 | tracks/4/loop_wrap = true 1561 | tracks/4/imported = false 1562 | tracks/4/enabled = true 1563 | tracks/4/keys = { 1564 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1565 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1566 | "update": 1, 1567 | "values": [ 3, 2, 1, 2 ] 1568 | } 1569 | tracks/5/type = "value" 1570 | tracks/5/path = NodePath("RIGHTHAND:flip_h") 1571 | tracks/5/interp = 1 1572 | tracks/5/loop_wrap = true 1573 | tracks/5/imported = false 1574 | tracks/5/enabled = true 1575 | tracks/5/keys = { 1576 | "times": PoolRealArray( 0 ), 1577 | "transitions": PoolRealArray( 1 ), 1578 | "update": 1, 1579 | "values": [ true ] 1580 | } 1581 | tracks/6/type = "value" 1582 | tracks/6/path = NodePath("RIGHTHAND:z_index") 1583 | tracks/6/interp = 1 1584 | tracks/6/loop_wrap = true 1585 | tracks/6/imported = false 1586 | tracks/6/enabled = true 1587 | tracks/6/keys = { 1588 | "times": PoolRealArray( 0 ), 1589 | "transitions": PoolRealArray( 1 ), 1590 | "update": 1, 1591 | "values": [ 0 ] 1592 | } 1593 | tracks/7/type = "value" 1594 | tracks/7/path = NodePath("LEFTHAND:z_index") 1595 | tracks/7/interp = 1 1596 | tracks/7/loop_wrap = true 1597 | tracks/7/imported = false 1598 | tracks/7/enabled = true 1599 | tracks/7/keys = { 1600 | "times": PoolRealArray( 0 ), 1601 | "transitions": PoolRealArray( 1 ), 1602 | "update": 1, 1603 | "values": [ 0 ] 1604 | } 1605 | tracks/8/type = "method" 1606 | tracks/8/path = NodePath("..") 1607 | tracks/8/interp = 1 1608 | tracks/8/loop_wrap = true 1609 | tracks/8/imported = false 1610 | tracks/8/enabled = true 1611 | tracks/8/keys = { 1612 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1613 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1614 | "values": [ { 1615 | "args": [ "front", true ], 1616 | "method": "footstep" 1617 | }, { 1618 | "args": [ "front", false ], 1619 | "method": "footstep" 1620 | }, { 1621 | "args": [ "front", true ], 1622 | "method": "footstep" 1623 | }, { 1624 | "args": [ "front", false ], 1625 | "method": "footstep" 1626 | } ] 1627 | } 1628 | 1629 | [sub_resource type="Animation" id=17] 1630 | loop = true 1631 | step = 0.25 1632 | tracks/0/type = "value" 1633 | tracks/0/path = NodePath("Sprite:frame") 1634 | tracks/0/interp = 1 1635 | tracks/0/loop_wrap = true 1636 | tracks/0/imported = false 1637 | tracks/0/enabled = true 1638 | tracks/0/keys = { 1639 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1640 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1641 | "update": 1, 1642 | "values": [ 5, 6, 7, 6 ] 1643 | } 1644 | tracks/1/type = "value" 1645 | tracks/1/path = NodePath("Sprite:flip_h") 1646 | tracks/1/interp = 1 1647 | tracks/1/loop_wrap = true 1648 | tracks/1/imported = false 1649 | tracks/1/enabled = true 1650 | tracks/1/keys = { 1651 | "times": PoolRealArray( 0 ), 1652 | "transitions": PoolRealArray( 1 ), 1653 | "update": 1, 1654 | "values": [ true ] 1655 | } 1656 | tracks/2/type = "value" 1657 | tracks/2/path = NodePath("LEFTHAND:flip_h") 1658 | tracks/2/interp = 1 1659 | tracks/2/loop_wrap = true 1660 | tracks/2/imported = false 1661 | tracks/2/enabled = true 1662 | tracks/2/keys = { 1663 | "times": PoolRealArray( 0 ), 1664 | "transitions": PoolRealArray( 1 ), 1665 | "update": 1, 1666 | "values": [ true ] 1667 | } 1668 | tracks/3/type = "value" 1669 | tracks/3/path = NodePath("LEFTHAND:frame") 1670 | tracks/3/interp = 1 1671 | tracks/3/loop_wrap = true 1672 | tracks/3/imported = false 1673 | tracks/3/enabled = true 1674 | tracks/3/keys = { 1675 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1676 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1677 | "update": 1, 1678 | "values": [ 5, 6, 7, 6 ] 1679 | } 1680 | tracks/4/type = "value" 1681 | tracks/4/path = NodePath("RIGHTHAND:flip_h") 1682 | tracks/4/interp = 1 1683 | tracks/4/loop_wrap = true 1684 | tracks/4/imported = false 1685 | tracks/4/enabled = true 1686 | tracks/4/keys = { 1687 | "times": PoolRealArray( 0 ), 1688 | "transitions": PoolRealArray( 1 ), 1689 | "update": 1, 1690 | "values": [ true ] 1691 | } 1692 | tracks/5/type = "value" 1693 | tracks/5/path = NodePath("RIGHTHAND:frame") 1694 | tracks/5/interp = 1 1695 | tracks/5/loop_wrap = true 1696 | tracks/5/imported = false 1697 | tracks/5/enabled = true 1698 | tracks/5/keys = { 1699 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1700 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1701 | "update": 1, 1702 | "values": [ 7, 6, 5, 6 ] 1703 | } 1704 | tracks/6/type = "value" 1705 | tracks/6/path = NodePath("RIGHTHAND:z_index") 1706 | tracks/6/interp = 1 1707 | tracks/6/loop_wrap = true 1708 | tracks/6/imported = false 1709 | tracks/6/enabled = true 1710 | tracks/6/keys = { 1711 | "times": PoolRealArray( 0 ), 1712 | "transitions": PoolRealArray( 1 ), 1713 | "update": 1, 1714 | "values": [ -1 ] 1715 | } 1716 | tracks/7/type = "value" 1717 | tracks/7/path = NodePath("LEFTHAND:z_index") 1718 | tracks/7/interp = 1 1719 | tracks/7/loop_wrap = true 1720 | tracks/7/imported = false 1721 | tracks/7/enabled = true 1722 | tracks/7/keys = { 1723 | "times": PoolRealArray( 0 ), 1724 | "transitions": PoolRealArray( 1 ), 1725 | "update": 1, 1726 | "values": [ 0 ] 1727 | } 1728 | tracks/8/type = "method" 1729 | tracks/8/path = NodePath("..") 1730 | tracks/8/interp = 1 1731 | tracks/8/loop_wrap = true 1732 | tracks/8/imported = false 1733 | tracks/8/enabled = true 1734 | tracks/8/keys = { 1735 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1736 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1737 | "values": [ { 1738 | "args": [ "side", true ], 1739 | "method": "footstep" 1740 | }, { 1741 | "args": [ "side", true ], 1742 | "method": "footstep" 1743 | }, { 1744 | "args": [ "side", true ], 1745 | "method": "footstep" 1746 | }, { 1747 | "args": [ "side", true ], 1748 | "method": "footstep" 1749 | } ] 1750 | } 1751 | 1752 | [sub_resource type="Animation" id=18] 1753 | loop = true 1754 | step = 0.25 1755 | tracks/0/type = "value" 1756 | tracks/0/path = NodePath("Sprite:frame") 1757 | tracks/0/interp = 1 1758 | tracks/0/loop_wrap = true 1759 | tracks/0/imported = false 1760 | tracks/0/enabled = true 1761 | tracks/0/keys = { 1762 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1763 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1764 | "update": 1, 1765 | "values": [ 5, 6, 7, 6 ] 1766 | } 1767 | tracks/1/type = "value" 1768 | tracks/1/path = NodePath("Sprite:flip_h") 1769 | tracks/1/interp = 1 1770 | tracks/1/loop_wrap = true 1771 | tracks/1/imported = false 1772 | tracks/1/enabled = true 1773 | tracks/1/keys = { 1774 | "times": PoolRealArray( 0 ), 1775 | "transitions": PoolRealArray( 1 ), 1776 | "update": 1, 1777 | "values": [ false ] 1778 | } 1779 | tracks/2/type = "value" 1780 | tracks/2/path = NodePath("LEFTHAND:frame") 1781 | tracks/2/interp = 1 1782 | tracks/2/loop_wrap = true 1783 | tracks/2/imported = false 1784 | tracks/2/enabled = true 1785 | tracks/2/keys = { 1786 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1787 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1788 | "update": 1, 1789 | "values": [ 7, 6, 5, 6 ] 1790 | } 1791 | tracks/3/type = "value" 1792 | tracks/3/path = NodePath("LEFTHAND:flip_h") 1793 | tracks/3/interp = 1 1794 | tracks/3/loop_wrap = true 1795 | tracks/3/imported = false 1796 | tracks/3/enabled = true 1797 | tracks/3/keys = { 1798 | "times": PoolRealArray( 0 ), 1799 | "transitions": PoolRealArray( 1 ), 1800 | "update": 1, 1801 | "values": [ false ] 1802 | } 1803 | tracks/4/type = "value" 1804 | tracks/4/path = NodePath("RIGHTHAND:frame") 1805 | tracks/4/interp = 1 1806 | tracks/4/loop_wrap = true 1807 | tracks/4/imported = false 1808 | tracks/4/enabled = true 1809 | tracks/4/keys = { 1810 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1811 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1812 | "update": 1, 1813 | "values": [ 5, 6, 7, 6 ] 1814 | } 1815 | tracks/5/type = "value" 1816 | tracks/5/path = NodePath("RIGHTHAND:flip_h") 1817 | tracks/5/interp = 1 1818 | tracks/5/loop_wrap = true 1819 | tracks/5/imported = false 1820 | tracks/5/enabled = true 1821 | tracks/5/keys = { 1822 | "times": PoolRealArray( 0 ), 1823 | "transitions": PoolRealArray( 1 ), 1824 | "update": 1, 1825 | "values": [ false ] 1826 | } 1827 | tracks/6/type = "value" 1828 | tracks/6/path = NodePath("RIGHTHAND:z_index") 1829 | tracks/6/interp = 1 1830 | tracks/6/loop_wrap = true 1831 | tracks/6/imported = false 1832 | tracks/6/enabled = true 1833 | tracks/6/keys = { 1834 | "times": PoolRealArray( 0 ), 1835 | "transitions": PoolRealArray( 1 ), 1836 | "update": 1, 1837 | "values": [ 0 ] 1838 | } 1839 | tracks/7/type = "value" 1840 | tracks/7/path = NodePath("LEFTHAND:z_index") 1841 | tracks/7/interp = 1 1842 | tracks/7/loop_wrap = true 1843 | tracks/7/imported = false 1844 | tracks/7/enabled = true 1845 | tracks/7/keys = { 1846 | "times": PoolRealArray( 0 ), 1847 | "transitions": PoolRealArray( 1 ), 1848 | "update": 1, 1849 | "values": [ -1 ] 1850 | } 1851 | tracks/8/type = "method" 1852 | tracks/8/path = NodePath("..") 1853 | tracks/8/interp = 1 1854 | tracks/8/loop_wrap = true 1855 | tracks/8/imported = false 1856 | tracks/8/enabled = true 1857 | tracks/8/keys = { 1858 | "times": PoolRealArray( 0, 0.25, 0.5, 0.75 ), 1859 | "transitions": PoolRealArray( 1, 1, 1, 1 ), 1860 | "values": [ { 1861 | "args": [ "side", false ], 1862 | "method": "footstep" 1863 | }, { 1864 | "args": [ "side", false ], 1865 | "method": "footstep" 1866 | }, { 1867 | "args": [ "side", false ], 1868 | "method": "footstep" 1869 | }, { 1870 | "args": [ "side", false ], 1871 | "method": "footstep" 1872 | } ] 1873 | } 1874 | 1875 | [sub_resource type="AnimationNodeAnimation" id=23] 1876 | animation = "damage" 1877 | 1878 | [sub_resource type="AnimationNodeOneShot" id=24] 1879 | fadein_time = 0.0 1880 | 1881 | [sub_resource type="AnimationNodeOneShot" id=25] 1882 | fadein_time = 0.0 1883 | fadeout_time = 0.0 1884 | 1885 | [sub_resource type="AnimationNodeAnimation" id=26] 1886 | animation = "stab_back_left" 1887 | 1888 | [sub_resource type="AnimationNodeAnimation" id=27] 1889 | animation = "stab_back_right" 1890 | 1891 | [sub_resource type="AnimationNodeAnimation" id=28] 1892 | animation = "stab_front_right" 1893 | 1894 | [sub_resource type="AnimationNodeAnimation" id=29] 1895 | animation = "stab_front_left" 1896 | 1897 | [sub_resource type="AnimationNodeAnimation" id=30] 1898 | animation = "stab_side_left_left" 1899 | 1900 | [sub_resource type="AnimationNodeAnimation" id=31] 1901 | animation = "stab_side_right_right" 1902 | 1903 | [sub_resource type="AnimationNodeAnimation" id=32] 1904 | animation = "stab_side_right_left" 1905 | 1906 | [sub_resource type="AnimationNodeAnimation" id=33] 1907 | animation = "stab_side_left_right" 1908 | 1909 | [sub_resource type="AnimationNodeBlendSpace2D" id=34] 1910 | blend_point_0/node = SubResource( 26 ) 1911 | blend_point_0/pos = Vector2( -1, 1 ) 1912 | blend_point_1/node = SubResource( 27 ) 1913 | blend_point_1/pos = Vector2( 1, 1 ) 1914 | blend_point_2/node = SubResource( 28 ) 1915 | blend_point_2/pos = Vector2( 1, -1 ) 1916 | blend_point_3/node = SubResource( 29 ) 1917 | blend_point_3/pos = Vector2( -1, -1 ) 1918 | blend_point_4/node = SubResource( 30 ) 1919 | blend_point_4/pos = Vector2( -3, 0 ) 1920 | blend_point_5/node = SubResource( 31 ) 1921 | blend_point_5/pos = Vector2( 3, 0 ) 1922 | blend_point_6/node = SubResource( 32 ) 1923 | blend_point_6/pos = Vector2( 1, 0 ) 1924 | blend_point_7/node = SubResource( 33 ) 1925 | blend_point_7/pos = Vector2( -1, 0 ) 1926 | min_space = Vector2( -3, -1 ) 1927 | max_space = Vector2( 3, 1 ) 1928 | blend_mode = 1 1929 | 1930 | [sub_resource type="AnimationNodeAnimation" id=35] 1931 | animation = "idle_left" 1932 | 1933 | [sub_resource type="AnimationNodeAnimation" id=36] 1934 | animation = "idle_right" 1935 | 1936 | [sub_resource type="AnimationNodeAnimation" id=37] 1937 | animation = "idle_back" 1938 | 1939 | [sub_resource type="AnimationNodeAnimation" id=38] 1940 | animation = "idle_front" 1941 | 1942 | [sub_resource type="AnimationNodeBlendSpace2D" id=39] 1943 | blend_point_0/node = SubResource( 35 ) 1944 | blend_point_0/pos = Vector2( -1, 0 ) 1945 | blend_point_1/node = SubResource( 36 ) 1946 | blend_point_1/pos = Vector2( 1, 0 ) 1947 | blend_point_2/node = SubResource( 37 ) 1948 | blend_point_2/pos = Vector2( 0, 1 ) 1949 | blend_point_3/node = SubResource( 38 ) 1950 | blend_point_3/pos = Vector2( 0, -1 ) 1951 | snap = Vector2( 1, 1 ) 1952 | blend_mode = 1 1953 | 1954 | [sub_resource type="AnimationNodeAnimation" id=40] 1955 | animation = "walk_left" 1956 | 1957 | [sub_resource type="AnimationNodeAnimation" id=41] 1958 | animation = "walk_right" 1959 | 1960 | [sub_resource type="AnimationNodeAnimation" id=42] 1961 | animation = "walk_back" 1962 | 1963 | [sub_resource type="AnimationNodeAnimation" id=43] 1964 | animation = "walk_front" 1965 | 1966 | [sub_resource type="AnimationNodeBlendSpace2D" id=44] 1967 | blend_point_0/node = SubResource( 40 ) 1968 | blend_point_0/pos = Vector2( -1, 0 ) 1969 | blend_point_1/node = SubResource( 41 ) 1970 | blend_point_1/pos = Vector2( 1, 0 ) 1971 | blend_point_2/node = SubResource( 42 ) 1972 | blend_point_2/pos = Vector2( 0, 1 ) 1973 | blend_point_3/node = SubResource( 43 ) 1974 | blend_point_3/pos = Vector2( 0, -1 ) 1975 | snap = Vector2( 1, 1 ) 1976 | blend_mode = 1 1977 | 1978 | [sub_resource type="AnimationNodeTransition" id=45] 1979 | input_count = 2 1980 | input_0/name = "idle" 1981 | input_0/auto_advance = false 1982 | input_1/name = "move" 1983 | input_1/auto_advance = false 1984 | 1985 | [sub_resource type="AnimationNodeBlendTree" id=46] 1986 | graph_offset = Vector2( -767, 120.5 ) 1987 | nodes/Animation/node = SubResource( 23 ) 1988 | nodes/Animation/position = Vector2( 420, 300 ) 1989 | nodes/action_os/node = SubResource( 24 ) 1990 | nodes/action_os/position = Vector2( 520, 100 ) 1991 | nodes/attack/node = SubResource( 25 ) 1992 | nodes/attack/position = Vector2( 280, 100 ) 1993 | nodes/attack_bs/node = SubResource( 34 ) 1994 | nodes/attack_bs/position = Vector2( -20, 300 ) 1995 | nodes/idle/node = SubResource( 39 ) 1996 | nodes/idle/position = Vector2( -480, 80 ) 1997 | nodes/move/node = SubResource( 44 ) 1998 | nodes/move/position = Vector2( -480, 240 ) 1999 | nodes/output/position = Vector2( 760, 100 ) 2000 | nodes/state/node = SubResource( 45 ) 2001 | nodes/state/position = Vector2( -200, 140 ) 2002 | node_connections = [ "output", 0, "action_os", "state", 0, "idle", "state", 1, "move", "action_os", 0, "attack", "action_os", 1, "Animation", "attack", 0, "state", "attack", 1, "attack_bs" ] 2003 | 2004 | [sub_resource type="CircleShape2D" id=47] 2005 | radius = 17.0294 2006 | 2007 | [node name="PLAYER" type="RigidBody2D" groups=[ 2008 | "player", 2009 | ]] 2010 | mode = 2 2011 | gravity_scale = 0.0 2012 | script = ExtResource( 2 ) 2013 | 2014 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 2015 | position = Vector2( 0, 12 ) 2016 | shape = SubResource( 1 ) 2017 | 2018 | [node name="Camera2D" type="Camera2D" parent="."] 2019 | scale = Vector2( 0.5, 0.5 ) 2020 | current = true 2021 | zoom = Vector2( 0.3, 0.3 ) 2022 | 2023 | [node name="MODEL" type="Node2D" parent="."] 2024 | scale = Vector2( 0.5, 0.5 ) 2025 | 2026 | [node name="AnimationPlayer" type="AnimationPlayer" parent="MODEL"] 2027 | anims/damage = SubResource( 2 ) 2028 | anims/idle_back = SubResource( 3 ) 2029 | anims/idle_front = SubResource( 4 ) 2030 | anims/idle_left = SubResource( 5 ) 2031 | anims/idle_right = SubResource( 6 ) 2032 | anims/stab_back_left = SubResource( 7 ) 2033 | anims/stab_back_right = SubResource( 8 ) 2034 | anims/stab_front_left = SubResource( 9 ) 2035 | anims/stab_front_right = SubResource( 10 ) 2036 | anims/stab_side_left_left = SubResource( 11 ) 2037 | anims/stab_side_left_right = SubResource( 12 ) 2038 | anims/stab_side_right_left = SubResource( 13 ) 2039 | anims/stab_side_right_right = SubResource( 14 ) 2040 | anims/walk_back = SubResource( 15 ) 2041 | anims/walk_front = SubResource( 16 ) 2042 | anims/walk_left = SubResource( 17 ) 2043 | anims/walk_right = SubResource( 18 ) 2044 | 2045 | [node name="Sprite" type="Sprite" parent="MODEL"] 2046 | material = ExtResource( 5 ) 2047 | texture = ExtResource( 1 ) 2048 | hframes = 20 2049 | frame = 2 2050 | 2051 | [node name="AnimationTree" type="AnimationTree" parent="MODEL"] 2052 | tree_root = SubResource( 46 ) 2053 | anim_player = NodePath("../AnimationPlayer") 2054 | active = true 2055 | parameters/action_os/active = false 2056 | parameters/attack/active = false 2057 | parameters/attack_bs/blend_position = Vector2( 0, 0 ) 2058 | parameters/idle/blend_position = Vector2( 0, -1 ) 2059 | parameters/move/blend_position = Vector2( 0, -1 ) 2060 | parameters/state/current = 1 2061 | 2062 | [node name="LEFTHAND" type="Sprite" parent="MODEL"] 2063 | visible = false 2064 | texture = ExtResource( 3 ) 2065 | hframes = 20 2066 | frame = 2 2067 | 2068 | [node name="RIGHTHAND" type="Sprite" parent="MODEL"] 2069 | visible = false 2070 | texture = ExtResource( 3 ) 2071 | flip_h = true 2072 | hframes = 20 2073 | frame = 2 2074 | 2075 | [node name="FX" parent="MODEL" instance=ExtResource( 4 )] 2076 | 2077 | [node name="FX_FOOT_LEFT" type="Position2D" parent="MODEL"] 2078 | position = Vector2( -6, 26 ) 2079 | scale = Vector2( 0.4, 0.35 ) 2080 | 2081 | [node name="FX_FOOT_RIGHT" type="Position2D" parent="MODEL"] 2082 | position = Vector2( 6, 26 ) 2083 | scale = Vector2( 0.4, 0.35 ) 2084 | 2085 | [node name="FX_FOOT_SIDE" type="Position2D" parent="MODEL"] 2086 | position = Vector2( -2.07875, 25.0237 ) 2087 | scale = Vector2( 0.35, 0.35 ) 2088 | 2089 | [node name="InteractSensor" type="Area2D" parent="."] 2090 | 2091 | [node name="CollisionShape2D" type="CollisionShape2D" parent="InteractSensor"] 2092 | visible = false 2093 | shape = SubResource( 47 ) 2094 | -------------------------------------------------------------------------------- /scenes/UI.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=7 format=2] 2 | 3 | [ext_resource path="res://assets/textures/ui/ui_buttons2.png" type="Texture" id=1] 4 | [ext_resource path="res://assets/textures/ui/ui_buttons1.png" type="Texture" id=2] 5 | [ext_resource path="res://assets/textures/ui/ui_buttons8.png" type="Texture" id=3] 6 | [ext_resource path="res://scripts/UI.gd" type="Script" id=4] 7 | [ext_resource path="res://assets/ui/THEME.tres" type="Theme" id=8] 8 | 9 | [sub_resource type="StyleBoxFlat" id=1] 10 | bg_color = Color( 1, 0, 0.258824, 1 ) 11 | 12 | [node name="UI" type="CanvasLayer"] 13 | script = ExtResource( 4 ) 14 | 15 | [node name="STATS" type="Control" parent="."] 16 | anchor_top = 1.0 17 | anchor_bottom = 1.0 18 | margin_left = 8.0 19 | margin_top = -32.0 20 | margin_right = 224.0 21 | margin_bottom = -8.0 22 | theme = ExtResource( 8 ) 23 | __meta__ = { 24 | "_edit_use_anchors_": false 25 | } 26 | 27 | [node name="HEALTH" type="ProgressBar" parent="STATS"] 28 | anchor_top = 0.5 29 | anchor_bottom = 0.5 30 | margin_left = 48.0 31 | margin_top = -4.0 32 | margin_right = 148.0 33 | margin_bottom = 4.0 34 | custom_styles/fg = SubResource( 1 ) 35 | value = 100.0 36 | percent_visible = false 37 | __meta__ = { 38 | "_edit_use_anchors_": false 39 | } 40 | 41 | [node name="INVENTORY" type="Button" parent="STATS"] 42 | anchor_top = 0.5 43 | anchor_bottom = 0.5 44 | margin_top = -20.0 45 | margin_right = 44.0 46 | margin_bottom = 20.0 47 | icon = ExtResource( 3 ) 48 | flat = true 49 | __meta__ = { 50 | "_edit_use_anchors_": false 51 | } 52 | 53 | [node name="ACTIONS" type="HBoxContainer" parent="."] 54 | anchor_left = 0.5 55 | anchor_top = 1.0 56 | anchor_right = 0.5 57 | anchor_bottom = 1.0 58 | margin_left = -96.0 59 | margin_top = -44.0 60 | margin_right = 96.0 61 | margin_bottom = -4.0 62 | theme = ExtResource( 8 ) 63 | alignment = 1 64 | __meta__ = { 65 | "_edit_use_anchors_": false 66 | } 67 | 68 | [node name="EQUIPLEFT" type="Button" parent="ACTIONS"] 69 | margin_left = 50.0 70 | margin_right = 94.0 71 | margin_bottom = 40.0 72 | icon = ExtResource( 2 ) 73 | flat = true 74 | 75 | [node name="EQUIPRIGHT" type="Button" parent="ACTIONS"] 76 | margin_left = 98.0 77 | margin_right = 142.0 78 | margin_bottom = 40.0 79 | icon = ExtResource( 1 ) 80 | flat = true 81 | 82 | [node name="INVENTORY" type="Panel" parent="."] 83 | margin_right = 328.0 84 | margin_bottom = 552.0 85 | mouse_filter = 1 86 | theme = ExtResource( 8 ) 87 | __meta__ = { 88 | "_edit_use_anchors_": false 89 | } 90 | 91 | [node name="CLOSE" type="Button" parent="INVENTORY"] 92 | anchor_left = 1.0 93 | anchor_right = 1.0 94 | margin_left = -40.0 95 | margin_bottom = 40.0 96 | flat = true 97 | expand_icon = true 98 | __meta__ = { 99 | "_edit_use_anchors_": false 100 | } 101 | 102 | [node name="Title" type="Label" parent="INVENTORY"] 103 | anchor_right = 1.0 104 | margin_left = 8.0 105 | margin_top = 8.0 106 | margin_right = -42.0 107 | margin_bottom = 32.0 108 | text = "Inventory" 109 | __meta__ = { 110 | "_edit_use_anchors_": false 111 | } 112 | 113 | [node name="ScrollContainer" type="ScrollContainer" parent="INVENTORY"] 114 | margin_left = 8.0 115 | margin_top = 48.0 116 | margin_right = 328.0 117 | margin_bottom = 280.0 118 | mouse_filter = 1 119 | size_flags_horizontal = 3 120 | size_flags_vertical = 3 121 | __meta__ = { 122 | "_edit_use_anchors_": false 123 | } 124 | 125 | [node name="VBoxContainer" type="VBoxContainer" parent="INVENTORY/ScrollContainer"] 126 | margin_right = 295.0 127 | margin_bottom = 65.0 128 | 129 | [node name="TEMPLATE" type="Button" parent="INVENTORY/ScrollContainer/VBoxContainer"] 130 | margin_right = 295.0 131 | margin_bottom = 65.0 132 | rect_min_size = Vector2( 295, 65 ) 133 | flat = true 134 | 135 | [node name="TOGGLE" type="Panel" parent="INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE"] 136 | anchor_right = 1.0 137 | anchor_bottom = 1.0 138 | __meta__ = { 139 | "_edit_use_anchors_": false 140 | } 141 | 142 | [node name="NAME" type="Label" parent="INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE"] 143 | margin_left = 64.0 144 | margin_top = 16.0 145 | margin_right = 248.0 146 | margin_bottom = 40.0 147 | text = "Knife" 148 | valign = 1 149 | __meta__ = { 150 | "_edit_use_anchors_": false 151 | } 152 | 153 | [node name="QTY" type="Label" parent="INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE"] 154 | margin_left = 248.0 155 | margin_top = 8.0 156 | margin_right = 288.0 157 | margin_bottom = 32.0 158 | text = "x1" 159 | align = 2 160 | __meta__ = { 161 | "_edit_use_anchors_": false 162 | } 163 | 164 | [node name="PRICE" type="Label" parent="INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE"] 165 | margin_left = 248.0 166 | margin_top = 32.0 167 | margin_right = 288.0 168 | margin_bottom = 56.0 169 | text = "20G" 170 | align = 2 171 | __meta__ = { 172 | "_edit_use_anchors_": false 173 | } 174 | 175 | [node name="ICON" type="TextureRect" parent="INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE"] 176 | margin_left = 8.0 177 | margin_top = 8.0 178 | margin_right = 56.0 179 | margin_bottom = 56.0 180 | expand = true 181 | __meta__ = { 182 | "_edit_use_anchors_": true 183 | } 184 | 185 | [node name="Seperator" type="ColorRect" parent="INVENTORY"] 186 | margin_top = 280.0 187 | margin_right = 328.0 188 | margin_bottom = 288.0 189 | color = Color( 0, 0, 0, 0.164706 ) 190 | __meta__ = { 191 | "_edit_use_anchors_": false 192 | } 193 | 194 | [node name="DESCRIPTION" type="Panel" parent="INVENTORY"] 195 | margin_top = 288.0 196 | margin_right = 328.0 197 | margin_bottom = 552.0 198 | size_flags_horizontal = 3 199 | size_flags_vertical = 3 200 | __meta__ = { 201 | "_edit_use_anchors_": false 202 | } 203 | 204 | [node name="ITEM" type="Control" parent="INVENTORY/DESCRIPTION"] 205 | anchor_right = 1.0 206 | anchor_bottom = 1.0 207 | __meta__ = { 208 | "_edit_use_anchors_": false 209 | } 210 | 211 | [node name="ICON" type="TextureRect" parent="INVENTORY/DESCRIPTION/ITEM"] 212 | margin_left = 8.0 213 | margin_top = 8.0 214 | margin_right = 72.0 215 | margin_bottom = 72.0 216 | expand = true 217 | __meta__ = { 218 | "_edit_use_anchors_": false 219 | } 220 | 221 | [node name="NAME" type="Label" parent="INVENTORY/DESCRIPTION/ITEM"] 222 | margin_left = 80.0 223 | margin_top = 8.0 224 | margin_right = 336.0 225 | margin_bottom = 32.0 226 | text = "Item Detail" 227 | __meta__ = { 228 | "_edit_use_anchors_": false 229 | } 230 | 231 | [node name="QTY" type="Label" parent="INVENTORY/DESCRIPTION/ITEM"] 232 | margin_left = 8.0 233 | margin_top = 80.0 234 | margin_right = 48.0 235 | margin_bottom = 104.0 236 | text = "x1" 237 | __meta__ = { 238 | "_edit_use_anchors_": false 239 | } 240 | 241 | [node name="PRICE" type="Label" parent="INVENTORY/DESCRIPTION/ITEM"] 242 | margin_left = 8.0 243 | margin_top = 104.0 244 | margin_right = 48.0 245 | margin_bottom = 128.0 246 | text = "20G" 247 | __meta__ = { 248 | "_edit_use_anchors_": false 249 | } 250 | 251 | [node name="DESCRIPTION" type="RichTextLabel" parent="INVENTORY/DESCRIPTION/ITEM"] 252 | margin_left = 80.0 253 | margin_top = 40.0 254 | margin_right = 304.0 255 | margin_bottom = 224.0 256 | text = "Some 257 | Long 258 | Description" 259 | __meta__ = { 260 | "_edit_use_anchors_": false 261 | } 262 | 263 | [node name="BTNDROP" type="Button" parent="INVENTORY/DESCRIPTION/ITEM"] 264 | margin_left = 256.0 265 | margin_top = 232.0 266 | margin_right = 305.0 267 | margin_bottom = 256.0 268 | text = "DROP" 269 | __meta__ = { 270 | "_edit_use_anchors_": false 271 | } 272 | 273 | [node name="EQUIPPED" type="OptionButton" parent="INVENTORY/DESCRIPTION/ITEM"] 274 | margin_left = 80.0 275 | margin_top = 232.0 276 | margin_right = 252.0 277 | margin_bottom = 256.0 278 | text = "Equip: Unequipped" 279 | expand_icon = true 280 | items = [ "Equip: Unequipped", null, false, 0, null, "Equip: Left hand", null, false, 1, null, "Equip: Right hand", null, false, 2, null, "Ingest", null, false, 3, null ] 281 | selected = 0 282 | __meta__ = { 283 | "_edit_use_anchors_": false 284 | } 285 | 286 | [node name="EMPTY" type="Label" parent="INVENTORY/DESCRIPTION"] 287 | margin_left = 24.0 288 | margin_top = 24.0 289 | margin_right = 32.0 290 | margin_bottom = 46.0 291 | text = "No item selected" 292 | __meta__ = { 293 | "_edit_use_anchors_": false 294 | } 295 | 296 | [node name="DROP" type="ConfirmationDialog" parent="INVENTORY"] 297 | anchor_top = 1.0 298 | anchor_bottom = 1.0 299 | margin_top = -90.0 300 | margin_right = 328.0 301 | margin_bottom = 1.0 302 | popup_exclusive = true 303 | window_title = "Drop item(s)" 304 | __meta__ = { 305 | "_edit_use_anchors_": false 306 | } 307 | 308 | [node name="BODY" type="Control" parent="INVENTORY/DROP"] 309 | anchor_left = 0.5 310 | anchor_top = 0.5 311 | anchor_right = 0.5 312 | anchor_bottom = 0.5 313 | margin_left = -156.0 314 | margin_top = -37.5 315 | margin_right = 156.0 316 | margin_bottom = 7.5 317 | rect_min_size = Vector2( 200, 45 ) 318 | 319 | [node name="COUNT" type="HSlider" parent="INVENTORY/DROP/BODY"] 320 | anchor_left = 0.5 321 | anchor_right = 0.5 322 | margin_left = -92.0 323 | margin_right = 92.0 324 | margin_bottom = 26.0 325 | min_value = 1.0 326 | value = 1.0 327 | 328 | [node name="COUNTTEXT" type="Label" parent="INVENTORY/DROP/BODY"] 329 | anchor_left = 0.5 330 | anchor_right = 0.5 331 | margin_left = -44.0 332 | margin_top = 20.0 333 | margin_right = 43.0 334 | margin_bottom = 42.0 335 | text = "20/20 Items" 336 | align = 1 337 | __meta__ = { 338 | "_edit_use_anchors_": false 339 | } 340 | 341 | [node name="DELETE_SAVE" type="Button" parent="."] 342 | anchor_left = 1.0 343 | anchor_top = 1.0 344 | anchor_right = 1.0 345 | anchor_bottom = 1.0 346 | margin_left = -104.0 347 | margin_top = -32.0 348 | margin_right = -8.0 349 | margin_bottom = -8.0 350 | theme = ExtResource( 8 ) 351 | text = "Delete save" 352 | __meta__ = { 353 | "_edit_use_anchors_": false 354 | } 355 | -------------------------------------------------------------------------------- /scenes/WORLD.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=11 format=2] 2 | 3 | [ext_resource path="res://scenes/PLAYER.tscn" type="PackedScene" id=1] 4 | [ext_resource path="res://scripts/WORLD.gd" type="Script" id=3] 5 | [ext_resource path="res://scenes/MOB.tscn" type="PackedScene" id=4] 6 | [ext_resource path="res://scenes/ITEM.tscn" type="PackedScene" id=5] 7 | [ext_resource path="res://scenes/BACKGROUND.tscn" type="PackedScene" id=6] 8 | [ext_resource path="res://assets/textures/floor_nature.png" type="Texture" id=7] 9 | [ext_resource path="res://assets/textures/floor_objects_big.png" type="Texture" id=8] 10 | [ext_resource path="res://assets/textures/floor_objects.png" type="Texture" id=9] 11 | [ext_resource path="res://assets/textures/floor_objects_med.png" type="Texture" id=10] 12 | 13 | [sub_resource type="TileSet" id=1] 14 | 0/name = "floor_nature.png 0" 15 | 0/texture = ExtResource( 7 ) 16 | 0/tex_offset = Vector2( 0, 0 ) 17 | 0/modulate = Color( 1, 1, 1, 1 ) 18 | 0/region = Rect2( 768, 0, 384, 128 ) 19 | 0/tile_mode = 1 20 | 0/autotile/bitmask_mode = 1 21 | 0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 144, Vector2( 0, 1 ), 146, Vector2( 0, 2 ), 18, Vector2( 0, 3 ), 16, Vector2( 1, 0 ), 176, Vector2( 1, 1 ), 178, Vector2( 1, 2 ), 50, Vector2( 1, 3 ), 48, Vector2( 2, 0 ), 184, Vector2( 2, 1 ), 186, Vector2( 2, 2 ), 58, Vector2( 2, 3 ), 56, Vector2( 3, 0 ), 152, Vector2( 3, 1 ), 154, Vector2( 3, 2 ), 26, Vector2( 3, 3 ), 24, Vector2( 4, 0 ), 187, Vector2( 4, 1 ), 434, Vector2( 4, 2 ), 182, Vector2( 4, 3 ), 250, Vector2( 5, 0 ), 440, Vector2( 5, 1 ), 510, Vector2( 5, 2 ), 447, Vector2( 5, 3 ), 62, Vector2( 6, 0 ), 248, Vector2( 6, 1 ), 507, Vector2( 6, 2 ), 255, Vector2( 6, 3 ), 59, Vector2( 7, 0 ), 190, Vector2( 7, 1 ), 222, Vector2( 7, 2 ), 155, Vector2( 7, 3 ), 442, Vector2( 8, 0 ), 432, Vector2( 8, 1 ), 438, Vector2( 8, 2 ), 446, Vector2( 8, 3 ), 54, Vector2( 9, 0 ), 506, Vector2( 9, 1 ), 254, Vector2( 9, 2 ), 511, Vector2( 9, 3 ), 63, Vector2( 10, 0 ), 504, Vector2( 10, 2 ), 443, Vector2( 10, 3 ), 191, Vector2( 11, 0 ), 216, Vector2( 11, 1 ), 251, Vector2( 11, 2 ), 219, Vector2( 11, 3 ), 27 ] 22 | 0/autotile/icon_coordinate = Vector2( 0, 0 ) 23 | 0/autotile/tile_size = Vector2( 32, 32 ) 24 | 0/autotile/spacing = 0 25 | 0/autotile/occluder_map = [ ] 26 | 0/autotile/navpoly_map = [ ] 27 | 0/autotile/priority_map = [ ] 28 | 0/autotile/z_index_map = [ ] 29 | 0/occluder_offset = Vector2( 0, 0 ) 30 | 0/navigation_offset = Vector2( 0, 0 ) 31 | 0/shape_offset = Vector2( 0, 0 ) 32 | 0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 33 | 0/shape_one_way = false 34 | 0/shape_one_way_margin = 0.0 35 | 0/shapes = [ ] 36 | 0/z_index = 0 37 | 1/name = "floor_objects.png 1" 38 | 1/texture = ExtResource( 9 ) 39 | 1/tex_offset = Vector2( 0, 0 ) 40 | 1/modulate = Color( 1, 1, 1, 1 ) 41 | 1/region = Rect2( 0, 0, 32, 32 ) 42 | 1/tile_mode = 0 43 | 1/occluder_offset = Vector2( 0, 0 ) 44 | 1/navigation_offset = Vector2( 0, 0 ) 45 | 1/shape_offset = Vector2( 0, 0 ) 46 | 1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 47 | 1/shape_one_way = false 48 | 1/shape_one_way_margin = 0.0 49 | 1/shapes = [ ] 50 | 1/z_index = 0 51 | 2/name = "floor_objects.png 2" 52 | 2/texture = ExtResource( 9 ) 53 | 2/tex_offset = Vector2( 0, 0 ) 54 | 2/modulate = Color( 1, 1, 1, 1 ) 55 | 2/region = Rect2( 32, 0, 32, 32 ) 56 | 2/tile_mode = 0 57 | 2/occluder_offset = Vector2( 0, 0 ) 58 | 2/navigation_offset = Vector2( 0, 0 ) 59 | 2/shape_offset = Vector2( 0, 0 ) 60 | 2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 61 | 2/shape_one_way = false 62 | 2/shape_one_way_margin = 0.0 63 | 2/shapes = [ ] 64 | 2/z_index = 0 65 | 3/name = "floor_objects.png 3" 66 | 3/texture = ExtResource( 9 ) 67 | 3/tex_offset = Vector2( 0, 0 ) 68 | 3/modulate = Color( 1, 1, 1, 1 ) 69 | 3/region = Rect2( 64, 0, 32, 32 ) 70 | 3/tile_mode = 0 71 | 3/occluder_offset = Vector2( 0, 0 ) 72 | 3/navigation_offset = Vector2( 0, 0 ) 73 | 3/shape_offset = Vector2( 0, 0 ) 74 | 3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 75 | 3/shape_one_way = false 76 | 3/shape_one_way_margin = 0.0 77 | 3/shapes = [ ] 78 | 3/z_index = 0 79 | 4/name = "floor_objects.png 4" 80 | 4/texture = ExtResource( 9 ) 81 | 4/tex_offset = Vector2( 0, 0 ) 82 | 4/modulate = Color( 1, 1, 1, 1 ) 83 | 4/region = Rect2( 96, 0, 32, 32 ) 84 | 4/tile_mode = 0 85 | 4/occluder_offset = Vector2( 0, 0 ) 86 | 4/navigation_offset = Vector2( 0, 0 ) 87 | 4/shape_offset = Vector2( 0, 0 ) 88 | 4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 89 | 4/shape_one_way = false 90 | 4/shape_one_way_margin = 0.0 91 | 4/shapes = [ ] 92 | 4/z_index = 0 93 | 5/name = "floor_objects.png 5" 94 | 5/texture = ExtResource( 9 ) 95 | 5/tex_offset = Vector2( 0, 0 ) 96 | 5/modulate = Color( 1, 1, 1, 1 ) 97 | 5/region = Rect2( 128, 0, 32, 32 ) 98 | 5/tile_mode = 0 99 | 5/occluder_offset = Vector2( 0, 0 ) 100 | 5/navigation_offset = Vector2( 0, 0 ) 101 | 5/shape_offset = Vector2( 0, 0 ) 102 | 5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 103 | 5/shape_one_way = false 104 | 5/shape_one_way_margin = 0.0 105 | 5/shapes = [ ] 106 | 5/z_index = 0 107 | 6/name = "floor_objects.png 6" 108 | 6/texture = ExtResource( 9 ) 109 | 6/tex_offset = Vector2( 0, 0 ) 110 | 6/modulate = Color( 1, 1, 1, 1 ) 111 | 6/region = Rect2( 160, 0, 32, 32 ) 112 | 6/tile_mode = 0 113 | 6/occluder_offset = Vector2( 0, 0 ) 114 | 6/navigation_offset = Vector2( 0, 0 ) 115 | 6/shape_offset = Vector2( 0, 0 ) 116 | 6/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 117 | 6/shape_one_way = false 118 | 6/shape_one_way_margin = 0.0 119 | 6/shapes = [ ] 120 | 6/z_index = 0 121 | 7/name = "floor_objects.png 7" 122 | 7/texture = ExtResource( 9 ) 123 | 7/tex_offset = Vector2( 0, 0 ) 124 | 7/modulate = Color( 1, 1, 1, 1 ) 125 | 7/region = Rect2( 192, 0, 32, 32 ) 126 | 7/tile_mode = 0 127 | 7/occluder_offset = Vector2( 0, 0 ) 128 | 7/navigation_offset = Vector2( 0, 0 ) 129 | 7/shape_offset = Vector2( 0, 0 ) 130 | 7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 131 | 7/shape_one_way = false 132 | 7/shape_one_way_margin = 0.0 133 | 7/shapes = [ ] 134 | 7/z_index = 0 135 | 8/name = "floor_objects.png 8" 136 | 8/texture = ExtResource( 9 ) 137 | 8/tex_offset = Vector2( 0, 0 ) 138 | 8/modulate = Color( 1, 1, 1, 1 ) 139 | 8/region = Rect2( 224, 0, 32, 32 ) 140 | 8/tile_mode = 0 141 | 8/occluder_offset = Vector2( 0, 0 ) 142 | 8/navigation_offset = Vector2( 0, 0 ) 143 | 8/shape_offset = Vector2( 0, 0 ) 144 | 8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 145 | 8/shape_one_way = false 146 | 8/shape_one_way_margin = 0.0 147 | 8/shapes = [ ] 148 | 8/z_index = 0 149 | 9/name = "floor_objects.png 9" 150 | 9/texture = ExtResource( 9 ) 151 | 9/tex_offset = Vector2( 0, 0 ) 152 | 9/modulate = Color( 1, 1, 1, 1 ) 153 | 9/region = Rect2( 256, 0, 32, 32 ) 154 | 9/tile_mode = 0 155 | 9/occluder_offset = Vector2( 0, 0 ) 156 | 9/navigation_offset = Vector2( 0, 0 ) 157 | 9/shape_offset = Vector2( 0, 0 ) 158 | 9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 159 | 9/shape_one_way = false 160 | 9/shape_one_way_margin = 0.0 161 | 9/shapes = [ ] 162 | 9/z_index = 0 163 | 10/name = "floor_objects.png 10" 164 | 10/texture = ExtResource( 9 ) 165 | 10/tex_offset = Vector2( 0, 0 ) 166 | 10/modulate = Color( 1, 1, 1, 1 ) 167 | 10/region = Rect2( 288, 0, 32, 32 ) 168 | 10/tile_mode = 0 169 | 10/occluder_offset = Vector2( 0, 0 ) 170 | 10/navigation_offset = Vector2( 0, 0 ) 171 | 10/shape_offset = Vector2( 0, 0 ) 172 | 10/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 173 | 10/shape_one_way = false 174 | 10/shape_one_way_margin = 0.0 175 | 10/shapes = [ ] 176 | 10/z_index = 0 177 | 11/name = "floor_objects.png 11" 178 | 11/texture = ExtResource( 9 ) 179 | 11/tex_offset = Vector2( 0, 0 ) 180 | 11/modulate = Color( 1, 1, 1, 1 ) 181 | 11/region = Rect2( 320, 0, 32, 32 ) 182 | 11/tile_mode = 0 183 | 11/occluder_offset = Vector2( 0, 0 ) 184 | 11/navigation_offset = Vector2( 0, 0 ) 185 | 11/shape_offset = Vector2( 0, 0 ) 186 | 11/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 187 | 11/shape_one_way = false 188 | 11/shape_one_way_margin = 0.0 189 | 11/shapes = [ ] 190 | 11/z_index = 0 191 | 12/name = "floor_objects.png 12" 192 | 12/texture = ExtResource( 9 ) 193 | 12/tex_offset = Vector2( 0, 0 ) 194 | 12/modulate = Color( 1, 1, 1, 1 ) 195 | 12/region = Rect2( 352, 0, 32, 32 ) 196 | 12/tile_mode = 0 197 | 12/occluder_offset = Vector2( 0, 0 ) 198 | 12/navigation_offset = Vector2( 0, 0 ) 199 | 12/shape_offset = Vector2( 0, 0 ) 200 | 12/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 201 | 12/shape_one_way = false 202 | 12/shape_one_way_margin = 0.0 203 | 12/shapes = [ ] 204 | 12/z_index = 0 205 | 13/name = "floor_objects.png 13" 206 | 13/texture = ExtResource( 9 ) 207 | 13/tex_offset = Vector2( 0, 0 ) 208 | 13/modulate = Color( 1, 1, 1, 1 ) 209 | 13/region = Rect2( 384, 0, 32, 32 ) 210 | 13/tile_mode = 0 211 | 13/occluder_offset = Vector2( 0, 0 ) 212 | 13/navigation_offset = Vector2( 0, 0 ) 213 | 13/shape_offset = Vector2( 0, 0 ) 214 | 13/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 215 | 13/shape_one_way = false 216 | 13/shape_one_way_margin = 0.0 217 | 13/shapes = [ ] 218 | 13/z_index = 0 219 | 14/name = "floor_objects.png 14" 220 | 14/texture = ExtResource( 9 ) 221 | 14/tex_offset = Vector2( 0, 0 ) 222 | 14/modulate = Color( 1, 1, 1, 1 ) 223 | 14/region = Rect2( 416, 0, 32, 32 ) 224 | 14/tile_mode = 0 225 | 14/occluder_offset = Vector2( 0, 0 ) 226 | 14/navigation_offset = Vector2( 0, 0 ) 227 | 14/shape_offset = Vector2( 0, 0 ) 228 | 14/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 229 | 14/shape_one_way = false 230 | 14/shape_one_way_margin = 0.0 231 | 14/shapes = [ ] 232 | 14/z_index = 0 233 | 15/name = "floor_objects.png 15" 234 | 15/texture = ExtResource( 9 ) 235 | 15/tex_offset = Vector2( 0, 0 ) 236 | 15/modulate = Color( 1, 1, 1, 1 ) 237 | 15/region = Rect2( 448, 0, 32, 32 ) 238 | 15/tile_mode = 0 239 | 15/occluder_offset = Vector2( 0, 0 ) 240 | 15/navigation_offset = Vector2( 0, 0 ) 241 | 15/shape_offset = Vector2( 0, 0 ) 242 | 15/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 243 | 15/shape_one_way = false 244 | 15/shape_one_way_margin = 0.0 245 | 15/shapes = [ ] 246 | 15/z_index = 0 247 | 16/name = "floor_objects.png 16" 248 | 16/texture = ExtResource( 9 ) 249 | 16/tex_offset = Vector2( 0, 0 ) 250 | 16/modulate = Color( 1, 1, 1, 1 ) 251 | 16/region = Rect2( 480, 0, 32, 32 ) 252 | 16/tile_mode = 0 253 | 16/occluder_offset = Vector2( 0, 0 ) 254 | 16/navigation_offset = Vector2( 0, 0 ) 255 | 16/shape_offset = Vector2( 0, 0 ) 256 | 16/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 257 | 16/shape_one_way = false 258 | 16/shape_one_way_margin = 0.0 259 | 16/shapes = [ ] 260 | 16/z_index = 0 261 | 17/name = "floor_objects.png 17" 262 | 17/texture = ExtResource( 9 ) 263 | 17/tex_offset = Vector2( 0, 0 ) 264 | 17/modulate = Color( 1, 1, 1, 1 ) 265 | 17/region = Rect2( 512, 0, 32, 32 ) 266 | 17/tile_mode = 0 267 | 17/occluder_offset = Vector2( 0, 0 ) 268 | 17/navigation_offset = Vector2( 0, 0 ) 269 | 17/shape_offset = Vector2( 0, 0 ) 270 | 17/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 271 | 17/shape_one_way = false 272 | 17/shape_one_way_margin = 0.0 273 | 17/shapes = [ ] 274 | 17/z_index = 0 275 | 18/name = "floor_objects.png 18" 276 | 18/texture = ExtResource( 9 ) 277 | 18/tex_offset = Vector2( 0, 0 ) 278 | 18/modulate = Color( 1, 1, 1, 1 ) 279 | 18/region = Rect2( 544, 0, 32, 32 ) 280 | 18/tile_mode = 0 281 | 18/occluder_offset = Vector2( 0, 0 ) 282 | 18/navigation_offset = Vector2( 0, 0 ) 283 | 18/shape_offset = Vector2( 0, 0 ) 284 | 18/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 285 | 18/shape_one_way = false 286 | 18/shape_one_way_margin = 0.0 287 | 18/shapes = [ ] 288 | 18/z_index = 0 289 | 19/name = "floor_objects.png 19" 290 | 19/texture = ExtResource( 9 ) 291 | 19/tex_offset = Vector2( 0, 0 ) 292 | 19/modulate = Color( 1, 1, 1, 1 ) 293 | 19/region = Rect2( 576, 0, 32, 32 ) 294 | 19/tile_mode = 0 295 | 19/occluder_offset = Vector2( 0, 0 ) 296 | 19/navigation_offset = Vector2( 0, 0 ) 297 | 19/shape_offset = Vector2( 0, 0 ) 298 | 19/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 299 | 19/shape_one_way = false 300 | 19/shape_one_way_margin = 0.0 301 | 19/shapes = [ ] 302 | 19/z_index = 0 303 | 20/name = "floor_objects.png 20" 304 | 20/texture = ExtResource( 9 ) 305 | 20/tex_offset = Vector2( 0, 0 ) 306 | 20/modulate = Color( 1, 1, 1, 1 ) 307 | 20/region = Rect2( 608, 0, 32, 32 ) 308 | 20/tile_mode = 0 309 | 20/occluder_offset = Vector2( 0, 0 ) 310 | 20/navigation_offset = Vector2( 0, 0 ) 311 | 20/shape_offset = Vector2( 0, 0 ) 312 | 20/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 313 | 20/shape_one_way = false 314 | 20/shape_one_way_margin = 0.0 315 | 20/shapes = [ ] 316 | 20/z_index = 0 317 | 21/name = "floor_objects.png 21" 318 | 21/texture = ExtResource( 9 ) 319 | 21/tex_offset = Vector2( 0, 0 ) 320 | 21/modulate = Color( 1, 1, 1, 1 ) 321 | 21/region = Rect2( 640, 0, 32, 32 ) 322 | 21/tile_mode = 0 323 | 21/occluder_offset = Vector2( 0, 0 ) 324 | 21/navigation_offset = Vector2( 0, 0 ) 325 | 21/shape_offset = Vector2( 0, 0 ) 326 | 21/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 327 | 21/shape_one_way = false 328 | 21/shape_one_way_margin = 0.0 329 | 21/shapes = [ ] 330 | 21/z_index = 0 331 | 22/name = "floor_objects.png 22" 332 | 22/texture = ExtResource( 9 ) 333 | 22/tex_offset = Vector2( 0, 0 ) 334 | 22/modulate = Color( 1, 1, 1, 1 ) 335 | 22/region = Rect2( 672, 0, 32, 32 ) 336 | 22/tile_mode = 0 337 | 22/occluder_offset = Vector2( 0, 0 ) 338 | 22/navigation_offset = Vector2( 0, 0 ) 339 | 22/shape_offset = Vector2( 0, 0 ) 340 | 22/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 341 | 22/shape_one_way = false 342 | 22/shape_one_way_margin = 0.0 343 | 22/shapes = [ ] 344 | 22/z_index = 0 345 | 23/name = "floor_objects.png 23" 346 | 23/texture = ExtResource( 9 ) 347 | 23/tex_offset = Vector2( 0, 0 ) 348 | 23/modulate = Color( 1, 1, 1, 1 ) 349 | 23/region = Rect2( 704, 0, 32, 32 ) 350 | 23/tile_mode = 0 351 | 23/occluder_offset = Vector2( 0, 0 ) 352 | 23/navigation_offset = Vector2( 0, 0 ) 353 | 23/shape_offset = Vector2( 0, 0 ) 354 | 23/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 355 | 23/shape_one_way = false 356 | 23/shape_one_way_margin = 0.0 357 | 23/shapes = [ ] 358 | 23/z_index = 0 359 | 24/name = "floor_objects.png 24" 360 | 24/texture = ExtResource( 9 ) 361 | 24/tex_offset = Vector2( 0, 0 ) 362 | 24/modulate = Color( 1, 1, 1, 1 ) 363 | 24/region = Rect2( 736, 0, 32, 32 ) 364 | 24/tile_mode = 0 365 | 24/occluder_offset = Vector2( 0, 0 ) 366 | 24/navigation_offset = Vector2( 0, 0 ) 367 | 24/shape_offset = Vector2( 0, 0 ) 368 | 24/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 369 | 24/shape_one_way = false 370 | 24/shape_one_way_margin = 0.0 371 | 24/shapes = [ ] 372 | 24/z_index = 0 373 | 25/name = "floor_objects.png 25" 374 | 25/texture = ExtResource( 9 ) 375 | 25/tex_offset = Vector2( 0, 0 ) 376 | 25/modulate = Color( 1, 1, 1, 1 ) 377 | 25/region = Rect2( 768, 0, 32, 32 ) 378 | 25/tile_mode = 0 379 | 25/occluder_offset = Vector2( 0, 0 ) 380 | 25/navigation_offset = Vector2( 0, 0 ) 381 | 25/shape_offset = Vector2( 0, 0 ) 382 | 25/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 383 | 25/shape_one_way = false 384 | 25/shape_one_way_margin = 0.0 385 | 25/shapes = [ ] 386 | 25/z_index = 0 387 | 26/name = "floor_objects_big.png 26" 388 | 26/texture = ExtResource( 8 ) 389 | 26/tex_offset = Vector2( 0, -96 ) 390 | 26/modulate = Color( 1, 1, 1, 1 ) 391 | 26/region = Rect2( 0, 0, 128, 128 ) 392 | 26/tile_mode = 0 393 | 26/occluder_offset = Vector2( 0, 0 ) 394 | 26/navigation_offset = Vector2( 0, 0 ) 395 | 26/shape_offset = Vector2( 0, 0 ) 396 | 26/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 397 | 26/shape_one_way = false 398 | 26/shape_one_way_margin = 0.0 399 | 26/shapes = [ ] 400 | 26/z_index = 0 401 | 27/name = "floor_objects_big.png 27" 402 | 27/texture = ExtResource( 8 ) 403 | 27/tex_offset = Vector2( 0, -96 ) 404 | 27/modulate = Color( 1, 1, 1, 1 ) 405 | 27/region = Rect2( 128, 0, 128, 128 ) 406 | 27/tile_mode = 0 407 | 27/occluder_offset = Vector2( 0, 0 ) 408 | 27/navigation_offset = Vector2( 0, 0 ) 409 | 27/shape_offset = Vector2( 0, 0 ) 410 | 27/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 411 | 27/shape_one_way = false 412 | 27/shape_one_way_margin = 0.0 413 | 27/shapes = [ ] 414 | 27/z_index = 0 415 | 28/name = "floor_objects_big.png 28" 416 | 28/texture = ExtResource( 8 ) 417 | 28/tex_offset = Vector2( 0, -96 ) 418 | 28/modulate = Color( 1, 1, 1, 1 ) 419 | 28/region = Rect2( 256, 0, 128, 128 ) 420 | 28/tile_mode = 0 421 | 28/occluder_offset = Vector2( 0, 0 ) 422 | 28/navigation_offset = Vector2( 0, 0 ) 423 | 28/shape_offset = Vector2( 0, 0 ) 424 | 28/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 425 | 28/shape_one_way = false 426 | 28/shape_one_way_margin = 0.0 427 | 28/shapes = [ ] 428 | 28/z_index = 0 429 | 29/name = "floor_objects_big.png 29" 430 | 29/texture = ExtResource( 8 ) 431 | 29/tex_offset = Vector2( 0, -96 ) 432 | 29/modulate = Color( 1, 1, 1, 1 ) 433 | 29/region = Rect2( 384, 0, 128, 128 ) 434 | 29/tile_mode = 0 435 | 29/occluder_offset = Vector2( 0, 0 ) 436 | 29/navigation_offset = Vector2( 0, 0 ) 437 | 29/shape_offset = Vector2( 0, 0 ) 438 | 29/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 439 | 29/shape_one_way = false 440 | 29/shape_one_way_margin = 0.0 441 | 29/shapes = [ ] 442 | 29/z_index = 0 443 | 30/name = "floor_objects_med.png 30" 444 | 30/texture = ExtResource( 10 ) 445 | 30/tex_offset = Vector2( 0, -48 ) 446 | 30/modulate = Color( 1, 1, 1, 1 ) 447 | 30/region = Rect2( 0, 0, 96, 96 ) 448 | 30/tile_mode = 0 449 | 30/occluder_offset = Vector2( 0, 0 ) 450 | 30/navigation_offset = Vector2( 0, 0 ) 451 | 30/shape_offset = Vector2( 0, 0 ) 452 | 30/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 453 | 30/shape_one_way = false 454 | 30/shape_one_way_margin = 0.0 455 | 30/shapes = [ ] 456 | 30/z_index = 0 457 | 31/name = "floor_objects_med.png 31" 458 | 31/texture = ExtResource( 10 ) 459 | 31/tex_offset = Vector2( 0, -48 ) 460 | 31/modulate = Color( 1, 1, 1, 1 ) 461 | 31/region = Rect2( 96, 0, 96, 96 ) 462 | 31/tile_mode = 0 463 | 31/occluder_offset = Vector2( 0, 0 ) 464 | 31/navigation_offset = Vector2( 0, 0 ) 465 | 31/shape_offset = Vector2( 0, 0 ) 466 | 31/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 467 | 31/shape_one_way = false 468 | 31/shape_one_way_margin = 0.0 469 | 31/shapes = [ ] 470 | 31/z_index = 0 471 | 32/name = "floor_objects_med.png 32" 472 | 32/texture = ExtResource( 10 ) 473 | 32/tex_offset = Vector2( 0, -48 ) 474 | 32/modulate = Color( 1, 1, 1, 1 ) 475 | 32/region = Rect2( 192, 0, 96, 96 ) 476 | 32/tile_mode = 0 477 | 32/occluder_offset = Vector2( 0, 0 ) 478 | 32/navigation_offset = Vector2( 0, 0 ) 479 | 32/shape_offset = Vector2( 0, 0 ) 480 | 32/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 481 | 32/shape_one_way = false 482 | 32/shape_one_way_margin = 0.0 483 | 32/shapes = [ ] 484 | 32/z_index = 0 485 | 486 | [node name="WORLD" type="Node2D"] 487 | script = ExtResource( 3 ) 488 | 489 | [node name="BACK" type="Node2D" parent="."] 490 | z_index = -10 491 | 492 | [node name="BACKGROUND" parent="BACK" instance=ExtResource( 6 )] 493 | 494 | [node name="floor" type="TileMap" parent="BACK"] 495 | tile_set = SubResource( 1 ) 496 | cell_size = Vector2( 32, 32 ) 497 | format = 1 498 | tile_data = PoolIntArray( -786436, 0, 8, -786435, 0, 10, -786434, 0, 10, -786433, 0, 10, -851968, 0, 11, -851964, 0, 8, -851963, 0, 10, -851962, 0, 10, -851961, 0, 10, -851960, 0, 10, -851959, 0, 10, -851958, 0, 10, -851957, 0, 10, -851956, 0, 11, -720900, 0, 65544, -720899, 0, 131081, -720898, 0, 131081, -720897, 0, 131081, -786432, 0, 131083, -786429, 0, 8, -786428, 0, 65541, -786427, 0, 131081, -786426, 0, 131081, -786425, 0, 131081, -786424, 0, 131081, -786423, 0, 131081, -786422, 0, 131081, -786421, 0, 131081, -786420, 0, 131083, -655368, 0, 8, -655367, 0, 10, -655366, 0, 10, -655365, 0, 10, -655364, 0, 65541, -655363, 0, 131081, -655362, 0, 131081, -655361, 0, 131081, -720896, 0, 65542, -720895, 0, 11, -720893, 0, 65544, -720892, 0, 131081, -720891, 0, 131081, -720890, 0, 131081, -720889, 0, 131081, -720888, 0, 131081, -720887, 0, 131081, -720886, 0, 131081, -720885, 0, 131081, -720884, 0, 65542, -720883, 0, 10, -720882, 0, 11, -589832, 0, 65544, -589831, 0, 131081, -589830, 0, 131081, -589829, 0, 131081, -589828, 0, 131081, -589827, 0, 131081, -589826, 0, 131081, -589825, 0, 131081, -655360, 0, 131081, -655359, 0, 65542, -655358, 0, 10, -655357, 0, 65541, -655356, 0, 131081, -655355, 0, 131081, -655354, 0, 131081, -655353, 0, 131081, -655352, 0, 131081, -655351, 0, 131081, -655350, 0, 131081, -655349, 0, 131081, -655348, 0, 131081, -655347, 0, 131081, -655346, 0, 65542, -655345, 0, 10, -655344, 0, 10, -655343, 0, 11, -524301, 0, 8, -524300, 0, 10, -524299, 0, 10, -524298, 0, 10, -524297, 0, 10, -524296, 0, 65541, -524295, 0, 131081, -524294, 0, 131081, -524293, 0, 131081, -524292, 0, 131081, -524291, 0, 131081, -524290, 0, 131081, -524289, 0, 131081, -589824, 0, 131081, -589823, 0, 131081, -589822, 0, 131081, -589821, 0, 131081, -589820, 0, 131081, -589819, 0, 131081, -589818, 0, 131081, -589817, 0, 131081, -589816, 0, 131081, -589815, 0, 131081, -589814, 0, 131081, -589813, 0, 131081, -589812, 0, 131081, -589811, 0, 131081, -589810, 0, 131081, -589809, 0, 131081, -589808, 0, 131081, -589807, 0, 131083, -458765, 0, 65544, -458764, 0, 131081, -458763, 0, 131081, -458762, 0, 131081, -458761, 0, 131081, -458760, 0, 131081, -458759, 0, 131081, -458758, 0, 131081, -458757, 0, 131081, -458756, 0, 131081, -458755, 0, 131081, -458754, 0, 131081, -458753, 0, 131081, -524288, 0, 131081, -524287, 0, 131081, -524286, 0, 131081, -524285, 0, 131081, -524284, 0, 131081, -524283, 0, 131081, -524282, 0, 131081, -524281, 0, 131081, -524280, 0, 131081, -524279, 0, 131081, -524278, 0, 131081, -524277, 0, 131081, -524276, 0, 131081, -524275, 0, 131081, -524274, 0, 131081, -524273, 0, 131081, -524272, 0, 131081, -524271, 0, 131083, -393235, 0, 8, -393234, 0, 6, -393233, 0, 196610, -393232, 0, 3, -393230, 0, 8, -393229, 0, 65541, -393228, 0, 131081, -393227, 0, 131081, -393226, 0, 131081, -393225, 0, 131081, -393224, 0, 131081, -393223, 0, 131081, -393222, 0, 131081, -393221, 0, 131081, -393220, 0, 131081, -393219, 0, 131081, -393218, 0, 131081, -393217, 0, 131081, -458752, 0, 131081, -458751, 0, 131081, -458750, 0, 131081, -458749, 0, 131081, -458748, 0, 131081, -458747, 0, 131081, -458746, 0, 131081, -458745, 0, 131081, -458744, 0, 131081, -458743, 0, 131081, -458742, 0, 131081, -458741, 0, 131081, -458740, 0, 131081, -458739, 0, 131081, -458738, 0, 131081, -458737, 0, 131081, -458736, 0, 131081, -458735, 0, 131083, -327699, 0, 65544, -327698, 0, 131083, -327696, 0, 65536, -327694, 0, 65544, -327693, 0, 131081, -327692, 0, 131081, -327691, 0, 131081, -327690, 0, 131081, -327689, 0, 131081, -327688, 0, 131081, -327687, 0, 131081, -327686, 0, 131081, -327685, 0, 131081, -327684, 0, 131081, -327683, 0, 131081, -327682, 0, 131081, -327681, 0, 131081, -393216, 0, 131081, -393215, 0, 131081, -393214, 0, 131081, -393213, 0, 131081, -393212, 0, 131081, -393211, 0, 131081, -393210, 0, 131081, -393209, 0, 131081, -393208, 0, 131081, -393207, 0, 131081, -393206, 0, 131081, -393205, 0, 131081, -393204, 0, 131081, -393203, 0, 131081, -393202, 0, 131081, -393201, 0, 131081, -393200, 0, 131081, -393199, 0, 65542, -393198, 0, 11, -262163, 0, 196616, -262162, 0, 196614, -262161, 0, 196610, -262160, 0, 131074, -262159, 0, 196610, -262158, 0, 131080, -262157, 0, 131081, -262156, 0, 131081, -262155, 0, 131081, -262154, 0, 131081, -262153, 0, 131081, -262152, 0, 131081, -262151, 0, 131081, -262150, 0, 131081, -262149, 0, 131081, -262148, 0, 131081, -262147, 0, 131081, -262146, 0, 131081, -262145, 0, 131081, -327680, 0, 131081, -327679, 0, 131081, -327678, 0, 131081, -327677, 0, 131081, -327676, 0, 131081, -327675, 0, 131081, -327674, 0, 131081, -327673, 0, 131081, -327672, 0, 131081, -327671, 0, 131081, -327670, 0, 131081, -327669, 0, 131081, -327668, 0, 131081, -327667, 0, 131081, -327666, 0, 131081, -327665, 0, 131081, -327664, 0, 131081, -327663, 0, 131081, -327662, 0, 65542, -327661, 0, 11, -196622, 0, 65544, -196621, 0, 131081, -196620, 0, 131081, -196619, 0, 131081, -196618, 0, 131081, -196617, 0, 131081, -196616, 0, 131081, -196615, 0, 131081, -196614, 0, 131081, -196613, 0, 131081, -196612, 0, 131081, -196611, 0, 131081, -196610, 0, 131081, -196609, 0, 131081, -262144, 0, 131081, -262143, 0, 131081, -262142, 0, 131081, -262141, 0, 131081, -262140, 0, 131081, -262139, 0, 131081, -262138, 0, 131081, -262137, 0, 131081, -262136, 0, 131081, -262135, 0, 131081, -262134, 0, 131081, -262133, 0, 131081, -262132, 0, 131081, -262131, 0, 131081, -262130, 0, 131081, -262129, 0, 131081, -262128, 0, 131081, -262127, 0, 131081, -262126, 0, 131081, -262125, 0, 65542, -262124, 0, 11, -131088, 0, 8, -131087, 0, 10, -131086, 0, 65541, -131085, 0, 131081, -131084, 0, 131081, -131083, 0, 131081, -131082, 0, 131081, -131081, 0, 131081, -131080, 0, 131081, -131079, 0, 131081, -131078, 0, 131081, -131077, 0, 131081, -131076, 0, 131081, -131075, 0, 131081, -131074, 0, 131081, -131073, 0, 131081, -196608, 0, 131081, -196607, 0, 131081, -196606, 0, 131081, -196605, 0, 131081, -196604, 0, 131081, -196603, 0, 131081, -196602, 0, 131081, -196601, 0, 131081, -196600, 0, 131078, -196599, 0, 196617, -196598, 0, 131077, -196597, 0, 131081, -196596, 0, 131081, -196595, 0, 131081, -196594, 0, 131081, -196593, 0, 131081, -196592, 0, 131081, -196591, 0, 131081, -196590, 0, 131081, -196589, 0, 131081, -196588, 0, 131083, -65552, 0, 65544, -65551, 0, 131081, -65550, 0, 131081, -65549, 0, 131081, -65548, 0, 131081, -65547, 0, 131081, -65546, 0, 131081, -65545, 0, 131081, -65544, 0, 131081, -65543, 0, 131081, -65542, 0, 131081, -65541, 0, 131081, -65540, 0, 131081, -65539, 0, 131081, -65538, 0, 131081, -65537, 0, 131081, -131072, 0, 131081, -131071, 0, 131081, -131070, 0, 131081, -131069, 0, 131081, -131068, 0, 131081, -131067, 0, 131081, -131066, 0, 131081, -131065, 0, 131081, -131064, 0, 131083, -131062, 0, 65544, -131061, 0, 131081, -131060, 0, 131081, -131059, 0, 131081, -131058, 0, 131081, -131057, 0, 131081, -131056, 0, 131081, -131055, 0, 131081, -131054, 0, 131081, -131053, 0, 131081, -131052, 0, 131083, -16, 0, 65544, -15, 0, 131081, -14, 0, 131081, -13, 0, 131081, -12, 0, 131081, -11, 0, 131081, -10, 0, 131081, -9, 0, 131081, -8, 0, 131081, -7, 0, 131081, -6, 0, 131081, -5, 0, 131081, -4, 0, 131081, -3, 0, 131081, -2, 0, 131081, -1, 0, 131081, -65536, 0, 131081, -65535, 0, 131081, -65534, 0, 131081, -65533, 0, 131081, -65532, 0, 131081, -65531, 0, 131081, -65530, 0, 131081, -65529, 0, 131081, -65528, 0, 131083, -65526, 0, 65544, -65525, 0, 131081, -65524, 0, 131081, -65523, 0, 131078, -65522, 0, 196617, -65521, 0, 131077, -65520, 0, 131078, -65519, 0, 196617, -65518, 0, 196617, -65517, 0, 196617, -65516, 0, 196619, 65517, 0, 8, 65518, 0, 10, 65519, 0, 10, 65520, 0, 65541, 65521, 0, 131081, 65522, 0, 131081, 65523, 0, 131081, 65524, 0, 131081, 65525, 0, 131081, 65526, 0, 131081, 65527, 0, 131081, 65528, 0, 131081, 65529, 0, 131081, 65530, 0, 131081, 65531, 0, 131081, 65532, 0, 131081, 65533, 0, 131081, 65534, 0, 131081, 65535, 0, 131081, 0, 0, 131081, 1, 0, 131081, 2, 0, 131081, 3, 0, 131081, 4, 0, 131081, 5, 0, 131081, 6, 0, 131081, 7, 0, 131081, 8, 0, 131083, 10, 0, 65544, 11, 0, 131081, 12, 0, 131078, 13, 0, 196619, 15, 0, 65544, 16, 0, 131083, 131053, 0, 65544, 131054, 0, 131081, 131055, 0, 131081, 131056, 0, 131081, 131057, 0, 131081, 131058, 0, 131081, 131059, 0, 131081, 131060, 0, 131081, 131061, 0, 131081, 131062, 0, 131081, 131063, 0, 131081, 131064, 0, 131081, 131065, 0, 131081, 131066, 0, 131081, 131067, 0, 131081, 131068, 0, 131081, 131069, 0, 131081, 131070, 0, 131081, 131071, 0, 131081, 65536, 0, 131081, 65537, 0, 131081, 65538, 0, 131081, 65539, 0, 131081, 65540, 0, 131081, 65541, 0, 131081, 65542, 0, 131081, 65543, 0, 131081, 65544, 0, 131083, 65546, 0, 65544, 65547, 0, 131081, 65548, 0, 131083, 65551, 0, 65544, 65552, 0, 131083, 196589, 0, 196616, 196590, 0, 131077, 196591, 0, 131081, 196592, 0, 131081, 196593, 0, 131081, 196594, 0, 131081, 196595, 0, 131081, 196596, 0, 131078, 196597, 0, 196617, 196598, 0, 196617, 196599, 0, 131077, 196600, 0, 131081, 196601, 0, 131078, 196602, 0, 196617, 196603, 0, 131077, 196604, 0, 131081, 196605, 0, 131081, 196606, 0, 131081, 196607, 0, 131081, 131072, 0, 131081, 131073, 0, 131081, 131074, 0, 131081, 131075, 0, 131081, 131076, 0, 131081, 131077, 0, 131081, 131078, 0, 131081, 131079, 0, 131081, 131080, 0, 131083, 131082, 0, 65544, 131083, 0, 131081, 131084, 0, 65547, 131085, 0, 196610, 131086, 0, 196610, 131087, 0, 131080, 131088, 0, 131083, 262126, 0, 196616, 262127, 0, 196617, 262128, 0, 196617, 262129, 0, 196617, 262130, 0, 131077, 262131, 0, 131081, 262132, 0, 131083, 262135, 0, 65544, 262136, 0, 131081, 262137, 0, 131083, 262139, 0, 65544, 262140, 0, 131081, 262141, 0, 131081, 262142, 0, 131081, 262143, 0, 131081, 196608, 0, 131081, 196609, 0, 131081, 196610, 0, 131081, 196611, 0, 131081, 196612, 0, 131081, 196613, 0, 131081, 196614, 0, 131081, 196615, 0, 131081, 196616, 0, 131083, 196618, 0, 65544, 196619, 0, 131081, 196620, 0, 131083, 196623, 0, 65544, 196624, 0, 131083, 327666, 0, 65544, 327667, 0, 131081, 327668, 0, 65542, 327669, 0, 10, 327670, 0, 10, 327671, 0, 65541, 327672, 0, 131081, 327673, 0, 131083, 327675, 0, 65544, 327676, 0, 131081, 327677, 0, 131081, 327678, 0, 131081, 327679, 0, 131081, 262144, 0, 131081, 262145, 0, 131081, 262146, 0, 131081, 262147, 0, 131081, 262148, 0, 131081, 262149, 0, 131081, 262150, 0, 131081, 262151, 0, 131081, 262152, 0, 131083, 262154, 0, 196616, 262155, 0, 131077, 262156, 0, 131083, 262159, 0, 65544, 262160, 0, 131083, 393202, 0, 65544, 393203, 0, 131081, 393204, 0, 131081, 393205, 0, 131081, 393206, 0, 131081, 393207, 0, 131081, 393208, 0, 131078, 393209, 0, 196619, 393211, 0, 65544, 393212, 0, 131081, 393213, 0, 131081, 393214, 0, 131081, 393215, 0, 131081, 327680, 0, 131081, 327681, 0, 131081, 327682, 0, 131081, 327683, 0, 131081, 327684, 0, 131081, 327685, 0, 131081, 327686, 0, 131081, 327687, 0, 131081, 327688, 0, 131083, 327691, 0, 196616, 327692, 0, 196614, 327693, 0, 5, 327694, 0, 10, 327695, 0, 65541, 327696, 0, 131083, 458737, 0, 8, 458738, 0, 65541, 458739, 0, 131081, 458740, 0, 131081, 458741, 0, 131081, 458742, 0, 131081, 458743, 0, 131081, 458744, 0, 131083, 458747, 0, 65544, 458748, 0, 131081, 458749, 0, 131081, 458750, 0, 131081, 458751, 0, 131081, 393216, 0, 131078, 393217, 0, 196617, 393218, 0, 196617, 393219, 0, 196617, 393220, 0, 196617, 393221, 0, 196617, 393222, 0, 131077, 393223, 0, 131081, 393224, 0, 131083, 393229, 0, 65544, 393230, 0, 131081, 393231, 0, 131081, 393232, 0, 131083, 524271, 0, 8, 524272, 0, 10, 524273, 0, 65541, 524274, 0, 131081, 524275, 0, 131081, 524276, 0, 131081, 524277, 0, 131081, 524278, 0, 131081, 524279, 0, 131081, 524280, 0, 65547, 524281, 0, 196610, 524282, 0, 196610, 524283, 0, 131080, 524284, 0, 131081, 524285, 0, 131081, 524286, 0, 131081, 524287, 0, 131081, 458752, 0, 131083, 458758, 0, 65544, 458759, 0, 131081, 458760, 0, 65542, 458761, 0, 11, 458764, 0, 8, 458765, 0, 65541, 458766, 0, 131081, 458767, 0, 131081, 458768, 0, 131083, 589807, 0, 196616, 589808, 0, 196617, 589809, 0, 196617, 589810, 0, 196617, 589811, 0, 196617, 589812, 0, 131077, 589813, 0, 131081, 589814, 0, 131081, 589815, 0, 131081, 589816, 0, 131083, 589819, 0, 65544, 589820, 0, 131081, 589821, 0, 131081, 589822, 0, 131081, 589823, 0, 131081, 524288, 0, 131083, 524291, 0, 8, 524292, 0, 10, 524293, 0, 10, 524294, 0, 65541, 524295, 0, 131081, 524296, 0, 131081, 524297, 0, 65542, 524298, 0, 10, 524299, 0, 10, 524300, 0, 65541, 524301, 0, 131081, 524302, 0, 131081, 524303, 0, 131081, 524304, 0, 131083, 655348, 0, 65544, 655349, 0, 131081, 655350, 0, 131081, 655351, 0, 131081, 655352, 0, 131083, 655355, 0, 65544, 655356, 0, 131081, 655357, 0, 131081, 655358, 0, 131081, 655359, 0, 131081, 589824, 0, 131083, 589827, 0, 65544, 589828, 0, 131081, 589829, 0, 131078, 589830, 0, 196617, 589831, 0, 196617, 589832, 0, 131077, 589833, 0, 131081, 589834, 0, 131081, 589835, 0, 131078, 589836, 0, 196617, 589837, 0, 196618, 589838, 0, 196617, 589839, 0, 196617, 589840, 0, 196619, 720884, 0, 196616, 720885, 0, 196617, 720886, 0, 131077, 720887, 0, 131078, 720888, 0, 196619, 720891, 0, 65544, 720892, 0, 131081, 720893, 0, 131081, 720894, 0, 131081, 720895, 0, 131081, 655360, 0, 65542, 655361, 0, 10, 655362, 0, 10, 655363, 0, 65541, 655364, 0, 131081, 655365, 0, 131083, 655368, 0, 65544, 655369, 0, 131081, 655370, 0, 131081, 655371, 0, 131083, 655373, 0, 65536, 786422, 0, 65544, 786423, 0, 131083, 786427, 0, 196616, 786428, 0, 196617, 786429, 0, 196617, 786430, 0, 196617, 786431, 0, 196617, 720896, 0, 196617, 720897, 0, 196617, 720898, 0, 196617, 720899, 0, 131077, 720900, 0, 131078, 720901, 0, 196619, 720903, 0, 1, 720904, 0, 196613, 720905, 0, 131077, 720906, 0, 131081, 720907, 0, 65547, 720908, 0, 196610, 720909, 0, 131075, 851958, 0, 65544, 851959, 0, 65542, 851960, 0, 10, 851961, 0, 11, 786435, 0, 65544, 786436, 0, 131083, 786439, 0, 65536, 786441, 0, 65544, 786442, 0, 131081, 786443, 0, 131083, 917494, 0, 196616, 917495, 0, 196617, 917496, 0, 196617, 917497, 0, 196619, 851971, 0, 196616, 851972, 0, 196614, 851973, 0, 196610, 851974, 0, 196610, 851975, 0, 131075, 851977, 0, 196616, 851978, 0, 196617, 851979, 0, 196619 ) 499 | 500 | [node name="FX" type="Node2D" parent="."] 501 | 502 | [node name="FRONT" type="YSort" parent="."] 503 | 504 | [node name="ITEM" parent="FRONT" instance=ExtResource( 5 )] 505 | position = Vector2( 19.0082, 27.4643 ) 506 | item_name = "Knife" 507 | item_quantity = 1 508 | 509 | [node name="ITEM20" parent="FRONT" instance=ExtResource( 5 )] 510 | position = Vector2( -157.218, 62.2606 ) 511 | item_name = "Knife" 512 | item_quantity = 1 513 | 514 | [node name="ITEM21" parent="FRONT" instance=ExtResource( 5 )] 515 | position = Vector2( -129.157, 229.507 ) 516 | item_name = "Knife" 517 | item_quantity = 1 518 | 519 | [node name="ITEM22" parent="FRONT" instance=ExtResource( 5 )] 520 | position = Vector2( 291.766, -94.8842 ) 521 | item_name = "Knife" 522 | item_quantity = 1 523 | 524 | [node name="ITEM23" parent="FRONT" instance=ExtResource( 5 )] 525 | position = Vector2( -159.463, -189.171 ) 526 | item_name = "Knife" 527 | item_quantity = 1 528 | 529 | [node name="ITEM2" parent="FRONT" instance=ExtResource( 5 )] 530 | position = Vector2( 77.8314, 33.9259 ) 531 | item_name = "Eyefruit" 532 | item_quantity = 5 533 | 534 | [node name="ITEM3" parent="FRONT" instance=ExtResource( 5 )] 535 | position = Vector2( -152.104, -19.6208 ) 536 | item_name = "Eyefruit" 537 | item_quantity = 5 538 | 539 | [node name="ITEM4" parent="FRONT" instance=ExtResource( 5 )] 540 | position = Vector2( -167.223, -146.243 ) 541 | item_name = "Eyefruit" 542 | item_quantity = 5 543 | 544 | [node name="ITEM5" parent="FRONT" instance=ExtResource( 5 )] 545 | position = Vector2( 119.005, -222.57 ) 546 | item_name = "Eyefruit" 547 | item_quantity = 5 548 | 549 | [node name="ITEM6" parent="FRONT" instance=ExtResource( 5 )] 550 | position = Vector2( 308.701, -164.202 ) 551 | item_name = "Eyefruit" 552 | item_quantity = 5 553 | 554 | [node name="ITEM7" parent="FRONT" instance=ExtResource( 5 )] 555 | position = Vector2( 441.151, -90.1198 ) 556 | item_name = "Eyefruit" 557 | item_quantity = 5 558 | 559 | [node name="ITEM8" parent="FRONT" instance=ExtResource( 5 )] 560 | position = Vector2( 365.946, -0.3228 ) 561 | item_name = "Eyefruit" 562 | item_quantity = 5 563 | 564 | [node name="ITEM9" parent="FRONT" instance=ExtResource( 5 )] 565 | position = Vector2( 236.863, 226.415 ) 566 | item_name = "Eyefruit" 567 | item_quantity = 5 568 | 569 | [node name="ITEM10" parent="FRONT" instance=ExtResource( 5 )] 570 | position = Vector2( -86.4059, 245.496 ) 571 | item_name = "Eyefruit" 572 | item_quantity = 5 573 | 574 | [node name="ITEM11" parent="FRONT" instance=ExtResource( 5 )] 575 | position = Vector2( -318.756, 238.762 ) 576 | item_name = "Eyefruit" 577 | item_quantity = 5 578 | 579 | [node name="ITEM12" parent="FRONT" instance=ExtResource( 5 )] 580 | position = Vector2( -479.268, 40.0858 ) 581 | item_name = "Eyefruit" 582 | item_quantity = 5 583 | 584 | [node name="ITEM13" parent="FRONT" instance=ExtResource( 5 )] 585 | position = Vector2( -260.388, 408.253 ) 586 | item_name = "Eyefruit" 587 | item_quantity = 5 588 | 589 | [node name="ITEM14" parent="FRONT" instance=ExtResource( 5 )] 590 | position = Vector2( 119.005, 346.518 ) 591 | item_name = "Eyefruit" 592 | item_quantity = 5 593 | 594 | [node name="ITEM15" parent="FRONT" instance=ExtResource( 5 )] 595 | position = Vector2( 454.621, 234.272 ) 596 | item_name = "Eyefruit" 597 | item_quantity = 5 598 | 599 | [node name="ITEM16" parent="FRONT" instance=ExtResource( 5 )] 600 | position = Vector2( 575.847, -94.6096 ) 601 | item_name = "Eyefruit" 602 | item_quantity = 5 603 | 604 | [node name="ITEM17" parent="FRONT" instance=ExtResource( 5 )] 605 | position = Vector2( 349.109, -291.04 ) 606 | item_name = "Eyefruit" 607 | item_quantity = 5 608 | 609 | [node name="ITEM18" parent="FRONT" instance=ExtResource( 5 )] 610 | position = Vector2( 29.2078, -324.714 ) 611 | item_name = "Eyefruit" 612 | item_quantity = 5 613 | 614 | [node name="ITEM19" parent="FRONT" instance=ExtResource( 5 )] 615 | position = Vector2( -199.775, -275.326 ) 616 | item_name = "Eyefruit" 617 | item_quantity = 5 618 | 619 | [node name="MOB" parent="FRONT" instance=ExtResource( 4 )] 620 | position = Vector2( 184.944, -25.6648 ) 621 | 622 | [node name="MOB2" parent="FRONT" instance=ExtResource( 4 )] 623 | position = Vector2( 106.455, -131.731 ) 624 | 625 | [node name="MOB3" parent="FRONT" instance=ExtResource( 4 )] 626 | position = Vector2( -177.095, -105.568 ) 627 | 628 | [node name="MOB4" parent="FRONT" instance=ExtResource( 4 )] 629 | position = Vector2( -274.676, 68.3804 ) 630 | 631 | [node name="MOB5" parent="FRONT" instance=ExtResource( 4 )] 632 | position = Vector2( -314.981, 201.316 ) 633 | 634 | [node name="MOB6" parent="FRONT" instance=ExtResource( 4 )] 635 | position = Vector2( -98.606, 274.148 ) 636 | 637 | [node name="MOB7" parent="FRONT" instance=ExtResource( 4 )] 638 | position = Vector2( 192.015, 165.961 ) 639 | 640 | [node name="MOB8" parent="FRONT" instance=ExtResource( 4 )] 641 | position = Vector2( 474.151, 231.015 ) 642 | 643 | [node name="MOB9" parent="FRONT" instance=ExtResource( 4 )] 644 | position = Vector2( -354.878, -204.918 ) 645 | 646 | [node name="MOB10" parent="FRONT" instance=ExtResource( 4 )] 647 | position = Vector2( -81.4747, -333.43 ) 648 | 649 | [node name="MOB11" parent="FRONT" instance=ExtResource( 4 )] 650 | position = Vector2( 200.748, -339.729 ) 651 | 652 | [node name="MOB12" parent="FRONT" instance=ExtResource( 4 )] 653 | position = Vector2( 363.277, -227.596 ) 654 | 655 | [node name="MOB13" parent="FRONT" instance=ExtResource( 4 )] 656 | position = Vector2( -499.769, 48.3265 ) 657 | 658 | [node name="PLAYER" parent="FRONT" instance=ExtResource( 1 )] 659 | position = Vector2( -80.7797, 203.061 ) 660 | 661 | [node name="plants" type="TileMap" parent="FRONT"] 662 | tile_set = SubResource( 1 ) 663 | cell_size = Vector2( 32, 32 ) 664 | cell_half_offset = 0 665 | cell_tile_origin = 1 666 | cell_y_sort = true 667 | format = 1 668 | tile_data = PoolIntArray( -720899, 30, 0, -786428, 12, 0, -655367, 30, 0, -655363, 15, 0, -720891, 27, 0, -720886, 29, 0, -589831, 15, 0, -589826, 32, 0, -655357, 27, 0, -655354, 27, 0, -655353, 27, 0, -655352, 12, 0, -524301, 32, 0, -524293, 7, 0, -589824, 12, 0, -589820, 27, 0, -589815, 7, 0, -589813, 29, 0, -589811, 30, 0, -458762, 27, 0, -458759, 26, 0, -458756, 29, 0, -524281, 27, 0, -524278, 32, 0, -393235, 1, 0, -393229, 7, 0, -393219, 32, 0, -458745, 29, 0, -458740, 15, 0, -327699, 1, 0, -327698, 10, 0, -327689, 12, 0, -327681, 10, 0, -393214, 10, 0, -393213, 26, 0, -393207, 26, 0, -393203, 30, 0, -393199, 29, 0, -262163, 1, 0, -262157, 15, 0, -262154, 32, 0, -262148, 10, 0, -262146, 15, 0, -327673, 10, 0, -196621, 30, 0, -196612, 10, 0, -262143, 10, 0, -262139, 10, 0, -262134, 19, 0, -262132, 12, 0, -262130, 32, 0, -131088, 27, 0, -131084, 12, 0, -131081, 7, 0, -131074, 1, 0, -196606, 8, 0, -196603, 1, 0, -196601, 10, 0, -65552, 29, 0, -65545, 15, 0, -65542, 10, 0, -65539, 11, 0, -131071, 30, 0, -131069, 8, 0, -131064, 1, 0, -131062, 26, 0, -131058, 15, 0, -131055, 32, 0, -15, 30, 0, -12, 26, 0, -65534, 29, 0, -65524, 7, 0, -65521, 12, 0, 65522, 15, 0, 65529, 15, 0, 65531, 1, 0, 65535, 24, 0, 10, 10, 0, 131060, 12, 0, 131061, 29, 0, 131064, 10, 0, 131071, 4, 0, 65547, 15, 0, 65551, 12, 0, 196590, 30, 0, 196593, 7, 0, 131073, 7, 0, 131083, 26, 0, 131088, 19, 0, 262129, 30, 0, 196619, 29, 0, 327672, 10, 0, 262155, 32, 0, 262159, 12, 0, 393202, 15, 0, 327693, 7, 0, 458740, 29, 0, 458743, 12, 0, 458744, 32, 0, 524271, 26, 0, 524273, 32, 0, 458761, 15, 0, 458767, 12, 0, 589813, 15, 0, 589822, 32, 0, 524292, 15, 0, 524295, 32, 0, 524299, 12, 0, 524301, 19, 0, 655347, 7, 0, 655349, 30, 0, 655358, 15, 0, 720892, 12, 0, 655361, 12, 0, 655364, 29, 0, 655368, 7, 0, 655370, 12, 0, 786429, 19, 0, 720897, 12, 0, 851960, 29, 0, 786436, 32, 0, 786441, 30, 0 ) 669 | 670 | [node name="plants2" type="TileMap" parent="FRONT"] 671 | position = Vector2( 13.7886, 14.8492 ) 672 | tile_set = SubResource( 1 ) 673 | cell_size = Vector2( 32, 32 ) 674 | cell_half_offset = 0 675 | cell_tile_origin = 1 676 | cell_y_sort = true 677 | format = 1 678 | tile_data = PoolIntArray( -262134, 19, 0, -131077, 11, 0, -131076, 10, 0, -65540, 10, 0, -65537, 6, 0, -131070, 7, 0, -65521, 12, 0, 6, 12, 0, 7, 3, 0, 65541, 3, 0, 65542, 4, 0, 196605, 5, 0, 196606, 3, 0, 196607, 6, 0, 131072, 4, 0, 131074, 5, 0, 131076, 4, 0, 131077, 5, 0, 131088, 19, 0, 262139, 27, 0, 262143, 4, 0, 196608, 4, 0, 196612, 27, 0, 196613, 30, 0, 327676, 30, 0, 262145, 30, 0, 262159, 12, 0, 393211, 28, 0, 393214, 28, 0, 327681, 28, 0, 327684, 28, 0, 458767, 12, 0, 524301, 19, 0 ) 679 | -------------------------------------------------------------------------------- /scripts/ACTOR.gd: -------------------------------------------------------------------------------- 1 | extends KinematicBody2D 2 | class_name ACTOR 3 | 4 | export(float) var DAMAGE = 25.0 5 | export(float) var FRICTION = 20.0 6 | export(float) var KNOCKBACK_MODIFIER = 5.0 7 | export(float) var KNOCKBACK_STRENGTH = 100.0 8 | export(Vector2) var WALK_SPEED = Vector2(50.0, -50.0) 9 | 10 | export(float) var health = 100.0 11 | 12 | var is_dead = false 13 | var linear_velocity = Vector2.ZERO 14 | var current_knockback = Vector2.ZERO 15 | var current_orientation = Vector2.ZERO 16 | 17 | var footstep_scene = load("res://scenes/FOOTSTEP.tscn") 18 | 19 | func _process(delta): 20 | current_knockback = lerp(current_knockback, Vector2.ZERO, delta * KNOCKBACK_MODIFIER) 21 | 22 | func knockback(source_position): 23 | current_knockback = (global_position - source_position).normalized() * KNOCKBACK_STRENGTH 24 | 25 | func footstep(name, is_left): 26 | var f = footstep_scene.instance() 27 | GLOBALS.current_world.get_node("FX").add_child(f) 28 | if name == "side": 29 | f.global_position = $MODEL/FX_FOOT_SIDE.global_position 30 | f.scale = $MODEL/FX_FOOT_SIDE.scale 31 | else: 32 | if is_left: 33 | f.global_position = $MODEL/FX_FOOT_LEFT.global_position 34 | f.scale = $MODEL/FX_FOOT_LEFT.scale 35 | else: 36 | f.global_position = $MODEL/FX_FOOT_RIGHT.global_position 37 | f.scale = $MODEL/FX_FOOT_RIGHT.scale 38 | f.play(name) 39 | 40 | func take_damage(actor): 41 | knockback(actor.global_position) 42 | _take_damage(actor) 43 | 44 | # virtual method which can be overwritten 45 | # by any class which inherits ACTOR 46 | func _take_damage(actor): 47 | pass 48 | -------------------------------------------------------------------------------- /scripts/FOOTSTEP.gd: -------------------------------------------------------------------------------- 1 | extends AnimatedSprite 2 | 3 | func _ready(): 4 | frame = 0 5 | connect("animation_finished", self, "on_animation_finished") 6 | 7 | func on_animation_finished(): 8 | queue_free() 9 | -------------------------------------------------------------------------------- /scripts/INTERACTABLE.gd: -------------------------------------------------------------------------------- 1 | extends StaticBody2D 2 | class_name INTERACTABLE 3 | 4 | var can_interact = true 5 | 6 | func _ready(): 7 | if !is_in_group("interactable"): 8 | add_to_group("interactable") 9 | $MODEL/Sprite.material.set_shader_param("width", 0.0) 10 | 11 | func toggle_select(toggle): 12 | if toggle and can_interact: 13 | $MODEL/AnimationPlayer.play("select") 14 | else: 15 | $MODEL/AnimationPlayer.stop() 16 | $MODEL/Sprite.material.set_shader_param("width", 0.0) 17 | 18 | func _interact(actor): 19 | pass 20 | 21 | 22 | -------------------------------------------------------------------------------- /scripts/ITEM.gd: -------------------------------------------------------------------------------- 1 | extends INTERACTABLE 2 | 3 | var item 4 | export(String) var item_name 5 | export(int) var item_quantity 6 | 7 | func _ready(): 8 | if item_name != null: 9 | item_data(GAMESTATE.item_db[item_name]) 10 | 11 | func item_data(data): 12 | item = data 13 | $MODEL/Sprite.texture = load("res://assets/textures/" + str(item.icon)) 14 | 15 | func _interact(actor): 16 | can_interact = false 17 | $MODEL/AnimationPlayer.play("despawn") 18 | GAMESTATE.emit_signal("on_item_pickup", self) 19 | GAMESTATE.emit_signal("on_world_state_changed", self) 20 | return true 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /scripts/MOB.gd: -------------------------------------------------------------------------------- 1 | extends ACTOR 2 | 3 | var movement_timeout = 1.5 4 | var movement = Vector2.ZERO 5 | 6 | func _ready(): 7 | if !is_in_group("mob"): 8 | add_to_group("mob") 9 | 10 | func _process(delta): 11 | movement_timeout -= delta 12 | if movement_timeout <= 0.0: 13 | movement = 2.0 * Vector2(randf() - 0.5, randf() - 0.5) * WALK_SPEED 14 | movement_timeout = 1.5 15 | 16 | movement = lerp(movement, Vector2.ZERO, 0.75 * delta) 17 | move_and_slide(movement + current_knockback) 18 | 19 | func _take_damage(actor): 20 | if is_dead: return 21 | health -= actor.DAMAGE 22 | $MODEL/AnimationPlayer.play("damage") 23 | $MODEL/FX/AnimationPlayer.play("hit") 24 | if health <= 0.0: 25 | $MODEL/AnimationPlayer.play("death") 26 | is_dead = true 27 | GAMESTATE.emit_signal("on_world_state_changed", self) 28 | -------------------------------------------------------------------------------- /scripts/PLAYER.gd: -------------------------------------------------------------------------------- 1 | extends ACTOR 2 | 3 | var can_move = true 4 | var direction_input = Vector2.ZERO 5 | 6 | func _ready(): 7 | if !is_in_group("player"): 8 | add_to_group("player") 9 | on_item_equip() 10 | $Camera2D.current = true 11 | GLOBALS.current_player = self 12 | $MODEL/AnimationTree.active = true 13 | GAMESTATE.connect("on_item_equip", self, "on_item_equip") 14 | GAMESTATE.connect("on_item_ingest", self, "on_item_ingest") 15 | $InteractSensor.connect("body_exited", self, "on_interact_body_exited") 16 | $InteractSensor.connect("body_entered", self, "on_interact_body_entered") 17 | 18 | func _process(delta): 19 | direction_input = Vector2.ZERO 20 | direction_input.x = int(Input.is_key_pressed(KEY_D)) - int(Input.is_key_pressed(KEY_A)) 21 | direction_input.y = int(Input.is_key_pressed(KEY_W)) - int(Input.is_key_pressed(KEY_S)) 22 | 23 | if direction_input != Vector2.ZERO: 24 | linear_velocity = lerp(linear_velocity, direction_input * WALK_SPEED, delta * 5.0) 25 | $MODEL/AnimationTree.set("parameters/state/current", 1) 26 | current_orientation = direction_input 27 | else: 28 | linear_velocity = lerp(linear_velocity, Vector2.ZERO, delta * FRICTION) 29 | $MODEL/AnimationTree.set("parameters/state/current", 0) 30 | 31 | $MODEL/AnimationTree.set("parameters/move/blend_position", current_orientation) 32 | $MODEL/AnimationTree.set("parameters/idle/blend_position", current_orientation) 33 | 34 | move_and_slide(linear_velocity + current_knockback) 35 | 36 | if Input.is_action_just_pressed("attack") and is_weapon_equipped(): 37 | if $MODEL/LEFTHAND.visible: 38 | var d = current_orientation * Vector2(2.0, 1.0) - Vector2(float($MODEL/LEFTHAND.visible), 0) 39 | $MODEL/AnimationTree.set("parameters/attack_bs/blend_position", d) 40 | if $MODEL/RIGHTHAND.visible: 41 | var d = current_orientation * Vector2(2.0, 1.0) + Vector2(float($MODEL/RIGHTHAND.visible), 0) 42 | $MODEL/AnimationTree.set("parameters/attack_bs/blend_position", d) 43 | $MODEL/AnimationTree.set("parameters/attack/active", true) 44 | if Input.is_action_just_pressed("interact"): 45 | for body in $InteractSensor.get_overlapping_bodies(): 46 | if body.is_in_group("interactable"): 47 | if body._interact(self): 48 | $MODEL/FX/AnimationPlayer.play("action") 49 | if Input.is_action_just_pressed("inventory"): 50 | GLOBALS.emit_signal("on_toggle_ui") 51 | 52 | func on_interact_body_entered(body): 53 | if body.is_in_group("interactable"): 54 | body.toggle_select(true) 55 | func on_interact_body_exited(body): 56 | if body.is_in_group("interactable"): 57 | body.toggle_select(false) 58 | 59 | func on_item_equip(): 60 | if GAMESTATE.left_hand_item_name == "Knife": 61 | if !$MODEL/LEFTHAND.visible: 62 | var d = current_orientation * Vector2(2.0, 1.0) - Vector2(float($MODEL/LEFTHAND.visible), 0) 63 | $MODEL/AnimationTree.set("parameters/attack_bs/blend_position", d) 64 | $MODEL/FX/AnimationPlayer.play("action") 65 | $MODEL/LEFTHAND.visible = true 66 | else: 67 | $MODEL/LEFTHAND.visible = false 68 | if GAMESTATE.right_hand_item_name == "Knife": 69 | if !$MODEL/RIGHTHAND.visible: 70 | var d = current_orientation * Vector2(2.0, 1.0) + Vector2(float($MODEL/RIGHTHAND.visible), 0) 71 | $MODEL/AnimationTree.set("parameters/attack_bs/blend_position", d) 72 | $MODEL/FX/AnimationPlayer.play("action") 73 | $MODEL/RIGHTHAND.visible = true 74 | else: 75 | $MODEL/RIGHTHAND.visible = false 76 | 77 | func is_weapon_equipped(): 78 | return $MODEL/LEFTHAND.visible or $MODEL/RIGHTHAND.visible 79 | 80 | func stop_control(): 81 | can_move = false 82 | 83 | func apply_damage(): 84 | can_move = true 85 | for body in $InteractSensor.get_overlapping_bodies(): 86 | if body.is_in_group("mob"): 87 | body.take_damage(self) 88 | 89 | func on_item_ingest(i): 90 | $MODEL/FX/AnimationPlayer.play("action") 91 | -------------------------------------------------------------------------------- /scripts/UI.gd: -------------------------------------------------------------------------------- 1 | extends CanvasLayer 2 | 3 | var selected_item 4 | 5 | func _ready(): 6 | GLOBALS.current_ui = self 7 | $INVENTORY.visible = false 8 | GLOBALS.connect("on_toggle_ui", self, "on_toggle_ui") 9 | GLOBALS.connect("on_refresh_ui", self, "on_refresh_ui") 10 | $INVENTORY/DESCRIPTION/ITEM.visible = false 11 | $STATS/INVENTORY.connect("pressed", self, "on_toggle_ui") 12 | $INVENTORY/CLOSE.connect("pressed", self, "on_toggle_ui") 13 | $INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE.visible = false 14 | $INVENTORY/DESCRIPTION/ITEM/BTNDROP.connect("pressed", self, "on_drop_item") 15 | $INVENTORY/DROP.connect("confirmed", self, "on_drop_confirmed") 16 | $INVENTORY/DROP/BODY/COUNT.connect("value_changed", self, "on_drop_count_changed") 17 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.connect("item_selected", self, "on_equip") 18 | $DELETE_SAVE.connect("pressed", self, "on_delete_save") 19 | on_refresh_ui() 20 | 21 | func on_toggle_ui(): 22 | $INVENTORY.visible = !$INVENTORY.visible 23 | 24 | func on_refresh_ui(): 25 | refresh_equip() 26 | reset_inventory() 27 | $STATS/HEALTH.value = GAMESTATE.health 28 | for item_name in GAMESTATE.inventory.keys(): 29 | var item = GAMESTATE.item_db[item_name] 30 | var quantity = GAMESTATE.inventory[item_name] 31 | var t = $INVENTORY/ScrollContainer/VBoxContainer/TEMPLATE.duplicate(true) 32 | t.name = item_name 33 | t.get_node("TOGGLE").visible = false 34 | t.get_node("NAME").text = str(item_name) 35 | t.get_node("PRICE").text = str(item.price) + "G" 36 | t.get_node("QTY").text = "x " + str(quantity) 37 | t.get_node("ICON").texture = load("res://assets/textures/" + str(item.icon)) 38 | t.connect("pressed", self, "on_select_item", [t, item_name, item, quantity]) 39 | $INVENTORY/ScrollContainer/VBoxContainer.add_child(t) 40 | t.visible = true 41 | 42 | func on_select_item(node, item_name, item, quantity): 43 | for n in $INVENTORY/ScrollContainer/VBoxContainer.get_children(): 44 | n.get_node("TOGGLE").visible = false 45 | selected_item = { 46 | item = item, 47 | quantity = quantity, 48 | item_name = item_name 49 | } 50 | node.get_node("TOGGLE").visible = true 51 | $INVENTORY/DESCRIPTION/ITEM.visible = true 52 | $INVENTORY/DESCRIPTION/EMPTY.visible = false 53 | $INVENTORY/DESCRIPTION/ITEM/NAME.text = str(item_name) 54 | $INVENTORY/DESCRIPTION/ITEM/PRICE.text = str(item.price) + "G" 55 | $INVENTORY/DESCRIPTION/ITEM/QTY.text = "x " + str(quantity) 56 | $INVENTORY/DESCRIPTION/ITEM/ICON.texture = load("res://assets/textures/" + str(item.icon)) 57 | $INVENTORY/DESCRIPTION/ITEM/DESCRIPTION.text = str(item.description) 58 | if GAMESTATE.left_hand_item_name == item_name: 59 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.select(1) 60 | elif GAMESTATE.left_hand_item_name == item_name: 61 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.select(2) 62 | else: 63 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.select(0) 64 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.set_item_disabled(1, item.type != GAMESTATE.ItemType.Equipable) 65 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.set_item_disabled(2, item.type != GAMESTATE.ItemType.Equipable) 66 | $INVENTORY/DESCRIPTION/ITEM/EQUIPPED.set_item_disabled(3, item.type != GAMESTATE.ItemType.Consumable) 67 | 68 | func on_drop_item(): 69 | $INVENTORY/DROP/BODY/COUNT.max_value = int(selected_item.quantity) 70 | $INVENTORY/DROP/BODY/COUNT.value = int(selected_item.quantity) 71 | $INVENTORY/DROP/BODY/COUNTTEXT.text = str($INVENTORY/DROP/BODY/COUNT.value) + "/" + str(selected_item.quantity) 72 | $INVENTORY/DROP.popup() 73 | 74 | func on_equip(index): 75 | match index: 76 | 0: 77 | if GAMESTATE.right_hand_item_name == selected_item.item_name: 78 | GAMESTATE.right_hand_item_name = null 79 | if GAMESTATE.left_hand_item_name == selected_item.item_name: 80 | GAMESTATE.left_hand_item_name = null 81 | 1: 82 | GAMESTATE.left_hand_item_name = selected_item.item_name 83 | if GAMESTATE.right_hand_item_name == selected_item.item_name: 84 | GAMESTATE.right_hand_item_name = null 85 | 2: 86 | GAMESTATE.right_hand_item_name = selected_item.item_name 87 | if GAMESTATE.left_hand_item_name == selected_item.item_name: 88 | GAMESTATE.left_hand_item_name = null 89 | 3: 90 | GAMESTATE.emit_signal("on_item_ingest", selected_item.item_name) 91 | refresh_equip() 92 | GAMESTATE.emit_signal("on_item_equip") 93 | 94 | func refresh_equip(): 95 | if GAMESTATE.left_hand_item_name != null: 96 | $ACTIONS/EQUIPLEFT.icon = load("res://assets/textures/" + GAMESTATE.item_db[GAMESTATE.left_hand_item_name].icon) 97 | else: 98 | $ACTIONS/EQUIPLEFT.icon = load("res://assets/textures/ui/ui_buttons1.png") 99 | if GAMESTATE.right_hand_item_name != null: 100 | $ACTIONS/EQUIPRIGHT.icon = load("res://assets/textures/" + GAMESTATE.item_db[GAMESTATE.right_hand_item_name].icon) 101 | else: 102 | $ACTIONS/EQUIPRIGHT.icon = load("res://assets/textures/ui/ui_buttons2.png") 103 | 104 | func on_drop_confirmed(): 105 | GAMESTATE.emit_signal("on_item_drop", selected_item.item_name, $INVENTORY/DROP/BODY/COUNT.value) 106 | 107 | func on_drop_count_changed(value): 108 | $INVENTORY/DROP/BODY/COUNTTEXT.text = str(value) + "/" + str(selected_item.quantity) 109 | 110 | func on_interact(): 111 | $INVENTORY.visible = false 112 | reset_inventory() 113 | 114 | func reset_inventory(): 115 | selected_item = null 116 | $INVENTORY/DESCRIPTION/EMPTY.visible = true 117 | $INVENTORY/DESCRIPTION/ITEM.visible = false 118 | for n in $INVENTORY/ScrollContainer/VBoxContainer.get_children(): 119 | if n.name != "TEMPLATE": 120 | n.name = UUID.NewID() 121 | n.visible = false 122 | n.queue_free() 123 | 124 | func on_delete_save(): 125 | GLOBALS.emit_signal("on_delete_save") 126 | -------------------------------------------------------------------------------- /scripts/WORLD.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | func _ready(): 4 | GLOBALS.current_world = self 5 | GAMESTATE.connect("on_item_drop", self, "on_item_drop") 6 | if GAMESTATE.world_state.has(name): 7 | for node_state in GAMESTATE.world_state[name]: 8 | match int(node_state.state): 9 | GAMESTATE.StateType.Removed: 10 | if $FRONT.has_node(node_state.name): 11 | $FRONT.get_node(node_state.name).queue_free() 12 | GAMESTATE.StateType.Added: 13 | if !$FRONT.has_node(node_state.name): 14 | var node = load("res://scenes/" + str(node_state.scene)).instance() 15 | node.position = Vector2(node_state.X, node_state.Y) 16 | node.rotation = node_state.R 17 | node.name = node_state.name 18 | for key in node_state.props.keys(): 19 | node.set(key, node_state.props[key]) 20 | $FRONT.add_child(node) 21 | 22 | func on_item_drop(item_name, item_quantity): 23 | var node = load("res://scenes/ITEM.tscn").instance() 24 | node.item_name = item_name 25 | node.item_quantity = item_quantity 26 | node.item_data(GAMESTATE.item_db[item_name]) 27 | node.global_position = GLOBALS.current_player.global_position 28 | $FRONT.add_child(node) 29 | GAMESTATE.emit_signal("on_world_state_changed", node, GAMESTATE.StateType.Added, "ITEM.tscn", { 30 | "item_name": item_name, 31 | "item_quantity": item_quantity 32 | }) 33 | -------------------------------------------------------------------------------- /scripts/autoload/GAMESTATE.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | var health = 50 4 | var inventory = {} 5 | var world_state = {} 6 | var left_hand_item_name 7 | var right_hand_item_name 8 | signal on_item_drop 9 | signal on_item_equip 10 | signal on_item_pickup 11 | signal on_item_ingest 12 | signal on_world_state_changed 13 | 14 | func _ready(): 15 | GLOBALS.connect("on_delete_save", self, "on_delete_save") 16 | connect("on_world_state_changed", self, "on_world_state_changed") 17 | connect("on_item_ingest", self, "on_item_ingest") 18 | connect("on_item_pickup", self, "on_item_pickup") 19 | connect("on_item_drop", self, "on_item_drop") 20 | var f = File.new() 21 | if f.open("user://save.json", File.READ) == 0: 22 | var state = JSON.parse(f.get_as_text()).result 23 | health = try_get_value(state, "health", health) 24 | inventory = try_get_value(state, "inventory", inventory) 25 | world_state = try_get_value(state, "world_state", world_state) 26 | left_hand_item_name = try_get_value(state, "left_hand_item_name", left_hand_item_name) 27 | right_hand_item_name = try_get_value(state, "right_hand_item_name", right_hand_item_name) 28 | f.close() 29 | 30 | func _exit_tree(): 31 | var f = File.new() 32 | if f.open("user://save.json", File.WRITE) == 0: 33 | f.store_string(JSON.print({ 34 | health = health, 35 | inventory = inventory, 36 | world_state = world_state, 37 | left_hand_item_name = left_hand_item_name, 38 | right_hand_item_name = right_hand_item_name 39 | })) 40 | f.close() 41 | 42 | func on_item_ingest(item_name): 43 | health = clamp(health + item_db[item_name].health, 0, 100) 44 | inventory[item_name] -= 1 45 | if inventory[item_name] < 1: 46 | inventory.erase(item_name) 47 | GLOBALS.emit_signal("on_refresh_ui") 48 | 49 | func on_item_pickup(item): 50 | if inventory.has(item.item_name): 51 | inventory[item.item_name] += item.item_quantity 52 | else: 53 | inventory[item.item_name] = item.item_quantity 54 | GLOBALS.emit_signal("on_refresh_ui") 55 | 56 | func on_item_drop(item_name, item_quantity): 57 | if inventory.has(item_name): 58 | if inventory[item_name] <= item_quantity: 59 | inventory.erase(item_name) 60 | if left_hand_item_name == item_name: 61 | left_hand_item_name = null 62 | if right_hand_item_name == item_name: 63 | right_hand_item_name = null 64 | else: 65 | inventory[item_name] -= item_quantity 66 | GLOBALS.current_player.some_method() 67 | GLOBALS.current_ui.some_method() 68 | GLOBALS.emit_signal("on_refresh_ui") 69 | 70 | func on_world_state_changed(node, state_type = StateType.Removed, scene = null, properties = []): 71 | if !world_state.has(GLOBALS.current_world.name): 72 | world_state[GLOBALS.current_world.name] = [] 73 | world_state[GLOBALS.current_world.name].push_back({ 74 | scene = scene, 75 | X = node.global_position.x, 76 | Y = node.global_position.y, 77 | R = node.rotation, 78 | name = node.name, 79 | state = state_type, 80 | props = properties 81 | }) 82 | 83 | func try_get_value(source, key, val): 84 | if source.has(key): 85 | return source[key] 86 | return val 87 | 88 | func on_delete_save(): 89 | health = 50 90 | inventory = {} 91 | world_state = {} 92 | left_hand_item_name = null 93 | right_hand_item_name = null 94 | var dir = Directory.new() 95 | dir.remove("user://save.json") 96 | get_tree().reload_current_scene() 97 | 98 | enum StateType { 99 | Removed = 0, 100 | Added = 1 101 | } 102 | 103 | enum ItemType { 104 | Consumable, 105 | Equipable 106 | } 107 | 108 | var item_db = { 109 | "Knife": { 110 | type = ItemType.Equipable, 111 | icon = "items_knife.png", 112 | sprite = "item_knife.png", 113 | description = "Stab to deal 25 damage", 114 | damage = 25, 115 | price = 10 116 | }, 117 | "Eyefruit": { 118 | type = ItemType.Consumable, 119 | icon = "items_eyefruit.png", 120 | description = "Delicious eye fruit", 121 | health = 50, 122 | price = 5 123 | } 124 | } 125 | 126 | -------------------------------------------------------------------------------- /scripts/autoload/GLOBALS.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | var current_ui 4 | var current_world 5 | var current_player 6 | 7 | signal on_toggle_ui 8 | signal on_refresh_ui 9 | signal on_delete_save 10 | 11 | -------------------------------------------------------------------------------- /scripts/autoload/UUID.gd: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2018 Xavier Sellier 3 | # MIT License 4 | extends Node 5 | 6 | static func getRandomInt(max_value): 7 | randomize() 8 | return randi() % max_value 9 | 10 | static func randomBytes(n): 11 | var r = [] 12 | 13 | for index in range(0, n): 14 | r.append(getRandomInt(256)) 15 | 16 | return r 17 | 18 | static func uuidbin(): 19 | var b = randomBytes(16) 20 | 21 | b[6] = (b[6] & 0x0f) | 0x40 22 | b[8] = (b[8] & 0x3f) | 0x80 23 | return b 24 | 25 | static func NewID() -> String: 26 | var b = uuidbin() 27 | 28 | var low = '%02x%02x%02x%02x' % [b[0], b[1], b[2], b[3]] 29 | var mid = '%02x%02x' % [b[4], b[5]] 30 | var hi = '%02x%02x' % [b[6], b[7]] 31 | var clock = '%02x%02x' % [b[8], b[9]] 32 | var node = '%02x%02x%02x%02x%02x%02x' % [b[10], b[11], b[12], b[13], b[14], b[15]] 33 | 34 | return '%s%s%s%s%s' % [low, mid, hi, clock, node] 35 | --------------------------------------------------------------------------------