Compare commits

...

22 Commits

Author SHA1 Message Date
96b5bae9d0 Remove Madtalk 2025-09-15 20:50:50 -05:00
2b58781907 idk richtext stuff 2025-09-15 00:40:58 -05:00
39aca9aa3f prog 2025-09-01 00:13:44 -05:00
aea5158d6e prog 2025-08-31 17:53:17 -05:00
6d75b33775 Gonna invent a scripting language lol 2025-08-30 22:25:50 -05:00
3ccf4ebabb Just making things work again 2025-08-30 21:38:53 -05:00
6f1defb3da More renaming 2025-08-19 19:57:32 -05:00
379c7007aa rename consistency 2025-08-19 19:57:24 -05:00
e74896527b Movement tightened up a bit 2025-08-19 17:32:57 -05:00
5cd8b8a04b idk getting back to it 2025-08-19 16:56:44 -05:00
0f3db7c4a4 Restore camera controller 2025-08-07 16:31:12 -05:00
a7dcf760a7 Bit more cleanup. 2025-08-07 16:05:24 -05:00
53ad2da596 Made map loading work 2025-08-03 22:40:05 -05:00
e0dd14c460 Moving files pre-refactor 2025-08-03 21:10:58 -05:00
29ebb68215 Map changinbg 2025-07-04 15:02:41 -05:00
7ae9d534ab add props 2025-07-04 00:03:54 -05:00
58126341ba Moved player input 2025-07-01 15:50:08 -05:00
3e95481282 NPC bug fixing. 2025-07-01 12:15:25 -05:00
977f17f73b Transition 2025-07-01 11:45:48 -05:00
c7bed57b82 Text cutscene item. 2025-06-30 23:31:00 -05:00
0c31e684e3 Cutscene 2025-06-30 23:21:33 -05:00
342d6745d1 Refactoring crap 2025-06-30 23:06:43 -05:00
328 changed files with 1908 additions and 3825 deletions

27
InteractableArea.gd Normal file
View File

@@ -0,0 +1,27 @@
class_name InteractableArea extends Area3D
signal interactEvent(playerEntity:Player)
signal interactable(playerEntity:Player)
signal notInteractable(playerEntity:Player)
func _enter_tree() -> void:
area_entered.connect(onAreaEntered)
area_exited.connect(onAreaExited)
func _exit_tree() -> void:
area_entered.disconnect(onAreaEntered)
area_exited.disconnect(onAreaExited)
func onAreaEntered(area:Area3D) -> void:
if !area.get_parent() or !(area.get_parent() is Player):
return
var player:Player = area.get_parent() as Player
interactable.emit(player)
func onAreaExited(area:Area3D) -> void:
if !area.get_parent() or !(area.get_parent() is Player):
return
var player:Player = area.get_parent() as Player
notInteractable.emit(player)

1
InteractableArea.gd.uid Normal file
View File

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

50
MapChangeInteract.gd Normal file
View File

@@ -0,0 +1,50 @@
class_name MapChangeInteract extends Node3D
@export var mapResource:PackedScene
@export var destinationPointNodeName:String
var interactableArea:InteractableArea
var shapeChild:CollisionShape3D
func _enter_tree() -> void:
interactableArea = $InteractableArea
if !mapResource:
push_error("MapChangeInteract must have a mapResource set.")
return
# Needs to be exactly one child.
if get_child_count() != 2:
push_error("MapChangeInteract must have exactly one child InteractableArea node.")
return
var child = get_child(1)
if not (child is CollisionShape3D):
push_error("MapChangeInteract's child must be an CollisionShape3D node.")
shapeChild = child
remove_child(shapeChild)
interactableArea.add_child(shapeChild)
interactableArea.interactEvent.connect(onInteract)
interactableArea.interactable.connect(onInteractable)
interactableArea.notInteractable.connect(onNotInteractable)
func _exit_tree() -> void:
interactableArea.interactEvent.disconnect(onInteract)
interactableArea.interactable.disconnect(onInteractable)
interactableArea.notInteractable.disconnect(onNotInteractable)
interactableArea.remove_child(shapeChild)
add_child(shapeChild)
func onInteract(_ent:Player) -> void:
OVERWORLD.mapChange(mapResource, destinationPointNodeName)
func onInteractable(_ent:Player) -> void:
print("Able to leave map")
pass
func onNotInteractable(_ent:Player) -> void:
print("Not able to leave map")
pass

1
MapChangeInteract.gd.uid Normal file
View File

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

11
MapChangeInteract.tscn Normal file
View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://cr6h3g15bf6ts"]
[ext_resource type="Script" uid="uid://cpqmjomfpyifw" path="res://MapChangeInteract.gd" id="1_4tqca"]
[ext_resource type="Script" uid="uid://b00rxpveu3v4m" path="res://InteractableArea.gd" id="2_3pe6u"]
[node name="MapChangeInteract" type="Node3D"]
script = ExtResource("1_4tqca")
[node name="InteractableArea" type="Area3D" parent="."]
script = ExtResource("2_3pe6u")
metadata/_custom_type_script = "uid://b00rxpveu3v4m"

View File

