Compare commits

..

No commits in common. "04cfdd01dc7ad1e8131e9020a710b221d971c78f" and "b13cf3d96bfff427567e4e4afacde4021cda3a1f" have entirely different histories.

90 changed files with 450 additions and 3385 deletions

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Bartosz Budnik (BudzioT)
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,20 +1,8 @@
# Super Space Game
18 September, 2140 [EARTH STANDARD TIME]. Ash Milian wakes up from a coma. Remembering nothing about the world or their life, you must fly around the C022 solar system as a mercenary to find answers to who you are, and why you're here.
A full remake of my previous Space Game with far more features, content and functionality. The only borrowed assets from the original game are specific sound effects.
A full remake of my previous Space Game with far more features, content and functionality. The only borrowed assets from the original game are sound effects, and also the code for stars. Turns out that's hard to do right.
## Credits
I likely will finish this game after siege, although it will not be immediately.
## Hints for testers
Above all else: THIS IS A PROTOTYPE. While I'm definitely making this into a proper game, it's still a prototype. It's not perfect. It's probably buggy. But I've put a lot of effort into it, so I get a gold star for effort (I will eats it :3)
- In your ship, you can press the SELECT/SHARE/BACK/- button on your controller (or CAPS LOCK on PC) to open the navpanel. You can fast travel and pick up contracts.
- The only real content is in the intro and first contract.
- In the intro, you probably shouldn't fight the enemies that chase you. They are very beefy.
- The first contract is not finished.
The following hints require the console, which can be opened with the TILDE key (the key with ~ on it, usually below [ESC].)
- You can use `summon_enemy` in the console while in space to summon an enemy ship behind you.
- Unable to unholster your gun? Use the console command `give_ground_gun pistol` and try again.
Space station music themes from Roblox 3008 OST by uglyburger0
Input icons by Kenney (they're really good, you can find them [here](https://kenney.nl/assets/input-prompts))

View file

@ -22,9 +22,7 @@ static var button_dictionary = {
JOY_BUTTON_LEFT_SHOULDER: "left_shoulder",
JOY_BUTTON_RIGHT_SHOULDER: "left_shoulder",
JOY_BUTTON_PADDLE1: "left_shoulder",
JOY_BUTTON_BACK: "back",
JOY_BUTTON_LEFT_STICK: "left_stick",
JOY_BUTTON_RIGHT_STICK: "right_stick",
JOY_BUTTON_BACK: "back"
}
static var mouse_button_dictionary = {

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c6sh4c72e10ws"
path="res://.godot/imported/left_stick.png-b6fd8c2882bba6bbb1bf517e0c2b20b2.ctex"
path="res://.godot/imported/xbox_stick_side_l.png-9b2e6474d68e522ac5c74d5b2ae135cd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/super_awesome_input_icons/textures/generic/left_stick.png"
dest_files=["res://.godot/imported/left_stick.png-b6fd8c2882bba6bbb1bf517e0c2b20b2.ctex"]
source_file="res://addons/super_awesome_input_icons/textures/generic/xbox_stick_side_l.png"
dest_files=["res://.godot/imported/xbox_stick_side_l.png-9b2e6474d68e522ac5c74d5b2ae135cd.ctex"]
[params]

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://h435fkxc3v6g"
path="res://.godot/imported/right_stick.png-30fad7bf49d37f7e890b3dc790811c08.ctex"
path="res://.godot/imported/xbox_stick_side_r.png-902b85f39a099dfd98c9b55995248612.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/super_awesome_input_icons/textures/generic/right_stick.png"
dest_files=["res://.godot/imported/right_stick.png-30fad7bf49d37f7e890b3dc790811c08.ctex"]
source_file="res://addons/super_awesome_input_icons/textures/generic/xbox_stick_side_r.png"
dest_files=["res://.godot/imported/xbox_stick_side_r.png-902b85f39a099dfd98c9b55995248612.ctex"]
[params]

View file

@ -1,12 +1,6 @@
[gd_resource type="AudioBusLayout" load_steps=2 format=3 uid="uid://cbmx3klr6k4mt"]
[sub_resource type="AudioEffectLowPassFilter" id="AudioEffectLowPassFilter_j3pel"]
resource_name = "LowPassFilter"
cutoff_hz = 10000.0
[gd_resource type="AudioBusLayout" format=3 uid="uid://cbmx3klr6k4mt"]
[resource]
bus/0/effect/0/effect = SubResource("AudioEffectLowPassFilter_j3pel")
bus/0/effect/0/enabled = false
bus/1/name = &"Music"
bus/1/solo = false
bus/1/mute = false

View file

@ -7,9 +7,9 @@ advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter="sounds/*"
include_filter=""
exclude_filter=""
export_path="export/windows/ssg-prototype.exe"
export_path="export/windows/super-space-game.exe"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
@ -65,301 +65,3 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
[preset.1]
name="macOS"
platform="macOS"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter="sounds/*"
exclude_filter=""
export_path="export/mac/ssg-prototype.app"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
export/distribution_type=1
binary_format/architecture="universal"
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
application/icon=""
application/icon_interpolation=4
application/bundle_identifier="com.toasterpanic.super-space-game-prototype"
application/signature=""
application/app_category="Games"
application/short_version=""
application/version=""
application/copyright=""
application/copyright_localized={}
application/min_macos_version_x86_64="10.12"
application/min_macos_version_arm64="11.00"
application/export_angle=0
display/high_res=true
shader_baker/enabled=false
application/additional_plist_content=""
xcode/platform_build="14C18"
xcode/sdk_version="13.1"
xcode/sdk_build="22C55"
xcode/sdk_name="macosx13.1"
xcode/xcode_version="1420"
xcode/xcode_build="14C18"
codesign/codesign=1
codesign/installer_identity=""
codesign/apple_team_id=""
codesign/identity=""
codesign/entitlements/custom_file=""
codesign/entitlements/allow_jit_code_execution=false
codesign/entitlements/allow_unsigned_executable_memory=false
codesign/entitlements/allow_dyld_environment_variables=false
codesign/entitlements/disable_library_validation=false
codesign/entitlements/audio_input=false
codesign/entitlements/camera=false
codesign/entitlements/location=false
codesign/entitlements/address_book=false
codesign/entitlements/calendars=false
codesign/entitlements/photos_library=false
codesign/entitlements/apple_events=false
codesign/entitlements/debugging=false
codesign/entitlements/app_sandbox/enabled=false
codesign/entitlements/app_sandbox/network_server=false
codesign/entitlements/app_sandbox/network_client=false
codesign/entitlements/app_sandbox/device_usb=false
codesign/entitlements/app_sandbox/device_bluetooth=false
codesign/entitlements/app_sandbox/files_downloads=0
codesign/entitlements/app_sandbox/files_pictures=0
codesign/entitlements/app_sandbox/files_music=0
codesign/entitlements/app_sandbox/files_movies=0
codesign/entitlements/app_sandbox/files_user_selected=0
codesign/entitlements/app_sandbox/helper_executables=[]
codesign/entitlements/additional=""
codesign/custom_options=PackedStringArray()
notarization/notarization=0
privacy/microphone_usage_description=""
privacy/microphone_usage_description_localized={}
privacy/camera_usage_description=""
privacy/camera_usage_description_localized={}
privacy/location_usage_description=""
privacy/location_usage_description_localized={}
privacy/address_book_usage_description=""
privacy/address_book_usage_description_localized={}
privacy/calendar_usage_description=""
privacy/calendar_usage_description_localized={}
privacy/photos_library_usage_description=""
privacy/photos_library_usage_description_localized={}
privacy/desktop_folder_usage_description=""
privacy/desktop_folder_usage_description_localized={}
privacy/documents_folder_usage_description=""
privacy/documents_folder_usage_description_localized={}
privacy/downloads_folder_usage_description=""
privacy/downloads_folder_usage_description_localized={}
privacy/network_volumes_usage_description=""
privacy/network_volumes_usage_description_localized={}
privacy/removable_volumes_usage_description=""
privacy/removable_volumes_usage_description_localized={}
privacy/tracking_enabled=false
privacy/tracking_domains=PackedStringArray()
privacy/collected_data/name/collected=false
privacy/collected_data/name/linked_to_user=false
privacy/collected_data/name/used_for_tracking=false
privacy/collected_data/name/collection_purposes=0
privacy/collected_data/email_address/collected=false
privacy/collected_data/email_address/linked_to_user=false
privacy/collected_data/email_address/used_for_tracking=false
privacy/collected_data/email_address/collection_purposes=0
privacy/collected_data/phone_number/collected=false
privacy/collected_data/phone_number/linked_to_user=false
privacy/collected_data/phone_number/used_for_tracking=false
privacy/collected_data/phone_number/collection_purposes=0
privacy/collected_data/physical_address/collected=false
privacy/collected_data/physical_address/linked_to_user=false
privacy/collected_data/physical_address/used_for_tracking=false
privacy/collected_data/physical_address/collection_purposes=0
privacy/collected_data/other_contact_info/collected=false
privacy/collected_data/other_contact_info/linked_to_user=false
privacy/collected_data/other_contact_info/used_for_tracking=false
privacy/collected_data/other_contact_info/collection_purposes=0
privacy/collected_data/health/collected=false
privacy/collected_data/health/linked_to_user=false
privacy/collected_data/health/used_for_tracking=false
privacy/collected_data/health/collection_purposes=0
privacy/collected_data/fitness/collected=false
privacy/collected_data/fitness/linked_to_user=false
privacy/collected_data/fitness/used_for_tracking=false
privacy/collected_data/fitness/collection_purposes=0
privacy/collected_data/payment_info/collected=false
privacy/collected_data/payment_info/linked_to_user=false
privacy/collected_data/payment_info/used_for_tracking=false
privacy/collected_data/payment_info/collection_purposes=0
privacy/collected_data/credit_info/collected=false
privacy/collected_data/credit_info/linked_to_user=false
privacy/collected_data/credit_info/used_for_tracking=false
privacy/collected_data/credit_info/collection_purposes=0
privacy/collected_data/other_financial_info/collected=false
privacy/collected_data/other_financial_info/linked_to_user=false
privacy/collected_data/other_financial_info/used_for_tracking=false
privacy/collected_data/other_financial_info/collection_purposes=0
privacy/collected_data/precise_location/collected=false
privacy/collected_data/precise_location/linked_to_user=false
privacy/collected_data/precise_location/used_for_tracking=false
privacy/collected_data/precise_location/collection_purposes=0
privacy/collected_data/coarse_location/collected=false
privacy/collected_data/coarse_location/linked_to_user=false
privacy/collected_data/coarse_location/used_for_tracking=false
privacy/collected_data/coarse_location/collection_purposes=0
privacy/collected_data/sensitive_info/collected=false
privacy/collected_data/sensitive_info/linked_to_user=false
privacy/collected_data/sensitive_info/used_for_tracking=false
privacy/collected_data/sensitive_info/collection_purposes=0
privacy/collected_data/contacts/collected=false
privacy/collected_data/contacts/linked_to_user=false
privacy/collected_data/contacts/used_for_tracking=false
privacy/collected_data/contacts/collection_purposes=0
privacy/collected_data/emails_or_text_messages/collected=false
privacy/collected_data/emails_or_text_messages/linked_to_user=false
privacy/collected_data/emails_or_text_messages/used_for_tracking=false
privacy/collected_data/emails_or_text_messages/collection_purposes=0
privacy/collected_data/photos_or_videos/collected=false
privacy/collected_data/photos_or_videos/linked_to_user=false
privacy/collected_data/photos_or_videos/used_for_tracking=false
privacy/collected_data/photos_or_videos/collection_purposes=0
privacy/collected_data/audio_data/collected=false
privacy/collected_data/audio_data/linked_to_user=false
privacy/collected_data/audio_data/used_for_tracking=false
privacy/collected_data/audio_data/collection_purposes=0
privacy/collected_data/gameplay_content/collected=false
privacy/collected_data/gameplay_content/linked_to_user=false
privacy/collected_data/gameplay_content/used_for_tracking=false
privacy/collected_data/gameplay_content/collection_purposes=0
privacy/collected_data/customer_support/collected=false
privacy/collected_data/customer_support/linked_to_user=false
privacy/collected_data/customer_support/used_for_tracking=false
privacy/collected_data/customer_support/collection_purposes=0
privacy/collected_data/other_user_content/collected=false
privacy/collected_data/other_user_content/linked_to_user=false
privacy/collected_data/other_user_content/used_for_tracking=false
privacy/collected_data/other_user_content/collection_purposes=0
privacy/collected_data/browsing_history/collected=false
privacy/collected_data/browsing_history/linked_to_user=false
privacy/collected_data/browsing_history/used_for_tracking=false
privacy/collected_data/browsing_history/collection_purposes=0
privacy/collected_data/search_hhistory/collected=false
privacy/collected_data/search_hhistory/linked_to_user=false
privacy/collected_data/search_hhistory/used_for_tracking=false
privacy/collected_data/search_hhistory/collection_purposes=0
privacy/collected_data/user_id/collected=false
privacy/collected_data/user_id/linked_to_user=false
privacy/collected_data/user_id/used_for_tracking=false
privacy/collected_data/user_id/collection_purposes=0
privacy/collected_data/device_id/collected=false
privacy/collected_data/device_id/linked_to_user=false
privacy/collected_data/device_id/used_for_tracking=false
privacy/collected_data/device_id/collection_purposes=0
privacy/collected_data/purchase_history/collected=false
privacy/collected_data/purchase_history/linked_to_user=false
privacy/collected_data/purchase_history/used_for_tracking=false
privacy/collected_data/purchase_history/collection_purposes=0
privacy/collected_data/product_interaction/collected=false
privacy/collected_data/product_interaction/linked_to_user=false
privacy/collected_data/product_interaction/used_for_tracking=false
privacy/collected_data/product_interaction/collection_purposes=0
privacy/collected_data/advertising_data/collected=false
privacy/collected_data/advertising_data/linked_to_user=false
privacy/collected_data/advertising_data/used_for_tracking=false
privacy/collected_data/advertising_data/collection_purposes=0
privacy/collected_data/other_usage_data/collected=false
privacy/collected_data/other_usage_data/linked_to_user=false
privacy/collected_data/other_usage_data/used_for_tracking=false
privacy/collected_data/other_usage_data/collection_purposes=0
privacy/collected_data/crash_data/collected=false
privacy/collected_data/crash_data/linked_to_user=false
privacy/collected_data/crash_data/used_for_tracking=false
privacy/collected_data/crash_data/collection_purposes=0
privacy/collected_data/performance_data/collected=false
privacy/collected_data/performance_data/linked_to_user=false
privacy/collected_data/performance_data/used_for_tracking=false
privacy/collected_data/performance_data/collection_purposes=0
privacy/collected_data/other_diagnostic_data/collected=false
privacy/collected_data/other_diagnostic_data/linked_to_user=false
privacy/collected_data/other_diagnostic_data/used_for_tracking=false
privacy/collected_data/other_diagnostic_data/collection_purposes=0
privacy/collected_data/environment_scanning/collected=false
privacy/collected_data/environment_scanning/linked_to_user=false
privacy/collected_data/environment_scanning/used_for_tracking=false
privacy/collected_data/environment_scanning/collection_purposes=0
privacy/collected_data/hands/collected=false
privacy/collected_data/hands/linked_to_user=false
privacy/collected_data/hands/used_for_tracking=false
privacy/collected_data/hands/collection_purposes=0
privacy/collected_data/head/collected=false
privacy/collected_data/head/linked_to_user=false
privacy/collected_data/head/used_for_tracking=false
privacy/collected_data/head/collection_purposes=0
privacy/collected_data/other_data_types/collected=false
privacy/collected_data/other_data_types/linked_to_user=false
privacy/collected_data/other_data_types/used_for_tracking=false
privacy/collected_data/other_data_types/collection_purposes=0
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.2]
name="Linux"
platform="Linux"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter="sounds/*"
exclude_filter=""
export_path="export/linux/ssg-prototype.x86_64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.2.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=true
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""

11
follower_click.gd Normal file
View file

@ -0,0 +1,11 @@
extends Marker2D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
position = get_global_mouse_position()

1
follower_click.gd.uid Normal file
View file

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

View file

@ -225,12 +225,6 @@ aim_down={
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
]
}
toggle_holster={
"deadzone": 0.2,
"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":4194329,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":8,"pressure":0.0,"pressed":true,"script":null)
]
}
[physics]
@ -242,6 +236,5 @@ toggle_holster={
textures/canvas_textures/default_texture_filter=0
renderer/rendering_method="mobile"
textures/vram_compression/import_etc2_astc=true
environment/defaults/default_clear_color=Color(0, 0, 0, 1)
2d/snap/snap_2d_transforms_to_pixel=true

View file

@ -1,9 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://bav8ogrhgycaw"]
[ext_resource type="Texture2D" uid="uid://cfuclgb21yw7n" path="res://textures/navigation_marker.png" id="1_i4ju7"]
[ext_resource type="Script" uid="uid://ddwxm6i060srm" path="res://scripts/navigation_marker.gd" id="2_yh82h"]
[node name="AlertnessMarker" type="Sprite2D"]
modulate = Color(1, 0, 0, 1)
texture = ExtResource("1_i4ju7")
script = ExtResource("2_yh82h")

View file

@ -1,20 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://b28c58tdwi3k5"]
[ext_resource type="Script" uid="uid://c3m22vi3fsimq" path="res://scripts/contract_item.gd" id="1_y4oga"]
[node name="ContractItem" type="VBoxContainer"]
script = ExtResource("1_y4oga")
[node name="Label" type="RichTextLabel" parent="."]
layout_mode = 2
bbcode_enabled = true
text = "[font size=24]space station 1[/font]
1000u away"
fit_content = true
scroll_active = false
[node name="Button" type="Button" parent="."]
layout_mode = 2
text = "select"
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]

