Revert "Empty"

This reverts commit b98fdd0f29.
This commit is contained in:
2025-05-01 19:08:20 -05:00
parent b98fdd0f29
commit dd5ba6f414
137 changed files with 2021 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,38 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c5lyv50f7ls0i"
path="res://.godot/imported/SomeMap.fbx-15dd74d7349e33000020feacb745f7b7.scn"
[deps]
source_file="res://models/maps/SomeMap/SomeMap.fbx"
dest_files=["res://.godot/imported/SomeMap.fbx-15dd74d7349e33000020feacb745f7b7.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=true
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
fbx/importer=0
fbx/allow_geometry_helper_nodes=false
fbx/embedded_image_handling=1

View File

@@ -0,0 +1,28 @@
[gd_scene load_steps=7 format=3 uid="uid://mr2ako4ox2gq"]
[ext_resource type="PackedScene" uid="uid://c5lyv50f7ls0i" path="res://models/maps/SomeMap/SomeMap.fbx" id="1_wkoy2"]
[ext_resource type="Shader" uid="uid://67hsyo0qqlfm" path="res://shaders/Map Shader.gdshader" id="2_m72sx"]
[ext_resource type="Texture2D" uid="uid://dgatj2jnpxojb" path="res://textures/tilesets/magecity.png" id="3_obl1d"]
[ext_resource type="PackedScene" uid="uid://cy4r0tp2htivb" path="res://scenes/MapBounds.tscn" id="4_y4q77"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_i805s"]
render_priority = 0
shader = ExtResource("2_m72sx")
shader_parameter/tileset = ExtResource("3_obl1d")
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_iqvxq"]
data = PackedVector3Array(0.01, 0.01, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0.01, 0.01, 0, 0, 0, 0, 0, -0.01, 0, -0.01, -0.01, 0, -0.01, -0.01, 0, -0.01, 0, 0, 0, 0, 0, 0.01, 0, 0, 0.01, -0.01, 0, 0, -0.01, 0, 0, -0.01, 0, 0, 0, 0, 0.01, 0, 0, 0, 0.01, 0, 0, 0, 0, -0.01, 0, 0, -0.01, 0, 0, -0.01, 0.01, 0, 0, 0.01, 0, -0.01, 0.01, 0, -0.01, 0, 0, -0.02, 0, 0, -0.02, 0, 0, -0.02, 0.01, 0, -0.01, 0.01, 0, -0.01, 0, 0, -0.01, -0.01, 0, -0.02, -0.01, 0, -0.02, -0.01, 0, -0.02, 0, 0, -0.01, 0, 0, -0.01, -0.01, 0, -0.01, -0.02, 0, -0.02, -0.02, 0, -0.02, -0.02, 0, -0.02, -0.01, 0, -0.01, -0.01, 0, 0, -0.01, 0, 0, -0.02, 0, -0.01, -0.02, 0, -0.01, -0.02, 0, -0.01, -0.01, 0, 0, -0.01, 0, 0.01, -0.01, 0, 0.01, -0.02, 0, 0, -0.02, 0, 0, -0.02, 0, 0, -0.01, 0, 0.01, -0.01, 0, 0.02, -0.01, 0, 0.02, -0.02, 0, 0.01, -0.02, 0, 0.01, -0.02, 0, 0.01, -0.01, 0, 0.02, -0.01, 0, 0.02, 0, 0, 0.02, -0.01, 0, 0.01, -0.01, 0, 0.01, -0.01, 0, 0.01, 0, 0, 0.02, 0, 0, 0.02, 0.01, 0, 0.02, 0, 0, 0.01, 0, 0, 0.01, 0, 0, 0.01, 0.01, 0, 0.02, 0.01, 0, 0.02, 0.02, 0, 0.02, 0.01, 0, 0.01, 0.01, 0, 0.01, 0.01, 0, 0.01, 0.02, 0, 0.02, 0.02, 0, 0.01, 0.02, 0, 0.01, 0.01, 0, 0, 0.01, 0, 0, 0.01, 0, 0, 0.02, 0, 0.01, 0.02, 0, 0, 0.02, 0, 0, 0.01, 0, -0.01, 0.01, 0, -0.01, 0.01, 0, -0.01, 0.02, 0, 0, 0.02, 0, -0.01, 0.02, 0, -0.01, 0.01, 0, -0.02, 0.01, 0, -0.02, 0.01, 0, -0.02, 0.02, 0, -0.01, 0.02, 0, -0.02, 0.02, 0, -0.02, 0.01, 0, -0.03, 0.01, 0, -0.03, 0.01, 0, -0.03, 0.02, 0, -0.02, 0.02, 0, -0.02, 0.01, 0, -0.02, 0, 0, -0.03, 0, 0, -0.03, 0, 0, -0.03, 0.01, 0, -0.02, 0.01, 0, -0.02, 0, 0, -0.02, -0.01, 0, -0.03, -0.01, 0, -0.03, -0.01, 0, -0.03, 0, 0, -0.02, 0, 0, -0.02, -0.01, 0, -0.02, -0.02, 0, -0.03, -0.02, 0, -0.03, -0.02, 0, -0.03, -0.01, 0, -0.02, -0.01, 0, -0.02, -0.02, 0, -0.02, -0.03, 0, -0.03, -0.03, 0, -0.03, -0.03, 0, -0.03, -0.02, 0, -0.02, -0.02, 0, -0.01, -0.02, 0, -0.01, -0.03, 0, -0.02, -0.03, 0, -0.02, -0.03, 0, -0.02, -0.02, 0, -0.01, -0.02, 0, 0, -0.02, 0, 0, -0.03, 0, -0.01, -0.03, 0, -0.01, -0.03, 0, -0.01, -0.02, 0, 0, -0.02, 0, 0.01, -0.02, 0, 0.01, -0.03, 0, 0, -0.03, 0, 0, -0.03, 0, 0, -0.02, 0, 0.01, -0.02, 0, 0.02, -0.02, 0, 0.02, -0.03, 0, 0.01, -0.03, 0, 0.01, -0.03, 0, 0.01, -0.02, 0, 0.02, -0.02, 0, 0.03, -0.02, 0, 0.03, -0.03, 0, 0.02, -0.03, 0, 0.02, -0.03, 0, 0.02, -0.02, 0, 0.03, -0.02, 0, 0.03, -0.01, 0, 0.03, -0.02, 0, 0.02, -0.02, 0, 0.02, -0.02, 0, 0.02, -0.01, 0, 0.03, -0.01, 0, 0.03, 0, 0, 0.03, -0.01, 0, 0.02, -0.01, 0, 0.02, -0.01, 0, 0.02, 0, 0, 0.03, 0, 0, 0.03, 0.01, 0, 0.03, 0, 0, 0.02, 0, 0, 0.02, 0, 0, 0.02, 0.01, 0, 0.03, 0.01, 0, 0.03, 0.02, 0, 0.03, 0.01, 0, 0.02, 0.01, 0, 0.02, 0.01, 0, 0.02, 0.02, 0, 0.03, 0.02, 0, 0.03, 0.03, 0, 0.03, 0.02, 0, 0.02, 0.02, 0, 0.02, 0.02, 0, 0.02, 0.03, 0, 0.03, 0.03, 0, 0.02, 0.03, 0, 0.02, 0.02, 0, 0.01, 0.02, 0, 0.01, 0.02, 0, 0.01, 0.03, 0, 0.02, 0.03, 0, 0.01, 0.03, 0, 0.01, 0.02, 0, 0, 0.02, 0, 0, 0.02, 0, 0, 0.03, 0, 0.01, 0.03, 0, 0, 0.03, 0, 0, 0.02, 0, -0.01, 0.02, 0, -0.01, 0.02, 0, -0.01, 0.03, 0, 0, 0.03, 0, -0.01, 0.03, 0, -0.01, 0.02, 0, -0.02, 0.02, 0, -0.02, 0.02, 0, -0.02, 0.03, 0, -0.01, 0.03, 0, -0.02, 0.03, 0, -0.02, 0.02, 0, -0.03, 0.02, 0, -0.03, 0.02, 0, -0.03, 0.03, 0, -0.02, 0.03, 0)
[node name="SomeMapModel" instance=ExtResource("1_wkoy2")]
[node name="Cube" parent="." index="0"]
surface_material_override/0 = SubResource("ShaderMaterial_i805s")
[node name="StaticBody3D" type="StaticBody3D" parent="." index="1"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="0"]
transform = Transform3D(100, 0, 0, 0, 0, 100, 0, -100, 0, 0, 0, 0)
shape = SubResource("ConcavePolygonShape3D_iqvxq")
[node name="MapBounds" parent="." index="2" instance=ExtResource("4_y4q77")]
transform = Transform3D(6.40417, 0, 0, 0, 4.52981, 0, 0, 0, 6.17046, 0.0595146, 2.14979, 0.0393701)

Binary file not shown.

Binary file not shown.

BIN
models/maps/test.blend Normal file

Binary file not shown.

View File

@@ -0,0 +1,51 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://c7g5kc0m1uhxa"
path="res://.godot/imported/test.blend-c501d2978761adab01d4cc9b69942fee.scn"
[deps]
source_file="res://models/test.blend"
dest_files=["res://.godot/imported/test.blend-c501d2978761adab01d4cc9b69942fee.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true

BIN
models/test.blend1 Normal file

Binary file not shown.

View File

@@ -0,0 +1,15 @@
[gd_scene load_steps=3 format=3 uid="uid://bix00kr2hkaxn"]
[ext_resource type="Script" uid="uid://kwnx0enmgk54" path="res://scripts/Scenes/CuttingScene.gd" id="1_2ls7x"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_hck4v"]
[node name="CuttingScene" type="Node3D"]
script = ExtResource("1_2ls7x")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(0.504528, 0.295299, -0.811326, 0, 0.939693, 0.34202, 0.863396, -0.172559, 0.474101, -1.50615, 0.608966, 0.933182)
fov = 35.4
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("CapsuleMesh_hck4v")

36
scenes/Entities/Rosa.tscn Normal file
View File

@@ -0,0 +1,36 @@
[gd_scene load_steps=8 format=3 uid="uid://yhtpoum3eek7"]
[ext_resource type="Script" uid="uid://ixwikdguyhf0" path="res://scripts/Entities/RosaController.gd" id="1_3g383"]
[ext_resource type="Script" uid="uid://jd50n00bo05y" path="res://scripts/Entities/RosaCamera.gd" id="2_tr66j"]
[ext_resource type="Shader" uid="uid://7h2axb2tsh17" path="res://shaders/NPC Shader.gdshader" id="3_j5vis"]
[ext_resource type="Texture2D" uid="uid://b8ac5emade2y0" path="res://textures/characters/base_female.png" id="4_1ec0m"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ls7r8"]
radius = 0.331611
height = 0.804274
[sub_resource type="QuadMesh" id="QuadMesh_dyaax"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fegux"]
render_priority = 0
shader = ExtResource("3_j5vis")
shader_parameter/npcTexture = ExtResource("4_1ec0m")
shader_parameter/frame = 0
shader_parameter/direction = 1
[node name="Rosa" type="CharacterBody3D"]
script = ExtResource("1_3g383")
[node name="Rosa Camera" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.130388, 0.991463, 0, -0.991463, 0.130388, 0, 3.14994, 0.404846)
fov = 30.0
script = ExtResource("2_tr66j")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.126485)
shape = SubResource("CapsuleShape3D_ls7r8")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.173648, 0.984808, 0, -0.984808, 0.173648, 0.00989294, 0, 0)
mesh = SubResource("QuadMesh_dyaax")
surface_material_override/0 = SubResource("ShaderMaterial_fegux")

View File

@@ -0,0 +1,32 @@
[gd_scene load_steps=8 format=3 uid="uid://dr4b2pmsknuhc"]
[ext_resource type="Script" uid="uid://d23qg1ovkbxst" path="res://scripts/Entities/BasicNPCEntity.gd" id="1_1muh7"]
[ext_resource type="Shader" uid="uid://7h2axb2tsh17" path="res://shaders/NPC Shader.gdshader" id="1_xgcv1"]
[ext_resource type="Script" uid="uid://btxgv85qst1jy" path="res://scripts/Cutscene/TestCutscene.gd" id="2_jwvuu"]
[ext_resource type="Texture2D" uid="uid://boa4hvwyoslv0" path="res://textures/characters/base_male.png" id="3_20w6p"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_dw1sy"]
radius = 0.331611
height = 0.804274
[sub_resource type="QuadMesh" id="QuadMesh_xhkdv"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_l4utx"]
render_priority = 0
shader = ExtResource("1_xgcv1")
shader_parameter/npcTexture = ExtResource("3_20w6p")
shader_parameter/frame = 0
shader_parameter/direction = 1
[node name="TestNpc" type="CharacterBody3D"]
script = ExtResource("1_1muh7")
interactCutscene = ExtResource("2_jwvuu")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.126485)
shape = SubResource("CapsuleShape3D_dw1sy")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.173648, 0.984808, 0, -0.984808, 0.173648, 0.00989294, 0, 0)
mesh = SubResource("QuadMesh_xhkdv")
surface_material_override/0 = SubResource("ShaderMaterial_l4utx")

3
scenes/MainMenu.tscn Normal file
View File

@@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://w1q5eoiejmy3"]
[node name="MainMenu" type="Node3D"]

14
scenes/MapBounds.tscn Normal file
View File

@@ -0,0 +1,14 @@
[gd_scene load_steps=3 format=3 uid="uid://cy4r0tp2htivb"]
[ext_resource type="Script" uid="uid://dbah1pmk8jola" path="res://scripts/MapBounds.gd" id="1_43dqt"]
[sub_resource type="BoxShape3D" id="BoxShape3D_ep4u2"]
[node name="MapBounds" type="Area3D"]
script = ExtResource("1_43dqt")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_ep4u2")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"]

41
scenes/Maps/SomeMap.tscn Normal file
View File

@@ -0,0 +1,41 @@
[gd_scene load_steps=7 format=3 uid="uid://dx6fv8n4jl5ku"]
[ext_resource type="PackedScene" uid="uid://mr2ako4ox2gq" path="res://models/maps/SomeMap/SomeMapModel.tscn" id="1_sbtr5"]
[ext_resource type="PackedScene" uid="uid://yhtpoum3eek7" path="res://scenes/Entities/Rosa.tscn" id="2_2h4bv"]
[ext_resource type="PackedScene" uid="uid://dr4b2pmsknuhc" path="res://scenes/Entities/TestNPC.tscn" id="3_q0pj2"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_e1h75"]
sky_horizon_color = Color(0.59625, 0.6135, 0.6375, 1)
sky_energy_multiplier = 0.0
ground_bottom_color = Color(0, 0, 0, 1)
ground_horizon_color = Color(0.59625, 0.6135, 0.6375, 1)
[sub_resource type="Sky" id="Sky_weucl"]
sky_material = SubResource("ProceduralSkyMaterial_e1h75")
[sub_resource type="Environment" id="Environment_nyivo"]
sky = SubResource("Sky_weucl")
ambient_light_source = 1
[node name="Some-map" type="Node3D"]
[node name="some map" parent="." instance=ExtResource("1_sbtr5")]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_nyivo")
[node name="Rosa" parent="." instance=ExtResource("2_2h4bv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.19857, 0.684572, 0.968477)
[node name="TestNpc" parent="." instance=ExtResource("3_q0pj2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.68747, 0.459578, -0.399262)
interactType = 1
moveType = 1
direction = 1
[node name="OmniLight3D" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.28892, 0)
light_energy = 3.375
shadow_bias = 0.0
shadow_normal_bias = 0.9
omni_range = 281.646

9
scenes/Meta/Cooking.tscn Normal file
View File

@@ -0,0 +1,9 @@
[gd_scene load_steps=3 format=3 uid="uid://b4ffu88bmt4sa"]
[ext_resource type="Script" uid="uid://ckxjs4wty6sju" path="res://scripts/Scenes/CookingScene.gd" id="1_27bmi"]
[ext_resource type="PackedScene" uid="uid://bix00kr2hkaxn" path="res://scenes/Cooking/CuttingScene.tscn" id="1_bokpl"]
[node name="Cooking" type="Node3D"]
script = ExtResource("1_27bmi")
[node name="CuttingScene" parent="." instance=ExtResource("1_bokpl")]

View File

@@ -0,0 +1,9 @@
[gd_scene load_steps=3 format=3 uid="uid://tmbx2kit0jyq"]
[ext_resource type="Script" uid="uid://pcncoc6wum4q" path="res://scripts/Scenes/OverworldScene.gd" id="1_yv6j0"]
[ext_resource type="PackedScene" uid="uid://dx6fv8n4jl5ku" path="res://scenes/Maps/SomeMap.tscn" id="4_8dvtu"]
[node name="Overworld" type="Node3D"]
script = ExtResource("1_yv6j0")
[node name="Some-map" parent="." instance=ExtResource("4_8dvtu")]

View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://tanovye003t2"]
[ext_resource type="Script" uid="uid://cj4jxqpykhteg" path="res://scripts/Scenes/RootScene.gd" id="1_xu06r"]
[ext_resource type="PackedScene" uid="uid://iibqlagufwhm" path="res://scenes/Meta/Systems.tscn" id="2_et43v"]
[ext_resource type="PackedScene" uid="uid://dfwwtbs3ywcyq" path="res://scenes/Meta/UI.tscn" id="3_fwr0j"]
[node name="RootScene" type="Node3D"]
script = ExtResource("1_xu06r")
[node name="Systems" parent="." instance=ExtResource("2_et43v")]
[node name="UI" parent="." instance=ExtResource("3_fwr0j")]

38
scenes/Meta/Systems.tscn Normal file
View File

@@ -0,0 +1,38 @@
[gd_scene load_steps=10 format=3 uid="uid://iibqlagufwhm"]
[ext_resource type="Script" uid="uid://cj8athi16655p" path="res://scripts/System/Systems.gd" id="1_uen2c"]
[ext_resource type="Script" uid="uid://d2b7r3t5ownc5" path="res://scripts/System/CutsceneSystem.gd" id="2_sf62c"]
[ext_resource type="Script" uid="uid://bc4c4eqfrnegb" path="res://scripts/System/ItemSystem.gd" id="3_nwp6i"]
[ext_resource type="Script" uid="uid://dnlg1e8une55l" path="res://scripts/System/QuestSystem.gd" id="4_d00wi"]
[ext_resource type="Script" uid="uid://chux5imw4pse6" path="res://scripts/System/VNSystem.gd" id="5_22p3i"]
[ext_resource type="Script" uid="uid://bontk8ex2kxkb" path="res://scripts/System/PauseSystem.gd" id="6_hdi8m"]
[ext_resource type="Script" uid="uid://mr6i8copcn37" path="res://scripts/System/BattleSystem.gd" id="7_miqgj"]
[ext_resource type="Script" uid="uid://drcaiuyla2psa" path="res://scripts/System/CookingSystem.gd" id="7_nou1j"]
[ext_resource type="Script" uid="uid://bbd8gcx6byjhf" path="res://scripts/System/SceneSystem.gd" id="9_budbk"]
[node name="Systems" type="Node"]
script = ExtResource("1_uen2c")
[node name="Cutscene" type="Node" parent="."]
script = ExtResource("2_sf62c")
[node name="Item" type="Node" parent="."]
script = ExtResource("3_nwp6i")
[node name="Quest" type="Node" parent="."]
script = ExtResource("4_d00wi")
[node name="VN" type="Node" parent="."]
script = ExtResource("5_22p3i")
[node name="Pause" type="Node" parent="."]
script = ExtResource("6_hdi8m")
[node name="Cooking" type="Node" parent="."]
script = ExtResource("7_nou1j")
[node name="Battle" type="Node" parent="."]
script = ExtResource("7_miqgj")
[node name="Scene" type="Node" parent="."]
script = ExtResource("9_budbk")

20
scenes/Meta/UI.tscn Normal file
View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=4 format=3 uid="uid://dfwwtbs3ywcyq"]
[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://ui/UI Theme.tres" id="1_3b1y4"]
[ext_resource type="Script" uid="uid://vjr7s045ri4a" path="res://scripts/Scenes/UIScene.gd" id="2_5efuf"]
[ext_resource type="PackedScene" uid="uid://bkx3l0kckf4a8" path="res://scenes/UI/VNTextbox.tscn" id="2_x0c4l"]
[node name="UI" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_3b1y4")
script = ExtResource("2_5efuf")
[node name="VNTextbox" parent="." instance=ExtResource("2_x0c4l")]
visible = false
layout_mode = 1
offset_top = -133.0

42
scenes/UI/PauseMenu.tscn Normal file
View File

@@ -0,0 +1,42 @@
[gd_scene load_steps=2 format=3 uid="uid://cqr1fgxwv0bjg"]
[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://ui/UI Theme.tres" id="1_jnmec"]
[node name="PauseMenu" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_jnmec")
[node name="HSplitContainer" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_jnmec")
[node name="Panel2" type="PanelContainer" parent="HSplitContainer"]
layout_mode = 2
size_flags_vertical = 3
theme = ExtResource("1_jnmec")
[node name="VSplitContainer" type="VBoxContainer" parent="HSplitContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme = ExtResource("1_jnmec")
[node name="Panel" type="PanelContainer" parent="HSplitContainer/VSplitContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme = ExtResource("1_jnmec")
[node name="Panel2" type="PanelContainer" parent="HSplitContainer/VSplitContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme = ExtResource("1_jnmec")

28
scenes/UI/VNTextbox.tscn Normal file
View File

@@ -0,0 +1,28 @@
[gd_scene load_steps=3 format=3 uid="uid://bkx3l0kckf4a8"]
[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://ui/UI Theme.tres" id="1_wx4lp"]
[ext_resource type="Script" uid="uid://ck62jug2gl4wk" path="res://scripts/UI/VNTextbox.gd" id="2_uo1gm"]
[node name="VNTextbox" type="PanelContainer"]
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -140.0
grow_horizontal = 2
grow_vertical = 0
theme = ExtResource("1_wx4lp")
script = ExtResource("2_uo1gm")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
theme = ExtResource("1_wx4lp")
[node name="Label" type="RichTextLabel" parent="MarginContainer"]
layout_mode = 2
theme = ExtResource("1_wx4lp")
bbcode_enabled = true
text = "test
test
test
test"

48
scripts/Battle/Battle.gd Normal file
View File

@@ -0,0 +1,48 @@
class_name Battle
const BattleFighter = preload("res://scripts/Battle/BattleFighter.gd");
enum FighterPosition {
LEFT_TOP = 0,
LEFT_CENTER = 1,
LEFT_BOTTOM = 2,
CENTER_TOP = 3,
CENTER_CENTER = 4,
CENTER_BOTTOM = 5,
RIGHT_TOP = 6,
RIGHT_CENTER = 7,
RIGHT_BOTTOM = 8,
ENEMY_DEFAULT = LEFT_CENTER,
PLAYER_DEFAULT = RIGHT_CENTER,
};
var fighters:Array = [];
func addFighter(fighter:BattleFighter, position:FighterPosition):
if fighters.has(position):
push_error("Fighter already exists at position");
return
fighters[position] = fighter;
func moveFighter(fighter:BattleFighter, position:FighterPosition):
if fighters.has(position):
push_error("Fighter already exists at position");
return
if not fighters.has(fighter):
push_error("Fighter does not exist");
return
removeFighter(fighter);
addFighter(fighter, position);
func getFightersOfTeam(team:BattleFighter.BattleFighterTeam):
var result = [];
for fighter in fighters:
if fighter.team != team:
continue
result.append(fighter);
return result;
func removeFighter(fighter:BattleFighter):
fighters.erase(fighter);

View File

@@ -0,0 +1 @@
uid://kwijyojokkpm

View File

@@ -0,0 +1,10 @@
class_name BattleFighter
enum BattleFighterTeam {
PLAYER,
ENEMY
};
var team:BattleFighterTeam;
var health:int = 100;
var maxHealth:int = 100;

View File

@@ -0,0 +1 @@
uid://daksbecm02l3t

View File

@@ -0,0 +1,7 @@
class_name CookingGame
const VerticalSlice = preload("res://scripts/Cooking/Recipe/VerticalSlice.gd");
var recipe:CookingRecipe = null;
func _init(recipe:CookingRecipe) -> void:
self.recipe = recipe;

View File

@@ -0,0 +1 @@
uid://nsqcafdni4vc

View File

@@ -0,0 +1,8 @@
class_name CookingRecipe
const ItemStack = preload("res://scripts/Item/ItemStack.gd")
func _init() -> void:
pass
func getIngredients() -> Array[ItemStack]:
return []

View File

@@ -0,0 +1 @@
uid://bqnancnrbmk5n

View File

@@ -0,0 +1,10 @@
class_name VerticalSlice extends "res://scripts/Cooking/Recipe/CookingRecipe.gd"
const ItemSystem = preload("res://scripts/System/ItemSystem.gd")
func _init() -> void:
super._init();
func getIngredients() -> Array[ItemStack]:
return [
ItemStack.new(ItemSystem.ITEM_POTION, 1)
];

View File

@@ -0,0 +1 @@
uid://c2x1lbdtbtd00

View File

@@ -0,0 +1,11 @@
class_name BattleStartEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var battle:Battle;
func _init(battle:Battle):
super._init();
self.battle = battle;
func start() -> void:
super.start();
getSystems().BATTLE.startBattle(self.battle);

View File

@@ -0,0 +1 @@
uid://e3ybjhvx0u1j

View File

@@ -0,0 +1,11 @@
class_name CookingStartEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
const CookingGame = preload("res://scripts/Cooking/CookingGame.gd");
var cook:CookingGame;
func _init(cook:CookingGame) -> void:
self.cook = cook;
func start() -> void:
getSystems().COOKING.setCookingGame(self.cook);
getSystems().SCENE.setScene(SceneSystem.DawnScene.COOKING);

View File

@@ -0,0 +1 @@
uid://cvgjwamgxd47o

View File

@@ -0,0 +1,42 @@
class_name Cutscene
const CutsceneEvent = preload("res://scripts/Cutscene/CutsceneEvent.gd");
var queue:Array[CutsceneEvent] = [];
var cutsceneSystem = null;
func setupCutscene() -> void:
print_debug("Cutscene setup has not been overriden");
pass
func update(delta:float) -> void:
if queue.size() == 0:
return
var item = queue[0]
if !item.started:
item.start()
item.started = true
item.update(delta)
if item.isDone():
item.end()
queue.erase(item)
pass
func add(items:Array[CutsceneEvent]) -> void:
for item in items:
item.cutscene = self
queue.append(item)
func clear() -> void:
if queue.size() == 0:
return
var item = queue[0]
if item.started:
item.end()
item.started = false
queue.clear()

View File

@@ -0,0 +1 @@
uid://dyjbgcpycptxj

View File

@@ -0,0 +1,32 @@
class_name CutsceneEvent
const Systems = preload("res://scripts/System/Systems.gd")
var started:bool = false;
var cutscene = null;
func _init() -> void:
pass
func start() -> void:
started = true
func update(delta:float) -> void:
pass
func isDone() -> bool:
return true
func end() -> void:
pass
func reset() -> void:
started = false
func getCutscene():
return cutscene
func getCutsceneSystem():
return cutscene.cutsceneSystem;
func getSystems() -> Systems:
return getCutsceneSystem().get_node("..") as Systems;

View File

@@ -0,0 +1 @@
uid://chb6031ke0xeg

View File

@@ -0,0 +1,17 @@
class_name CutsceneChangeEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var getCutscene:Callable
var cutsceneNext:Cutscene
func _init(getCutscene:Callable) -> void:
super._init();
self.getCutscene = getCutscene;
func start() -> void:
super.start();
self.cutsceneNext = self.getCutscene.call(self);
func end() -> void:
self.cutsceneNext.setupCutscene();
self.cutsceneNext.start();
getSystems().CUTSCENE.setCurrentCutscene(self.cutsceneNext);

View File

@@ -0,0 +1 @@
uid://crnwlun27bocw

View File

@@ -0,0 +1,73 @@
class_name CutsceneConcurrentEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
enum ConcurrentType {
SEQUENTIAL,
PARALLEL,
FIRST_DONE
}
var events:Array[CutsceneEvent] = []
var type:ConcurrentType = ConcurrentType.SEQUENTIAL
var current:int = 0
func _init(t:ConcurrentType, evts:Array[CutsceneEvent]) -> void:
super._init();
self.events = evts;
self.type = t;
func update(delta:float) -> void:
if self.type == ConcurrentType.PARALLEL:
for event in self.events:
if !event.started:
event.start()
event.started = true
if !event.isDone():
event.update(delta)
if event.isDone():
event.end()
elif self.type == ConcurrentType.FIRST_DONE:
for event in self.events:
if !event.started:
event.start()
event.started = true
event.update(delta)
if event.isDone():
event.end()
break
elif self.type == ConcurrentType.SEQUENTIAL:
if self.current >= self.events.size():
return;
var evt = self.events[self.current]
if !evt.started:
evt.start()
evt.started = true
evt.update(delta)
if evt.isDone():
evt.end()
self.current += 1
func isDone() -> bool:
if self.type == ConcurrentType.SEQUENTIAL:
return self.current >= self.events.size();
elif self.type == ConcurrentType.PARALLEL:
for evt in self.events:
if !evt.isDone():
return false;
return true;
elif self.type == ConcurrentType.FIRST_DONE:
for evt in self.events:
if evt.isDone():
return true;
return false;
printerr("Invalid ConcurrentType")
return false;

View File

@@ -0,0 +1 @@
uid://bwait88cm8pvd

View File

@@ -0,0 +1,32 @@
class_name CutsceneIfEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var eventTrue:CutsceneEvent
var eventFalse:CutsceneEvent
var condition:Callable
var result:bool = false
func _init(cond:Callable, evtTrue:CutsceneEvent, evtFalse:CutsceneEvent) -> void:
super._init();
condition = cond;
eventTrue = evtTrue;
eventFalse = evtFalse;
func start() -> void:
super.start();
result = self.condition.call(self);
if result:
eventTrue.start();
else:
eventFalse.start();
func getEvent() -> CutsceneEvent:
if result:
return eventTrue;
return eventFalse;
func update(delta:float) -> void:
getEvent().update(delta);
func isDone() -> bool:
return getEvent().isDone();

View File

@@ -0,0 +1 @@
uid://2txg4eswrh0q

View File

@@ -0,0 +1,16 @@
class_name CutscenePauseEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
const PauseSystem = preload("res://scripts/System/PauseSystem.gd")
var pauseType:PauseSystem.PauseType;
var pauseEntities:Array = [];
func _init(
type:PauseSystem.PauseType,
entities:Array = [],
) -> void:
super._init();
self.pauseType = type;
self.pauseEntities = entities;
func start() -> void:
getSystems().PAUSE.pause(self.pauseType, self.pauseEntities);

View File

@@ -0,0 +1 @@
uid://dj1kkm2vvvr2d

View File

@@ -0,0 +1,10 @@
class_name CutscenePrintEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var text:String = ""
func _init(text:String) -> void:
super._init()
self.text = text
func start() -> void:
print(self.text)

View File

@@ -0,0 +1 @@
uid://cknkpwqllg7nc

View File

@@ -0,0 +1,13 @@
class_name CutsceneWaitEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var wait:float = 0.0
func _init(time:float) -> void:
super._init()
self.wait = time
func update(delta:float) -> void:
self.wait -= delta
func isDone() -> bool:
return self.wait <= 0.0

View File

@@ -0,0 +1 @@
uid://cskwko5oqqq4m

View File

@@ -0,0 +1,43 @@
class_name CutsceneWhileEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var events:Array[CutsceneEvent] = []
var callback:Callable
var current:int = 0
func _init(callback:Callable, evt:Array[CutsceneEvent]) -> void:
super._init();
self.events = evt;
self.callback = callback;
func shouldLoop() -> bool:
return self.callback.call(self)
func update(delta:float) -> void:
if self.current >= self.events.size():
return;
var evt = self.events[self.current]
if !evt.started:
evt.start()
evt.started = true
evt.update(delta)
if evt.isDone():
evt.end()
self.current += 1
if self.current < self.events.size():
return
if !self.shouldLoop():
return
self.current = 0
for event in self.events:
event.reset()
func isDone() -> bool:
if self.shouldLoop():
return false;
return self.current >= self.events.size();

View File

@@ -0,0 +1 @@
uid://cx4uqll85m28i

View File

@@ -0,0 +1,13 @@
class_name OverworldChangeDirectionEvent extends "res://scripts/Cutscene/Event/Entity/OverworldEntityEvent.gd"
var direction:OverworldEntity.Direction;
func _init(
entity:OverworldEntity,
direction:OverworldEntity.Direction,
) -> void:
super._init(entity);
self.direction = direction;
func start() -> void:
entity.direction = direction;

View File

@@ -0,0 +1 @@
uid://cu82did0twmkm

View File

@@ -0,0 +1,10 @@
class_name OverworldEntityEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
const OverworldEntity = preload("res://scripts/Entities/OverworldEntity.gd");
var entity:OverworldEntity;
func _init(
entity:OverworldEntity,
) -> void:
super._init();
self.entity = entity;

View File

@@ -0,0 +1 @@
uid://dmmguqphbe34j

View File

@@ -0,0 +1,15 @@
class_name TextboxEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var text:String;
func _init(
text:String
) -> void:
super._init();
self.text = text;
func start() -> void:
getSystems().VN.getTextbox().setText(self.text);
func isDone() -> bool:
return getSystems().VN.getTextbox().isClosed;

View File

@@ -0,0 +1 @@
uid://dypv7erj66kbs

View File

@@ -0,0 +1,29 @@
class_name OverworldConversationEvent extends "res://scripts/Cutscene/Cutscene.gd"
const OverworldEntity = preload("res://scripts/Entities/OverworldEntity.gd");
const TextboxEvent = preload("res://scripts/Cutscene/Event/VisualNovel/TextboxEvent.gd");
const PauseEvent = preload("res://scripts/Cutscene/Event/CutscenePauseEvent.gd");
const OverworldChangeDirectionEvent = preload("res://scripts/Cutscene/Event/Entity/OverworldChangeDirectionEvent.gd");
var speaker:OverworldEntity;
var interacted:OverworldEntity;
var texts:Array[String];
func _init(speaker:OverworldEntity, interacted:OverworldEntity, texts:Array[String]) -> void:
self.speaker = speaker;
self.interacted = interacted;
self.texts = texts;
func setupCutscene() -> void:
var dirSpeaker = speaker.getDirectionToFace(interacted.position);
var dirInteracted = interacted.getDirectionToFace(speaker.position);
add([
OverworldChangeDirectionEvent.new(speaker, dirSpeaker),
OverworldChangeDirectionEvent.new(interacted, dirInteracted),
PauseEvent.new(PauseSystem.PauseType.ENTITY_PAUSED, [ speaker, interacted ]),
]);
for text in texts:
add([ TextboxEvent.new(text) ]);
add([ PauseEvent.new(PauseSystem.PauseType.NOT_PAUSED) ]);

View File

@@ -0,0 +1 @@
uid://cywuvoi5v4fe3

View File

@@ -0,0 +1,10 @@
class_name TestCutscene extends "res://scripts/Cutscene/Scene/OverworldConversationEvent.gd"
func _init(speaker:OverworldEntity, interacted:OverworldEntity ) -> void:
super(
speaker,
interacted,
[
"Hello"
]
);

View File

@@ -0,0 +1 @@
uid://btxgv85qst1jy

View File

@@ -0,0 +1,55 @@
class_name BasicNPCEntity extends "res://scripts/Entities/OverworldEntity.gd"
const Cutscene = preload("res://scripts/Cutscene/Cutscene.gd");
const OverworldConversationEvent = preload("res://scripts/Cutscene/Scene/OverworldConversationEvent.gd");
enum BasicNPCInteractType {
NONE,
CUTSCENE,
TEXTS
};
enum BasicNPCMoveType {
STILL,
RANDOM_LOOK
};
@export var interactType:BasicNPCInteractType = BasicNPCInteractType.NONE;
@export var interactCutscene:GDScript;
@export var interactTexts:Array[String];
@export var moveType:BasicNPCMoveType = BasicNPCMoveType.STILL;
@export var randomLookMinTime:float = 1.5;
@export var randomLookMaxTime:float = 4.0;
var randomLookTimer:float = 0.0;
func interact(interactor:OverworldEntity) -> void:
if interactType == BasicNPCInteractType.NONE:
return
if interactType == BasicNPCInteractType.CUTSCENE:
# Cutscene in this manner must take two entities
# (self, speaker, and interactor, player)
var cs:Cutscene = interactCutscene.new(self, interactor);
getSystems().CUTSCENE.setCurrentCutscene(cs);
return
if interactType == BasicNPCInteractType.TEXTS:
var cs:Cutscene = OverworldConversationEvent.new(self, interactor, interactTexts);
getSystems().CUTSCENE.setCurrentCutscene(cs);
return
pass
func updateMovement(delta:float) -> void:
if moveType == BasicNPCMoveType.STILL:
return
if moveType == BasicNPCMoveType.RANDOM_LOOK:
randomLookTimer -= delta;
if randomLookTimer <= 0:
randomLookTimer = randf_range(randomLookMinTime, randomLookMaxTime);
self.direction = randi_range(0, 3);
return
pass

View File

@@ -0,0 +1 @@
uid://d23qg1ovkbxst

View File

@@ -0,0 +1,176 @@
class_name OverworldEntity extends CharacterBody3D
const PauseSystem = preload("res://scripts/System/PauseSystem.gd")
enum Direction {
NORTH,
EAST,
SOUTH,
WEST,
}
var speed:float = 150;
var friction:float = 8.5;
var gravity:float = 30;
@export var direction = Direction.SOUTH:
set(newDirection):
direction = newDirection;
_updateMaterial();
var meshInstance:MeshInstance3D;
var underFootTile:int = -1;
var underFootPosition:Vector3;
var withinMapBounds:MapBounds;
var withinBoundsLastFrame:bool = true;
func _updateMaterial():
if !meshInstance:
return
var material:ShaderMaterial = meshInstance.get_surface_override_material(0)
if !material:
return
material.set_shader_parameter("direction", direction)
func getSystems() -> Systems:
return get_tree().current_scene.get_node("Systems") as Systems;
func getDirectionVector() -> Vector3:
match direction:
Direction.NORTH:
return Vector3(0, 0, -1);
Direction.SOUTH:
return Vector3(0, 0, 1);
Direction.WEST:
return Vector3(-1, 0, 0);
Direction.EAST:
return Vector3(1, 0, 0);
return Vector3(0, 0, 0);
func getDirectionToFace(position:Vector3) -> Direction:
var diff = position - self.position;
if abs(diff.x) > abs(diff.z):
if diff.x > 0:
return Direction.EAST;
else:
return Direction.WEST;
else:
if diff.z > 0:
return Direction.SOUTH;
else:
return Direction.NORTH;
return Direction.SOUTH;
# Virtual Methods
func updateMovement(delta) -> void:
pass
func updateOverworldLogic(delta) -> void:
pass
func isPaused() -> bool:
var pause = getSystems().PAUSE;
var ps = pause.getPauseState();
if ps == PauseSystem.PauseType.NOT_PAUSED:
return false;
elif ps == PauseSystem.PauseType.FULLY_PAUSED:
return true;
elif ps == PauseSystem.PauseType.ENTITY_PAUSED:
if pause.entities.find(self) != -1:
return true;
return false
elif ps == PauseSystem.PauseType.CUTSCENE_PAUSED:
if pause.entities.find(self) != -1:
return false;
return true;
return false;
# Private methods
func _updateTileData() -> void:
# ray cast down
var offset = Vector3(0, 0, 0.426);
var query = PhysicsRayQueryParameters3D.create(
position + offset,
position + Vector3(0, -1, 0) + offset
)
query.collide_with_areas = true
query.exclude = [self]
var result = get_world_3d().direct_space_state.intersect_ray(query)
if !result or !result.collider:
return;
var collider = result.collider;
var colliderMesh = collider.get_node("../");
if !colliderMesh or !(colliderMesh is ArrayMesh) or !colliderMesh.mesh or colliderMesh.mesh.get_surface_count() == 0:
return;
# Get the face index (triangle)
var arrays = colliderMesh.mesh.surface_get_arrays(0);
var indiceIdx = result.face_index * 3;
# Get each indice of the triangle
var index0 = arrays[Mesh.ARRAY_INDEX][indiceIdx+0];
var index1 = arrays[Mesh.ARRAY_INDEX][indiceIdx+1];
var index2 = arrays[Mesh.ARRAY_INDEX][indiceIdx+2];
# Get each uv of each indice
var uv0:Vector2 = arrays[Mesh.ARRAY_TEX_UV][index0];
var uv1:Vector2 = arrays[Mesh.ARRAY_TEX_UV][index1];
var uv2:Vector2 = arrays[Mesh.ARRAY_TEX_UV][index2];
# Determine the lowest texture coordinate
var min = Vector2(min(uv0.x, uv1.x, uv2.x), min(uv0.y, uv1.y, uv2.y));
# Convert to column/row
var w = 256;
var h = w;
var tw = 48;
var th = tw;
var column = int(roundf(min.x * w)) / tw;
var row = int(roundf(min.y * h)) / th;
var columns = 768 / tw;
underFootPosition = result.position;
underFootTile = column % columns + row * columns;
# Events
func _ready() -> void:
meshInstance = get_node("MeshInstance3D")
_updateTileData();
_updateMaterial();
pass
func _process(delta:float) -> void:
if isPaused():
return;
# Handle entity leaving map bounds
if !withinMapBounds:
if !withinBoundsLastFrame:
print("Entity ", self.name, " was out of map bounds for two frames");
withinBoundsLastFrame = false;
else:
withinBoundsLastFrame = true;
# Update logic
updateOverworldLogic(delta)
func _physics_process(delta: float) -> void:
if isPaused():
return;
# Update movement
updateMovement(delta);
# Gravity and friction
if !is_on_floor():
velocity.y -= gravity * delta;
else:
velocity += -(velocity * friction * delta);
if velocity.length() != 0:
_updateTileData();
# Update character controller.
move_and_slide();

View File

@@ -0,0 +1 @@
uid://bpwbaptqu4bm5

View File

@@ -0,0 +1,24 @@
extends Camera3D
const PIXEL_SCALE:float = 4.0;
const WORLD_UNITS:float = 32.0;
func _ready() -> void:
pass
func _process(delta: float) -> void:
var z:float = (
tan((deg_to_rad(180) - deg_to_rad(fov)) / 2.0) *
(get_viewport().size.y / 2.0)
) / PIXEL_SCALE / WORLD_UNITS;
var rosa = get_node("..");
var look = rosa.position;
var position = Vector3(0, 0, 2) + look;
look_at_from_position(
Vector3(position.x, position.y + z, position.z),
look
);
pass

View File

@@ -0,0 +1 @@
uid://jd50n00bo05y

View File

@@ -0,0 +1,51 @@
class_name RosaController extends "res://scripts/Entities/OverworldEntity.gd"
var interactRange = 0.7;
func updateOverworldLogic(delta) -> void:
# Check if interact button is pressed
if(Input.is_action_just_pressed("interact")):
var rayDirection = getDirectionVector();
# cast ray
var query = PhysicsRayQueryParameters3D.create(
position,
position + (rayDirection * interactRange)
)
query.collide_with_areas = true
query.exclude = [self]
var result = get_world_3d().direct_space_state.intersect_ray(query)
if result and result.collider:
var collider = result.collider
if(collider.has_method("interact")):
collider.interact(self)
if Input.is_action_just_pressed("pause"):
getSystems().PAUSE.playerPauseToggle();
func updateMovement(delta) -> void:
# User movement
var dir:Vector2 = Input.get_vector("left", "right", "up", "down");
if(dir.x != 0 or dir.y != 0):
velocity.x = dir.x * speed * delta;
velocity.z = dir.y * speed * delta;
# Update direction
if(dir.x >= abs(dir.y) and(
dir.y == 0 or
(dir.y > 0 and direction != Direction.SOUTH) or
(dir.y < 0 and direction != Direction.NORTH)
)):
direction = Direction.EAST;
elif (dir.x <= -abs(dir.y) and (
dir.y == 0 or
(dir.y > 0 and direction != Direction.SOUTH) or
(dir.y < 0 and direction != Direction.NORTH)
)):
direction = Direction.WEST;
elif (dir.y > 0):
direction = Direction.SOUTH;
elif (dir.y < 0):
direction = Direction.NORTH;
pass

View File

@@ -0,0 +1 @@
uid://ixwikdguyhf0

36
scripts/Item/Item.gd Normal file
View File

@@ -0,0 +1,36 @@
class_name Item
enum ItemCategory {
MEDICINE,
KEY_ITEM,
INGREDIENT
};
func getName() -> String:
push_error("getName() must be overridden in derived classes");
return "";
func isStackable() -> bool:
return true;
func isDroppable() -> bool:
return true;
func isSellable() -> bool:
return true;
func getSellPrice() -> int:
return 0;
func getBuyPrice() -> int:
return 0;
func isConsumable() -> bool:
return false;
func consume() -> void:
pass
func getCategory() -> ItemCategory:
push_error("getCategory() must be overriden in derived class");
return ItemCategory.MEDICINE;

1
scripts/Item/Item.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://c6t5tprnd23t0

View File

@@ -0,0 +1,8 @@
class_name ItemStack
var item:Item;
var quantity:int;
func _init(item:Item, quantity:int = 1):
self.item = item;
self.quantity = quantity;

View File

@@ -0,0 +1 @@
uid://re7dg4hpp804

13
scripts/Item/Potion.gd Normal file
View File

@@ -0,0 +1,13 @@
class_name Potion extends "res://scripts/Item/Item.gd"
func getName() -> String:
return "Potion"
func getCategory() -> ItemCategory:
return ItemCategory.MEDICINE;
func isConsumable() -> bool:
return true;
func consume() -> void:
print("Consuming Potion");

View File

@@ -0,0 +1 @@
uid://dpns5iesd08rl

15
scripts/MapBounds.gd Normal file
View File

@@ -0,0 +1,15 @@
extends Area3D
class_name MapBounds
func _ready() -> void:
pass
func _on_body_entered(body: Node3D) -> void:
if (!body is OverworldEntity):
return
(body as OverworldEntity).withinMapBounds = self;
func _on_body_exited(body: Node3D) -> void:
if (!body is OverworldEntity):
return
(body as OverworldEntity).withinMapBounds = null;

1
scripts/MapBounds.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dbah1pmk8jola

View File

@@ -0,0 +1 @@
uid://dr3asofxu1pep

View File

@@ -0,0 +1,8 @@
class_name QuestObjective
var name:String
func _init(
name:String
):
self.name = name;

View File

@@ -0,0 +1 @@
uid://bakmt6ufpq33o

36
scripts/Quest/Quest.gd Normal file
View File

@@ -0,0 +1,36 @@
class_name Quest
const QuestObjective = preload("res://scripts/Quest/Objective/QuestObjective.gd");
enum QuestState {
NOT_STARTED,
ACTIVE,
INACTIVE,
FINISHED
};
var questName:String;
var questState:QuestState = QuestState.NOT_STARTED;
var objectives:Array[QuestObjective] = [];
var currentObjective = -1;
func _init(
questName:String,
objectives:Array[QuestObjective]
) -> void:
self.questName = questName;
self.objectives = objectives;
func getState() -> QuestState:
return questState;
func start():
print("Starting quest: " + questName);
questState = QuestState.ACTIVE;
currentObjective = 0;
func nextObjective():
currentObjective = currentObjective + 1;
if currentObjective >= objectives.size():
questState = QuestState.FINISHED;
return null;
return objectives[currentObjective];

View File

@@ -0,0 +1 @@
uid://kuxak18kbjr5

View File

@@ -0,0 +1,6 @@
class_name QuestExample extends "res://scripts/Quest/Quest.gd"
func _init() -> void:
super("Example Quest", [
QuestObjective.new("Test")
]);

View File

@@ -0,0 +1 @@
uid://cg3piglr8rbfs

View File

@@ -0,0 +1 @@
uid://cubx2asrudfyp

View File

@@ -0,0 +1 @@
uid://dnls1370w0gr4

View File

@@ -0,0 +1 @@
class_name CookingScene extends Node3D

View File

@@ -0,0 +1 @@
uid://ckxjs4wty6sju

View File

@@ -0,0 +1 @@
class_name CuttingScene extends Node3D

View File

@@ -0,0 +1 @@
uid://kwnx0enmgk54

View File

@@ -0,0 +1 @@
class_name OverworldScene extends Node3D

View File

@@ -0,0 +1 @@
uid://pcncoc6wum4q

View File

@@ -0,0 +1,10 @@
class_name RootScene extends Node3D
const Systems = preload("res://scripts/System/Systems.gd");
const SceneSystem = preload("res://scripts/System/SceneSystem.gd");
var systems:Systems;
func _ready() -> void:
print("Game started");
systems = $Systems;
systems.SCENE.setScene(SceneSystem.DawnScene.OVERWORLD);

View File

@@ -0,0 +1 @@
uid://cj4jxqpykhteg

View File

@@ -0,0 +1 @@
class_name UIScene extends Control

View File

@@ -0,0 +1 @@
uid://vjr7s045ri4a

View File

@@ -0,0 +1,11 @@
class_name BattleSystem extends Node
const Battle = preload("res://scripts/Battle/Battle.gd");
var battle:Battle = null;
func getSystems():
return get_tree().current_scene.get_node("Systems");
func startBattle(battle:Battle) -> void:
print("start battle");
self.battle = battle;

View File

@@ -0,0 +1 @@
uid://mr6i8copcn37

Some files were not shown because too many files have changed in this diff Show More