@@ -86,7 +86,7 @@ func _enter_tree():
_parse_input_actions() _parse_input_actions()
func _exit_tree(): func _exit_tree():
Mapper.queue_free() Mapper = null
func _parse_input_actions(): func _parse_input_actions():
_custom_input_actions.clear() _custom_input_actions.clear()
@@ -189,10 +189,13 @@ func refresh():
func get_joypad_type(controller: int = _last_controller) -> ControllerSettings.Devices: func get_joypad_type(controller: int = _last_controller) -> ControllerSettings.Devices:
return Mapper._get_joypad_type(controller, _settings.joypad_fallback) return Mapper._get_joypad_type(controller, _settings.joypad_fallback)
func parse_path(path: String, input_type = _last_input_type, last_controller = _last_controller) -> Texture: func get_last_input_type() -> InputType:
return _last_input_type
func parse_path(path: String, input_type = _last_input_type, last_controller = _last_controller, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> Texture:
if typeof(input_type) == TYPE_NIL: if typeof(input_type) == TYPE_NIL:
return null return null
var root_paths := _expand_path(path, input_type, last_controller) var root_paths := _expand_path(path, input_type, last_controller, forced_controller_icon_style)
for root_path in root_paths: for root_path in root_paths:
if _load_icon(root_path): if _load_icon(root_path):
continue continue
@@ -228,6 +231,7 @@ func parse_event_modifiers(event: InputEvent) -> Array[Texture]:
for icon_path in _expand_path(modifier, InputType.KEYBOARD_MOUSE, -1): for icon_path in _expand_path(modifier, InputType.KEYBOARD_MOUSE, -1):
if _load_icon(icon_path) == OK: if _load_icon(icon_path) == OK:
icons.push_back(_cached_icons[icon_path]) icons.push_back(_cached_icons[icon_path])
break
return icons return icons
@@ -270,7 +274,7 @@ func get_matching_event(path: String, input_type: InputType = _last_input_type,
else: else:
events = InputMap.action_get_events(path) events = InputMap.action_get_events(path)
var fallback = null var fallbacks = []
for event in events: for event in events:
if not is_instance_valid(event): continue if not is_instance_valid(event): continue
@@ -283,13 +287,15 @@ func get_matching_event(path: String, input_type: InputType = _last_input_type,
# Use the first device specific mapping if there is one. # Use the first device specific mapping if there is one.
if event.device == controller: if event.device == controller:
return event return event
# Otherwise use the first "all devices" mapping. # Otherwise, we create a fallback prioritizing events with 'ALL_DEVICE'
elif fallback == null and event.device < 0: if event.device < 0: # All-device event
fallback = event fallbacks.push_front(event)
else:
fallbacks.push_back(event)
return fallback return fallbacks[0] if not fallbacks.is_empty() else null
func _expand_path(path: String, input_type: int, controller: int) -> Array: func _expand_path(path: String, input_type: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> Array:
var paths := [] var paths := []
var base_paths := [ var base_paths := [
_settings.custom_asset_dir + "/", _settings.custom_asset_dir + "/",
@@ -298,20 +304,20 @@ func _expand_path(path: String, input_type: int, controller: int) -> Array:
for base_path in base_paths: for base_path in base_paths:
if base_path.is_empty(): if base_path.is_empty():
continue continue
base_path += _convert_path_to_asset_file(path, input_type, controller) base_path += _convert_path_to_asset_file(path, input_type, controller, forced_controller_icon_style)
paths.push_back(base_path + "." + _base_extension) paths.push_back(base_path + "." + _base_extension)
return paths return paths
func _convert_path_to_asset_file(path: String, input_type: int, controller: int) -> String: func _convert_path_to_asset_file(path: String, input_type: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> String:
match get_path_type(path): match get_path_type(path):
PathType.INPUT_ACTION: PathType.INPUT_ACTION:
var event := get_matching_event(path, input_type, controller) var event := get_matching_event(path, input_type, controller)
if event: if event:
return _convert_event_to_path(event) return _convert_event_to_path(event, controller, forced_controller_icon_style)
return path return path
PathType.JOYPAD_PATH: PathType.JOYPAD_PATH:
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback) return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
PathType.SPECIFIC_PATH, _: PathType.SPECIFIC_PATH, _:
return path return path
@@ -372,7 +378,7 @@ func _convert_asset_file_to_tts(path: String) -> String:
_: _:
return path return path
func _convert_event_to_path(event: InputEvent): func _convert_event_to_path(event: InputEvent, controller: int = _last_controller, forced_controller_icon_style = ControllerSettings.Devices.NONE):
if event is InputEventKey: if event is InputEventKey:
# If this is a physical key, convert to localized scancode # If this is a physical key, convert to localized scancode
if event.keycode == 0: if event.keycode == 0:
@@ -381,9 +387,9 @@ func _convert_event_to_path(event: InputEvent):
elif event is InputEventMouseButton: elif event is InputEventMouseButton:
return _convert_mouse_button_to_path(event.button_index) return _convert_mouse_button_to_path(event.button_index)
elif event is InputEventJoypadButton: elif event is InputEventJoypadButton:
return _convert_joypad_button_to_path(event.button_index, event.device) return _convert_joypad_button_to_path(event.button_index, controller, forced_controller_icon_style)
elif event is InputEventJoypadMotion: elif event is InputEventJoypadMotion:
return _convert_joypad_motion_to_path(event.axis, event.device) return _convert_joypad_motion_to_path(event.axis, controller, forced_controller_icon_style)
func _convert_key_to_path(scancode: int): func _convert_key_to_path(scancode: int):
match scancode: match scancode:
@@ -615,7 +621,7 @@ func _convert_mouse_button_to_path(button_index: int):
_: _:
return "mouse/sample" return "mouse/sample"
func _convert_joypad_button_to_path(button_index: int, controller: int): func _convert_joypad_button_to_path(button_index: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE):
var path var path
match button_index: match button_index:
JOY_BUTTON_A: JOY_BUTTON_A:
@@ -652,9 +658,9 @@ func _convert_joypad_button_to_path(button_index: int, controller: int):
path = "joypad/share" path = "joypad/share"
_: _:
return "" return ""
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback) return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
func _convert_joypad_motion_to_path(axis: int, controller: int): func _convert_joypad_motion_to_path(axis: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE):
var path : String var path : String
match axis: match axis:
JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y: JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
@@ -667,7 +673,7 @@ func _convert_joypad_motion_to_path(axis: int, controller: int):
path = "joypad/rt" path = "joypad/rt"
_: _:
return "" return ""
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback) return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
func _load_icon(path: String) -> int: func _load_icon(path: String) -> int:
if _cached_icons.has(path): return OK if _cached_icons.has(path): return OK

View File

@@ -1 +1 @@
uid://cxxl7e1hu587n uid://b06g4dpg627b5

View File

@@ -3,6 +3,7 @@ extends Resource
class_name ControllerSettings class_name ControllerSettings
enum Devices { enum Devices {
NONE = -1,
LUNA, LUNA,
OUYA, OUYA,
PS3, PS3,

View File

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

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Ricardo Subtil
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,8 +1,8 @@
extends Node extends RefCounted
class_name ControllerMapper class_name ControllerMapper
func _convert_joypad_path(path: String, device: int, fallback: ControllerSettings.Devices) -> String: func _convert_joypad_path(path: String, device: int, fallback: ControllerSettings.Devices, force_controller_icon_style = ControllerSettings.Devices.NONE) -> String:
match _get_joypad_type(device, fallback): match _get_joypad_type(device, fallback, force_controller_icon_style):
ControllerSettings.Devices.LUNA: ControllerSettings.Devices.LUNA:
return _convert_joypad_to_luna(path) return _convert_joypad_to_luna(path)
ControllerSettings.Devices.PS3: ControllerSettings.Devices.PS3:
@@ -32,7 +32,9 @@ func _convert_joypad_path(path: String, device: int, fallback: ControllerSetting
_: _:
return "" return ""
func _get_joypad_type(device, fallback): func _get_joypad_type(device, fallback, force_controller_icon_style):
if force_controller_icon_style != ControllerSettings.Devices.NONE:
return force_controller_icon_style
var available = Input.get_connected_joypads() var available = Input.get_connected_joypads()
if available.is_empty(): if available.is_empty():
return fallback return fallback
@@ -264,7 +266,7 @@ func _convert_joypad_to_steamdeck(path: String):
"rt": "rt":
return path.replace("/rt", "/r2") return path.replace("/rt", "/r2")
"select": "select":
return path.replace("/select", "/square") return path.replace("/select", "/inventory")
"start": "start":
return path.replace("/start", "/menu") return path.replace("/start", "/menu")
"home": "home":

View File

@@ -1 +1 @@
uid://dtgqdoflwmo0b uid://5wx82aghglqr

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ds5yo8kn81uem"
path="res://.godot/imported/inventory.png-2e96b194d1562d723597b2d307313c1b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/steamdeck/inventory.png"
dest_files=["res://.godot/imported/inventory.png-2e96b194d1562d723597b2d307313c1b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -1 +1 @@
uid://lm0qpml4w2mx uid://jcpjcl10iatx

View File

@@ -1 +1 @@
uid://dkn6l8tlu56d8 uid://xp37xj8kduow

View File

@@ -1 +1 @@
uid://sg5ntoaywgfd uid://r1qngdbv7gh4

View File

@@ -1 +1 @@
uid://125nay2twqlr uid://bsynmd02318ph

View File

@@ -1 +1 @@
uid://d1hrxvtfr4t5w uid://da3havxu352nb

View File

@@ -68,6 +68,20 @@ enum ShowMode {
show_mode = _show_mode show_mode = _show_mode
_load_texture_path() _load_texture_path()
## Forces the icon to show a specific controller style, regardless of the
## currently used controller type.
##[br][br]
## This will override force_device if set to a value other than NONE.
##[br][br]
## This is only relevant for paths using input actions, and has no effect on
## other scenarios.
@export var force_controller_icon_style: ControllerSettings.Devices = ControllerSettings.Devices.NONE:
set(_force_controller_icon_style):
force_controller_icon_style = _force_controller_icon_style
_load_texture_path()
enum ForceType { enum ForceType {
NONE, ## Icon will swap according to the used input method. NONE, ## Icon will swap according to the used input method.
KEYBOARD_MOUSE, ## Icon will always show the keyboard/mouse action. KEYBOARD_MOUSE, ## Icon will always show the keyboard/mouse action.
@@ -84,6 +98,34 @@ enum ForceType {
force_type = _force_type force_type = _force_type
_load_texture_path() _load_texture_path()
enum ForceDevice {
DEVICE_0,
DEVICE_1,
DEVICE_2,
DEVICE_3,
DEVICE_4,
DEVICE_5,
DEVICE_6,
DEVICE_7,
DEVICE_8,
DEVICE_9,
DEVICE_10,
DEVICE_11,
DEVICE_12,
DEVICE_13,
DEVICE_14,
DEVICE_15,
ANY # No device will be forced
}
## Forces the icon to use the textures for the device connected at the specified index.
## For example, if a PlayStation 5 controller is connected at device_index 0,
## the icon will always show PlayStation 5 textures.
@export var force_device: ForceDevice = ForceDevice.ANY:
set(_force_device):
force_device = _force_device
_load_texture_path()
@export_subgroup("Text Rendering") @export_subgroup("Text Rendering")
## Custom LabelSettings. If set, overrides the addon's global label settings. ## Custom LabelSettings. If set, overrides the addon's global label settings.
@export var custom_label_settings: LabelSettings: @export var custom_label_settings: LabelSettings:
@@ -167,7 +209,8 @@ func _load_texture_path_impl():
if ControllerIcons.get_path_type(path) == ControllerIcons.PathType.INPUT_ACTION: if ControllerIcons.get_path_type(path) == ControllerIcons.PathType.INPUT_ACTION:
var event := ControllerIcons.get_matching_event(path, input_type) var event := ControllerIcons.get_matching_event(path, input_type)
textures.append_array(ControllerIcons.parse_event_modifiers(event)) textures.append_array(ControllerIcons.parse_event_modifiers(event))
var tex := ControllerIcons.parse_path(path, input_type) var target_device = force_device if force_device != ForceDevice.ANY else ControllerIcons._last_controller
var tex := ControllerIcons.parse_path(path, input_type, target_device, force_controller_icon_style)
if tex: if tex:
textures.append(tex) textures.append(tex)
_textures = textures _textures = textures

View File

@@ -1 +1 @@
uid://ddxpo5u73ssi2 uid://cxab4gf8nejc2

View File

@@ -1 +1 @@
uid://k2tud3diool uid://dlwwg6hbxcg6r

View File

@@ -1 +1 @@
uid://bpos4yaigyeqr uid://dns2c4458ekvc

View File

@@ -1 +1 @@
uid://dmp4w4ojx7klt uid://cispm18xp24wt

View File

@@ -1 +1 @@
uid://bu8t48xqekc8o uid://c6lqhrewwbp61

View File

@@ -1 +1 @@
uid://da1ors8v36hv3 uid://texv8inbqrdh

View File

@@ -1 +1 @@
uid://dt82cmmp3uy7l uid://wnl1k7337x2u

View File

@@ -3,5 +3,5 @@
name="Controller Icons" name="Controller Icons"
description="Provides icons for all major controllers and keyboard, with automatic icon remapping." description="Provides icons for all major controllers and keyboard, with automatic icon remapping."
author="rsubtil" author="rsubtil"
version="3.1.4" version="3.1.5"
script="plugin.gd" script="plugin.gd"

View File

@@ -1 +1 @@
uid://cajvrhetudhyg uid://xvjobdx0h3gi

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ControllerSettings" load_steps=2 format=3 uid="uid://dolsrvh5w47et"] [gd_resource type="Resource" script_class="ControllerSettings" load_steps=2 format=3 uid="uid://dolsrvh5w47et"]
[ext_resource type="Script" path="res://addons/controller_icons/Settings.gd" id="1"] [ext_resource type="Script" path="res://addons/controller_icons/ControllerSettings.gd" id="1"]
[resource] [resource]
script = ExtResource("1") script = ExtResource("1")

32
cutscene/Cutscene.gd Normal file
View File

@@ -0,0 +1,32 @@
class_name Cutscene extends Node
var items:Array[CutsceneItem] = []
var itemIndex:int = 0
func _enter_tree() -> void:
# Get children
var children = get_children()
for child in children:
if !(child is CutsceneItem):
continue
items.append(child)
pass
func _exit_tree() -> void:
items.clear()
pass
func start() -> void:
itemIndex = -1
if items.size() == 0:
return
nextItem()
func nextItem() -> void:
itemIndex += 1
if itemIndex >= items.size():
return
var item = items[itemIndex]
item.cutscene = self
item.start()

1
cutscene/Cutscene.gd.uid Normal file
View File

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

View File

@@ -0,0 +1,9 @@
[gd_scene load_steps=2 format=3 uid="uid://bhvoo48bpbkf3"]
[ext_resource type="PackedScene" uid="uid://d3rtd0ln7l2gr" path="res://scenes/maps/MapTundra.tscn" id="1_fsb0j"]
[node name="CutsceneTest" type="Node3D"]
[node name="MapTundra" parent="." instance=ExtResource("1_fsb0j")]
[node name="Camera3D" type="Camera3D" parent="."]

View File

@@ -0,0 +1,12 @@
class_name CutsceneItem extends Node
var cutscene:Cutscene = null
func start() -> void:
# This method should be overridden by subclasses
pass
func done() -> void:
if !cutscene:
return
cutscene.nextItem()

View File

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

View File

@@ -0,0 +1,24 @@
class_name CutsceneText extends CutsceneItem
@export_multiline var interactTexts:Array[String] = []
var nextTextIndex:int = 0
func _enter_tree() -> void:
pass
func _exit_tree() -> void:
UI.TEXTBOX.textboxClosing.disconnect(onTextboxClosing)
func start() -> void:
nextTextIndex = 0
UI.TEXTBOX.setText(interactTexts[nextTextIndex])
UI.TEXTBOX.textboxClosing.connect(onTextboxClosing)
func onTextboxClosing() -> void:
nextTextIndex += 1
if nextTextIndex < interactTexts.size():
UI.TEXTBOX.setText(interactTexts[nextTextIndex])
else:
UI.TEXTBOX.textboxClosing.disconnect(onTextboxClosing)
UI.TEXTBOX.setText("")
done()

View File

@@ -0,0 +1 @@
uid://8updtj1mctra

148
entity/EntityMovement.gd Normal file
View File

@@ -0,0 +1,148 @@
@tool
class_name EntityMovement extends Node
const FRICTION = 0.01
enum FacingDirection {
SOUTH = 0,
EAST = 1,
NORTH = 2,
WEST = 3
};
const FacingDirWalkAnimations = {
FacingDirection.SOUTH: "walk_south",
FacingDirection.EAST: "walk_east",
FacingDirection.NORTH: "walk_north",
FacingDirection.WEST: "walk_west"
};
const FacingDirAngle = {
FacingDirection.SOUTH: 0.0,
FacingDirection.EAST: PI / 2,
FacingDirection.NORTH: PI,
FacingDirection.WEST: -PI / 2
};
var _inputDir:Vector2 = Vector2.ZERO
var _facingDir:FacingDirection = FacingDirection.SOUTH
var _running:bool = false
@export var body:CharacterBody3D
@export var rotate:Node3D
@export var sprite:AnimatedSprite3D
@export var walkSpeed:float = 48.0
@export var runSpeed:float = 64.0
@export var facingDir:FacingDirection = FacingDirection.SOUTH:
set(value):
_facingDir = value
_updateSprite()
get:
return _facingDir
#
# Private Methods
#
func _updateSprite() -> void:
if !sprite || sprite.animation == FacingDirWalkAnimations[facingDir]:
return
sprite.animation = FacingDirWalkAnimations[facingDir]
func _applyFacingDir() -> void:
if !sprite || _inputDir.length() <= 0.01:
return
if _inputDir.y > 0:
if facingDir != FacingDirection.NORTH && _inputDir.x != 0:
if _inputDir.x > 0 && facingDir == FacingDirection.EAST:
facingDir = FacingDirection.EAST
elif _inputDir.x < 0 && facingDir == FacingDirection.WEST:
facingDir = FacingDirection.WEST
else:
facingDir = FacingDirection.NORTH
else:
facingDir = FacingDirection.NORTH
elif _inputDir.y < 0:
if facingDir != FacingDirection.SOUTH && _inputDir.x != 0:
if _inputDir.x > 0 && facingDir == FacingDirection.EAST:
facingDir = FacingDirection.EAST
elif _inputDir.x < 0 && facingDir == FacingDirection.WEST:
facingDir = FacingDirection.WEST
else:
facingDir = FacingDirection.SOUTH
else:
facingDir = FacingDirection.SOUTH
elif _inputDir.x > 0:
facingDir = FacingDirection.EAST
else:
facingDir = FacingDirection.WEST
func _applyGravity() -> void:
if !body.is_on_floor():
body.velocity += PHYSICS.GRAVITY * get_process_delta_time()
func _applyMovement() -> void:
if !canMove():
return
var cameraCurrent = get_viewport().get_camera_3d()
if !cameraCurrent:
return
# Use camera orientation for movement direction
var camBasis = cameraCurrent.global_transform.basis
# Forward and right vectors, ignore vertical component
var forward = -camBasis.z
forward.y = 0
forward = forward.normalized()
var right = camBasis.x
right.y = 0
right = right.normalized()
var directionAdjusted = (
forward * _inputDir.y + right * _inputDir.x
).normalized()
if directionAdjusted.length() <= 0.01:
return
if rotate:
var targetRot = atan2(directionAdjusted.x, directionAdjusted.z)
rotate.rotation.y = targetRot
var speed = walkSpeed
if _running:
speed = runSpeed
body.velocity.x = directionAdjusted.x * speed
body.velocity.z = directionAdjusted.z * speed
func _applyFriction(delta:float) -> void:
body.velocity.x *= delta * FRICTION
body.velocity.z *= delta * FRICTION
#
# Protected Methods
#
func canMove() -> bool:
return true
#
# Callbacks
#
func _enter_tree() -> void:
_updateSprite()
func _physics_process(delta:float) -> void:
if Engine.is_editor_hint():
return
if !body:
return
_applyGravity()
_applyFriction(delta)
_applyMovement()
_applyFacingDir()
body.move_and_slide()

View File

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

1
entity/MapCamera.gd.uid Normal file
View File

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

1
entity/NPC.gd.uid Normal file
View File

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

1
entity/Player.gd.uid Normal file
View File

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

38
entity/npc/NPC.gd Normal file
View File

@@ -0,0 +1,38 @@
@tool
class_name NPC extends CharacterBody3D
@export var _movement:NPCMovement
@export var facingDirection:EntityMovement.FacingDirection:
set(value):
if _movement:
_movement.facingDir = value
get:
if _movement:
return _movement.facingDir
return EntityMovement.FacingDirection.SOUTH
@export var walkSpeed:float = 48.0:
set(value):
if _movement:
_movement.walkSpeed = value
get:
if _movement:
return _movement.walkSpeed
return 48.0
@export var runSpeed:float = 64.0:
set(value):
if _movement:
_movement.runSpeed = value
get:
if _movement:
return _movement.runSpeed
return 64.0
func onInteract(player:Player) -> void:
print("Interacted with NPC")
pass
func _enter_tree() -> void:
pass

1
entity/npc/NPC.gd.uid Normal file
View File

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

96
entity/npc/NPC.tscn Normal file
View File

@@ -0,0 +1,96 @@
[gd_scene load_steps=12 format=3 uid="uid://kabs7mopalmo"]
[ext_resource type="Script" uid="uid://crw7ls7t8cwct" path="res://entity/npc/NPC.gd" id="1_00k55"]
[ext_resource type="Script" uid="uid://b00rxpveu3v4m" path="res://InteractableArea.gd" id="2_x8luf"]
[ext_resource type="Script" uid="uid://tlfthv88ki0y" path="res://entity/npc/NPCMovement.gd" id="3_1seh5"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entity/player/Player.png" id="4_x8luf"]
[sub_resource type="BoxShape3D" id="BoxShape3D_1seh5"]
size = Vector3(16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_rl6fg"]
atlas = ExtResource("4_x8luf")
region = Rect2(16, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_q57vx"]
atlas = ExtResource("4_x8luf")
region = Rect2(48, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_ak4un"]
atlas = ExtResource("4_x8luf")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_1ms0h"]
atlas = ExtResource("4_x8luf")
region = Rect2(32, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_1seh5"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_rl6fg")
}],
"loop": true,
"name": &"walk_east",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_q57vx")
}],
"loop": true,
"name": &"walk_north",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ak4un")
}],
"loop": true,
"name": &"walk_south",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_1ms0h")
}],
"loop": true,
"name": &"walk_west",
"speed": 5.0
}]
[sub_resource type="SphereShape3D" id="SphereShape3D_x8luf"]
radius = 8.5
[node name="NPC" type="CharacterBody3D" node_paths=PackedStringArray("_movement")]
script = ExtResource("1_00k55")
_movement = NodePath("Scripts/NPCMovement")
[node name="Scripts" type="Node" parent="."]
[node name="NPCMovement" type="Node" parent="Scripts" node_paths=PackedStringArray("body", "sprite")]
script = ExtResource("3_1seh5")
body = NodePath("../..")
sprite = NodePath("../../AnimatedSprite3D")
[node name="InteractableArea" type="Area3D" parent="."]
script = ExtResource("2_x8luf")
metadata/_custom_type_script = "uid://b00rxpveu3v4m"
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractableArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 0)
shape = SubResource("BoxShape3D_1seh5")
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
pixel_size = 1.0
axis = 1
double_sided = false
texture_filter = 0
sprite_frames = SubResource("SpriteFrames_1seh5")
animation = &"walk_south"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8.5, 0)
shape = SubResource("SphereShape3D_x8luf")
[connection signal="interactEvent" from="InteractableArea" to="." method="onInteract"]

View File

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

View File

@@ -0,0 +1,2 @@
@tool
class_name NPCMovement extends "res://entity/EntityMovement.gd"

View File

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

5
entity/npc/NPCTest.gd Normal file
View File

@@ -0,0 +1,5 @@
class_name NPCTest extends Node
func onInteract(playerEntity: Player) -> void:
print("Player has interacted with the NPC.")
UI.TEXTBOX.setText("You have interacted with the NPC.")

View File

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

31
entity/player/Player.gd Normal file
View File

@@ -0,0 +1,31 @@
@tool
class_name Player extends CharacterBody3D
@export var _movement:PlayerMovement
@export var facingDirection:EntityMovement.FacingDirection:
set(value):
if _movement:
_movement.facingDir = value
get:
if _movement:
return _movement.facingDir
return EntityMovement.FacingDirection.SOUTH
@export var walkSpeed:float = 48.0:
set(value):
if _movement:
_movement.walkSpeed = value
get:
if _movement:
return _movement.walkSpeed
return 48.0
@export var runSpeed:float = 64.0:
set(value):
if _movement:
_movement.runSpeed = value
get:
if _movement:
return _movement.runSpeed
return 64.0

View File

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

BIN
entity/player/Player.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

View File

@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cofrgefp8e617" uid="uid://xx3qp5xh7tgu"
path.s3tc="res://.godot/imported/human.png-1880dba459540c27ee8035fcec96bd0b.s3tc.ctex" path.s3tc="res://.godot/imported/Player.png-44a553acafadade6fc26fd4f7692a8d9.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://textures/human.png" source_file="res://entity/player/Player.png"
dest_files=["res://.godot/imported/human.png-1880dba459540c27ee8035fcec96bd0b.s3tc.ctex"] dest_files=["res://.godot/imported/Player.png-44a553acafadade6fc26fd4f7692a8d9.s3tc.ctex"]
[params] [params]

Binary file not shown.

115
entity/player/Player.tscn Normal file
View File

@@ -0,0 +1,115 @@
[gd_scene load_steps=14 format=3 uid="uid://2ch34sio36nv"]
[ext_resource type="Script" uid="uid://ylmy3nvpirgr" path="res://entity/player/Player.gd" id="1_24gqh"]
[ext_resource type="Script" uid="uid://bwxdv3kxrs4oj" path="res://entity/player/PlayerMovement.gd" id="2_o7et6"]
[ext_resource type="Script" uid="uid://b3nty7pvbo58d" path="res://entity/player/PlayerInteraction.gd" id="3_24gqh"]
[ext_resource type="Script" uid="uid://bdv1fj1pwknrs" path="res://entity/player/PlayerInput.gd" id="4_yjynp"]
[ext_resource type="Script" uid="uid://bdjgvyiacbg28" path="res://entity/player/PlayerCamera.gd" id="5_g3lhm"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entity/player/Player.png" id="7_fmb3c"]
[sub_resource type="SphereShape3D" id="SphereShape3D_4pwj0"]
radius = 8.5
[sub_resource type="AtlasTexture" id="AtlasTexture_rl6fg"]
atlas = ExtResource("7_fmb3c")
region = Rect2(16, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_q57vx"]
atlas = ExtResource("7_fmb3c")
region = Rect2(48, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_ak4un"]
atlas = ExtResource("7_fmb3c")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_1ms0h"]
atlas = ExtResource("7_fmb3c")
region = Rect2(32, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_2rv2u"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_rl6fg")
}],
"loop": true,
"name": &"walk_east",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_q57vx")
}],
"loop": true,
"name": &"walk_north",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ak4un")
}],
"loop": true,
"name": &"walk_south",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_1ms0h")
}],
"loop": true,
"name": &"walk_west",
"speed": 5.0
}]
[sub_resource type="BoxShape3D" id="BoxShape3D_g13of"]
size = Vector3(10, 16, 8)
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("_movement")]
script = ExtResource("1_24gqh")
_movement = NodePath("Scripts/PlayerMovement")
[node name="Scripts" type="Node" parent="."]
[node name="PlayerMovement" type="Node" parent="Scripts" node_paths=PackedStringArray("body", "rotate", "sprite")]
script = ExtResource("2_o7et6")
body = NodePath("../..")
rotate = NodePath("../../PlayerRotated")
sprite = NodePath("../../AnimatedSprite3D")
[node name="PlayerInteraction" type="Node" parent="Scripts" node_paths=PackedStringArray("interactableArea", "player")]
script = ExtResource("3_24gqh")
interactableArea = NodePath("../../PlayerRotated/PlayerInteractableArea")
player = NodePath("../..")
[node name="PlayerInput" type="Node" parent="Scripts" node_paths=PackedStringArray("interaction", "movement")]
script = ExtResource("4_yjynp")
interaction = NodePath("../PlayerInteraction")
movement = NodePath("../PlayerMovement")
[node name="PlayerCamera" type="Node" parent="Scripts" node_paths=PackedStringArray("camera", "target")]
script = ExtResource("5_g3lhm")
camera = NodePath("../../PlayerCamera")
target = NodePath("../..")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8.5, 0)
shape = SubResource("SphereShape3D_4pwj0")
[node name="PlayerCamera" type="Camera3D" parent="."]
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0496178, 0, -0.00852585)
pixel_size = 1.0
axis = 1
double_sided = false
texture_filter = 0
sprite_frames = SubResource("SpriteFrames_2rv2u")
animation = &"walk_south"
[node name="PlayerRotated" type="Node3D" parent="."]
[node name="PlayerInteractableArea" type="Area3D" parent="PlayerRotated"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerRotated/PlayerInteractableArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 10)
shape = SubResource("BoxShape3D_g13of")

