More intro stuff, input icon fixes, enemy export var improvements, CHECKPOINTS

This commit is contained in:
ToasterPanic 2025-12-07 01:34:20 -05:00
parent 04d50df23e
commit a24c06737b
32 changed files with 1145 additions and 177 deletions

View file

@ -22,7 +22,9 @@ 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_BACK: "back",
JOY_BUTTON_LEFT_STICK: "left_stick",
JOY_BUTTON_RIGHT_STICK: "right_stick",
}
static var mouse_button_dictionary = {

View file

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

View file

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

View file

@ -225,6 +225,12 @@ 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]

133
scenes/enemy_ground.tscn Normal file
View file

@ -0,0 +1,133 @@
[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(2048, 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

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=31 format=3 uid="uid://by43ihcec8e8q"]
[gd_scene load_steps=32 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"]
@ -109,6 +109,11 @@ 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)
@ -282,6 +287,155 @@ 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)
@ -345,7 +499,7 @@ position = Vector2(32, 32)
scale = Vector2(4, 4)
sprite_frames = SubResource("SpriteFrames_257nh")
autoplay = "default"
frame_progress = 0.42345548
frame_progress = 0.6029871
[node name="Shader" type="ColorRect" parent="UI"]
material = SubResource("ShaderMaterial_ypt7u")

File diff suppressed because one or more lines are too long

View file

@ -17,10 +17,31 @@ var sprinting = false
var equipped_ground_gun = "pistol"
var ammo_in_mag = 12
func set_ground_gun(value: String):
func set_ground_gun(value):
equipped_ground_gun = value
$HeldItem/Sprite.texture = load("res://textures/" + equipped_ground_gun + ".png")
ammo_in_mag = global.ground_guns
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
func _ready() -> void:
$Sprite.play()
@ -36,7 +57,7 @@ func _process(delta: float) -> void:
$Sprite.position.y = 64
$Sprite.animation = "idle"
$HeldItem.visible = false
if has_node("HeldItem"): $HeldItem.visible = false
return
@ -74,34 +95,40 @@ func _process(delta: float) -> void:
$Sprite.animation = "idle"
fire_delay -= delta
if firing and (fire_delay < 0):
if has_node("HeldItem") and (equipped_ground_gun != null):
$HeldItem/Cast.force_raycast_update()
if has_node("HeldItem"):
if !equipped_ground_gun:
$HeldItem.visible = false
else:
$HeldItem.visible = true
var hit_target = $HeldItem/Cast.get_collider()
if hit_target:
if "health" in hit_target.get_parent():
hit_target.get_parent().health -= 10
if firing and (fire_delay < 0):
$HeldItem/Cast.force_raycast_update()
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
var hit_target = $HeldItem/Cast.get_collider()
if hit_target:
if "health" in hit_target.get_parent():
hit_target.get_parent().health -= 10
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
move_and_slide()

147
scripts/doctor.gd Normal file
View file