View file

@ -1,104 +0,0 @@
[gd_scene load_steps=12 format=3 uid="uid://cs30mgkcn74is"]
[ext_resource type="Script" uid="uid://b88ykyte6oi3i" path="res://scripts/door_medium_horizontial.gd" id="1_8opqd"]
[ext_resource type="Texture2D" uid="uid://djmlhid6f4xwi" path="res://textures/door_medium_horziontial.png" id="2_8opqd"]
[sub_resource type="AtlasTexture" id="AtlasTexture_ydv31"]
atlas = ExtResource("2_8opqd")
region = Rect2(384, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_tlrp8"]
atlas = ExtResource("2_8opqd")
region = Rect2(320, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ruhr2"]
atlas = ExtResource("2_8opqd")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_388o4"]
atlas = ExtResource("2_8opqd")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_apq5w"]
atlas = ExtResource("2_8opqd")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_kxlda"]
atlas = ExtResource("2_8opqd")
region = Rect2(64, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_5gimo"]
atlas = ExtResource("2_8opqd")
region = Rect2(0, 0, 64, 64)
[sub_resource type="SpriteFrames" id="SpriteFrames_vvdds"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ydv31")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tlrp8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ruhr2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_388o4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_apq5w")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kxlda")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5gimo")
}],
"loop": false,
"name": &"default",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_5gimo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kxlda")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_apq5w")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_388o4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ruhr2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tlrp8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ydv31")
}],
"loop": false,
"name": &"open",
"speed": 12.0
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bhfm6"]
size = Vector2(96, 32)
[node name="DoorMediumHorizontial" type="StaticBody2D"]
scale = Vector2(2, 2)
script = ExtResource("1_8opqd")
[node name="Sprite" type="AnimatedSprite2D" parent="."]
sprite_frames = SubResource("SpriteFrames_vvdds")
autoplay = "default"
frame = 6
frame_progress = 1.0
[node name="CollisionShape" type="CollisionShape2D" parent="."]
position = Vector2(0, 16)
shape = SubResource("RectangleShape2D_bhfm6")

View file

@ -36,11 +36,9 @@ bus = &"Sound Effects"
[node name="Fire" type="AudioStreamPlayer" parent="."]
stream = ExtResource("5_ipns3")
bus = &"Sound Effects"
[node name="Explode" type="AudioStreamPlayer" parent="."]
stream = ExtResource("5_ipns3")
bus = &"Sound Effects"
[node name="Sprite" type="Sprite2D" parent="."]
texture = ExtResource("6_w8i8w")

View file