View File

@@ -0,0 +1,33 @@
@tool
class_name PlayerCamera extends Node
const CAMERA_PIXELS_PER_UNIT = 1.0
const CAMERA_PIXEL_SCALE = 1.0
@export var camera:Camera3D = null
@export var target:Node3D = null
@export var offset:Vector3 = Vector3(0, 0, 12)
func _process(delta: float) -> void:
if !camera || !target:
return
# I tried a few things but this is most consistent for both backbuffer and
# framebuffer viewports.
var viewportHeight = get_viewport().get_visible_rect().size.y;
var unitScale = CAMERA_PIXEL_SCALE * CAMERA_PIXELS_PER_UNIT;
var z:float = (
tan((deg_to_rad(180) - deg_to_rad(camera.fov)) / 2.0) *
(viewportHeight / 2.0)
) / unitScale;
var look = target.global_position;
var position = offset + look;
camera.look_at_from_position(
Vector3(position.x, position.y + z, position.z),
look
);
pass

View File

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

View File

@@ -0,0 +1,13 @@
class_name PlayerInput extends Node
@export var interaction:PlayerInteraction
@export var movement:PlayerMovement
func _process(delta: float) -> void:
if Input.is_action_just_pressed("pause"):
PAUSE.menuPause()
if Input.is_action_just_pressed("interact"):
interaction.interact()
movement._inputDir = Input.get_vector("move_left", "move_right", "move_back", "move_forward").normalized()