@ -0,0 +1,147 @@
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", false)
var option = await game.make_choice({
"yes": "Yes",
"no": "No"
})
if option == "yes":
await game.dialogue("Alrighty!", "doctor")
await game.dialogue("We have your stuff back here, let me go grab it real quick...", "doctor")
await game.dialogue("Here's your bag.", "doctor")
await game.dialogue("Should have everything - tablet, ship keys, a pistol...", "doctor")
game.get_node("DistantGunshots1").play()
await get_tree().create_timer(2).timeout
await game.dialogue("...the hell?", "doctor", 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", true)
await get_tree().create_timer(0.5).timeout
await game.dialogue("We need to leave. Now.", "doctor", 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", false)
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", true)
var option_2 = await game.make_choice({
"yes": "Yes",
"no": "No"
})
if option_2 == "yes": await game.dialogue("Good to know.", "doctor", true)
else: await game.dialogue("Well, you're still probably better than I would be.", "doctor", 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")
player.get_node("Camera").enabled = true
$Camera.enabled = false
$InteractArea.monitoring = true
player.busy = false
return
func checkpoint_1():
var player = game.get_node("PlayerGround")
await game.dialogue("You should probably get it out.", "doctor", 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", 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
await game.dialogue("RUN!", "doctor", 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
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

1
scripts/doctor.gd.uid Normal file
View file

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

View file

@ -5,7 +5,6 @@ var alerted = false
var inaccuracy = 15
var reaction_time = 0.35
var reaction_halve_distance = 720
var reaction_timer = 0
@ -29,9 +28,16 @@ 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
func _ready() -> void:
super()
@ -46,16 +52,24 @@ 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 player.is_ancestor_of($LineOfSight.get_collider()):
if $LineOfSight.get_collider() && 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

View file

@ -31,6 +31,15 @@ func save_game() -> void:
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())
if global.checkpoint:
global.checkpoint.free()
global.checkpoint = packed_scene
func _ready() -> void:
$UI/Control/Dialogue.visible = false
@ -93,7 +102,7 @@ func dialogue(text: String, type: String = "generic", allow_input: bool = true)
$Dialogue.play()
await get_tree().create_timer(speed).timeout
#await get_tree().create_timer(speed).timeout
i += 1

View file

@ -31,13 +31,26 @@ var orbit_zones = [
var ground_guns = {
"pistol": {
"name": "Oni",
"type": "energy",
"type": "kinetic",
"damage": 10,
"magazine_size": 12,
"fire_rate": 0.3
},
"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
@ -105,12 +118,13 @@ var default_stats = {
"speed": 512,
"boost_tank_size": 1,
"marks": 200,
"location": "space",
"location": "space_station_1",
"position": Vector2(),
"rotation": 0,
"story_progress": 1,
"story_progress": 0,
"navigation_goal": null,
"equipped_ground_gun": "pistol"
"equipped_ground_gun": null,
"gun_holstered": true,
}
var stats = default_stats.duplicate_deep()

View file

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

View file

@ -5,11 +5,19 @@ var last_aim_direction = Vector2(0, 0)
func _ready() -> void:
super()
set_ground_gun(global.stats.equipped_ground_gun)
if global.stats.gun_holstered:
set_ground_gun(null)
else:
set_ground_gun(global.stats.equipped_ground_gun)
func _process(delta: float) -> void:
super(delta)
if dead:
if global.checkpoint:
global.load_game()
get_tree().change_scene_to_file("res://scenes/ground.tscn")
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(
@ -36,5 +44,14 @@ func _process(delta: float) -> void:
else:
$HeldItem/Crosshair.visible = false
$HeldItem/Line.visible = false
if Input.is_action_just_pressed("toggle_holster"):
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)
firing = Input.is_action_pressed("fire")

View file

@ -188,6 +188,10 @@ 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
@ -198,5 +202,32 @@ func _ground_ready() -> void:
game.set_vignette_parameter("softness", i * 0.04)
i += 2
game.get_node("UI/Control/MoveTutorial").visible = true
while player.velocity.length() == 0:
await get_tree().create_timer(0.1).timeout
await get_tree().create_timer(1).timeout
print("end")
game.get_node("UI/Control/MoveTutorial").visible = false
elif global.stats.story_progress == 1:
pass
elif global.stats.story_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()
else:
game.save_game()

Binary file not shown.

View file

@ -0,0 +1,19 @@
[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

BIN
sounds/intrusion_alarm.mp3 Normal file

Binary file not shown.

View file

@ -0,0 +1,19 @@
[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

BIN
textures/desk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

40
textures/desk.png.import Normal file
View file

@ -0,0 +1,40 @@
[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.

After

Width:  |  Height:  |  Size: 284 B

View file

@ -0,0 +1,40 @@
[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.

After

Width:  |  Height:  |  Size: 208 B

View file

@ -0,0 +1,40 @@
[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

BIN
textures/locker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

View file

@ -0,0 +1,40 @@
[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

BIN
textures/smg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

40
textures/smg.png.import Normal file
View file

@ -0,0 +1,40 @@
[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