@ -1,133 +0,0 @@
[gd_scene load_steps=14 format=3 uid="uid://dh3psx6ilrtql"]
[ext_resource type="Script" uid="uid://bv7ymrwe6ciax" path="res://scripts/enemy_ground.gd" id="1_hqfmb"]
[ext_resource type="AudioStream" uid="uid://dpkn65kpftlmr" path="res://sounds/alerted.mp3" id="2_egpqw"]
[ext_resource type="AudioStream" uid="uid://boiv2kfau8gop" path="res://sounds/detecting.mp3" id="3_6bsrn"]
[ext_resource type="Texture2D" uid="uid://c0cyhybh30ogt" path="res://textures/player-ground-sheet.png" id="4_tcxjb"]
[ext_resource type="Texture2D" uid="uid://csrlh1sbdroud" path="res://textures/pistol.png" id="5_k5k1o"]
[ext_resource type="AudioStream" uid="uid://5x8fl2mk082h" path="res://sounds/gunshot_1.mp3" id="6_sh8im"]
[sub_resource type="AtlasTexture" id="AtlasTexture_jo68p"]
atlas = ExtResource("4_tcxjb")
region = Rect2(0, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_6gpfv"]
atlas = ExtResource("4_tcxjb")
region = Rect2(64, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_fd1o3"]
atlas = ExtResource("4_tcxjb")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_yqhs4"]
atlas = ExtResource("4_tcxjb")
region = Rect2(128, 0, 64, 64)
[sub_resource type="SpriteFrames" id="SpriteFrames_vmpfq"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_jo68p")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6gpfv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fd1o3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yqhs4")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_jo68p")
}],
"loop": true,
"name": &"idle",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_6gpfv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jo68p")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fd1o3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yqhs4")
}],
"loop": true,
"name": &"walk",
"speed": 7.0
}]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_jxmby"]
radius = 21.0
height = 48.0
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_tvsp8"]
radius = 25.0
height = 148.0
[node name="Enemy" type="CharacterBody2D"]
script = ExtResource("1_hqfmb")
[node name="Alerted" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("2_egpqw")
volume_db = 8.0
bus = &"Sound Effects"
[node name="Detecting" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("3_6bsrn")
bus = &"Sound Effects"
parameters/looping = true
[node name="Sprite" type="AnimatedSprite2D" parent="."]
scale = Vector2(2, 2)
sprite_frames = SubResource("SpriteFrames_vmpfq")
[node name="CollisionShape" type="CollisionShape2D" parent="."]
position = Vector2(0, 40)
shape = SubResource("CapsuleShape2D_jxmby")
[node name="LineOfSight" type="RayCast2D" parent="."]
target_position = Vector2(2048, 0)
collision_mask = 2
collide_with_areas = true
[node name="HeldItem" type="Node2D" parent="."]
[node name="Cast" type="RayCast2D" parent="HeldItem"]
position = Vector2(64, 0)
target_position = Vector2(204800, 0)
collision_mask = 2
collide_with_areas = true
[node name="Sprite" type="Sprite2D" parent="HeldItem"]
position = Vector2(56, 0)
texture = ExtResource("5_k5k1o")
[node name="Gunshot" type="AudioStreamPlayer2D" parent="HeldItem"]
stream = ExtResource("6_sh8im")
bus = &"Sound Effects"
[node name="Hitbox" type="Area2D" parent="."]
collision_layer = 2
collision_mask = 2
[node name="CollisionShape" type="CollisionShape2D" parent="Hitbox"]
shape = SubResource("CapsuleShape2D_tvsp8")
debug_color = Color(1, 0, 0, 0.41960785)
[node name="Navagent" type="NavigationAgent2D" parent="."]
path_desired_distance = 34.0
target_desired_distance = 34.0
path_postprocessing = 1
avoidance_enabled = true

File diff suppressed because one or more lines are too long

View file

@ -1,8 +1,7 @@
[gd_scene load_steps=37 format=3 uid="uid://by43ihcec8e8q"]
[gd_scene load_steps=27 format=3 uid="uid://by43ihcec8e8q"]
[ext_resource type="Script" uid="uid://b2sw6ymaf4t0s" path="res://scripts/game_ground.gd" id="1_6ra5r"]
[ext_resource type="Script" uid="uid://dowu512otgyyf" path="res://scripts/player_ground.gd" id="3_8gbjj"]
[ext_resource type="AudioStream" uid="uid://cwidt34ehvre4" path="res://sounds/ui_select.mp3" id="3_26mqe"]
[ext_resource type="AudioStream" uid="uid://cdl70q0x28717" path="res://sounds/dialogue.mp3" id="3_rncil"]
[ext_resource type="Texture2D" uid="uid://c0cyhybh30ogt" path="res://textures/player-ground-sheet.png" id="4_2c1ag"]
[ext_resource type="Texture2D" uid="uid://csrlh1sbdroud" path="res://textures/pistol.png" id="5_8gbjj"]
@ -11,13 +10,8 @@
[ext_resource type="Shader" uid="uid://d3hoh7ec2w8q7" path="res://scripts/outline.gdshader" id="7_vuhkc"]
[ext_resource type="Shader" uid="uid://d2e0541hawkml" path="res://scripts/vignette.gdshader" id="9_5vwr8"]
[ext_resource type="Shader" uid="uid://bk7q00br1ms30" path="res://scripts/retro.gdshader" id="9_257nh"]
[ext_resource type="PackedScene" uid="uid://bav8ogrhgycaw" path="res://scenes/alertness_marker.tscn" id="9_hby33"]
[ext_resource type="Script" uid="uid://s7dwusi00l3v" path="res://scripts/alertness_marker.gd" id="10_e3s4u"]
[ext_resource type="Texture2D" uid="uid://cwa4uu7hrw2l0" path="res://textures/save_indicator.png" id="13_176r3"]
[ext_resource type="PackedScene" uid="uid://b6bq2viqao61m" path="res://scenes/pause_menu.tscn" id="14_vuhkc"]
[ext_resource type="Texture2D" uid="uid://dauoebs801ngm" path="res://addons/super_awesome_input_icons/textures/keyboard/question.png" id="16_e3s4u"]
[ext_resource type="Script" uid="uid://b2maxk5g6yb0i" path="res://addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd" id="16_hby33"]
[ext_resource type="PackedScene" uid="uid://behjlujs230r2" path="res://scenes/mission_objectives.tscn" id="18_e3s4u"]
[ext_resource type="PackedScene" uid="uid://dhcfrsf726k68" path="res://scenes/dialogue_select_button.tscn" id="19_qqas2"]
[sub_resource type="AtlasTexture" id="AtlasTexture_jo68p"]
@ -114,33 +108,6 @@ font_size = 48
outline_size = 4
outline_color = Color(0, 0, 0, 1)
[sub_resource type="LabelSettings" id="LabelSettings_176r3"]
font_size = 32
outline_size = 4
outline_color = Color(0, 0, 0, 1)
[sub_resource type="AtlasTexture" id="AtlasTexture_vuhkc"]
atlas = ExtResource("13_176r3")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_26mqe"]
atlas = ExtResource("13_176r3")
region = Rect2(16, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_257nh"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_vuhkc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_26mqe")
}],
"loop": true,
"name": &"default",
"speed": 2.0
}]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ypt7u"]
shader = ExtResource("9_257nh")
shader_parameter/shake = 0.002000000095
@ -162,14 +129,7 @@ y_sort_enabled = true
script = ExtResource("1_6ra5r")
[node name="Dialogue" type="AudioStreamPlayer" parent="."]
process_mode = 3
stream = ExtResource("3_rncil")
bus = &"Sound Effects"
[node name="UiSelect" type="AudioStreamPlayer" parent="."]
process_mode = 3
stream = ExtResource("3_26mqe")
bus = &"Sound Effects"
[node name="PlayerGround" type="CharacterBody2D" parent="."]
position = Vector2(349, -58)
@ -217,9 +177,6 @@ collision_mask = 2
shape = SubResource("CapsuleShape2D_8gbjj")
debug_color = Color(1, 0, 0, 0.41960785)
[node name="AlertnessMarker" parent="PlayerGround" instance=ExtResource("9_hby33")]
script = ExtResource("10_e3s4u")
[node name="UI" type="CanvasLayer" parent="."]
[node name="Vignette" type="ColorRect" parent="UI"]
@ -302,155 +259,6 @@ layout_mode = 2
text = "TO INTERACT"
label_settings = SubResource("LabelSettings_c2suo")
[node name="MoveTutorial" type="HFlowContainer" parent="UI/Control"]
visible = false
modulate = Color(1, 1, 1, 0.53333336)
layout_mode = 1
anchors_preset = -1
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_bottom = -245.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="End2" type="Label" parent="UI/Control/MoveTutorial"]
layout_mode = 2
text = "MOVE"
label_settings = SubResource("LabelSettings_176r3")
[node name="InputIconTextureRect" type="TextureRect" parent="UI/Control/MoveTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "ground_up"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect2" type="TextureRect" parent="UI/Control/MoveTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "ground_down"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect3" type="TextureRect" parent="UI/Control/MoveTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "ground_left"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect4" type="TextureRect" parent="UI/Control/MoveTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "ground_right"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="UnholsterTutorial" type="HFlowContainer" parent="UI/Control"]
visible = false
modulate = Color(1, 1, 1, 0.53333336)
layout_mode = 1
anchors_preset = -1
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_bottom = -245.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="End2" type="Label" parent="UI/Control/UnholsterTutorial"]
layout_mode = 2
text = "TOGGLE WEAPON"
label_settings = SubResource("LabelSettings_176r3")
[node name="InputIconTextureRect" type="TextureRect" parent="UI/Control/UnholsterTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "toggle_holster"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="GunTutorial" type="HFlowContainer" parent="UI/Control"]
visible = false
modulate = Color(1, 1, 1, 0.53333336)
layout_mode = 1
anchors_preset = -1
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_bottom = -245.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="End2" type="Label" parent="UI/Control/GunTutorial"]
layout_mode = 2
text = "FIRE"
label_settings = SubResource("LabelSettings_176r3")
[node name="InputIconTextureRect" type="TextureRect" parent="UI/Control/GunTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "fire"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="End3" type="Label" parent="UI/Control/GunTutorial"]
layout_mode = 2
text = " | AIM"
label_settings = SubResource("LabelSettings_176r3")
[node name="InputIconTextureRect5" type="TextureRect" parent="UI/Control/GunTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "aim_up"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect6" type="TextureRect" parent="UI/Control/GunTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "aim_down"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect7" type="TextureRect" parent="UI/Control/GunTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "aim_left"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect8" type="TextureRect" parent="UI/Control/GunTutorial"]
custom_minimum_size = Vector2(64, 64)
layout_mode = 2
texture = ExtResource("16_e3s4u")
expand_mode = 1
script = ExtResource("16_hby33")
action_name = "aim_right"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="DialogueOptions" type="VBoxContainer" parent="UI/Control"]
visible = false
custom_minimum_size = Vector2(128, 0)
@ -495,35 +303,6 @@ metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="Button" parent="UI/Control/DialogueOptions" instance=ExtResource("19_qqas2")]
layout_mode = 2
[node name="SaveIndicator" type="Control" parent="UI/Control"]
visible = false
custom_minimum_size = Vector2(64, 64)
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -64.0
offset_top = -64.0
grow_horizontal = 0
grow_vertical = 0
[node name="SaveIcon" type="AnimatedSprite2D" parent="UI/Control/SaveIndicator"]
position = Vector2(32, 32)
scale = Vector2(4, 4)
sprite_frames = SubResource("SpriteFrames_257nh")
autoplay = "default"
frame_progress = 0.6029871
[node name="PauseMenu" parent="UI/Control" instance=ExtResource("14_vuhkc")]
layout_mode = 1
[node name="MissionObjectives" parent="UI/Control" instance=ExtResource("18_e3s4u")]
layout_mode = 1
offset_left = -256.0
offset_bottom = 69.0
[node name="Shader" type="ColorRect" parent="UI"]
material = SubResource("ShaderMaterial_ypt7u")
anchors_preset = 15

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,37 +0,0 @@
[gd_scene load_steps=5 format=3 uid="uid://behjlujs230r2"]
[ext_resource type="Script" uid="uid://ceua7bjh8xokf" path="res://scripts/mission_objectives.gd" id="1_pg0np"]
[ext_resource type="FontFile" uid="uid://donsvh2l775rb" path="res://fonts/Doto.ttf" id="2_80tcl"]
[sub_resource type="LabelSettings" id="LabelSettings_2tk4m"]
font = ExtResource("2_80tcl")
font_size = 32
shadow_size = 4
shadow_color = Color(0, 0, 0, 1)
[sub_resource type="LabelSettings" id="LabelSettings_e3s4u"]
font_size = 18
shadow_size = 4
shadow_color = Color(0, 0, 0, 1)
[node name="MissionObjectives" type="VBoxContainer"]
custom_minimum_size = Vector2(256, 0)
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -40.0
offset_bottom = 40.0
grow_horizontal = 0
script = ExtResource("1_pg0np")
[node name="Label" type="Label" parent="."]
layout_mode = 2
text = "WAKING UP"
label_settings = SubResource("LabelSettings_2tk4m")
horizontal_alignment = 1
[node name="Label2" type="Label" parent="."]
layout_mode = 2
text = "- RUN!"
label_settings = SubResource("LabelSettings_e3s4u")
autowrap_mode = 3

View file

@ -1,107 +0,0 @@
[gd_scene load_steps=7 format=3 uid="uid://dx7buubd8c45c"]
[ext_resource type="Script" uid="uid://wd3la6kvbm6e" path="res://scripts/objective_list_item.gd" id="1_7qfvb"]
[sub_resource type="LabelSettings" id="LabelSettings_a2dn8"]
font_size = 18
[sub_resource type="Animation" id="Animation_a2dn8"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale:y")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [1.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 0, 0, 1)]
}
[sub_resource type="Animation" id="Animation_7qfvb"]
resource_name = "show"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.75),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 1, 1, 1), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:scale:y")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.23333335),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
}
[sub_resource type="Animation" id="Animation_v5l3y"]
resource_name = "hide"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale:y")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.8666667, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [1.0, 0.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 1, 0, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_v5l3y"]
_data = {
&"RESET": SubResource("Animation_a2dn8"),
&"hide": SubResource("Animation_v5l3y"),
&"show": SubResource("Animation_7qfvb")
}
[node name="ObjectiveListItem" type="Label"]
modulate = Color(0, 0, 0, 1)
custom_minimum_size = Vector2(256, 0)
text = "WAKING UP"
label_settings = SubResource("LabelSettings_a2dn8")
autowrap_mode = 3
script = ExtResource("1_7qfvb")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_v5l3y")
}