View File

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

View File

@@ -0,0 +1,27 @@
class_name PlayerInteraction extends Node
@export var interactableArea:Area3D
@export var player:CharacterBody3D
func canInteract() -> bool:
if PAUSE.isMovementPaused():
return false
return true
func interact() -> void:
if !canInteract():
return
var overlapping = interactableArea.get_overlapping_areas()
var interactable: InteractableArea = null
for node in overlapping:
if !(node is InteractableArea):
continue
interactable = node
break
if !interactable:
return
interactable.interactEvent.emit(player)

View File

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

View File

@@ -0,0 +1,13 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cv8q4cbjyfauh"]
[ext_resource type="Shader" path="res://materials/EntityMaterialShader.gdshader" id="1_gsq3s"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entity/player/Player.png" id="2_awgof"]
[resource]
render_priority = 0
shader = ExtResource("1_gsq3s")
shader_parameter/text = ExtResource("2_awgof")
shader_parameter/tileColumnCount = 4
shader_parameter/tileRowCount = 1
shader_parameter/tile = 0
shader_parameter/color = Color(1, 1, 1, 1)

View File

@@ -0,0 +1,7 @@
@tool
class_name PlayerMovement extends "res://entity/EntityMovement.gd"
func canMove() -> bool:
if PAUSE.isMovementPaused():
return false
return true

View File

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

0
event/EventItem.gd Normal file
View File

1
event/EventItem.gd.uid Normal file
View File

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

3
event/EventResource.gd Normal file
View File

@@ -0,0 +1,3 @@
class_name EventResource extends Resource
@export var eventName:String

View File

@@ -0,0 +1 @@
uid://5nyb2g1kghpv

BIN
locale/en_AU.mo Normal file

Binary file not shown.

View File

@@ -16,128 +16,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.4\n" "X-Generator: Poedit 3.6\n"
# #
# UI # UI
# #
msgid "ui.debug_menu.main_menu" msgid "ui.debug_menu.main_menu"
msgstr "Go to main menu"
msgid "ui.debug_menu.overworld"
msgstr "Go to overworld"
msgid "ui.debug_menu.quest"
msgstr "View Quests"
msgid "ui.debug_menu.inventory"
msgstr "View Inventory"
msgid "ui.debug_menu.event"
msgstr "Debug Events"
msgid "ui.debug_menu.cutscene"
msgstr "Debug Cutscenes"
msgid "ui.debug_menu.cooking"
msgstr "Debug Cooking"
msgid "ui.debug_menu.battle"
msgstr "Debug Battle"
#
# EVENTS
#
msgid "event.get_item.found"
msgid_plural "event.get_item.found_plural"
msgstr[0] "Found {item.title}."
msgstr[1] "Found {quantity} {item.title}."
msgid "event.get_item.given"
msgid_plural "event.get_item.given_plural"
msgstr[0] "Received {item.title}."
msgstr[1] "Received {quantity} {item.title}."
#
# QUESTS
#
msgid "quest.test_quest.title"
msgstr "Learn to cook!"
msgid "quest.test_quest.sweet_potato.title"
msgstr "Scavenge Sweet Potatoes"
msgid "quest.test_quest.sweet_potato.description"
msgstr "Find and collect {quantity} {item.title} so you can learn to cook!"
#
# ITEMS
#
msgid "item.onion.title"
msgid_plural "item.onion.title_plural"
msgstr[0] "Onion"
msgstr[1] "Onions"
msgid "item.onion.description"
msgstr "An onion, a staple of many dishes. It can be used in cooking or eaten raw."
msgid "item.sweet_potato.name"
msgid_plural "item.sweet_potato.name_plural"
msgstr[0] "Sweet Potato"
msgstr[1] "Sweet Potatoes"
msgid "item.sweet_potato.description"
msgstr "A sweet potato, a nutritious and versatile vegetable. It can be used in cooking or eaten raw."
msgid "item.potion.name"
msgid_plural "item.potion.name_plural"
msgstr[0] "Potion"
msgstr[1] "Potions"
msgid "item.potion.description"
msgstr "A potion that restores health. It can be consumed to regain vitality."
msgid "item.baked_sweet_potato.name"
msgid_plural "item.baked_sweet_potato.name_plural"
msgstr[0] "Baked Sweet Potato"
msgstr[1] "Baked Sweet Potatoes"
msgid "item.baked_sweet_potato.description"
msgstr "A sweet potato that has been baked to perfection. It is warm and comforting, perfect for a chilly day."
#
# RECIPES
#
msgid "recipe.baked_sweet_potato.title"
msgstr "Baked Sweet Potato"
#
# SCENES
#
msgid "main_menu.label"
msgstr "" msgstr ""
"Thyme and Fire\n"
"\n"
"Press [input action=debug][/input] to open the debug menu"
# ==============================================================================
#
# MAPS
#
# ==============================================================================
#
# Test Map
#
msgid "map.test_map.title"
msgstr "Test Map"
# Events
msgid "map.test_map.event.gather_onion.text0"
msgstr "I am giving you a quest to gather some ingredients."
msgid "map.test_map.event.gather_onion.text1"
msgstr "Take this to help you on your way."
msgid "map.test_map.event.gather_onion.text2"
msgstr "How goes the quest? Have you gathered the ingredients?"

12
map/TestMap.gd Normal file
View File

@@ -0,0 +1,12 @@
extends Node3D
func _ready():
UI.MADTALK.start_dialog("bare_minimum")
func _input(event):
if (
(event is InputEventKey) and (event.pressed) and (not event.echo) and (event.keycode in [KEY_SPACE, KEY_ENTER, KEY_KP_ENTER])
) or (
(event is InputEventMouseButton) and (event.pressed) and (event.button_index == MOUSE_BUTTON_LEFT)
):
UI.MADTALK.dialog_acknowledge()

1
map/TestMap.gd.uid Normal file
View File

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

18
map/TestMap.tscn Normal file
View File

@@ -0,0 +1,18 @@
[gd_scene load_steps=5 format=3 uid="uid://d0ywgijpuqy0r"]
[ext_resource type="Script" uid="uid://xe6pcuq741xi" path="res://map/TestMap.gd" id="1_6ms5s"]
[ext_resource type="PackedScene" uid="uid://cluuhtfjeodwb" path="res://map/TestMapBase.tscn" id="1_ox0si"]
[ext_resource type="PackedScene" uid="uid://2ch34sio36nv" path="res://entity/player/Player.tscn" id="2_0d2qr"]
[ext_resource type="PackedScene" uid="uid://kabs7mopalmo" path="res://entity/npc/NPC.tscn" id="3_0vfw4"]
[node name="TestMap" type="Node3D"]
script = ExtResource("1_6ms5s")
[node name="TestMapBase" parent="." instance=ExtResource("1_ox0si")]
[node name="Player" parent="." instance=ExtResource("2_0d2qr")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.142, 1.94879, -59.112)
facingDirection = 1
[node name="NPC" parent="." instance=ExtResource("3_0vfw4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.30029, 4.06806, 0.563562)

25
map/TestMapBase.tscn Normal file
View File

@@ -0,0 +1,25 @@
[gd_scene load_steps=5 format=3 uid="uid://cluuhtfjeodwb"]
[ext_resource type="Texture2D" uid="uid://cu1hvpqmqn31n" path="res://icon.svg" id="1_x4ibw"]
[sub_resource type="PlaneMesh" id="PlaneMesh_owt5q"]
size = Vector2(200, 200)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_52cv7"]
shading_mode = 0
albedo_texture = ExtResource("1_x4ibw")
[sub_resource type="BoxShape3D" id="BoxShape3D_x4ibw"]
size = Vector3(200, 0.1, 200)
[node name="TestMapBase" type="Node3D"]
[node name="Ground" type="StaticBody3D" parent="."]
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("PlaneMesh_owt5q")
skeleton = NodePath("../..")
surface_material_override/0 = SubResource("StandardMaterial3D_52cv7")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape3D_x4ibw")

7
meta/InitialScene.tscn Normal file
View File

@@ -0,0 +1,7 @@
[gd_scene load_steps=2 format=3 uid="uid://bs41nqi3ocih3"]
[ext_resource type="PackedScene" uid="uid://d2u7xxqmy8mws" path="res://ui/mainmenu/MainMenu.tscn" id="1_hu3pf"]
[node name="InitialScene" type="Node3D"]
[node name="MainMenu" parent="." instance=ExtResource("1_hu3pf")]

34
meta/OverworldScene.gd Normal file
View File

@@ -0,0 +1,34 @@
class_name OverworldScene extends Node
@export var map:Node3D = null
func _enter_tree() -> void:
OVERWORLD.mapChanged.connect(onMapChanged)
func _ready() -> void:
pass
func _exit_tree() -> void:
OVERWORLD.mapChanged.disconnect(onMapChanged)
func onMapChanged(newMap:PackedScene, playerDestinationNodeName:String) -> void:
print("New map time.", newMap)
for childScene in map.get_children():
map.remove_child(childScene)
if !newMap:
return
var newMapInstance = newMap.instantiate()
map.add_child(newMapInstance)
# Find Player.
if playerDestinationNodeName:
var player = newMapInstance.get_node("Player")
var destNode = newMapInstance.get_node(playerDestinationNodeName)
if player && player is Player && destNode:
player.global_position = destNode.global_position
player.global_rotation.y = destNode.global_rotation.y
elif playerDestinationNodeName:
push_error("Player, or destination node not found in new map.")
pass

View File

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

9
meta/OverworldScene.tscn Normal file
View File

@@ -0,0 +1,9 @@
[gd_scene load_steps=2 format=3 uid="uid://c0k1t3tyiaojl"]
[ext_resource type="Script" uid="uid://dpvccegdmn7s6" path="res://meta/OverworldScene.gd" id="1_fa54r"]
[node name="OverworldScene" type="Node3D" node_paths=PackedStringArray("map")]
script = ExtResource("1_fa54r")
map = NodePath("Map")
[node name="Map" type="Node3D" parent="."]

34
meta/RootScene.gd Normal file
View File

@@ -0,0 +1,34 @@
class_name RootScene extends Node3D
@export var overworld:Node3D = null
@export var initial:Node3D = null
func _enter_tree() -> void:
SCENE.sceneChanged.connect(onSceneChange)
SCENE.setScene(SceneSingleton.SceneType.INITIAL)
func _exit_tree() -> void:
push_error("RootScene should not be removed from the scene tree. This is a bug.")
func onSceneChange(newScene:SceneSingleton.SceneType) -> void:
print("overworld", overworld)
remove_child(overworld)
remove_child(initial)
overworld.visible = false
initial.visible = false
match newScene:
SceneSingleton.SceneType.INITIAL:
add_child(initial)
initial.visible = true
SceneSingleton.SceneType.OVERWORLD:
add_child(overworld)
overworld.visible = true
SceneSingleton.SceneType.UNSET:
pass
_:
pass

1
meta/RootScene.gd.uid Normal file
View File

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

15
meta/RootScene.tscn Normal file
View File

@@ -0,0 +1,15 @@
[gd_scene load_steps=4 format=3 uid="uid://ckkewlcugc8ro"]
[ext_resource type="Script" uid="uid://ml70iui7qpo4" path="res://meta/RootScene.gd" id="1_nky1x"]
[ext_resource type="PackedScene" uid="uid://bs41nqi3ocih3" path="res://meta/InitialScene.tscn" id="2_hkmoa"]
[ext_resource type="PackedScene" uid="uid://c0k1t3tyiaojl" path="res://meta/OverworldScene.tscn" id="2_o1wvd"]
[node name="RootScene" type="Node3D" node_paths=PackedStringArray("overworld", "initial")]
script = ExtResource("1_nky1x")
overworld = NodePath("OverworldScene")
initial = NodePath("InitialScene")
metadata/_custom_type_script = "uid://ml70iui7qpo4"
[node name="OverworldScene" parent="." instance=ExtResource("2_o1wvd")]
[node name="InitialScene" parent="." instance=ExtResource("2_hkmoa")]

View File

@@ -11,26 +11,21 @@ config_version=5
[application] [application]
config/name="Dawn Godot" config/name="Dawn Godot"
run/main_scene="uid://w1q5eoiejmy3" run/main_scene="uid://ckkewlcugc8ro"
config/features=PackedStringArray("4.4", "GL Compatibility") config/features=PackedStringArray("4.4", "GL Compatibility")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[autoload] [autoload]
BATTLE="*res://scripts/Singleton/BattleSystem.gd" PHYSICS="*res://singleton/GamePhysics.gd"
COOKING="*res://scripts/Singleton/CookingSystem.gd" PAUSE="*res://singleton/Pause.gd"
OVERWORLD="*res://scripts/Singleton/OverworldSystem.gd" TRANSITION="*res://singleton/Transition.tscn"
ITEM="*res://scenes/Singletons/Item.tscn" UI="*res://singleton/UI.tscn"
PAUSE="*res://scripts/Singleton/PauseSystem.gd" QUEST="*res://singleton/Quest.tscn"
QUEST="*res://scenes/Singletons/Quest.tscn" OVERWORLD="*res://singleton/Overworld.gd"
SCENE_MANAGER="*res://scripts/Singleton/SceneSystem.gd" SCENE="*res://singleton/Scene.gd"
UI="*res://scenes/Singletons/UI.tscn" MadTalkGlobals="*res://addons/madtalk/runtime/MadTalkGlobals.tscn"
VN="*res://scripts/Singleton/VNSystem.gd"
LOAD="*res://scenes/Singletons/Load.tscn"
RECIPE="*res://scenes/Singletons/Recipe.tscn"
LOCALE="*res://scripts/Singleton/LocaleSystem.gd"
ControllerIcons="*res://addons/controller_icons/ControllerIcons.gd" ControllerIcons="*res://addons/controller_icons/ControllerIcons.gd"
EVENT="*res://scenes/Singletons/Event.tscn"
[debug] [debug]
@@ -41,6 +36,8 @@ gdscript/warnings/shadowed_variable=0
window/size/viewport_width=480 window/size/viewport_width=480
window/size/viewport_height=270 window/size/viewport_height=270
window/size/window_width_override=960
window/size/window_height_override=540
window/stretch/mode="viewport" window/stretch/mode="viewport"
window/stretch/scale_mode="integer" window/stretch/scale_mode="integer"
@@ -50,7 +47,7 @@ project/assembly_name="Dawn Godot"
[editor_plugins] [editor_plugins]
enabled=PackedStringArray("res://addons/controller_icons/plugin.cfg") enabled=PackedStringArray("res://addons/controller_icons/plugin.cfg", "res://addons/madtalk/plugin.cfg")
[filesystem] [filesystem]
@@ -64,7 +61,7 @@ theme/custom_font="uid://ck4rsg0nvvxtq"
[input] [input]
left={ move_left={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
@@ -72,7 +69,7 @@ left={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
] ]
} }
right={ move_right={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
@@ -80,7 +77,7 @@ right={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
] ]
} }
up={ move_forward={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
@@ -88,7 +85,7 @@ up={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
] ]
} }
down={ move_back={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)

View File

@@ -1,41 +0,0 @@
[gd_scene load_steps=9 format=3 uid="uid://bes5p6ckw6d58"]
[ext_resource type="Script" uid="uid://d2jqsiapy07ii" path="res://scripts/Entity/ItemOnGround.gd" id="1_pnyp6"]
[ext_resource type="Script" uid="uid://dtjjqp2atjyhr" path="res://scripts/Entity/Entity.gd" id="2_crfvs"]
[ext_resource type="Script" uid="uid://03dqknw7v4mr" path="res://scripts/Entity/Component/EntityInteractable.gd" id="3_7clu1"]
[ext_resource type="Shader" uid="uid://7h2axb2tsh17" path="res://shaders/NPC Shader.gdshader" id="4_w0eam"]
[ext_resource type="Texture2D" uid="uid://cofrgefp8e617" path="res://textures/human.png" id="5_5uma8"]
[sub_resource type="BoxShape3D" id="BoxShape3D_cpa1u"]
[sub_resource type="QuadMesh" id="QuadMesh_dyaax"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fegux"]
render_priority = 0
shader = ExtResource("4_w0eam")
shader_parameter/npcTexture = ExtResource("5_5uma8")
shader_parameter/color = Color(0.77816, 0.965494, 0.746061, 1)
shader_parameter/frame = 0
shader_parameter/direction = 2
[node name="ItemOnGround" type="StaticBody3D"]
collision_layer = 2
collision_mask = 258
script = ExtResource("1_pnyp6")
[node name="Entity" type="Node" parent="."]
script = ExtResource("2_crfvs")
metadata/_custom_type_script = "uid://dtjjqp2atjyhr"
[node name="EntityInteractable" type="Node" parent="Entity" node_paths=PackedStringArray("entity")]
script = ExtResource("3_7clu1")
entity = NodePath("..")
metadata/_custom_type_script = "uid://03dqknw7v4mr"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_cpa1u")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.173648, 0.984808, 0, -0.984808, 0.173648, 0, 0, 0)
mesh = SubResource("QuadMesh_dyaax")
surface_material_override/0 = SubResource("ShaderMaterial_fegux")

View File

@@ -1,71 +0,0 @@
[gd_scene load_steps=12 format=3 uid="uid://yhtpoum3eek7"]
[ext_resource type="Script" uid="uid://ixwikdguyhf0" path="res://scripts/Entity/Rosa.gd" id="1_r5ufg"]
[ext_resource type="Script" uid="uid://dtjjqp2atjyhr" path="res://scripts/Entity/Entity.gd" id="1_rvn3n"]
[ext_resource type="Script" uid="uid://jd50n00bo05y" path="res://scripts/Entity/RosaCamera.gd" id="2_tr66j"]
[ext_resource type="Script" uid="uid://cjfcpi7sxentf" path="res://scripts/Entity/Component/EntityDirection.gd" id="2_vcxxc"]
[ext_resource type="Shader" uid="uid://7h2axb2tsh17" path="res://shaders/NPC Shader.gdshader" id="3_j5vis"]
[ext_resource type="Script" uid="uid://c5nfs0m6ua4eb" path="res://scripts/Entity/Component/EntityMovement.gd" id="4_7s3uq"]
[ext_resource type="Texture2D" uid="uid://cofrgefp8e617" path="res://textures/human.png" id="4_rvn3n"]
[ext_resource type="Script" uid="uid://dfh2rh8idx267" path="res://scripts/Entity/Component/EntityInteractor.gd" id="5_ug24t"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ls7r8"]
radius = 0.437175
height = 0.945346
[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_rvn3n")
shader_parameter/color = Color(1, 1, 1, 1)
shader_parameter/frame = 0
shader_parameter/direction = 2
[node name="Rosa" type="CharacterBody3D"]
collision_layer = 2
collision_mask = 258
script = ExtResource("1_r5ufg")
metadata/_custom_type_script = "uid://ixwikdguyhf0"
[node name="Entity" type="Node" parent="."]
script = ExtResource("1_rvn3n")
metadata/_custom_type_script = "uid://dtjjqp2atjyhr"
[node name="EntityDirection" type="Node" parent="Entity" node_paths=PackedStringArray("meshInstance", "characterBody")]
script = ExtResource("2_vcxxc")
meshInstance = NodePath("../../MeshInstance3D")
direction = 2
characterBody = NodePath("../..")
metadata/_custom_type_script = "uid://cjfcpi7sxentf"
[node name="EntityMoving" type="Node" parent="Entity" node_paths=PackedStringArray("characterBody", "entity", "entityDirection")]
script = ExtResource("4_7s3uq")
characterBody = NodePath("../..")
entity = NodePath("..")
entityDirection = NodePath("../EntityDirection")
movementType = 0
[node name="EntityInteractor" type="Node" parent="Entity" node_paths=PackedStringArray("entityDirection", "characterBody", "entity")]
script = ExtResource("5_ug24t")
interactorType = 0
entityDirection = NodePath("../EntityDirection")
characterBody = NodePath("../..")
entity = NodePath("..")
metadata/_custom_type_script = "uid://dfh2rh8idx267"
[node name="Rosa Camera" type="Camera3D" parent="." node_paths=PackedStringArray("follow")]
transform = Transform3D(1, 0, 0, 0, 0.130388, 0.991463, 0, -0.991463, 0.130388, 0, 3.14994, 0.404846)
current = true
fov = 30.0
script = ExtResource("2_tr66j")
follow = NodePath("..")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
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, 0, 0)
mesh = SubResource("QuadMesh_dyaax")
surface_material_override/0 = SubResource("ShaderMaterial_fegux")

View File

@@ -1,42 +0,0 @@
[gd_scene load_steps=9 format=3 uid="uid://bkj630bhmnvsi"]
[ext_resource type="Script" uid="uid://bitykguiignfu" path="res://scripts/Entity/Sign.gd" id="1_cpa1u"]
[ext_resource type="Script" uid="uid://dtjjqp2atjyhr" path="res://scripts/Entity/Entity.gd" id="2_obj4d"]
[ext_resource type="Script" uid="uid://03dqknw7v4mr" path="res://scripts/Entity/Component/EntityInteractable.gd" id="3_cpa1u"]
[ext_resource type="Shader" uid="uid://7h2axb2tsh17" path="res://shaders/NPC Shader.gdshader" id="7_vqvna"]
[ext_resource type="Texture2D" uid="uid://cofrgefp8e617" path="res://textures/human.png" id="8_on2eh"]
[sub_resource type="BoxShape3D" id="BoxShape3D_cpa1u"]
[sub_resource type="QuadMesh" id="QuadMesh_dyaax"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_fegux"]
render_priority = 0
shader = ExtResource("7_vqvna")
shader_parameter/npcTexture = ExtResource("8_on2eh")
shader_parameter/color = Color(1, 1, 0, 1)
shader_parameter/frame = 0
shader_parameter/direction = 2
[node name="Sign" type="StaticBody3D"]
collision_layer = 2
collision_mask = 258
script = ExtResource("1_cpa1u")
metadata/_custom_type_script = "uid://bitykguiignfu"
[node name="Entity" type="Node" parent="."]
script = ExtResource("2_obj4d")
metadata/_custom_type_script = "uid://dtjjqp2atjyhr"
[node name="EntityInteractable" type="Node" parent="Entity" node_paths=PackedStringArray("entity")]
script = ExtResource("3_cpa1u")
entity = NodePath("..")
metadata/_custom_type_script = "uid://03dqknw7v4mr"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_cpa1u")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.173648, 0.984808, 0, -0.984808, 0.173648, 0, 0, 0)
mesh = SubResource("QuadMesh_dyaax")
surface_material_override/0 = SubResource("ShaderMaterial_fegux")

View File

@@ -1,60 +0,0 @@
[gd_scene load_steps=11 format=3 uid="uid://dr4b2pmsknuhc"]
[ext_resource type="Script" uid="uid://d23qg1ovkbxst" path="res://scripts/Entity/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://dtjjqp2atjyhr" path="res://scripts/Entity/Entity.gd" id="2_ehu3x"]
[ext_resource type="Script" uid="uid://cjfcpi7sxentf" path="res://scripts/Entity/Component/EntityDirection.gd" id="3_gyi1p"]
[ext_resource type="Script" uid="uid://c5nfs0m6ua4eb" path="res://scripts/Entity/Component/EntityMovement.gd" id="4_3wesq"]
[ext_resource type="Texture2D" uid="uid://cofrgefp8e617" path="res://textures/human.png" id="4_vo0ku"]
[ext_resource type="Script" uid="uid://03dqknw7v4mr" path="res://scripts/Entity/Component/EntityInteractable.gd" id="5_gyi1p"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_dw1sy"]
radius = 0.420979
height = 0.919425
[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("4_vo0ku")
shader_parameter/color = Color(0, 0.563816, 0, 1)
shader_parameter/frame = 0
shader_parameter/direction = 0
[node name="TestNpc" type="CharacterBody3D"]
collision_layer = 2
collision_mask = 258
script = ExtResource("1_1muh7")
metadata/_custom_type_script = "uid://d23qg1ovkbxst"
[node name="Entity" type="Node" parent="."]
script = ExtResource("2_ehu3x")
metadata/_custom_type_script = "uid://dtjjqp2atjyhr"
[node name="EntityDirection" type="Node" parent="Entity" node_paths=PackedStringArray("meshInstance", "characterBody")]
script = ExtResource("3_gyi1p")
meshInstance = NodePath("../../MeshInstance3D")
characterBody = NodePath("../..")
metadata/_custom_type_script = "uid://cjfcpi7sxentf"
[node name="EntityMoving" type="Node" parent="Entity" node_paths=PackedStringArray("characterBody", "entity", "entityDirection")]
script = ExtResource("4_3wesq")
characterBody = NodePath("../..")
entity = NodePath("..")
entityDirection = NodePath("../EntityDirection")
movementType = 2
[node name="EntityInteractable" type="Node" parent="Entity" node_paths=PackedStringArray("entityDirection", "entity")]
script = ExtResource("5_gyi1p")
entityDirection = NodePath("../EntityDirection")
entity = NodePath("..")
metadata/_custom_type_script = "uid://03dqknw7v4mr"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
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")

View File

@@ -1,35 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://w1q5eoiejmy3"]
[ext_resource type="Script" uid="uid://cak4lch21nq30" path="res://scripts/Scene/MainMenuScene.gd" id="1_yqorp"]
[ext_resource type="Script" uid="uid://cq6bvma0kk6tg" path="res://scripts/UI/AdvancedRichText.gd" id="2_0ykhv"]
[node name="MainMenu" type="Node"]
script = ExtResource("1_yqorp")
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="RichTextLabel" parent="Control"]
auto_translate_mode = 2
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -133.5
offset_top = -37.5
offset_right = 133.5
offset_bottom = 37.5
grow_horizontal = 2
grow_vertical = 2
bbcode_enabled = true
text = "main_menu.label"
horizontal_alignment = 1
script = ExtResource("2_0ykhv")
advancedText = "main_menu.label"

View File

@@ -1,156 +0,0 @@
[gd_scene load_steps=17 format=3 uid="uid://dx6fv8n4jl5ku"]
[ext_resource type="PackedScene" uid="uid://yhtpoum3eek7" path="res://scenes/Entities/Rosa.tscn" id="1_7b7hx"]
[ext_resource type="Script" uid="uid://c37crdel0m5mw" path="res://scripts/Map/Map.gd" id="1_ru75d"]
[ext_resource type="PackedScene" uid="uid://dr4b2pmsknuhc" path="res://scenes/Entities/TestNPC.tscn" id="2_cg1ph"]
[ext_resource type="PackedScene" uid="uid://lh713g04d3bg" path="res://scenes/Maps/TestMap/TestMapGround.tscn" id="3_gxq5o"]
[ext_resource type="PackedScene" uid="uid://boj5o4fx41rv8" path="res://scenes/Maps/TestMap/TestMapBuilding.tscn" id="4_brp0k"]
[ext_resource type="PackedScene" uid="uid://bes5p6ckw6d58" path="res://scenes/Entities/ItemOnGround.tscn" id="4_ejcqv"]
[ext_resource type="Script" uid="uid://tkfc88q8m86f" path="res://scripts/Event/EventConversation.gd" id="5_cg1ph"]
[ext_resource type="Script" uid="uid://y7ckj1tn5cro" path="res://scripts/Event/EventTextbox.gd" id="6_gxq5o"]
[ext_resource type="Script" uid="uid://c4d7nithqnx5y" path="res://scripts/Event/Quest/EventStartQuest.gd" id="7_brp0k"]
[ext_resource type="PackedScene" uid="uid://bkj630bhmnvsi" path="res://scenes/Entities/Sign.tscn" id="9_xfqoe"]
[ext_resource type="Script" uid="uid://b41umpbgqfuc2" path="res://scripts/Event/Item/EventGetItem.gd" id="10_avybc"]
[ext_resource type="Script" uid="uid://0ev1l0bf85gj" path="res://scripts/Event/Quest/EventIfQuest.gd" id="10_i48p6"]
[ext_resource type="Script" uid="uid://cs7voh47aoca8" path="res://scripts/Event/EventTrigger.gd" id="13_60ixl"]
[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="TestMap" type="Node3D"]
script = ExtResource("1_ru75d")
title = "map.test_map.title"
[node name="Entities" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.19857, 0.684572, 0.968477)
[node name="Rosa" parent="Entities" instance=ExtResource("1_7b7hx")]
[node name="Green" parent="Entities" node_paths=PackedStringArray("interactEvent") instance=ExtResource("2_cg1ph")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.88604, -0.224994, -1.36774)
interactEvent = NodePath("../../Events/TestConversation")
[node name="Sign" parent="Entities" node_paths=PackedStringArray("interactEvent") instance=ExtResource("9_xfqoe")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.56382, -0.547748, 1.61289)
interactEvent = NodePath("../../Events/TestConversation")
[node name="Onion0" parent="Entities" instance=ExtResource("4_ejcqv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.546944, -0.547748, -3.46628)
itemType = 2
quantity = 2
[node name="Onion1" parent="Entities" instance=ExtResource("4_ejcqv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25922, -0.547748, -4.61426)
itemType = 2
quantity = 2
[node name="Onion2" parent="Entities" instance=ExtResource("4_ejcqv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.83853, -0.547748, -3.29584)
itemType = 2
quantity = 2
[node name="SweetPotato0" parent="Entities" instance=ExtResource("4_ejcqv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.31019, -0.547748, 3.74619)
itemType = 3
[node name="SweetPotato1" parent="Entities" instance=ExtResource("4_ejcqv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0143311, -0.547748, 4.4158)
itemType = 3
[node name="SweetPotato2" parent="Entities" instance=ExtResource("4_ejcqv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.05915, -0.547748, 5.04958)
itemType = 3
[node name="Map" type="Node3D" parent="."]
metadata/_edit_lock_ = true
[node name="Ground" parent="Map" instance=ExtResource("3_gxq5o")]
[node name="Building2" parent="Map" instance=ExtResource("4_brp0k")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.13514, 2.62692, -0.0984068)
collision_layer = 256
collision_mask = 2
[node name="Building" parent="Map" instance=ExtResource("4_brp0k")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.92766, 2.37929, -4.38178)
collision_layer = 256
collision_mask = 2
[node name="WorldEnvironment" type="WorldEnvironment" parent="Map"]
environment = SubResource("Environment_nyivo")
[node name="OmniLight3D" type="OmniLight3D" parent="Map"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.20244, 3.80554)
light_energy = 3.375
shadow_bias = 0.0
shadow_normal_bias = 0.9
omni_range = 281.646
[node name="Events" type="Node" parent="."]
[node name="TestConversation" type="Node" parent="Events"]
script = ExtResource("5_cg1ph")
[node name="After Quest Started" type="Node" parent="Events/TestConversation"]
script = ExtResource("10_i48p6")
type = 6
metadata/_custom_type_script = "uid://0ev1l0bf85gj"
[node name="EventIfQuest" type="Node" parent="Events/TestConversation/After Quest Started"]
script = ExtResource("10_i48p6")
[node name="Text 2" type="Node" parent="Events/TestConversation/After Quest Started/EventIfQuest"]
script = ExtResource("6_gxq5o")
text = "You are reading the words fo god"
[node name="EventIfQuest2" type="Node" parent="Events/TestConversation/After Quest Started"]
script = ExtResource("10_i48p6")
type = 2
[node name="Text 2" type="Node" parent="Events/TestConversation/After Quest Started/EventIfQuest2"]
script = ExtResource("6_gxq5o")
text = "map.test_map.event.gather_onion.text2"
[node name="Before Quest Started" type="Node" parent="Events/TestConversation"]
script = ExtResource("10_i48p6")
type = 7
metadata/_custom_type_script = "uid://0ev1l0bf85gj"
[node name="Text 0" type="Node" parent="Events/TestConversation/Before Quest Started"]
script = ExtResource("6_gxq5o")
text = "map.test_map.event.gather_onion.text0"
[node name="Quest" type="Node" parent="Events/TestConversation/Before Quest Started"]
script = ExtResource("7_brp0k")
metadata/_custom_type_script = "uid://c4d7nithqnx5y"
[node name="Text 1" type="Node" parent="Events/TestConversation/Before Quest Started"]
script = ExtResource("6_gxq5o")
text = "map.test_map.event.gather_onion.text1"
[node name="Get Item" type="Node" parent="Events/TestConversation/Before Quest Started"]
script = ExtResource("10_avybc")
getType = 1
metadata/_custom_type_script = "uid://b41umpbgqfuc2"
[node name="EventTrigger" type="Node" parent="Events"]
script = ExtResource("13_60ixl")
[node name="EventIf" type="Node" parent="Events/EventTrigger"]
script = ExtResource("10_i48p6")
type = 6
metadata/_custom_type_script = "uid://0ev1l0bf85gj"
[node name="Text 0" type="Node" parent="Events/EventTrigger/EventIf"]
script = ExtResource("6_gxq5o")
text = "Triggered"

View File

@@ -1,15 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://boj5o4fx41rv8"]
[sub_resource type="BoxMesh" id="BoxMesh_22rim"]
size = Vector3(5, 5, 5)
[sub_resource type="BoxShape3D" id="BoxShape3D_jh0ui"]
size = Vector3(5, 5, 5)
[node name="Building" type="StaticBody3D"]
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_22rim")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_jh0ui")

View File

@@ -1,31 +0,0 @@
[gd_scene load_steps=6 format=3 uid="uid://lh713g04d3bg"]
[ext_resource type="Shader" uid="uid://67hsyo0qqlfm" path="res://shaders/Map Shader.gdshader" id="1_knx2j"]
[ext_resource type="Texture2D" uid="uid://cu1hvpqmqn31n" path="res://icon.svg" id="2_3bnhs"]
[sub_resource type="BoxMesh" id="BoxMesh_s8iqe"]
lightmap_size_hint = Vector2i(504, 257)
uv2_padding = 0.0
size = Vector3(50, 0.1, 50)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_s8iqe"]
render_priority = 0
shader = ExtResource("1_knx2j")
shader_parameter/tileset = ExtResource("2_3bnhs")
[sub_resource type="BoxShape3D" id="BoxShape3D_s8iqe"]
size = Vector3(50, 0.1, 50)
[node name="Ground" type="StaticBody3D"]
collision_layer = 256
collision_mask = 2
metadata/_edit_lock_ = true
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_s8iqe")
surface_material_override/0 = SubResource("ShaderMaterial_s8iqe")
metadata/_edit_lock_ = true
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_s8iqe")
metadata/_edit_lock_ = true

View File

@@ -1,8 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://tmbx2kit0jyq"]
[ext_resource type="Script" uid="uid://pcncoc6wum4q" path="res://scripts/Scene/OverworldScene.gd" id="1_rfscu"]
[node name="Overworld" type="Node3D"]
script = ExtResource("1_rfscu")
[node name="Map" type="Node3D" parent="."]

View File

@@ -1,9 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://dqde5pj14u71"]
[ext_resource type="Script" uid="uid://dy8gbmwddma3b" path="res://scripts/Singleton/EventSystem.gd" id="1_pu13l"]
[node name="EventSystem" type="Node"]
script = ExtResource("1_pu13l")
metadata/_custom_type_script = "uid://dy8gbmwddma3b"
[node name="StartedEvents" type="Node" parent="."]

View File

@@ -1,44 +0,0 @@
[gd_scene load_steps=5 format=3 uid="uid://mfxht4d8pvjj"]
[ext_resource type="Script" uid="uid://bc4c4eqfrnegb" path="res://scripts/Singleton/ItemSystem.gd" id="1_sv510"]
[ext_resource type="Script" uid="uid://dipe47ljyvycv" path="res://scripts/Item/ingredients/ItemOnion.gd" id="2_w2ka5"]
[ext_resource type="Script" uid="uid://b6v2o563casay" path="res://scripts/Item/medicine/ItemPotion.gd" id="3_q4yin"]
[ext_resource type="Script" uid="uid://c6t5tprnd23t0" path="res://scripts/Item/Item.gd" id="3_v1lpn"]
[node name="Item" type="Node"]
script = ExtResource("1_sv510")
[node name="Ingredients" type="Node" parent="."]
[node name="Onion" type="Node" parent="Ingredients"]
script = ExtResource("2_w2ka5")
title = "item.onion.title"
description_text = "item.onion.description"
type = 2
metadata/_custom_type_script = "uid://b6v2o563casay"
[node name="Item" type="Node" parent="Ingredients"]
script = ExtResource("3_v1lpn")
title = "item.sweet_potato.name"
description_text = "item.sweet_potato.description"
type = 3
metadata/_custom_type_script = "uid://c6t5tprnd23t0"
[node name="Medicine" type="Node" parent="."]
[node name="Item" type="Node" parent="Medicine"]
script = ExtResource("3_q4yin")
title = "item.potion.name"
description_text = "item.potion.description"
category = 0
metadata/_custom_type_script = "uid://b6v2o563casay"
[node name="Food" type="Node" parent="."]
[node name="Item" type="Node" parent="Food"]
script = ExtResource("3_v1lpn")
title = "item.baked_sweet_potato.name"
description_text = "item.baked_sweet_potato.description"
type = 4
category = 3
metadata/_custom_type_script = "uid://c6t5tprnd23t0"

View File

@@ -1,3 +0,0 @@
[gd_scene format=3 uid="uid://dr2o6ymwbwxm1"]
[node name="Load" type="Node"]

View File

@@ -1,23 +0,0 @@
[gd_scene load_steps=4 format=3 uid="uid://cs3kmmd0rfm8w"]
[ext_resource type="Script" uid="uid://dnlg1e8une55l" path="res://scripts/Singleton/QuestSystem.gd" id="1_v2h4q"]
[ext_resource type="Script" uid="uid://dn0kxbe85n40f" path="res://scripts/Quest/Quest.gd" id="2_n4ii1"]
[ext_resource type="Script" uid="uid://de1ao4huhy0hm" path="res://scripts/Quest/QuestObjective.gd" id="3_l8p7p"]
[node name="QuestSystem" type="Node"]
script = ExtResource("1_v2h4q")
[node name="Quests" type="Node" parent="."]
[node name="Test Quest" type="Node" parent="Quests"]
script = ExtResource("2_n4ii1")
title = "quest.test_quest.title"
metadata/_custom_type_script = "uid://dn0kxbe85n40f"
[node name="Find Sweet Potato" type="Node" parent="Quests/Test Quest"]
script = ExtResource("3_l8p7p")
title = "quest.test_quest.sweet_potato.title"
description = "quest.test_quest.sweet_potato.description"
itemType = 3
quantity = 2
metadata/_custom_type_script = "uid://de1ao4huhy0hm"

View File

@@ -1,27 +0,0 @@
[gd_scene load_steps=6 format=3 uid="uid://1l0tymk8cfxu"]
[ext_resource type="Script" uid="uid://b83k8ksk1dpu2" path="res://scripts/Singleton/RecipeSystem.gd" id="1_o4nv4"]
[ext_resource type="Script" uid="uid://dipvg4uwjv6p2" path="res://scripts/Cooking/Recipe.gd" id="2_f5akq"]
[ext_resource type="Script" uid="uid://c26aptwsjs044" path="res://scripts/Item/ItemResource.gd" id="3_b8y03"]
[sub_resource type="Resource" id="Resource_3dxl6"]
script = ExtResource("3_b8y03")
itemType = 3
quantity = 1
metadata/_custom_type_script = "uid://c26aptwsjs044"
[sub_resource type="Resource" id="Resource_b8y03"]
script = ExtResource("3_b8y03")
itemType = 4
quantity = 1
metadata/_custom_type_script = "uid://c26aptwsjs044"
[node name="RecipeSystem" type="Node"]
script = ExtResource("1_o4nv4")
[node name="Baked Sweet Potato" type="Node" parent="."]
script = ExtResource("2_f5akq")
title = "recipe.baked_sweet_potato.title"
ingredients = Array[ExtResource("3_b8y03")]([SubResource("Resource_3dxl6")])
outputs = Array[ExtResource("3_b8y03")]([SubResource("Resource_b8y03")])
metadata/_custom_type_script = "uid://dipvg4uwjv6p2"

View File

@@ -1,45 +0,0 @@
[gd_scene load_steps=7 format=3 uid="uid://b5bwpsh0gcicf"]
[ext_resource type="Script" uid="uid://kvdgrmutu6hl" path="res://scripts/Singleton/UISystem.gd" id="1_g3au4"]
[ext_resource type="PackedScene" uid="uid://verg13jtqwvh" path="res://scenes/UI/DebugMenu.tscn" id="2_is0g4"]
[ext_resource type="PackedScene" uid="uid://bfioi52hjn2kf" path="res://scenes/UI/QuestMenu.tscn" id="2_mpokx"]
[ext_resource type="PackedScene" uid="uid://bkx3l0kckf4a8" path="res://scenes/UI/VNTextbox.tscn" id="3_btpxp"]
[ext_resource type="PackedScene" uid="uid://dl8iqhrpsplmk" path="res://scenes/UI/Inventory/FullInventoryMenu.tscn" id="5_6dyff"]
[ext_resource type="PackedScene" uid="uid://b6s1xdcfcp0xx" path="res://scenes/UI/EventFlagMenu.tscn" id="5_12prj"]
[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
mouse_filter = 2
script = ExtResource("1_g3au4")
[node name="QuestMenu" parent="." instance=ExtResource("2_mpokx")]
visible = false
layout_mode = 1
[node name="FullInventory" parent="." instance=ExtResource("5_6dyff")]
visible = false
layout_mode = 2
anchors_preset = 0
[node name="EventFlagMenu" parent="." instance=ExtResource("5_12prj")]
layout_mode = 1
[node name="VNTextbox" parent="." instance=ExtResource("3_btpxp")]
visible = false
layout_mode = 1
[node name="DebugMenu" parent="." instance=ExtResource("2_is0g4")]
visible = false
layout_mode = 0
anchors_preset = 0
anchor_right = 0.0
anchor_bottom = 0.0
offset_right = 207.0
offset_bottom = 206.0
grow_horizontal = 1
grow_vertical = 1

View File

@@ -1,8 +0,0 @@
# Material for Barrel
newmtl BarrelTexture
Ka 1.000 1.000 1.000
Kd 1.000 1.000 1.000
Ks 0.000 0.000 0.000
d 1.0
illum 1
map_Kd barrel.png

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