View file

@ -1,38 +0,0 @@
[gd_scene load_steps=6 format=3 uid="uid://c2s1tterykyu5"]
[ext_resource type="Script" uid="uid://ck38qwl4qytnt" path="res://scripts/particle_group.gd" id="1_8186p"]
[ext_resource type="Texture2D" uid="uid://ccfofitk3x5jj" path="res://textures/particles/laser.png" id="2_a658j"]
[sub_resource type="Curve" id="Curve_ipns3"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.49242425, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_416m4"]
curve = SubResource("Curve_ipns3")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_8186p"]
particle_flag_disable_z = true
angle_min = -720.0
angle_max = 720.0
spread = 180.0
initial_velocity_min = 30.3
initial_velocity_max = 260.81
gravity = Vector3(0, 400, 0)
damping_min = 8.0
damping_max = 14.000001
scale_min = 0.29999998
scale_max = 0.5
alpha_curve = SubResource("CurveTexture_416m4")
collision_use_scale = true
[node name="Blood" type="Node2D"]
script = ExtResource("1_8186p")
[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
emitting = false
amount = 24
texture = ExtResource("2_a658j")
lifetime = 0.4
one_shot = true
explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_8186p")

View file

@ -1,127 +0,0 @@
[gd_scene load_steps=9 format=3 uid="uid://b6bq2viqao61m"]
[ext_resource type="Script" uid="uid://dqiaioigmj5wb" path="res://scripts/pause_menu.gd" id="1_5d2l8"]
[ext_resource type="Theme" uid="uid://dtc7h6gpwpend" path="res://scenes/ui.tres" id="2_7l7mv"]
[ext_resource type="AudioStream" uid="uid://cwidt34ehvre4" path="res://sounds/ui_select.mp3" id="2_v4r4p"]
[ext_resource type="AudioStream" uid="uid://bff3l15ivkcyi" path="res://sounds/ui_back.mp3" id="3_1s2dm"]
[ext_resource type="Script" uid="uid://b2maxk5g6yb0i" path="res://addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd" id="3_v4r4p"]
[ext_resource type="PackedScene" uid="uid://cy4nbqbm222os" path="res://scenes/settings.tscn" id="4_1s2dm"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_264po"]
bg_color = Color(0, 0, 0, 1)
border_color = Color(0.53333336, 0.53333336, 0.53333336, 1)
corner_detail = 1
[sub_resource type="LabelSettings" id="LabelSettings_1kice"]
font_size = 48
outline_size = 2
[node name="PauseMenu" type="Panel"]
process_mode = 3
visible = false
self_modulate = Color(1, 1, 1, 0.53333336)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_264po")
script = ExtResource("1_5d2l8")
[node name="UiSelect" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_v4r4p")
bus = &"Sound Effects"
[node name="UiBack" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_1s2dm")
bus = &"Sound Effects"
[node name="Panel" type="PanelContainer" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -130.0
offset_top = -26.0
offset_right = 130.0
offset_bottom = 26.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_7l7mv")
[node name="Flow" type="HFlowContainer" parent="Panel"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="Panel/Flow"]
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
text = "PAUSED"
label_settings = SubResource("LabelSettings_1kice")
horizontal_alignment = 1
vertical_alignment = 1
[node name="HFlowContainer" type="HFlowContainer" parent="Panel/Flow"]
custom_minimum_size = Vector2(257, 0)
layout_mode = 2
alignment = 1
[node name="InputIconTextureRect2" type="TextureRect" parent="Panel/Flow/HFlowContainer"]
custom_minimum_size = Vector2(48, 48)
layout_mode = 2
expand_mode = 1
script = ExtResource("3_v4r4p")
action_name = "ui_up"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect3" type="TextureRect" parent="Panel/Flow/HFlowContainer"]
custom_minimum_size = Vector2(48, 48)
layout_mode = 2
expand_mode = 1
script = ExtResource("3_v4r4p")
action_name = "ui_down"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="InputIconTextureRect" type="TextureRect" parent="Panel/Flow/HFlowContainer"]
custom_minimum_size = Vector2(48, 48)
layout_mode = 2
expand_mode = 1
script = ExtResource("3_v4r4p")
action_name = "dialogue_continue"
metadata/_custom_type_script = "uid://b2maxk5g6yb0i"
[node name="Resume" type="Button" parent="Panel/Flow"]
custom_minimum_size = Vector2(257, 0)
layout_mode = 2
focus_neighbor_top = NodePath("../QuitToTitle")
text = "Resume"
[node name="Settings" type="Button" parent="Panel/Flow"]
custom_minimum_size = Vector2(257, 0)
layout_mode = 2
text = "Settings"
[node name="QuitToTitle" type="Button" parent="Panel/Flow"]
custom_minimum_size = Vector2(257, 0)
layout_mode = 2
focus_neighbor_bottom = NodePath("../Resume")
text = "Quit to Title"
[node name="Label2" type="Label" parent="Panel/Flow"]
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
text = "PAUSED"
label_settings = SubResource("LabelSettings_1kice")
horizontal_alignment = 1
vertical_alignment = 1
[node name="Settings" parent="." instance=ExtResource("4_1s2dm")]
visible = false
layout_mode = 1
offset_left = -322.0
offset_right = 322.0
[connection signal="pressed" from="Panel/Flow/Resume" to="." method="_on_resume_pressed"]
[connection signal="pressed" from="Panel/Flow/Settings" to="." method="_on_settings_pressed"]

View file

@ -1,16 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://udpwphfxtuf2"]
[ext_resource type="Texture2D" uid="uid://bahp733iqv2us" path="res://textures/desk.png" id="1_551uk"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_aadnw"]
size = Vector2(191, 32)
[node name="StaticBody2D" type="StaticBody2D"]
[node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(2, 2)
texture = ExtResource("1_551uk")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(-32, 48)
shape = SubResource("RectangleShape2D_aadnw")

View file

@ -1,11 +1,9 @@
[gd_scene load_steps=10 format=3 uid="uid://cy4nbqbm222os"]
[gd_scene load_steps=8 format=3 uid="uid://cy4nbqbm222os"]
[ext_resource type="Theme" uid="uid://dtc7h6gpwpend" path="res://scenes/ui.tres" id="1_r6d6q"]
[ext_resource type="Script" uid="uid://b2maxk5g6yb0i" path="res://addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd" id="2_6wm04"]
[ext_resource type="Script" uid="uid://jacd1qlw1q5p" path="res://scripts/settings.gd" id="2_f4mfi"]
[ext_resource type="FontFile" uid="uid://donsvh2l775rb" path="res://fonts/Doto.ttf" id="3_f4mfi"]
[ext_resource type="AudioStream" uid="uid://cwidt34ehvre4" path="res://sounds/ui_select.mp3" id="3_gis3k"]
[ext_resource type="AudioStream" uid="uid://bff3l15ivkcyi" path="res://sounds/ui_back.mp3" id="4_83j8s"]
[sub_resource type="LabelSettings" id="LabelSettings_1kice"]
font_size = 48
@ -30,14 +28,6 @@ grow_vertical = 2
theme = ExtResource("1_r6d6q")
script = ExtResource("2_f4mfi")
[node name="UiSelect" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_gis3k")
bus = &"Sound Effects"
[node name="UiBack" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_83j8s")
bus = &"Sound Effects"
[node name="Scroll" type="ScrollContainer" parent="."]
custom_minimum_size = Vector2(640, 0)
layout_mode = 2
@ -221,7 +211,7 @@ text = "Southpaw"
layout_mode = 2
text = "NO"
[connection signal="button_up" from="Scroll/Flow/Back" to="." method="_on_back_pressed"]
[connection signal="pressed" from="Scroll/Flow/Back" to="." method="_on_back_pressed"]
[connection signal="value_changed" from="Scroll/Flow/Flow2/MasterVolume" to="." method="_on_master_volume_value_changed"]
[connection signal="value_changed" from="Scroll/Flow/Flow3/MusicVolume" to="." method="_on_music_volume_value_changed"]
[connection signal="value_changed" from="Scroll/Flow/Flow4/SFXVolume" to="." method="_on_sfx_volume_value_changed"]

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=13 format=3 uid="uid://b1x7evhkxm385"]
[gd_scene load_steps=12 format=3 uid="uid://b1x7evhkxm385"]
[ext_resource type="Script" uid="uid://md1biuc6ygmv" path="res://scripts/title.gd" id="1_pyl7j"]
[ext_resource type="FontFile" uid="uid://n1nd5m2kwexu" path="res://fonts/Michroma.ttf" id="1_wosw1"]
@ -8,7 +8,6 @@
[ext_resource type="Shader" uid="uid://bk7q00br1ms30" path="res://scripts/retro.gdshader" id="2_p6dhs"]
[ext_resource type="Script" uid="uid://b2maxk5g6yb0i" path="res://addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd" id="2_pyl7j"]
[ext_resource type="FontFile" uid="uid://donsvh2l775rb" path="res://fonts/Doto.ttf" id="3_b3w7a"]
[ext_resource type="AudioStream" uid="uid://bff3l15ivkcyi" path="res://sounds/ui_back.mp3" id="3_w65of"]
[ext_resource type="PackedScene" uid="uid://cy4nbqbm222os" path="res://scenes/settings.tscn" id="6_yql1r"]
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_yql1r"]
@ -40,20 +39,14 @@ script = ExtResource("1_pyl7j")
[node name="UiSelect" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_hiwto")
bus = &"Sound Effects"
[node name="UiBack" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_w65of")
bus = &"Sound Effects"
[node name="Title" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_ia1n6")
volume_db = -4.0
autoplay = true
bus = &"Music"
parameters/looping = true
[node name="Stars" type="GPUParticles2D" parent="."]
[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
position = Vector2(-1420, 0)
amount = 512
texture = ExtResource("2_4rr2b")
@ -313,61 +306,7 @@ theme_override_font_sizes/bold_italics_font_size = 32
theme_override_font_sizes/italics_font_size = 32
theme_override_font_sizes/mono_font_size = 32
bbcode_enabled = true
text = "[font size=20]space ambient music: minecraft nether music (by C418)[/font]"
fit_content = true
horizontal_alignment = 1
vertical_alignment = 1
[node name="Label5" type="RichTextLabel" parent="UI/Control/Credits"]
custom_minimum_size = Vector2(640, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("1_wosw1")
theme_override_fonts/bold_font = ExtResource("3_b3w7a")
theme_override_font_sizes/normal_font_size = 32
theme_override_font_sizes/bold_font_size = 32
theme_override_font_sizes/bold_italics_font_size = 32
theme_override_font_sizes/italics_font_size = 32
theme_override_font_sizes/mono_font_size = 32
bbcode_enabled = true
text = "[font size=20]space station music: SCP-3008 soundtrack by uglyburger0[/font]"
fit_content = true
horizontal_alignment = 1
vertical_alignment = 1
[node name="Label6" type="RichTextLabel" parent="UI/Control/Credits"]
custom_minimum_size = Vector2(640, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("1_wosw1")
theme_override_fonts/bold_font = ExtResource("3_b3w7a")
theme_override_font_sizes/normal_font_size = 32
theme_override_font_sizes/bold_font_size = 32
theme_override_font_sizes/bold_italics_font_size = 32
theme_override_font_sizes/italics_font_size = 32
theme_override_font_sizes/mono_font_size = 32
bbcode_enabled = true
text = "[font size=20]title screen music: delosound on pixabay[/font]"
fit_content = true
horizontal_alignment = 1
vertical_alignment = 1
[node name="Label7" type="RichTextLabel" parent="UI/Control/Credits"]
custom_minimum_size = Vector2(640, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("1_wosw1")
theme_override_fonts/bold_font = ExtResource("3_b3w7a")
theme_override_font_sizes/normal_font_size = 32
theme_override_font_sizes/bold_font_size = 32
theme_override_font_sizes/bold_italics_font_size = 32
theme_override_font_sizes/italics_font_size = 32
theme_override_font_sizes/mono_font_size = 32
bbcode_enabled = true
text = "[font size=20]special thanks to hack club for getting me to finish projects for once[/font]"
text = "[font size=20]soundtrack by delosound on pixabay[/font]"
fit_content = true
horizontal_alignment = 1
vertical_alignment = 1
@ -507,10 +446,7 @@ color = Color(1, 1, 1, 0)
[connection signal="pressed" from="UI/Control/ControllerInfo/Box/Flow/Continue" to="." method="_on_continue_pressed"]
[connection signal="pressed" from="UI/Control/Title/Buttons/NewGame" to="." method="_on_new_game_pressed"]
[connection signal="pressed" from="UI/Control/Title/Buttons/LoadGame" to="." method="_on_load_game_pressed"]
[connection signal="pressed" from="UI/Control/Title/Buttons/Settings" to="." method="_on_settings_pressed"]
[connection signal="pressed" from="UI/Control/Title/Buttons/Credits" to="." method="_on_credits_pressed"]
[connection signal="pressed" from="UI/Control/Title/Buttons/Quit" to="." method="_on_quit_pressed"]
[connection signal="pressed" from="UI/Control/Credits/Buttons/ExitCredits" to="." method="_on_exit_credits_pressed"]
[connection signal="pressed" from="UI/Control/OverrideSave/Buttons/YesOverride" to="." method="_on_yes_override_pressed"]
[connection signal="pressed" from="UI/Control/OverrideSave/Buttons/NoOverride" to="." method="_on_no_override_pressed"]

View file

@ -1,15 +0,0 @@
extends Sprite2D
@export var enemy: Node2D = null
func _ready() -> void:
if !enemy:
queue_free()
return
while enemy.reaction_timer > 0:
look_at(enemy.global_position)
#if enemy.get_node("LineOfSight").get_collider().get_name() == "PlayerGround": #modulate =
queue_free()

View file

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

View file

@ -17,31 +17,10 @@ var sprinting = false
var equipped_ground_gun = "pistol"
var ammo_in_mag = 12
func set_ground_gun(value):
func set_ground_gun(value: String):
equipped_ground_gun = value
if value:
$HeldItem/Sprite.texture = load("res://textures/" + equipped_ground_gun + ".png")
ammo_in_mag = global.ground_guns
func navigate_to(goal: Vector2):
if has_node("Navagent"):
$Navagent.target_position = goal
while !$Navagent.is_navigation_finished():
var next_position = $Navagent.get_next_path_position()
next_position.y -= 32
var axes = global_position.direction_to(next_position)
horizontial_movement = axes.x
vertical_movement = axes.y
# This is a bad way to do this, to be honest. However, I am lazy
await get_tree().create_timer(0.05).timeout
horizontial_movement = 0
vertical_movement = 0
$HeldItem/Sprite.texture = load("res://textures/" + equipped_ground_gun + ".png")
ammo_in_mag = global.ground_guns
func _ready() -> void:
$Sprite.play()
@ -57,7 +36,7 @@ func _process(delta: float) -> void:
$Sprite.position.y = 64
$Sprite.animation = "idle"
if has_node("HeldItem"): $HeldItem.visible = false
$HeldItem.visible = false
return
@ -95,48 +74,34 @@ func _process(delta: float) -> void:
$Sprite.animation = "idle"
fire_delay -= delta
if has_node("HeldItem"):
if !equipped_ground_gun:
$HeldItem.visible = false
else:
$HeldItem.visible = true
if firing and (fire_delay < 0):
if has_node("HeldItem") and (equipped_ground_gun != null):
$HeldItem/Cast.force_raycast_update()
if firing and (fire_delay < 0):
$HeldItem/Cast.force_raycast_update()
var hit_target = $HeldItem/Cast.get_collider()
if hit_target:
if "health" in hit_target.get_parent():
hit_target.get_parent().health -= 10
var hit_target = $HeldItem/Cast.get_collider()
if hit_target:
if "health" in hit_target.get_parent():
hit_target.get_parent().health -= global.ground_guns[equipped_ground_gun].damage
var blood = preload("res://scenes/particles/blood.tscn").instantiate()
blood.global_position = $HeldItem/Cast.get_collision_point()
get_parent().add_child(blood)
blood.play()
else:
var bullet_impact = preload("res://scenes/particles/bullet_impact.tscn").instantiate()
bullet_impact.global_position = $HeldItem/Cast.get_collision_point()
get_parent().add_child(bullet_impact)
bullet_impact.play()
var bullet_trail = preload("res://scenes/particles/bullet_trail.tscn").instantiate()
bullet_trail.global_position = $HeldItem/Sprite.global_position
bullet_trail.points[1] = ($HeldItem/Cast.get_collision_point() - bullet_trail.global_position)
get_parent().add_child(bullet_trail)
bullet_trail.play()
$HeldItem/Gunshot.play()
fire_delay = global.ground_guns[equipped_ground_gun].fire_rate
var bullet_impact = preload("res://scenes/particles/bullet_impact.tscn").instantiate()
bullet_impact.global_position = $HeldItem/Cast.get_collision_point()
get_parent().add_child(bullet_impact)
bullet_impact.play()
var bullet_trail = preload("res://scenes/particles/bullet_trail.tscn").instantiate()
bullet_trail.global_position = $HeldItem/Sprite.global_position
bullet_trail.points[1] = ($HeldItem/Cast.get_collision_point() - bullet_trail.global_position)
get_parent().add_child(bullet_trail)
bullet_trail.play()
$HeldItem/Gunshot.play()
fire_delay = 0.5
move_and_slide()

View file

@ -1,14 +0,0 @@
extends VBoxContainer
var contract = null
var game = null
func update() -> void:
$Label.text = """[font size=24]%s[/font]
%s""" % [global.missions[contract].name, global.missions[contract].desc]
func _on_button_pressed() -> void:
game._contracts_item_pressed(contract)
func _ready() -> void:
update()

View file

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

View file

@ -1,160 +0,0 @@
extends "res://scripts/character_ground.gd"
@onready var game = get_parent()
func _ready() -> void:
super()
health = 50
func _interact(player: Node2D) -> void:
player.get_node("Camera").enabled = false
$Camera.enabled = true
$InteractArea.monitoring = false
player.busy = true
await game.dialogue("Ready to leave?", "doctor_1", false)
var option = await game.make_choice({
"yes": "Yes",
"no": "No"
})
if option == "yes":
await game.dialogue("Alrighty!", "doctor_1")
await game.dialogue("We have your stuff back here, let me go grab it real quick...", "doctor_1")
await game.dialogue("Here's your bag.", "doctor_1")
await game.dialogue("Should have everything - tablet, ship keys, a pistol...", "doctor_1")
game.get_node("DistantGunshots1").play()
await get_tree().create_timer(2).timeout
await game.dialogue("...the hell?", "doctor_1", false)
await get_tree().create_timer(1.5).timeout
game.get_node("IntrusionAlarm").play()
game.get_node("Map").modulate = Color(0.5, 0.35, 0.35)
await get_tree().create_timer(1).timeout
await game.dialogue("Oh, no.", "doctor_1", true)
await get_tree().create_timer(0.5).timeout
await game.dialogue("We need to leave. Now.", "doctor_1", true)
await get_tree().create_timer(0.5).timeout
$Camera.enabled = false
player.get_node("Camera").enabled = true
player.busy = false
await game.dialogue("Follow me.", "doctor_1", false)
global.stats.mission_progress = 1
await navigate_to(game.get_node("DoctorEscapeWaypoint1").position)
while !game.get_node("DoctorEscapeWaypoint1/Area").get_overlapping_bodies().has(player): await get_tree().create_timer(0.2).timeout
player.busy = true
await game.dialogue("You good with that gun?", "doctor_1", true)
var option_2 = await game.make_choice({
"yes": "Yes",
"no": "No"
})
if option_2 == "yes": await game.dialogue("Good to know.", "doctor_1", true)
else: await game.dialogue("Well, you're still probably better than I would be.", "doctor_1", true)
global.stats.story_progress = 2
game.save_game()
checkpoint_1()
elif option == "no":
await game.dialogue("Well, I'm here whenever you need me.", "doctor_1")
player.get_node("Camera").enabled = true
$Camera.enabled = false
$InteractArea.monitoring = true
player.busy = false
return
func checkpoint_1():
$InteractArea.monitoring = false
var player = game.get_node("PlayerGround")
await game.dialogue("You should probably get it out.", "doctor_1", false)
player.busy = false
global.stats.equipped_ground_gun = "pistol"
game.get_node("UI/Control/UnholsterTutorial").visible = true
while global.stats.gun_holstered: await get_tree().create_timer(0.2).timeout
game.get_node("UI/Control/UnholsterTutorial").visible = false
await game.dialogue("Let's go.", "doctor_1", false)
game.checkpoint()
await navigate_to(game.get_node("DoctorEscapeWaypoint2").position)
while !game.get_node("DoctorEscapeWaypoint2/Area").get_overlapping_bodies().has(player): await get_tree().create_timer(0.2).timeout
game.get_node("Dnbd").play()
game.get_node("IntrusionAlarm").stop()
await game.dialogue("OH GOD!", "doctor_1", false)
game.get_node("MedbayDoorLargeVertical").free()
vertical_movement = 0.1
game.get_node("Camper1/HeldItem").look_at(global_position)
game.get_node("Camper2/HeldItem").look_at(global_position)
game.get_node("Camper1").firing = true
await get_tree().create_timer(0.06).timeout
game.get_node("Camper2").firing = true
await game.dialogue("RUN!", "doctor_1", false)
global.stats.mission_progress = 2
while health > 0: await get_tree().create_timer(0.2).timeout
await game.end_dialogue()
game.get_node("Camper1").firing = false
await get_tree().create_timer(0.06).timeout
game.get_node("Camper2").firing = false
await get_tree().create_timer(0.333).timeout
game.get_node("Camper1").concious = true
game.get_node("Camper2").concious = true
game.get_node("Camper3").global_position = game.get_node("CamperSpawn1").global_position
game.get_node("Camper4").global_position = game.get_node("CamperSpawn2").global_position

View file

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

View file

@ -1,147 +0,0 @@
extends "res://scripts/character_ground.gd"
@onready var game = get_parent()
func _ready() -> void:
equipped_ground_gun = "docgun"
super()
health = 999
func _on_state_1_body_entered(body: Node2D) -> void:
if body != game.get_node("PlayerGround"): return
global.stats.mission_progress = 3
game.get_node("HospitalEscapeD2State1").monitoring = false
print("test")
vertical_movement = -1
horizontial_movement = -1
while global_position.y > -1376.0: await get_tree().create_timer(0.1).timeout
vertical_movement = 0
horizontial_movement = 0
await game.dialogue("Get over here!", "doctor_2", false)
func _on_state_2_body_entered(body: Node2D) -> void:
if body != game.get_node("PlayerGround"): return
game.get_node("HospitalEscapeD2State2").monitoring = false
game.get_node("HospitalEscapeD2State2").queue_free()
firing = true
while game.get_node("Camper1").health > 0:
$HeldItem.look_at(game.get_node("Camper1").global_position)
await get_tree().create_timer(0.2).timeout
while game.get_node("Camper2").health > 0:
$HeldItem.look_at(game.get_node("Camper2").global_position)
await get_tree().create_timer(0.2).timeout
while game.get_node("Camper4").health > 0:
$HeldItem.look_at(game.get_node("Camper4").global_position)
await get_tree().create_timer(0.2).timeout
firing = false
await get_tree().create_timer(0.666).timeout
set_ground_gun(null)
game.get_node("Dnbd").playing = false
game.get_node("IntrusionAlarm").play()
await game.dialogue("You need to go, now.", "doctor_2", true)
await navigate_to(game.get_node("Doctor2DoorWaypoint").global_position)
var player = game.get_node("PlayerGround")
if (global_position - player.global_position).length() > 200:
await game.dialogue("Come.", "doctor_2", false)
while (global_position - player.global_position).length() > 200: await get_tree().create_timer(0.25).timeout
player.busy = true
await game.dialogue("Is the other doctor dead?", "doctor_2", false)
var option = await game.make_choice({
"yes": "Yes",
"no": "No"
})
if option == "yes":
await game.dialogue("Shit. I liked hating him.", "doctor_2", true)
else:
await game.dialogue("Damnit. Was hoping he was.", "doctor_2", true)
await game.dialogue("Anyways, there's probably some of those bastards in there, so be careful.", "doctor_2", true)
await game.dialogue("Your ship is on the first row, furthest to the left.", "doctor_2", false)
var option_2 = null
while option_2 != "got_it":
option_2 = await game.make_choice({
"whoarethey": "Who are they?",
"whataboutyou": "What about you?",
"got_it": "Got it",
})
if option_2 == "whoarethey":
await game.dialogue("Who are these people, anyways?", "player", true)
await game.dialogue("You don't know?... oh wait, that makes sense.", "doctor_2", true)
await game.dialogue("Those guys are from HADA, the Humble Anarchist's Defense Alliance.", "doctor_2", true)
await game.dialogue("Nasty people. They do a lot of things...", "doctor_2", true)
await game.dialogue("but they also iketo try and destroy anything they see as a threat to their ideals.", "doctor_2", true)
await game.dialogue("They almost never fully succeed, but that doesn't mean they don't leave a mark.", "doctor_2", true)
elif option_2 == "whataboutyou":
await game.dialogue("What are you going to do?", "player", true)
await game.dialogue("I will be camping it out.", "doctor_2", true)
await game.dialogue("I live here. If I left all my stuff behind like this, I would hate myself.", "doctor_2", true)
await game.dialogue("That's not something you should worry about excessively, though. You don't even know me.", "doctor_2", true)
global.stats.story_progress = 3
game.save_game()
checkpoint_2()
func checkpoint_2():
game.get_node("Dnbd").playing = false
game.get_node("IntrusionAlarm").play()
var player = game.get_node("PlayerGround")
player.busy = true
await game.dialogue("I wish you luck.", "doctor_2", true)
game.get_node("Dnbd").playing = true
player.health = 100
game.get_node("Camper5").global_position = game.get_node("CamperSpawn3").global_position
game.get_node("Camper6").global_position = game.get_node("CamperSpawn4").global_position
player.busy = false
game.get_node("Doctor2DoorToOpen").set_open(true)
func _on_state_3_body_entered(body: Node2D) -> void:
game.get_node("Doctor2DoorToOpen").set_open(false)

View file

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

View file

@ -1,18 +0,0 @@
extends StaticBody2D
@export var open: bool = false
func set_open(value: bool) -> void:
open = value
if open:
$CollisionShape.disabled = true
$Sprite.animation = "open"
else:
$CollisionShape.disabled = false
$Sprite.animation = "default"
$Sprite.play()
func _ready() -> void:
set_open(open)

View file

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

View file

@ -3,6 +3,9 @@ extends "res://scripts/character_ground.gd"
var last_aim_direction = Vector2(0, 0)
var alerted = false
var inaccuracy = 15
var reaction_time = 0.35
var reaction_halve_distance = 720
var reaction_timer = 0
@ -26,26 +29,9 @@ var last_seen_player_position = null
@onready var player = null
var game = null
## The enemy's starting gun. Leave blank for no weapon
@export var starting_gun: String = &"pistol"
## The enemy's starting health.
@export var starting_health: int = 50
## Is the enemy's AI enabled?
@export var concious: bool = true
## Will the enemy always chase the player?
@export var always_sees_player: bool = false
## The time it takes for an enemy to start shooting / notice the player.
@export var reaction_time: float = 0.35
## A path for the enemy to follow while idle.
@export var points: Array[Node2D] = []
## Time to wait between points while idle.
@export var wait_time_between_points: int = 5
var current_node = null
var current_point = 0
@export var inaccuracy: int = 15
func _ready() -> void:
super()
@ -60,24 +46,16 @@ func _process(delta: float) -> void:
if dead:
$Detecting.stop()
return
if !concious:
$Detecting.stop()
return
if !player:
if game:
player = game.get_node("PlayerGround")
else: return
if always_sees_player:
ai_mode = AI_MODE_ATTACK
last_seen_player_position = player.global_position
if ai_mode == AI_MODE_IDLE:
$LineOfSight.look_at(player.global_position)
if $LineOfSight.get_collider() && player.is_ancestor_of($LineOfSight.get_collider()):
if player.is_ancestor_of($LineOfSight.get_collider()):
var divider = clamp((player.global_position - global_position).length() / reaction_halve_distance, 1, 8) * 1.5
reaction_timer += delta / divider
@ -96,24 +74,6 @@ func _process(delta: float) -> void:
if reaction_timer < 0:
reaction_timer = 0
if points.size() > 0:
if !current_node: current_node = points[0]
if $Navagent.is_navigation_finished():
if points.find(current_node) + 1 > points.size() - 1:
current_node = points[0]
else:
current_node = points[points.find(current_node) + 1]
else:
var next_position = $Navagent.get_next_path_position()
next_position.y -= 32
var axes = global_position.direction_to(next_position)
horizontial_movement = axes.x
vertical_movement = axes.y
if !$Navagent.target_position or ($Navagent.target_position != current_node.position): $Navagent.target_position = current_node.position
elif ai_mode == AI_MODE_ATTACK:
$Detecting.playing = false
@ -159,8 +119,6 @@ func _process(delta: float) -> void:
last_seen_player_position = player.global_position
elif ai_state == AI_STATE_CHASE_LAST_SEEN:
firing = false
if $Navagent.is_navigation_finished():
last_seen_player_position = null
ai_mode = AI_MODE_IDLE

View file

@ -1,11 +1,7 @@
extends Sprite2D
@onready var game = get_owner()
@export var active_mission_requirement: String = ""
func _on_enter_hitbox_body_entered(body: Node2D) -> void:
if active_mission_requirement != "":
if global.stats.active_mission != active_mission_requirement: return
if body.get_name() == "Player":
game.enter_physical(get_name())

View file

@ -62,8 +62,6 @@ func _interact(player: Node2D) -> void:
await game.dialogue("Okay, your tank should be filled to 25%.")
else:
await game.dialogue("Sorry, but you don't have enough marks for that.")
game.save_game()
player.get_node("Camera").enabled = true
$Camera.enabled = false

View file

@ -11,20 +11,14 @@ var enemy_scene = preload("res://scenes/enemy.tscn")
var star_scene = preload("res://scenes/star.tscn")
@onready var spawn_points = {
"space_station_1": $Orbits/SpaceStation1/space_station_1/ExitPoint,
"space_station_2": $Orbits/SpaceStation2/space_station_2/ExitPoint
"SpaceStation1": $Orbits/SpaceStation1/SpaceStation1/ExitPoint
}
@onready var navigation_points = [
{
"name": "Space Station 01",
"name": "Space Station 1",
"id": "ss1",
"point": $Orbits/SpaceStation1/space_station_1
},
{
"name": "Space Station 02",
"id": "ss2",
"point": $Orbits/SpaceStation2/space_station_2
"point": $Orbits/SpaceStation1/SpaceStation1
}
]
@ -47,23 +41,6 @@ func world_to_chunk(position: Vector2) -> Vector2:
func chunk_to_world(position: Vector2) -> Vector2:
return Vector2(floori(position.x * 1024), floori(position.y * 1024))
## Saves the game.
func save_game() -> void:
$UI/Control/SaveIndicator.visible = true
global.stats.position = {
"x": $Player.global_position.x,
"y": $Player.global_position.y
}
global.stats.location = "space"
global.save_game()
await get_tree().create_timer(2).timeout
$UI/Control/SaveIndicator.visible = false
func enter_physical(map):
get_tree().paused = true
@ -83,8 +60,6 @@ func enter_physical(map):
global.stats.location = map
global.stats.position = null
get_tree().change_scene_to_file("res://scenes/ground.tscn")
@ -93,6 +68,10 @@ func _ready() -> void:
LimboConsole.register_command(summon_enemy, "summon_enemy", "Summons an enemy.")
var events = InputMap.action_get_events("forward")
if (global.stats.location != "space") and (spawn_points.has(global.stats.location)):
$Player.global_position = spawn_points[global.stats.location].global_position
$Player.rotation = spawn_points[global.stats.location].rotation
for n in navigation_points:
var navigation_item = preload("res://scenes/navigation_item.tscn").instantiate()
@ -102,14 +81,6 @@ func _ready() -> void:
$UI/Control/Navpanel/NavigationRoutes/Scroll/Box.add_child(navigation_item)
for n in global.contracts:
var contract_item = preload("res://scenes/contract_item.tscn").instantiate()
contract_item.contract = n
contract_item.game = self
$UI/Control/Navpanel/ContractsList/Scroll/Box.add_child(contract_item)
var i = 0
while i < 1024 / 3:
var star = star_scene.instantiate()
@ -138,36 +109,14 @@ func _ready() -> void:
$Stars.add_child(star)
i += 1
if (global.stats.location != "space") and (spawn_points.has(global.stats.location)):
$Player.global_position = spawn_points[global.stats.location].global_position
$Player.rotation = spawn_points[global.stats.location].rotation
elif global.stats.position:
$Player.global_position.x = global.stats.position.x
$Player.global_position.y = global.stats.position.y
global.stats.position = null
global.stats.location = "space"
if global.stats.story_progress < 4: global.stats.story_progress = 4
if global.stats.loaded:
save_game()
else:
global.stats.loaded = true
func _process(delta: float) -> void:
if get_tree().paused:
return
if global.stats.navigation_goal:
if !global.stats.navigation_goal.point || (typeof(global.stats.navigation_goal.point) == TYPE_STRING):
if global.stats.navigation_goal.id:
for n in navigation_points:
if n.id == global.stats.navigation_goal.id:
global.stats.navigation_goal.point = n.point
break
if not global.stats.navigation_goal.point:
global.stats.navigation_goal = null
else:
if !$Navring.has_node("NavigationMarker"):
var navigation_marker = preload("res://scenes/navigation_marker.tscn").instantiate()
@ -189,10 +138,9 @@ func _process(delta: float) -> void:
$UI/Control/Navpanel/Navigation/Hyperboost.visible = true
if global.stats.navigation_goal.point and (typeof(global.stats.navigation_goal.point) != TYPE_STRING):
var goal_distance = (global.stats.navigation_goal.point.position - $Player.position).length()
var goal_distance = (global.stats.navigation_goal.point.position - $Player.position).length()
$UI/Control/Navpanel/Navigation/Destination.text = global.stats.navigation_goal.name + " (" + str(floori(goal_distance)) + "u)"
$UI/Control/Navpanel/Navigation/Destination.text = global.stats.navigation_goal.name + " (" + str(floori(goal_distance)) + "u)"
else:
if $Navring.has_node("NavigationMarker"):
$Navring.get_node("NavigationMarker").queue_free()
@ -303,8 +251,6 @@ func _set_navpanel_menu(menu: String) -> void:
func _input(event: InputEvent) -> void:
if event.is_action_pressed("pause"):
$UiSelect.play()
$UI/Control/PauseMenu.visible = true
$UI/Control/PauseMenu/Panel/Flow/Resume.grab_focus()
@ -327,8 +273,6 @@ func _input(event: InputEvent) -> void:
if ($UI/Control/Navpanel/NavigationRoutes.visible) or ($UI/Control/Navpanel/NavigationHyperboost.visible):
_set_navpanel_menu("Navigation")
elif $UI/Control/Navpanel/ContractsList.visible:
_set_navpanel_menu("Contracts")
elif $UI/Control/Navpanel/Start.visible:
$UI/Control/Navpanel.visible = false
else:
@ -370,15 +314,6 @@ func _navigation_item_pressed(goal) -> void:
$UiSelect.play()
_set_navpanel_menu("Navigation")
func _contracts_item_pressed(contract) -> void:
if global.stats.active_mission: return
global.stats.active_mission = contract
global.stats.mission_progress = 0
$UiSelect.play()
_set_navpanel_menu("Contracts")
func _on_navigation_back_pressed() -> void:
$UiBack.play()
@ -394,15 +329,3 @@ func _on_enable_hyperboost_pressed() -> void:
$UiSelect.play()
_set_navpanel_menu("Navigation")
$Player.hyperboosting = true
func _on_new_contract_pressed() -> void:
$UiSelect.play()
_set_navpanel_menu("ContractsList")
func _on_contracts_pressed() -> void:
$UiSelect.play()
_set_navpanel_menu("Contracts")
func _on_contracts_back_pressed() -> void:
$UiBack.play()
_set_navpanel_menu("Contracts")

View file

@ -18,37 +18,10 @@ var dialogue_speed = {
"player_woozy": 0.2,
}
func save_game() -> void:
$UI/Control/SaveIndicator.visible = true
global.stats.position = {
"x": $PlayerGround.global_position.x,
"y": $PlayerGround.global_position.y
}
global.save_game()
await get_tree().create_timer(2).timeout
$UI/Control/SaveIndicator.visible = false
func checkpoint() -> void:
var packed_scene = PackedScene.new()
packed_scene.pack(get_tree().get_current_scene())
global.checkpoint = packed_scene
func give_ground_gun(string: String) -> void:
global.stats.equipped_ground_gun = string
func _ready() -> void:
$UI/Control/Dialogue.visible = false
LimboConsole.register_command(give_ground_gun, "give_ground_gun", "Gives a gun for ground mode")
print(global.stats.location)
var location_scene = load("res://scenes/locations/" + global.stats.location + ".tscn").instantiate()
var location_scene = load("res://scenes/locations/space_station_1.tscn").instantiate()
for n in location_scene.get_children():
location_scene.remove_child(n)
@ -67,20 +40,6 @@ func _ready() -> void:
n._ground_ready()
location_scene.free()
if global.stats.position:
print("AAA ", global.stats.position)
$PlayerGround.global_position.x = global.stats.position.x
$PlayerGround.global_position.y = global.stats.position.y
global.stats.position = null
else:
$PlayerGround.global_position = $PlayerSpawn.global_position
if global.stats.loaded:
save_game()
else:
global.stats.loaded = true
func _process(delta: float) -> void:
if current_interaction_area:
@ -175,15 +134,5 @@ func set_vignette_parameter(name: String, value: float) -> void:
func _input(event: InputEvent) -> void:
if event.is_action_released("dialogue_continue"):
dialogue_continue.emit()
if event.is_action_pressed("pause"):
$UiSelect.play()
$UI/Control/PauseMenu.visible = true
$UI/Control/PauseMenu/Panel/Flow/Resume.grab_focus()
get_tree().paused = true
func _exit_tree() -> void:
LimboConsole.unregister_command(give_ground_gun)
dialogue_continue.emit()

View file

@ -4,7 +4,6 @@ func _ready() -> void:
load_settings()
LimboConsole.register_command(set_story_progress, "set_story_progress", "Sets the current story_progress variable")
LimboConsole.register_command(set_active_mission, "set_active_mission", "Sets the current active_mission variable")
var ground_location = null
@ -29,69 +28,16 @@ var orbit_zones = [
]
var missions = {
"waking_up": {
"id": "waking_up",
"name": "Waking Up",
"desc": "Welcome back, spaceperson.",
"rewards": {
"marks": 500
},
"objectives": {
"desk": "Visit the doctor at their desk",
"follow": "Follow the doctor",
"run": "My suggestion: RUN!",
"escape": "Escape to your ship"
}
},
"test_contract": {
"id": "test_contract",
"name": "HEMA Removal",
"desc": "Space station 02 is currently overrun with HEMA mercenaries. We know they have a bomb in the storage warehouse. We want someone to plant that bomb on the station.",
"rewards": {
"marks": 500
},
"objectives": {
"arrive": "Enter Space Station 02 (navigate to it via your navagent)",
"collect_bomb": "Collect the bomb in the back room",
"plant_bomb": "Plant the bomb in the main foyer",
"escape": "Escape"
}
},
}
var contracts = [ "test_contract" ]
var ground_guns = {
"pistol": {
"name": "Oni",
"type": "kinetic",
"type": "energy",
"damage": 10,
"magazine_size": 12,
"fire_rate": 0.3
},
"docgun": {
"name": "Docgun",
"type": "kinetic",
"damage": 150,
"magazine_size": 12,
"fire_rate": 0.25
},
"smg": {
"name": "Ripper",
"type": "energy",
"damage": 8,
"magazine_size": 24,
"fire_rate": 1.0/6.0
}
}
var checkpoint = null
func load_checkpoint():
if checkpoint:
get_tree().change_scene_to_packed(checkpoint)
func generate_save():
var save_dict = {
"stats": stats
@ -128,7 +74,8 @@ func load_game():
print("JSON Parse Error: ", json.get_error_message(), " in ", parse_result, " at line ", json.get_error_line())
return
if json.data.stats: stats = json.data.stats
if json.data.settings: settings = json.data.settings
if json.data.stats: settings = json.data.stats
func load_settings():
if not FileAccess.file_exists("user://settings.json"):
@ -151,28 +98,20 @@ func delete_game():
func set_story_progress(value: int) -> void:
stats.story_progress = value
func set_active_mission(value = null) -> void:
stats.active_mission = value
var default_stats = {
"loaded": false,
"fuel": 75,
"fuel": 12,
"fuel_tank_size": 1,
"speed": 512,
"boost_tank_size": 1,
"marks": 200,
"location": "space_station_1",
"position": Vector2(),
"rotation": 0,
"story_progress": 0,
"location": "space",
"ship_position": Vector2(),
"ship_rotation": 0,
"story_progress": 1,
"navigation_goal": null,
"equipped_ground_gun": null,
"gun_holstered": true,
"active_mission": null,
"mission_progress": 0,
"completed_missions": [],
"equipped_ground_gun": "pistol"
}
var stats = default_stats.duplicate_deep()

View file

@ -4,13 +4,9 @@ extends Area2D
var game = null
func _on_body_entered(body: Node2D) -> void:
if !game: return
if (body.get_name() == "PlayerGround") or (game.get_node("PlayerGround").is_ancestor_of(body)):
if body.get_name() == "PlayerGround":
game.current_interaction_area = self
func _on_body_exited(body: Node2D) -> void:
if !game: return
if (body.get_name() == "PlayerGround") or (game.get_node("PlayerGround").is_ancestor_of(body)):
if body.get_name() == "PlayerGround":
if game.current_interaction_area == self: game.current_interaction_area = null

View file

@ -1,25 +0,0 @@
extends VBoxContainer
var last_mission_progres = -1
func _process(delta: float) -> void:
if global.stats.active_mission:
visible = true
var mission = global.missions[global.stats.active_mission]
if last_mission_progres != global.stats.mission_progress:
last_mission_progres = global.stats.mission_progress
if mission.objectives.values().size() - 1 < global.stats.mission_progress:
global.stats.completed_missions.push_front(global.stats.active_mission)
global.stats.mission_progress = 0
global.stats.active_mission = null
return
$Label.text = mission.name
$Label2.text = "- " + mission.objectives.values()[global.stats.mission_progress]
else:
visible = false

View file

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

View file

@ -3,7 +3,5 @@ extends Sprite2D
@export var destination: Node2D = null
func _process(delta: float) -> void:
if !destination: return
look_at(destination.global_position)
rotation += deg_to_rad(90)

View file

@ -1,19 +0,0 @@
extends Label
var progress = 1
var hiding = false
func _ready() -> void:
$AnimationPlayer.play("show")
func _process(delta: float) -> void:
if hiding: return
if global.stats.mission_progress >= progress:
hiding = true
$AnimationPlayer.play("hide")
await $AnimationPlayer.animation_finished
queue_free()

View file

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

View file

@ -3,8 +3,6 @@ extends Panel
@onready var game = get_parent().get_parent().get_parent()
func _resume() -> void:
$UiBack.play()
while Input.is_action_pressed("pause"):
await get_tree().create_timer(0).timeout
@ -16,25 +14,5 @@ func _on_resume_pressed() -> void:
_resume()
func _input(event: InputEvent) -> void:
if event.is_action_pressed("pause"):
if $Settings.visible:
# This is probably no good!
$Settings._on_back_pressed()
$Settings.visible = false
$Panel/Flow/Resume.grab_focus()
elif visible:
_resume()
func _on_settings_pressed() -> void:
if visible:
$UiSelect.play()
$Settings.visible = true
$Settings/Scroll/Flow/Back.grab_focus()
func _on_settings_back_pressed() -> void:
if visible:
$UiBack.play()
$Settings.visible = false
$Panel/Flow/Resume.grab_focus()
if event.is_action_pressed("pause"): _resume()

View file

@ -1,31 +1,15 @@
extends "res://scripts/character_ground.gd"
var last_aim_direction = Vector2(0, 0)
var processing_death = false
func _ready() -> void:
super()
if global.stats.gun_holstered:
set_ground_gun(null)
else:
set_ground_gun(global.stats.equipped_ground_gun)
set_ground_gun(global.stats.equipped_ground_gun)
func _process(delta: float) -> void:
super(delta)
if dead:
if processing_death: return
processing_death = true
await get_tree().create_timer(1).timeout
if global.checkpoint:
global.load_game()
get_tree().change_scene_to_file("res://scenes/ground.tscn")
return
if input_icon.using_gamepad:
if !((Input.get_axis("aim_left", "aim_right") == 0) and (Input.get_axis("aim_up", "aim_down") == 0)):
$HeldItem.rotation = Vector2(
@ -52,19 +36,5 @@ func _process(delta: float) -> void:
else:
$HeldItem/Crosshair.visible = false
$HeldItem/Line.visible = false
if Input.is_action_just_pressed("toggle_holster"):
if global.stats.equipped_ground_gun:
global.stats.gun_holstered = !global.stats.gun_holstered
if global.stats.gun_holstered:
set_ground_gun(null)
else:
set_ground_gun(global.stats.equipped_ground_gun)
else:
global.stats.gun_holstered = true
set_ground_gun(null)
firing = Input.is_action_pressed("fire")

View file

@ -0,0 +1,33 @@
extends CharacterBody2D
## Is the player busy in an interaction?
var busy = false
func _ready() -> void:
$Sprite.play()
func _process(delta: float) -> void:
if "_process_2" in self: _process_2(delta)
var horizontial_movement = Input.get_axis("ground_left", "ground_right")
var vertical_movement = Input.get_axis("ground_up", "ground_down")
if busy:
velocity = Vector2()
else:
velocity = Vector2(256 * horizontial_movement, 256 * vertical_movement)
if horizontial_movement > 0.1:
$Sprite.scale.x = -2
if horizontial_movement < -0.1:
$Sprite.scale.x = 2
if velocity.length() > 8:
$Sprite.animation = "walk"
if abs(horizontial_movement) > abs(vertical_movement): $Sprite.speed_scale = abs(horizontial_movement)
else: $Sprite.speed_scale = abs(vertical_movement)
else:
$Sprite.animation = "idle"
move_and_slide()

View file

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

View file

@ -9,19 +9,19 @@ func _on_master_volume_value_changed(value: float) -> void:
global.settings.master_volume = value
$Scroll/Flow/Flow2/MasterVolume/Label.text = str(floori(value * 100)) + "%"
AudioServer.set_bus_volume_linear(0, value)
$UiSelect.play()
func _on_music_volume_value_changed(value: float) -> void:
global.settings.music_volume = value
$Scroll/Flow/Flow3/MusicVolume/Label.text = str(floori(value * 100)) + "%"
AudioServer.set_bus_volume_linear(1, value)
$UiSelect.play()
func _on_sfx_volume_value_changed(value: float) -> void:
global.settings.sfx_volume = value
$Scroll/Flow/Flow4/SFXVolume/Label.text = str(floori(value * 100)) + "%"
AudioServer.set_bus_volume_linear(2, value)
$UiSelect.play()
func _on_back_pressed() -> void:
global.save_settings()

View file

@ -188,59 +188,13 @@ func _ground_ready() -> void:
await game.dialogue("When you're feeling ready, I'll be at the end of the hall.", "doctor_1")
await game.get_node("Doctor").navigate_to(game.get_node("DoctorHallWaypoint").position)
game.get_node("Doctor").global_position = game.get_node("DoctorDeskWaypoint").position
global.stats.story_progress = 1
player.busy = false
global.stats.active_mission = "waking_up"
game.get_node("UI/Control/MoveTutorial").visible = true
while i < 100:
await get_tree().create_timer(0.2).timeout
game.set_vignette_parameter("softness", i * 0.04)
i += 2
while player.velocity.length() == 0:
await get_tree().create_timer(0.1).timeout
game.get_node("UI/Control/MoveTutorial").visible = false
elif global.stats.story_progress == 1:
pass
elif global.stats.story_progress == 2:
print("PROGRESS 2")
game.get_node("Uglyburger").stop()
game.get_node("IntrusionAlarm").play()
game.get_node("Map").modulate = Color(0.5, 0.35, 0.35)
game.get_node("Doctor/InteractArea").monitoring = false
#player.global_position = game.get_node("Checkpoint1PlayerSpawn").global_position
game.get_node("Doctor").global_position = game.get_node("Checkpoint1DoctorSpawn").global_position
game.get_node("Doctor").checkpoint_1()
elif global.stats.story_progress == 3:
print("PROGRESS 3")
game.get_node("Uglyburger").stop()
game.get_node("HospitalEscapeD2State1").monitoring = false
game.get_node("HospitalEscapeD2State2").monitoring = false
game.get_node("Map").modulate = Color(0.5, 0.35, 0.35)
game.get_node("Doctor").queue_free()
game.get_node("Doctor2").global_position = game.get_node("Doctor2DoorWaypoint").global_position
game.get_node("Doctor2").firing = false
game.get_node("Doctor2").checkpoint_2()

View file

@ -103,7 +103,7 @@ func _on_credits_pressed() -> void:
func _on_exit_credits_pressed() -> void:
if transitioning: return
$UiBack.play()
$UiSelect.play()
transitioning = true
@ -174,7 +174,7 @@ func _on_settings_pressed() -> void:
func _on_settings_back_pressed() -> void:
if transitioning: return
$UiBack.play()
$UiSelect.play()
transitioning = true
@ -216,20 +216,18 @@ func _on_new_game_pressed() -> void:
transitioning = true
get_viewport().gui_release_focus()
var i = 0
if FileAccess.file_exists("user://savegame.save"):
var i = 0
while i < 6:
$UI/Control/Title.modulate.a -= 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/Title.visible = false
while i < 6:
$UI/Control/Title.modulate.a -= 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/Title.visible = false
if global.stats.loaded:
$UI/Control/OverrideSave.visible = true
$UI/Control/OverrideSave.modulate.a = 0
@ -244,117 +242,10 @@ func _on_new_game_pressed() -> void:
i += 1
$UI/Control/OverrideSave/Buttons/NoOverride.grab_focus()
transitioning = false
return
else:
var i = 0
while i < 6:
$UI/Control/Title.modulate.a -= 0.2
$Stars.modulate.a -= 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/Title.visible = false
if global.stats.location == "space":
get_tree().change_scene_to_file("res://scenes/game.tscn")
else:
get_tree().change_scene_to_file("res://scenes/ground.tscn")
func _on_load_game_pressed() -> void:
if transitioning: return
$UiSelect.play()
transitioning = true
get_viewport().gui_release_focus()
var i = 0
while i < 6:
$UI/Control/Title.modulate.a -= 0.2
$Stars.modulate.a -= 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/Title.visible = false
await global.load_game()
global.stats.loaded = false
if global.stats.location == "space":
get_tree().change_scene_to_file("res://scenes/game.tscn")
else:
get_tree().change_scene_to_file("res://scenes/ground.tscn")
func _on_yes_override_pressed() -> void:
if transitioning: return
$UiSelect.play()
transitioning = true
get_viewport().gui_release_focus()
var i = 0
while i < 6:
$UI/Control/OverrideSave.modulate.a -= 0.2
$Stars.modulate.a -= 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/OverrideSave.visible = false
global.stats = global.default_stats.duplicate_deep()
if global.stats.location == "space":
get_tree().change_scene_to_file("res://scenes/game.tscn")
else:
get_tree().change_scene_to_file("res://scenes/ground.tscn")
func _on_no_override_pressed() -> void:
if transitioning: return
$UiBack.play()
transitioning = true
get_viewport().gui_release_focus()
var i = 0
while i < 6:
$UI/Control/OverrideSave.modulate.a -= 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/OverrideSave.visible = false
$UI/Control/Title.visible = true
$UI/Control/Title.modulate.a = 0
i = 0
while i < 6:
$UI/Control/Title.modulate.a += 0.2
await get_tree().create_timer(0.2).timeout
i += 1
$UI/Control/Title/Buttons/NewGame.grab_focus()
transitioning = false

Binary file not shown.

View file

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://f6l56kvndidj"
path="res://.godot/imported/background_gunshots.mp3-9d148338da2f4c84e6a101a6a8dec405.mp3str"
[deps]
source_file="res://sounds/background_gunshots.mp3"
dest_files=["res://.godot/imported/background_gunshots.mp3-9d148338da2f4c84e6a101a6a8dec405.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View file

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://c13fyse8fxmio"
path="res://.godot/imported/intrusion_alarm.mp3-9e530e5459da68390295ed718d582217.mp3str"
[deps]
source_file="res://sounds/intrusion_alarm.mp3"
dest_files=["res://.godot/imported/intrusion_alarm.mp3-9e530e5459da68390295ed718d582217.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View file

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://cqco8ncle0u0j"
path="res://.godot/imported/dnbd.mp3-c371aef019a254e92edc32d9620186a2.mp3str"
[deps]
source_file="res://sounds/music/dnbd.mp3"
dest_files=["res://.godot/imported/dnbd.mp3-c371aef019a254e92edc32d9620186a2.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View file

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://7cvp5b3mq1tn"
path="res://.godot/imported/dnbd_sudden.mp3-154358d4b626b7474adf08b4244e8089.mp3str"
[deps]
source_file="res://sounds/music/dnbd_sudden.mp3"
dest_files=["res://.godot/imported/dnbd_sudden.mp3-154358d4b626b7474adf08b4244e8089.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View file

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://b5tvttwjwgpb1"
path="res://.godot/imported/yay.mp3-25ed624d349ce4768f62d6fb0b734c96.mp3str"
[deps]
source_file="res://sounds/yay.mp3"
dest_files=["res://.godot/imported/yay.mp3-25ed624d349ce4768f62d6fb0b734c96.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

39
test_fluid.tscn Normal file
View file

@ -0,0 +1,39 @@
[gd_scene load_steps=4 format=3 uid="uid://cmp1bhx77d1j5"]
[ext_resource type="Script" uid="uid://d4kq5akkly15i" path="res://addons/godot-rapier2d/faucet_2d.gd" id="1_dv1o8"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_lv57a"]
size = Vector2(404, 20)
[sub_resource type="FluidEffect2DSurfaceTensionAKINCI" id="FluidEffect2DSurfaceTensionAKINCI_dv1o8"]
fluid_tension_coefficient = 100.0
[node name="TestFluid" type="Node2D"]
[node name="StaticBody2D" type="StaticBody2D" parent="."]
position = Vector2(591, 545)
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(29, 0)
shape = SubResource("RectangleShape2D_lv57a")
[node name="CollisionShape2D2" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(-191, -134)
rotation = 1.2401063
shape = SubResource("RectangleShape2D_lv57a")
[node name="CollisionShape2D3" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(258, -172)
rotation = -1.3760309
shape = SubResource("RectangleShape2D_lv57a")
[node name="Fluid2D" type="Fluid2D" parent="."]
debug_draw = true
density = 1000.0
effects = Array[Resource]([SubResource("FluidEffect2DSurfaceTensionAKINCI_dv1o8")])
position = Vector2(653, -76)
script = ExtResource("1_dv1o8")
interval = 0.1
[node name="Camera2D" type="Camera2D" parent="."]
position = Vector2(591, 323)

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://oh8y7lbiprs4"
path="res://.godot/imported/bag.png-1d3569746a0afa7a50020e78aeb3fcf6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/bag.png"
dest_files=["res://.godot/imported/bag.png-1d3569746a0afa7a50020e78aeb3fcf6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bahp733iqv2us"
path="res://.godot/imported/desk.png-569ac858ccfa866c549921982f2d651c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/desk.png"
dest_files=["res://.godot/imported/desk.png-569ac858ccfa866c549921982f2d651c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://kg37aadtiumw"
path="res://.godot/imported/docgun.png-7020161270f57741a5c61a0720a68af0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/docgun.png"
dest_files=["res://.godot/imported/docgun.png-7020161270f57741a5c61a0720a68af0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://iim42wat824h"
path="res://.godot/imported/door_large_horizontial.png-be3fcc0a643e3e0a242a5070b84d40a0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/door_large_horizontial.png"
dest_files=["res://.godot/imported/door_large_horizontial.png-be3fcc0a643e3e0a242a5070b84d40a0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0c5hws6ki8p5"
path="res://.godot/imported/door_large_vertical.png-63c570800cfc026639fdfc69bb1882e3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/door_large_vertical.png"
dest_files=["res://.godot/imported/door_large_vertical.png-63c570800cfc026639fdfc69bb1882e3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 779 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://djmlhid6f4xwi"
path="res://.godot/imported/door_medium_horziontial.png-60b5ecd0bd81d95adb1ce6c5aa367884.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/door_medium_horziontial.png"
dest_files=["res://.godot/imported/door_medium_horziontial.png-60b5ecd0bd81d95adb1ce6c5aa367884.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bgui3ranlk441"
path="res://.godot/imported/locker.png-291655332e65b890583d6d9343e4a2f5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/locker.png"
dest_files=["res://.godot/imported/locker.png-291655332e65b890583d6d9343e4a2f5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cwa4uu7hrw2l0"
path="res://.godot/imported/save_indicator.png-9ea36dce7f4f02849ef94f4ba75ec5ee.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/save_indicator.png"
dest_files=["res://.godot/imported/save_indicator.png-9ea36dce7f4f02849ef94f4ba75ec5ee.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 B

View file

@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dk5ctkygv2n0i"
path="res://.godot/imported/smg.png-6e5b1b02de92e8359738de08c577925f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/smg.png"
dest_files=["res://.godot/imported/smg.png-6e5b1b02de92e8359738de08c577925f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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