Extensive work done on basically everything. Attacks prototyped, animations prototyped, pawnbody split out, all traps but pitfall implemented, UI hooked up more.
This commit is contained in:
BIN
audio/sounds/Hitech Shot A.wav
Normal file
BIN
audio/sounds/Hitech Shot A.wav
Normal file
Binary file not shown.
24
audio/sounds/Hitech Shot A.wav.import
Normal file
24
audio/sounds/Hitech Shot A.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://c1j8hjmw45x86"
|
||||
path="res://.godot/imported/Hitech Shot A.wav-e57d3655671c296fafa3d2154f969e02.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Hitech Shot A.wav"
|
||||
dest_files=["res://.godot/imported/Hitech Shot A.wav-e57d3655671c296fafa3d2154f969e02.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Hitech Shot B.wav
Normal file
BIN
audio/sounds/Hitech Shot B.wav
Normal file
Binary file not shown.
24
audio/sounds/Hitech Shot B.wav.import
Normal file
24
audio/sounds/Hitech Shot B.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dgftxjb34d2ph"
|
||||
path="res://.godot/imported/Hitech Shot B.wav-d2114b8125e08c8fcbcc010c4ac10ab3.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Hitech Shot B.wav"
|
||||
dest_files=["res://.godot/imported/Hitech Shot B.wav-d2114b8125e08c8fcbcc010c4ac10ab3.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Hitech Shot C.wav
Normal file
BIN
audio/sounds/Hitech Shot C.wav
Normal file
Binary file not shown.
24
audio/sounds/Hitech Shot C.wav.import
Normal file
24
audio/sounds/Hitech Shot C.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bguwdvatsf87l"
|
||||
path="res://.godot/imported/Hitech Shot C.wav-0dbb83a7c28ad0e7360a4144f64e7c77.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Hitech Shot C.wav"
|
||||
dest_files=["res://.godot/imported/Hitech Shot C.wav-0dbb83a7c28ad0e7360a4144f64e7c77.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Whoosh Blade 001.wav
Normal file
BIN
audio/sounds/Whoosh Blade 001.wav
Normal file
Binary file not shown.
24
audio/sounds/Whoosh Blade 001.wav.import
Normal file
24
audio/sounds/Whoosh Blade 001.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://b8ko5lwikj8ts"
|
||||
path="res://.godot/imported/Whoosh Blade 001.wav-0a40ba1c0704a04c7e9d95a3a2952f1d.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Whoosh Blade 001.wav"
|
||||
dest_files=["res://.godot/imported/Whoosh Blade 001.wav-0a40ba1c0704a04c7e9d95a3a2952f1d.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Whoosh Blade 002.wav
Normal file
BIN
audio/sounds/Whoosh Blade 002.wav
Normal file
Binary file not shown.
24
audio/sounds/Whoosh Blade 002.wav.import
Normal file
24
audio/sounds/Whoosh Blade 002.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://dufoyvysi4pa1"
|
||||
path="res://.godot/imported/Whoosh Blade 002.wav-a527be18cb71119f7311612c1984f1be.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Whoosh Blade 002.wav"
|
||||
dest_files=["res://.godot/imported/Whoosh Blade 002.wav-a527be18cb71119f7311612c1984f1be.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Whoosh Blade 003.wav
Normal file
BIN
audio/sounds/Whoosh Blade 003.wav
Normal file
Binary file not shown.
24
audio/sounds/Whoosh Blade 003.wav.import
Normal file
24
audio/sounds/Whoosh Blade 003.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://boe6fidhl6ut5"
|
||||
path="res://.godot/imported/Whoosh Blade 003.wav-9fba3d17936d04349bedcc3417827502.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Whoosh Blade 003.wav"
|
||||
dest_files=["res://.godot/imported/Whoosh Blade 003.wav-9fba3d17936d04349bedcc3417827502.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Whoosh Blade 004.wav
Normal file
BIN
audio/sounds/Whoosh Blade 004.wav
Normal file
Binary file not shown.
24
audio/sounds/Whoosh Blade 004.wav.import
Normal file
24
audio/sounds/Whoosh Blade 004.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://b3x0xqu8yrib4"
|
||||
path="res://.godot/imported/Whoosh Blade 004.wav-004e5fcdda319910a4671ddb53800018.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Whoosh Blade 004.wav"
|
||||
dest_files=["res://.godot/imported/Whoosh Blade 004.wav-004e5fcdda319910a4671ddb53800018.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/Whoosh Blade 005.wav
Normal file
BIN
audio/sounds/Whoosh Blade 005.wav
Normal file
Binary file not shown.
24
audio/sounds/Whoosh Blade 005.wav.import
Normal file
24
audio/sounds/Whoosh Blade 005.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://1m2yfje18spo"
|
||||
path="res://.godot/imported/Whoosh Blade 005.wav-b77bf215aae8773e43e9ca269c09de7b.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/Whoosh Blade 005.wav"
|
||||
dest_files=["res://.godot/imported/Whoosh Blade 005.wav-b77bf215aae8773e43e9ca269c09de7b.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/explosion_large_05.wav
Normal file
BIN
audio/sounds/explosion_large_05.wav
Normal file
Binary file not shown.
24
audio/sounds/explosion_large_05.wav.import
Normal file
24
audio/sounds/explosion_large_05.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bmxuqtejtyf75"
|
||||
path="res://.godot/imported/explosion_large_05.wav-8aaba4f8d2d8fe148ac4f73a2bde0bad.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/explosion_large_05.wav"
|
||||
dest_files=["res://.godot/imported/explosion_large_05.wav-8aaba4f8d2d8fe148ac4f73a2bde0bad.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/explosion_large_06.wav
Normal file
BIN
audio/sounds/explosion_large_06.wav
Normal file
Binary file not shown.
24
audio/sounds/explosion_large_06.wav.import
Normal file
24
audio/sounds/explosion_large_06.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://ccf2g14lglt2p"
|
||||
path="res://.godot/imported/explosion_large_06.wav-26fb65d41be2f260bf310a1c8e14d972.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/explosion_large_06.wav"
|
||||
dest_files=["res://.godot/imported/explosion_large_06.wav-26fb65d41be2f260bf310a1c8e14d972.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/explosion_large_07.wav
Normal file
BIN
audio/sounds/explosion_large_07.wav
Normal file
Binary file not shown.
24
audio/sounds/explosion_large_07.wav.import
Normal file
24
audio/sounds/explosion_large_07.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://b4tqrmvqit1q4"
|
||||
path="res://.godot/imported/explosion_large_07.wav-d16d0e0ae6238b45bae3423f99c604eb.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/explosion_large_07.wav"
|
||||
dest_files=["res://.godot/imported/explosion_large_07.wav-d16d0e0ae6238b45bae3423f99c604eb.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/explosion_large_09.wav
Normal file
BIN
audio/sounds/explosion_large_09.wav
Normal file
Binary file not shown.
24
audio/sounds/explosion_large_09.wav.import
Normal file
24
audio/sounds/explosion_large_09.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://8fa481psipvv"
|
||||
path="res://.godot/imported/explosion_large_09.wav-41cf5984e9b508859b7c052211d54945.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/explosion_large_09.wav"
|
||||
dest_files=["res://.godot/imported/explosion_large_09.wav-41cf5984e9b508859b7c052211d54945.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/explosion_large_10.wav
Normal file
BIN
audio/sounds/explosion_large_10.wav
Normal file
Binary file not shown.
24
audio/sounds/explosion_large_10.wav.import
Normal file
24
audio/sounds/explosion_large_10.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://fctuwgytsn2p"
|
||||
path="res://.godot/imported/explosion_large_10.wav-2d2e5e0cc2d8006c477f063de069fe52.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/explosion_large_10.wav"
|
||||
dest_files=["res://.godot/imported/explosion_large_10.wav-2d2e5e0cc2d8006c477f063de069fe52.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/gas_leak_med_burst_01.wav
Normal file
BIN
audio/sounds/gas_leak_med_burst_01.wav
Normal file
Binary file not shown.
24
audio/sounds/gas_leak_med_burst_01.wav.import
Normal file
24
audio/sounds/gas_leak_med_burst_01.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://bk4s3yn7473pc"
|
||||
path="res://.godot/imported/gas_leak_med_burst_01.wav-a15feaa0b6feab543b5e2c23040b2a7b.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/gas_leak_med_burst_01.wav"
|
||||
dest_files=["res://.godot/imported/gas_leak_med_burst_01.wav-a15feaa0b6feab543b5e2c23040b2a7b.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
BIN
audio/sounds/sci-fi_weapon_reload_03.wav
Normal file
BIN
audio/sounds/sci-fi_weapon_reload_03.wav
Normal file
Binary file not shown.
24
audio/sounds/sci-fi_weapon_reload_03.wav.import
Normal file
24
audio/sounds/sci-fi_weapon_reload_03.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://cw31ymbqgqcq2"
|
||||
path="res://.godot/imported/sci-fi_weapon_reload_03.wav-c908d897c24b42dc166a58b01a4ace0d.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://audio/sounds/sci-fi_weapon_reload_03.wav"
|
||||
dest_files=["res://.godot/imported/sci-fi_weapon_reload_03.wav-c908d897c24b42dc166a58b01a4ace0d.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
27
credits.txt
27
credits.txt
@@ -1,20 +1,37 @@
|
||||
Will S. - Ovani
|
||||
****Will S. - Ovani
|
||||
Trap Cycle - 9mm M&P Drop Mag Empty C.wav
|
||||
Melee Swings -
|
||||
- Whoosh Blade 001.wav
|
||||
- Whoosh Blade 003.wav
|
||||
- Whoosh Blade 002.wav
|
||||
- Whoosh Blade 005.wav
|
||||
- Whoosh Blade 004.wav
|
||||
Ranged Shots -
|
||||
- Hitech Shot A.wav
|
||||
- Hitech Shot B.wav
|
||||
- Hitech Shot C.wav
|
||||
|
||||
|
||||
Gamemaster Audio
|
||||
****Gamemaster Audio
|
||||
Trap Place - impact_deep_thud_bounce_09.wav
|
||||
Explosions
|
||||
- explosion_large_01.wav
|
||||
- explosion_large_02.wav
|
||||
- explosion_large_03.wav
|
||||
- explosion_large_04.wav
|
||||
- explosion_large_05.wav
|
||||
- explosion_large_06.wav
|
||||
- explosion_large_07.wav
|
||||
- explosion_large_08.wav
|
||||
- explosion_large_09.wav
|
||||
- explosion_large_10.wav
|
||||
- explosion_small_01.wav
|
||||
- explosion_small_02.wav
|
||||
- explosion_small_03.wav
|
||||
- explosion_small_04.wav
|
||||
|
||||
Gas Square
|
||||
- gas_leak_med_burst_01.wav
|
||||
Reload - sci-fi_weapon_reload_03.wav
|
||||
Disarm Tap - metal_tiny_hit_impact_01.wav
|
||||
|
||||
OTBTechno
|
||||
****OTBTechno
|
||||
Trap Alert - 134688__otbtechno__bike-bell.wav
|
||||
|
||||
23
data/pawn.gd
Normal file
23
data/pawn.gd
Normal file
@@ -0,0 +1,23 @@
|
||||
class_name PawnData extends Resource
|
||||
|
||||
@export var name : String
|
||||
|
||||
@export var move_speed : float
|
||||
|
||||
|
||||
@export var life : int
|
||||
@export var max_life : int = 100
|
||||
|
||||
@export var ammo : int
|
||||
@export var max_ammo : int = 5
|
||||
@export var melee_damage : int
|
||||
@export var range_damage : int
|
||||
@export var range_time : float
|
||||
@export var melee_time : float
|
||||
@export var reload_time : float = 1.25
|
||||
|
||||
var model
|
||||
var portrait
|
||||
@export var nameplate : Texture2D
|
||||
|
||||
@export var starting_traps : Array[TrapSet] = [null, null, null]
|
||||
1
data/pawn.gd.uid
Normal file
1
data/pawn.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c53ohdio1ksp1
|
||||
38
data/pawns/abdoll_relin.tres
Normal file
38
data/pawns/abdoll_relin.tres
Normal file
@@ -0,0 +1,38 @@
|
||||
[gd_resource type="Resource" script_class="PawnData" load_steps=6 format=3 uid="uid://yosnkcj4ci4v"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn.gd" id="1_qrt0o"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/trapset.gd" id="2_4g7al"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qrt0o"]
|
||||
script = ExtResource("2_4g7al")
|
||||
type = 1
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_4g7al"]
|
||||
script = ExtResource("2_4g7al")
|
||||
type = 5
|
||||
qty = 6
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_8dqhi"]
|
||||
script = ExtResource("2_4g7al")
|
||||
type = 2
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_qrt0o")
|
||||
name = "Abdoll Relin"
|
||||
move_speed = 3.0
|
||||
life = 75
|
||||
max_life = 75
|
||||
ammo = 2
|
||||
max_ammo = 2
|
||||
melee_damage = 12
|
||||
range_damage = 12
|
||||
range_time = 1.0
|
||||
melee_time = 1.25
|
||||
reload_time = 1.75
|
||||
starting_traps = Array[ExtResource("2_4g7al")]([SubResource("Resource_qrt0o"), SubResource("Resource_4g7al"), SubResource("Resource_8dqhi")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
37
data/pawns/john_bishous.tres
Normal file
37
data/pawns/john_bishous.tres
Normal file
@@ -0,0 +1,37 @@
|
||||
[gd_resource type="Resource" script_class="PawnData" load_steps=6 format=3 uid="uid://df4gqi1us2dwu"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn.gd" id="1_ocmvf"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/trapset.gd" id="2_sb8f5"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_ocmvf"]
|
||||
script = ExtResource("2_sb8f5")
|
||||
type = 4
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_sb8f5"]
|
||||
script = ExtResource("2_sb8f5")
|
||||
qty = 6
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_tu5w7"]
|
||||
script = ExtResource("2_sb8f5")
|
||||
type = 2
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_ocmvf")
|
||||
name = "John Bishous"
|
||||
move_speed = 2.5
|
||||
life = 125
|
||||
max_life = 125
|
||||
ammo = 3
|
||||
max_ammo = 3
|
||||
melee_damage = 10
|
||||
range_damage = 20
|
||||
range_time = 0.75
|
||||
melee_time = 1.0
|
||||
reload_time = 1.75
|
||||
starting_traps = Array[ExtResource("2_sb8f5")]([SubResource("Resource_ocmvf"), SubResource("Resource_sb8f5"), SubResource("Resource_tu5w7")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
36
data/pawns/lou_riche.tres
Normal file
36
data/pawns/lou_riche.tres
Normal file
@@ -0,0 +1,36 @@
|
||||
[gd_resource type="Resource" script_class="PawnData" load_steps=6 format=3 uid="uid://dnty6gi4s2vdl"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn.gd" id="1_h6eg2"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/trapset.gd" id="2_onotk"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_h6eg2"]
|
||||
script = ExtResource("2_onotk")
|
||||
type = 1
|
||||
qty = 5
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_onotk"]
|
||||
script = ExtResource("2_onotk")
|
||||
type = 2
|
||||
qty = 1
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_7kyxn"]
|
||||
script = ExtResource("2_onotk")
|
||||
type = 3
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_h6eg2")
|
||||
name = "Lou Riche"
|
||||
move_speed = 3.0
|
||||
life = 100
|
||||
ammo = 6
|
||||
max_ammo = 6
|
||||
melee_damage = 12
|
||||
range_damage = 4
|
||||
range_time = 0.4
|
||||
melee_time = 1.25
|
||||
starting_traps = Array[ExtResource("2_onotk")]([SubResource("Resource_h6eg2"), SubResource("Resource_onotk"), SubResource("Resource_7kyxn")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
37
data/pawns/tenrou_ugetsu.tres
Normal file
37
data/pawns/tenrou_ugetsu.tres
Normal file
@@ -0,0 +1,37 @@
|
||||
[gd_resource type="Resource" script_class="PawnData" load_steps=6 format=3 uid="uid://bpb2nok3rqm1g"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn.gd" id="1_g4lbt"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/trapset.gd" id="2_fm4bf"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_g4lbt"]
|
||||
script = ExtResource("2_fm4bf")
|
||||
type = 1
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_fm4bf"]
|
||||
script = ExtResource("2_fm4bf")
|
||||
type = 5
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_0fl5x"]
|
||||
script = ExtResource("2_fm4bf")
|
||||
type = 3
|
||||
qty = 2
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_g4lbt")
|
||||
name = "Tenrou Ugetsu"
|
||||
move_speed = 3.5
|
||||
life = 100
|
||||
ammo = 7
|
||||
max_ammo = 7
|
||||
melee_damage = 15
|
||||
range_damage = 3
|
||||
range_time = 0.3
|
||||
melee_time = 1.25
|
||||
reload_time = 0.6
|
||||
starting_traps = Array[ExtResource("2_fm4bf")]([SubResource("Resource_g4lbt"), SubResource("Resource_fm4bf"), SubResource("Resource_0fl5x")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
38
data/pawns/tico.tres
Normal file
38
data/pawns/tico.tres
Normal file
@@ -0,0 +1,38 @@
|
||||
[gd_resource type="Resource" script_class="PawnData" load_steps=6 format=3 uid="uid://casciqabe0wgo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn.gd" id="1_y3bgy"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/trapset.gd" id="2_o3qj5"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_y3bgy"]
|
||||
script = ExtResource("2_o3qj5")
|
||||
type = 4
|
||||
qty = 3
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_o3qj5"]
|
||||
script = ExtResource("2_o3qj5")
|
||||
type = 5
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_cxp03"]
|
||||
script = ExtResource("2_o3qj5")
|
||||
type = 3
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_y3bgy")
|
||||
name = "Tico"
|
||||
move_speed = 3.0
|
||||
life = 75
|
||||
max_life = 75
|
||||
ammo = 4
|
||||
max_ammo = 4
|
||||
melee_damage = 15
|
||||
range_damage = 10
|
||||
range_time = 1.0
|
||||
melee_time = 1.25
|
||||
reload_time = 2.0
|
||||
starting_traps = Array[ExtResource("2_o3qj5")]([SubResource("Resource_y3bgy"), SubResource("Resource_o3qj5"), SubResource("Resource_cxp03")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
34
data/pawns/van_reily.tres
Normal file
34
data/pawns/van_reily.tres
Normal file
@@ -0,0 +1,34 @@
|
||||
[gd_resource type="Resource" script_class="PawnData" load_steps=6 format=3 uid="uid://6s8tqfssrt5i"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn.gd" id="1_ydc1g"]
|
||||
[ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/trapset.gd" id="2_crpmc"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_nf0ju"]
|
||||
script = ExtResource("2_crpmc")
|
||||
type = 4
|
||||
qty = 1
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_2pr8m"]
|
||||
script = ExtResource("2_crpmc")
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_1yw33"]
|
||||
script = ExtResource("2_crpmc")
|
||||
type = 1
|
||||
qty = 4
|
||||
metadata/_custom_type_script = "uid://b0b1107c0d807"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_ydc1g")
|
||||
name = "Van Raily"
|
||||
move_speed = 3.0
|
||||
life = 100
|
||||
ammo = 5
|
||||
melee_damage = 10
|
||||
range_damage = 5
|
||||
range_time = 0.5
|
||||
melee_time = 1.0
|
||||
starting_traps = Array[ExtResource("2_crpmc")]([SubResource("Resource_nf0ju"), SubResource("Resource_2pr8m"), SubResource("Resource_1yw33")])
|
||||
metadata/_custom_type_script = "uid://c53ohdio1ksp1"
|
||||
4
data/trapset.gd
Normal file
4
data/trapset.gd
Normal file
@@ -0,0 +1,4 @@
|
||||
class_name TrapSet extends Resource
|
||||
|
||||
@export var type : Trap.Type
|
||||
@export var qty : int
|
||||
1
data/trapset.gd.uid
Normal file
1
data/trapset.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b0b1107c0d807
|
||||
BIN
models/dodecahedron.fbx
Normal file
BIN
models/dodecahedron.fbx
Normal file
Binary file not shown.
44
models/dodecahedron.fbx.import
Normal file
44
models/dodecahedron.fbx.import
Normal file
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://lf55hlwuexr8"
|
||||
path="res://.godot/imported/dodecahedron.fbx-d877e542786ccf60a7c618d38ca40818.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/dodecahedron.fbx"
|
||||
dest_files=["res://.godot/imported/dodecahedron.fbx-d877e542786ccf60a7c618d38ca40818.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=true
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
fbx/importer=0
|
||||
fbx/allow_geometry_helper_nodes=false
|
||||
fbx/embedded_image_handling=1
|
||||
fbx/naming_version=2
|
||||
@@ -34,6 +34,7 @@ project/assembly_name="Trap Gunner"
|
||||
|
||||
level_spawner=""
|
||||
scenes=""
|
||||
combat="Combat valid targets."
|
||||
|
||||
[input]
|
||||
|
||||
@@ -101,3 +102,7 @@ detonate={
|
||||
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
3d/default_gravity=30.0
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://ck4x56txf676a"]
|
||||
[gd_scene load_steps=11 format=3 uid="uid://ck4x56txf676a"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://grs3nyom325o" path="res://scripts/character_select.gd" id="1_bow2h"]
|
||||
[ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="2_uxcyu"]
|
||||
[ext_resource type="AudioStream" uid="uid://vcatohtmt8bk" path="res://audio/music/16 - Character Select.mp3" id="3_bow2h"]
|
||||
|
||||
@@ -76,6 +77,7 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_bow2h")
|
||||
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://by6suwmds7xq2"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://by6suwmds7xq2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d3t381vws7vns" path="res://scripts/test_level.gd" id="1_qcd3b"]
|
||||
[ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="1_x4b8f"]
|
||||
[ext_resource type="Script" uid="uid://cymi1n4gavixy" path="res://scripts/level_camera.gd" id="3_qcd3b"]
|
||||
[ext_resource type="Script" uid="uid://clqnjqolkujea" path="res://scripts/combat_target.gd" id="6_qcd3b"]
|
||||
[ext_resource type="MeshLibrary" uid="uid://bhpyvhf36jl0f" path="res://testing.tres" id="7_88ety"]
|
||||
[ext_resource type="MeshLibrary" uid="uid://cvhm40o2uw5mr" path="res://testing markers.tres" id="7_ahbqi"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_qcd3b"]
|
||||
frequency = 0.02
|
||||
fractal_octaves = 6
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_tmr53"]
|
||||
size = Vector3(1, 2, 1)
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1_qcd3b")
|
||||
difficulty = 5
|
||||
@@ -20,6 +28,7 @@ transform = Transform3D(1, 0, 0, 0, 0.49999997, 0.86602545, 0, -0.86602545, 0.49
|
||||
projection = 1
|
||||
size = 5.0
|
||||
script = ExtResource("3_qcd3b")
|
||||
noise = SubResource("FastNoiseLite_qcd3b")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0)
|
||||
@@ -37,7 +46,8 @@ data = {
|
||||
}
|
||||
metadata/_editor_floor_ = Vector3(0, 0, 0)
|
||||
|
||||
[node name="Ramps and Walls" type="GridMap" parent="."]
|
||||
[node name="Ramps" type="GridMap" parent="."]
|
||||
unique_name_in_owner = true
|
||||
mesh_library = ExtResource("7_88ety")
|
||||
cell_size = Vector3(1, 1, 1)
|
||||
cell_center_y = false
|
||||
@@ -56,3 +66,15 @@ cell_center_y = false
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
metadata/_editor_floor_ = Vector3(0, -1, 0)
|
||||
|
||||
[node name="Combat Target" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.926114, 0, -4.1967854)
|
||||
script = ExtResource("6_qcd3b")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Combat Target"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
size = Vector3(1, 2, 1)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Combat Target" groups=["combat"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("BoxShape3D_tmr53")
|
||||
|
||||
10
scripts/character_select.gd
Normal file
10
scripts/character_select.gd
Normal file
@@ -0,0 +1,10 @@
|
||||
extends Control
|
||||
|
||||
var pawns = [
|
||||
preload("res://data/pawns/van_reily.tres"),
|
||||
preload("res://data/pawns/lou_riche.tres"),
|
||||
preload("res://data/pawns/tico.tres"),
|
||||
preload("res://data/pawns/john_bishous.tres"),
|
||||
preload("res://data/pawns/abdoll_relin.tres"),
|
||||
preload("res://data/pawns/tenrou_ugetsu.tres")
|
||||
]
|
||||
1
scripts/character_select.gd.uid
Normal file
1
scripts/character_select.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://grs3nyom325o
|
||||
1
scripts/combat_target.gd
Normal file
1
scripts/combat_target.gd
Normal file
@@ -0,0 +1 @@
|
||||
class_name CombatTarget extends StaticBody3D
|
||||
1
scripts/combat_target.gd.uid
Normal file
1
scripts/combat_target.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://clqnjqolkujea
|
||||
18
scripts/control_display.gd
Normal file
18
scripts/control_display.gd
Normal file
@@ -0,0 +1,18 @@
|
||||
class_name ControlDisplay extends Control
|
||||
|
||||
@onready var range_attack_button : TextureButton = $RangedAttack
|
||||
@onready var melee_attack_button : TextureButton = $MeleeAttack
|
||||
@onready var trap_button : TextureButton = $Trap
|
||||
@onready var detect_button : TextureButton = $Detect
|
||||
@onready var switch_button : TextureButton = $Switch
|
||||
|
||||
func _on_melee_range_changed(melee : bool) -> void:
|
||||
range_attack_button.visible = !melee
|
||||
melee_attack_button.visible = melee
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
trap_button.set_pressed_no_signal(Input.is_action_pressed("lay trap"))
|
||||
detect_button.set_pressed_no_signal(Input.is_action_pressed("detect"))
|
||||
switch_button.set_pressed_no_signal(Input.is_action_pressed("detonate"))
|
||||
melee_attack_button.set_pressed_no_signal(Input.is_action_pressed("attack"))
|
||||
range_attack_button.set_pressed_no_signal(Input.is_action_pressed("attack"))
|
||||
1
scripts/control_display.gd.uid
Normal file
1
scripts/control_display.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ci7vc41m5alq5
|
||||
@@ -65,7 +65,7 @@ func start_disarming() -> void:
|
||||
disarm_button_container.add_child(icon)
|
||||
confirmation_dialog.visible = false
|
||||
disarm_window.visible = true
|
||||
timer.start(3 + (2 * len(disarm_buttons) * randf_range(.75, 1.25) ))
|
||||
timer.start(2 + (len(disarm_buttons) * randf_range(.75, 1.25) ))
|
||||
|
||||
func try_advance(btn : int) -> void:
|
||||
|
||||
@@ -92,6 +92,8 @@ func button_pressed(event : InputEventAction) -> void:
|
||||
"detonate":
|
||||
start_disarming()
|
||||
"attack":
|
||||
var trap = Game.level.get_square_trap(square)
|
||||
trap.disarming = false
|
||||
Game.player.close_modal()
|
||||
_: return
|
||||
|
||||
|
||||
46
scripts/gas_emitter.gd
Normal file
46
scripts/gas_emitter.gd
Normal file
@@ -0,0 +1,46 @@
|
||||
extends Node3D
|
||||
|
||||
var gas_square_template = preload("res://templates/gas_square.tscn")
|
||||
var cycles : int = 3
|
||||
var square : Vector3i = Vector3i(2,0,0)
|
||||
var squares : Dictionary[Vector3i, bool] = {}
|
||||
var last_spread : Array[Vector3i]
|
||||
var trap_owner : int
|
||||
var damage : int = 4
|
||||
|
||||
func _ready() -> void:
|
||||
emit_gas.call_deferred(square)
|
||||
last_spread = [square]
|
||||
squares[square] = true
|
||||
|
||||
func _on_timeout() -> void:
|
||||
cycles -= 1
|
||||
if cycles <= 0:
|
||||
queue_free()
|
||||
return
|
||||
spread()
|
||||
|
||||
func spread() -> void:
|
||||
var new_squares : Dictionary[Vector3i, bool] = {}
|
||||
for square in last_spread:
|
||||
for i in range(-1, 2):
|
||||
for j in range(-1, 2):
|
||||
for k in range(-1, 2):
|
||||
var ts = square + Vector3i(i, j, k)
|
||||
new_squares[square + Vector3i(i, j, k)] = true
|
||||
last_spread = []
|
||||
for square in new_squares.keys():
|
||||
if squares.has(square):
|
||||
continue
|
||||
var floor_square = square + Vector3i(0,-1,0)
|
||||
if(Game.level.floor_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM
|
||||
and Game.level.ramp_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM):
|
||||
continue
|
||||
last_spread.append(square)
|
||||
squares[square] = true
|
||||
emit_gas(square)
|
||||
|
||||
func emit_gas(square) -> void:
|
||||
var gas = gas_square_template.instantiate()
|
||||
gas.setup(trap_owner, damage)
|
||||
Game.level.add_vfx(gas, square)
|
||||
1
scripts/gas_emitter.gd.uid
Normal file
1
scripts/gas_emitter.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b06ywr7w0wigy
|
||||
27
scripts/gas_square.gd
Normal file
27
scripts/gas_square.gd
Normal file
@@ -0,0 +1,27 @@
|
||||
extends Area3D
|
||||
|
||||
@onready var particles : GPUParticles3D = %ParticleFX
|
||||
var trap_owner : int
|
||||
var damage : int
|
||||
var time_remaining : float
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
particles.emitting = true
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
for body in get_overlapping_bodies():
|
||||
body.poison(damage, 2.0)
|
||||
time_remaining -= delta
|
||||
if time_remaining <= 0:
|
||||
queue_free()
|
||||
|
||||
func setup(owner, damage) -> void:
|
||||
self.trap_owner = trap_owner
|
||||
self.damage = damage
|
||||
time_remaining = 2.0
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body.can_hurt():
|
||||
body.hurt(damage)
|
||||
body.poison(damage, 2.0)
|
||||
1
scripts/gas_square.gd.uid
Normal file
1
scripts/gas_square.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://6xmp5cbmjrbw
|
||||
@@ -1,6 +1,7 @@
|
||||
class_name HealthBar extends TextureProgressBar
|
||||
|
||||
|
||||
@export var healthy_gradient : GradientTexture1D
|
||||
@export var poisoned_gradient : GradientTexture1D
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
@@ -13,3 +14,6 @@ func _process(delta: float) -> void:
|
||||
func _on_health_changed(current : int, max : int) -> void:
|
||||
max_value = max
|
||||
value = current
|
||||
|
||||
func _on_poison_status_changed(poisoned : bool) -> void:
|
||||
texture_progress = poisoned_gradient if poisoned else healthy_gradient
|
||||
|
||||
@@ -2,12 +2,26 @@ class_name HUD extends Control
|
||||
|
||||
@onready var trap_display : TrapDisplay = %TrapDisplay
|
||||
@onready var p1_healthbar : HealthBar = %P1HealthBar
|
||||
@onready var control_display : ControlDisplay = %ControlDisplay
|
||||
@onready var ammo_label : Label = %AmmoLabel
|
||||
func _ready() -> void:
|
||||
Game.hud = self
|
||||
|
||||
func register_player(player : Player) -> void:
|
||||
player.health_changed.connect(p1_healthbar._on_health_changed)
|
||||
player.poison_status_changed.connect(p1_healthbar._on_poison_status_changed)
|
||||
trap_display._on_trap_list_changed(player.data.traps, player.data.active_trap)
|
||||
player.trap_cycled.connect(trap_display._on_trap_cycled)
|
||||
player.trap_quantity_changed.connect(trap_display._on_trap_quantity_changed)
|
||||
player.trap_list_changed.connect(trap_display._on_trap_list_changed)
|
||||
player.combat_target_changed.connect(control_display._on_melee_range_changed)
|
||||
player.ammo_changed.connect(_on_ammo_changed)
|
||||
set_ammo(player.ammo)
|
||||
|
||||
func set_ammo(ammo : int) -> void:
|
||||
ammo_label.text = str(ammo)
|
||||
ammo_label.modulate = Color.DIM_GRAY if ammo == 0 else Color.WHITE
|
||||
|
||||
func _on_ammo_changed(current : int, max : int) -> void:
|
||||
set_ammo(current)
|
||||
|
||||
|
||||
@@ -1,19 +1,48 @@
|
||||
extends Camera3D
|
||||
class_name PlayerCamera extends Camera3D
|
||||
|
||||
var target
|
||||
var offset : Vector3
|
||||
var player_offset : Vector3
|
||||
|
||||
@export var decay = 0.9 # How quickly the shaking stops [0, 1].
|
||||
@export var max_offset = Vector2(2, 1.5) # Maximum hor/ver shake in pixels.
|
||||
|
||||
@export var noise : FastNoiseLite
|
||||
var noise_y = 0
|
||||
|
||||
var trauma = 0.0 # Current shake strength.
|
||||
var trauma_power = 2 # Trauma exponent. Use [2, 3].
|
||||
|
||||
func _enter_tree() -> void:
|
||||
call_deferred("register_player")
|
||||
|
||||
func _ready() -> void:
|
||||
randomize()
|
||||
noise.seed = randi()
|
||||
|
||||
|
||||
func register_player() -> void:
|
||||
target = Game.player
|
||||
target.camera = self
|
||||
if target:
|
||||
offset = global_position - target.global_position
|
||||
player_offset = global_position - target.global_position
|
||||
|
||||
func add_trauma(amount):
|
||||
trauma = min(trauma + amount, 1.0)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if target:
|
||||
global_position = target.global_position + offset
|
||||
global_position = target.global_position + player_offset
|
||||
if trauma:
|
||||
trauma = max(trauma - decay * delta, 0)
|
||||
shake()
|
||||
else:
|
||||
h_offset = 0
|
||||
v_offset = 0
|
||||
|
||||
func shake():
|
||||
noise_y += .1
|
||||
var amount = pow(trauma, trauma_power)
|
||||
var n_val = noise.get_noise_2d(noise.seed*2, noise_y)
|
||||
h_offset = max_offset.x * amount * randf_range(-1, 1)
|
||||
v_offset = max_offset.y * amount * randf_range(-1, 1)
|
||||
print("%f %f" % [h_offset, v_offset])
|
||||
|
||||
10
scripts/pawn_body.gd
Normal file
10
scripts/pawn_body.gd
Normal file
@@ -0,0 +1,10 @@
|
||||
class_name PawnBody extends Node3D
|
||||
|
||||
@export var projectile_template : PackedScene
|
||||
|
||||
@onready var anim_player : AnimationPlayer = %AnimationPlayer
|
||||
@onready var ranged_point : Node3D = %RangedPoint
|
||||
@onready var material : StandardMaterial3D = $Mesh.material
|
||||
|
||||
func play_animation(anim_name : String) -> void:
|
||||
anim_player.play(anim_name)
|
||||
1
scripts/pawn_body.gd.uid
Normal file
1
scripts/pawn_body.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://wye3mat5y5yg
|
||||
@@ -1,46 +1,131 @@
|
||||
class_name Player extends CharacterBody3D
|
||||
|
||||
enum State {
|
||||
NORMAL,
|
||||
KNOCKDOWN,
|
||||
KNOCKUP,
|
||||
FLUNG,
|
||||
BOUND,
|
||||
DEAD
|
||||
}
|
||||
|
||||
const trap_template = preload("res://templates/trap.tscn")
|
||||
const remove_trap_modal = preload("res://templates/remove_trap_modal.tscn")
|
||||
const disarm_trap_modal = preload("res://templates/disarm_trap_modal.tscn")
|
||||
|
||||
@export var speed : float = 10
|
||||
@onready var body = $Body
|
||||
@onready var body : PawnBody = $PawnBody
|
||||
@onready var data : PlayerData = $Data
|
||||
@onready var trap_sound : AudioStreamPlayer3D = $TrapSound
|
||||
@onready var detonate_sound : AudioStreamPlayer3D = $DetonateSound
|
||||
@onready var detect_sound : AudioStreamPlayer3D = $DetectSound
|
||||
@onready var reload_sound : AudioStreamPlayer3D = $PawnBody/ReloadSound
|
||||
@onready var detect_icon : Sprite3D = $DetectIcon
|
||||
|
||||
var id : int = 1
|
||||
|
||||
var state : State
|
||||
var button_actions : Dictionary[int, String]
|
||||
var current_square : Vector3i
|
||||
var facing : Vector3
|
||||
var detecting : bool = false
|
||||
var detect_squares : Dictionary[Vector3i, bool] = {}
|
||||
var detect_tween : Tween = null
|
||||
var fling_direction : Vector3
|
||||
var fling_speed : float
|
||||
|
||||
var poison_strength : int = 0
|
||||
var poison_time_remaining : float = 0
|
||||
var poison_pulse_timer : float
|
||||
|
||||
var melee_range : float = 3.0
|
||||
var ranged_range : float = 6
|
||||
var attack_timer : float = 0
|
||||
var melee_recovery_time : float = .75
|
||||
var ranged_recovery_time : float = .2
|
||||
var ranged_reload_time : float = 1
|
||||
var projectile_speed : float = 10.0
|
||||
var projectile_damage : int = 4
|
||||
var ammo = 5
|
||||
var max_ammo = 5
|
||||
var combat_target
|
||||
var meleeing : bool = false
|
||||
|
||||
var input_locked : bool = false
|
||||
var action_tween : Tween = null
|
||||
|
||||
|
||||
var camera : PlayerCamera = null
|
||||
|
||||
var modal = null
|
||||
|
||||
signal trap_cycled(trap_index)
|
||||
signal trap_quantity_changed(trap_index, quantity)
|
||||
signal trap_cycled(trap_index : int)
|
||||
signal trap_quantity_changed(trap_index : int, quantity : int)
|
||||
signal trap_list_changed(traps)
|
||||
signal health_changed(current : int, max : int)
|
||||
signal poison_status_changed(poisoned : bool)
|
||||
signal combat_target_changed(melee : bool)
|
||||
signal ammo_changed(current : int, max : int)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if attack_timer > 0:
|
||||
attack_timer -= delta
|
||||
check_attack_target()
|
||||
if is_poisoned():
|
||||
poison_time_remaining -= delta
|
||||
poison_pulse_timer += delta
|
||||
if poison_pulse_timer >= 1.0:
|
||||
poison_pulse_timer -= 1.0
|
||||
hurt(poison_strength)
|
||||
if poison_time_remaining <= 0:
|
||||
var pshader : ShaderMaterial = body.material.next_pass
|
||||
pshader.set_shader_parameter("strength", 0)
|
||||
poison_status_changed.emit(false)
|
||||
|
||||
var dir = Input.get_vector("west", "east", "north", "south")
|
||||
dir = Vector3(dir.x, 0, dir.y)
|
||||
if input_locked or modal != null:
|
||||
dir = Vector3.ZERO
|
||||
if dir.length_squared() > 0:
|
||||
if state == State.FLUNG:
|
||||
dir = fling_direction
|
||||
body.look_at(body.global_position - dir)
|
||||
var down = 0
|
||||
if !is_on_floor():
|
||||
down = velocity.y + get_gravity().y * delta
|
||||
velocity = fling_speed * dir
|
||||
#Raycast for a wall
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
# use global coordinates, not local to node
|
||||
var start = global_position + Vector3(0,0.25,0)
|
||||
var end = start + velocity.normalized() * 0.25 + velocity * 2 * delta
|
||||
var query = PhysicsRayQueryParameters3D.create(start, end, 1|2, [self])
|
||||
var result = space_state.intersect_ray(query)
|
||||
if result:
|
||||
var opp : Player = result.collider as Player
|
||||
if opp:
|
||||
opp.knockdown(fling_direction)
|
||||
opp.hurt(10)
|
||||
knockdown(-fling_direction)
|
||||
hurt(10)
|
||||
else:
|
||||
velocity += Vector3(0, down, 0)
|
||||
|
||||
move_and_slide()
|
||||
elif dir.length_squared() > 0:
|
||||
facing = dir.normalized()
|
||||
var down = 0
|
||||
if !is_on_floor():
|
||||
down = velocity.y + get_gravity().y * delta
|
||||
body.look_at(body.global_position - dir)
|
||||
velocity = speed * dir
|
||||
if is_poisoned():
|
||||
velocity *= 0.5
|
||||
if detecting:
|
||||
velocity /= 3
|
||||
if !is_on_floor():
|
||||
velocity += get_gravity()
|
||||
velocity *= .33
|
||||
velocity += Vector3(0, down, 0)
|
||||
move_and_slide()
|
||||
elif !is_on_floor():
|
||||
velocity = get_gravity()
|
||||
velocity += get_gravity() * delta
|
||||
move_and_slide()
|
||||
|
||||
if detecting:
|
||||
@@ -60,17 +145,100 @@ func _physics_process(delta: float) -> void:
|
||||
evt.action = button
|
||||
evt.pressed = true
|
||||
modal.button_pressed(evt)
|
||||
else:
|
||||
elif state == State.NORMAL:
|
||||
if Input.is_action_just_pressed("left cycle trap"):
|
||||
cycle_active_trap(-1)
|
||||
if Input.is_action_just_pressed("right cycle trap"):
|
||||
cycle_active_trap(1)
|
||||
if Input.is_action_just_pressed("detect"):
|
||||
if Input.is_action_just_pressed("detonate"):
|
||||
detonate()
|
||||
elif Input.is_action_just_pressed("detect"):
|
||||
start_detecting()
|
||||
elif Input.is_action_just_released("detect"):
|
||||
stop_detecting()
|
||||
if !detecting and Input.is_action_just_pressed("lay trap"):
|
||||
elif !detecting and Input.is_action_just_pressed("lay trap"):
|
||||
try_lay_trap()
|
||||
elif Input.is_action_pressed("attack"):
|
||||
attack()
|
||||
|
||||
func attack() -> void:
|
||||
if attack_timer > 0:
|
||||
return
|
||||
if meleeing:
|
||||
body.play_animation("melee")
|
||||
attack_timer = melee_recovery_time
|
||||
else:
|
||||
if ammo <= 0:
|
||||
reload_sound.play()
|
||||
ammo = max_ammo
|
||||
attack_timer = ranged_reload_time
|
||||
ammo_changed.emit(ammo, max_ammo)
|
||||
return
|
||||
|
||||
ammo-=1
|
||||
ammo_changed.emit(ammo, max_ammo)
|
||||
attack_timer = ranged_recovery_time
|
||||
body.play_animation("shoot")
|
||||
if combat_target != null:
|
||||
var v = body.global_position.direction_to(combat_target.global_position)
|
||||
v.y = 0
|
||||
body.look_at(body.global_position - v)
|
||||
|
||||
func fire_ranged() -> void:
|
||||
var shot = body.projectile_template.instantiate()
|
||||
var tdir : Vector3 = Vector3.ZERO
|
||||
shot.speed = projectile_speed
|
||||
tdir = body.ranged_point.global_position.direction_to(combat_target.global_position) if combat_target else facing
|
||||
shot.direction = tdir
|
||||
shot.damage = projectile_damage
|
||||
shot.position = body.ranged_point.global_position
|
||||
Game.level.add_projectile(shot)
|
||||
|
||||
func check_attack_target() -> void:
|
||||
var ranged_closest = null
|
||||
var ranged_d_sq = 99999999
|
||||
var melee_closest = null
|
||||
var melee_d_sq = 99999999
|
||||
var ranged_sq = ranged_range * ranged_range
|
||||
var melee_sq = melee_range * melee_range
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
|
||||
combat_target = null
|
||||
# use global coordinates, not local to node
|
||||
for target : Node3D in get_tree().get_nodes_in_group("combat"):
|
||||
if target == self:
|
||||
continue
|
||||
#Check to see if they're within the correct direction
|
||||
var angle = abs(facing.angle_to(target.global_position - global_position))
|
||||
if angle > PI / 4.0:
|
||||
continue
|
||||
#Determine if they're within shot range
|
||||
var d_sq = global_position.distance_squared_to(target.global_position)
|
||||
if(d_sq > ranged_sq or(ranged_closest != null and ranged_d_sq <= d_sq)):
|
||||
continue
|
||||
|
||||
#Raycast to see if they're a valid target
|
||||
var start = global_position + Vector3(0,1,0)
|
||||
var end = target.global_position + Vector3(0,1,0)
|
||||
var query = PhysicsRayQueryParameters3D.create(start, end, 1|2, [self])
|
||||
var result = space_state.intersect_ray(query)
|
||||
if !result or (result.collider is not Player and result.collider is not CombatTarget):
|
||||
return
|
||||
|
||||
if d_sq < melee_sq:
|
||||
melee_closest = target
|
||||
melee_d_sq = d_sq
|
||||
else:
|
||||
ranged_closest = target
|
||||
ranged_d_sq = d_sq
|
||||
if melee_closest != null:
|
||||
meleeing = true
|
||||
combat_target = melee_closest
|
||||
else:
|
||||
meleeing = false
|
||||
if ranged_closest != null:
|
||||
combat_target = ranged_closest
|
||||
combat_target_changed.emit(melee_closest != null)
|
||||
|
||||
func try_lay_trap() -> void:
|
||||
if !is_on_floor():
|
||||
@@ -93,8 +261,9 @@ func try_lay_trap() -> void:
|
||||
func lay_trap(square : Vector3i, idx : int) -> void:
|
||||
var type : Trap.Type = data.traps[idx].type
|
||||
var trap = trap_template.instantiate()
|
||||
trap.setup(type, Multiplayer.id)
|
||||
trap.setup(type, facing, id)
|
||||
trap.disarmed.connect(_on_trap_disarmed)
|
||||
trap.activated.connect(_on_trap_activated)
|
||||
data.traps[idx].quantity -= 1
|
||||
trap_quantity_changed.emit(idx, data.traps[idx].quantity)
|
||||
Game.level.add_trap(trap, square)
|
||||
@@ -125,11 +294,18 @@ func update_detecting() -> void:
|
||||
|
||||
|
||||
var remove_list = []
|
||||
var trap_detected : bool = false
|
||||
for sq in new_squares.keys():
|
||||
if detect_squares.has(sq):
|
||||
continue
|
||||
if !Game.level.detect_square(sq, true):
|
||||
remove_list.append(sq)
|
||||
else:
|
||||
var trap = Game.level.get_square_trap(sq + Vector3i(0,1,0))
|
||||
if trap and trap.is_just_revealed():
|
||||
trap_detected = true
|
||||
if trap_detected:
|
||||
detect_alert()
|
||||
|
||||
detect_squares = new_squares
|
||||
for key in remove_list:
|
||||
@@ -140,9 +316,20 @@ func update_detecting() -> void:
|
||||
if trap.trap_owner == Multiplayer.id:
|
||||
show_remove_trap_modal()
|
||||
else:
|
||||
trap.disarming = true
|
||||
show_disarm_trap_modal()
|
||||
|
||||
|
||||
func detect_alert() -> void:
|
||||
detect_sound.play()
|
||||
detect_icon.visible = true
|
||||
if detect_tween != null:
|
||||
detect_tween.stop()
|
||||
detect_tween = create_tween()
|
||||
detect_tween.tween_interval(.75)
|
||||
detect_tween.tween_property(detect_icon, "visible", false, 0)
|
||||
detect_tween.tween_property(self, "detect_tween", null, 0)
|
||||
|
||||
func close_modal() -> void:
|
||||
modal.queue_free()
|
||||
modal = null
|
||||
@@ -175,11 +362,16 @@ func start_detecting() -> void:
|
||||
detect_squares[sq] = true
|
||||
|
||||
var remove_list = []
|
||||
|
||||
var trap_detected : bool = false
|
||||
for sq in detect_squares.keys():
|
||||
if !Game.level.detect_square(sq, true):
|
||||
remove_list.append(sq)
|
||||
|
||||
else:
|
||||
var trap = Game.level.get_square_trap(sq + Vector3i(0,1,0))
|
||||
if trap and trap.is_just_revealed():
|
||||
trap_detected = true
|
||||
if trap_detected:
|
||||
detect_alert()
|
||||
for key in remove_list:
|
||||
detect_squares.erase(key)
|
||||
|
||||
@@ -221,6 +413,9 @@ func cycle_active_trap(dir) -> void:
|
||||
if prev != data.active_trap:
|
||||
trap_cycled.emit(data.active_trap)
|
||||
|
||||
func can_hurt() -> bool:
|
||||
return true
|
||||
|
||||
func hurt(damage : int) -> void:
|
||||
data.life = max(0, data.life - damage)
|
||||
health_changed.emit(data.life, data.max_life)
|
||||
@@ -232,3 +427,58 @@ func _on_trap_disarmed(type : Trap.Type) -> void:
|
||||
d.max -= 1
|
||||
trap_quantity_changed.emit(i, d.quantity)
|
||||
break
|
||||
|
||||
func _on_trap_activated(type : Trap.Type) -> void:
|
||||
for i in range(len(data.traps)):
|
||||
var d = data.traps[i]
|
||||
if d.type == type:
|
||||
d.quantity = min(d.max, d.quantity+ 1)
|
||||
trap_quantity_changed.emit(i, d.quantity)
|
||||
break
|
||||
|
||||
func detonate() -> void:
|
||||
var switch_list = []
|
||||
for trap : Trap in Game.level.traps.values():
|
||||
if trap.type == Trap.Type.SWITCH and trap.trap_owner == id:
|
||||
switch_list.append(trap)
|
||||
detonate_sound.play()
|
||||
|
||||
for trap : Trap in switch_list:
|
||||
trap.activate()
|
||||
|
||||
func is_poisoned() -> bool:
|
||||
return poison_time_remaining > 0
|
||||
|
||||
func poison(damage : int, length : float) -> void:
|
||||
if is_poisoned():
|
||||
if damage > poison_strength:
|
||||
poison_strength = damage
|
||||
if length > poison_time_remaining:
|
||||
poison_time_remaining = length
|
||||
else:
|
||||
poison_strength = damage
|
||||
poison_time_remaining = length
|
||||
poison_pulse_timer = 0
|
||||
var pshader : ShaderMaterial = body.material.next_pass
|
||||
pshader.set_shader_parameter("strength", 0.5)
|
||||
poison_status_changed.emit(true)
|
||||
|
||||
func fling(direction : Vector3, speed : float) -> void:
|
||||
state = State.FLUNG
|
||||
fling_direction = direction
|
||||
fling_speed = speed
|
||||
|
||||
func knockdown(direction : Vector3) -> void:
|
||||
state = State.KNOCKDOWN
|
||||
input_locked = true
|
||||
body.look_at(Vector3(0,1,0), direction)
|
||||
var knockdown_tween = create_tween()
|
||||
knockdown_tween.tween_interval(1.5)
|
||||
knockdown_tween.tween_property(self, "state", State.NORMAL, 0)
|
||||
knockdown_tween.tween_property(self, "input_locked", false, 0)
|
||||
knockdown_tween.tween_callback(Callable(body.look_at).bind(facing, Vector3(0,1,0)))
|
||||
|
||||
func knockup(velocity : Vector3) -> void:
|
||||
state = State.KNOCKUP
|
||||
input_locked = true
|
||||
|
||||
|
||||
23
scripts/projectile.gd
Normal file
23
scripts/projectile.gd
Normal file
@@ -0,0 +1,23 @@
|
||||
class_name Projectile extends RigidBody3D
|
||||
|
||||
var direction : Vector3
|
||||
var speed : float
|
||||
var damage
|
||||
var time_remaining : float
|
||||
func _ready() -> void:
|
||||
linear_velocity = speed * direction
|
||||
time_remaining = 2
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
time_remaining -= delta
|
||||
if time_remaining <= 0:
|
||||
queue_free()
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
queue_free()
|
||||
|
||||
|
||||
|
||||
func _on_hit_area_entered(body: Node3D) -> void:
|
||||
if body is Player:
|
||||
body.hurt(damage)
|
||||
1
scripts/projectile.gd.uid
Normal file
1
scripts/projectile.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dqmdowebyfwbq
|
||||
@@ -4,6 +4,7 @@ const player_controller = preload("res://templates/singleplayer_pc.tscn")
|
||||
const trap_template = preload("res://templates/trap.tscn")
|
||||
|
||||
@onready var floor_layer : GridMap = %Floor
|
||||
@onready var ramp_layer : GridMap = %Ramps
|
||||
@onready var marker_layer : GridMap = %Markers
|
||||
|
||||
@export var difficulty : int = 1
|
||||
@@ -14,12 +15,14 @@ func _ready() -> void:
|
||||
Game.level = self
|
||||
var player = player_controller.instantiate()
|
||||
var traps : Array[PlayerData.TrapData] = [
|
||||
PlayerData.TrapData.new(Trap.Type.FORCE_PANEL, 3, 3),
|
||||
PlayerData.TrapData.new(Trap.Type.BOMB, 3, 3),
|
||||
PlayerData.TrapData.new(Trap.Type.SWITCH, 3, 3),
|
||||
PlayerData.TrapData.new(Trap.Type.MINE, 3, 3)
|
||||
PlayerData.TrapData.new(Trap.Type.MINE, 3, 3),
|
||||
PlayerData.TrapData.new(Trap.Type.GAS, 3, 3)
|
||||
]
|
||||
add_child(player)
|
||||
generate_trap(Trap.Type.MINE, Vector3i(5,0,2))
|
||||
generate_trap(Trap.Type.FORCE_PANEL, Vector3(-1, 0, 0), Vector3i(5,0,2))
|
||||
player.setup(traps)
|
||||
|
||||
func is_square_detected(crd) -> bool:
|
||||
@@ -44,7 +47,12 @@ func add_trap(trap : Trap, crd : Vector3i) -> void:
|
||||
traps[crd] = trap
|
||||
trap.global_position = Vector3(crd) + Vector3(.5, 0, .5)
|
||||
add_child(trap)
|
||||
pass
|
||||
|
||||
func add_projectile(shot : Projectile) -> void:
|
||||
add_child(shot)
|
||||
|
||||
func remove_trap_square(crd : Vector3i) -> void:
|
||||
traps.erase(crd)
|
||||
|
||||
func get_square_trap(crd : Vector3i) -> Trap:
|
||||
if traps.has(crd):
|
||||
@@ -52,6 +60,8 @@ func get_square_trap(crd : Vector3i) -> Trap:
|
||||
else:
|
||||
return null
|
||||
|
||||
|
||||
|
||||
func is_valid_trap_square(crd : Vector3i) -> bool:
|
||||
if floor_layer.get_cell_item(crd + Vector3i(0,-1,0)) == GridMap.INVALID_CELL_ITEM:
|
||||
return false
|
||||
@@ -68,9 +78,9 @@ func activate_trap(crd : Vector3i) -> void:
|
||||
#if trap:
|
||||
|
||||
|
||||
func generate_trap(type : Trap.Type, square : Vector3i):
|
||||
func generate_trap(type : Trap.Type, dir : Vector3, square : Vector3i):
|
||||
var trap = trap_template.instantiate()
|
||||
trap.setup(type, -1)
|
||||
trap.setup(type, dir, -1)
|
||||
add_trap(trap, square)
|
||||
|
||||
func disarm_trap(crd : Vector3i) -> void:
|
||||
|
||||
112
scripts/trap.gd
112
scripts/trap.gd
@@ -26,40 +26,64 @@ const trap_icons : Dictionary = {
|
||||
Trap.Type.MINE : preload("res://visuals/images/icons/t-mine.png"),
|
||||
}
|
||||
|
||||
const explosion_template = preload("res://templates/explosion.tscn")
|
||||
const bomb_explosion_template = preload("res://templates/explosion.tscn")
|
||||
const mine_explosion_template = preload("res://templates/explosion.tscn")
|
||||
const switch_explosion_template = preload("res://templates/explosion.tscn")
|
||||
const gas_emitter_template = preload("res://templates/gas_emitter.tscn")
|
||||
|
||||
@onready var range_area : Area3D = %RangeArea
|
||||
@onready var range_shape : BoxShape3D = %RangeShape.shape
|
||||
@onready var model : MeshInstance3D = %Model
|
||||
@onready var icon : Sprite3D = %Icon
|
||||
@onready var force_strip : Sprite3D = %ForceStrip
|
||||
@onready var material : StandardMaterial3D = model.get_surface_override_material(0)
|
||||
@onready var reveal_timer : Timer = %RevealTimer
|
||||
@onready var activation_timer : Timer = %ActivationTimer
|
||||
|
||||
var type : Type
|
||||
var square : Vector3i
|
||||
var trap_owner : int
|
||||
var direction : Vector3
|
||||
|
||||
var disarming : bool
|
||||
var disarm_id : int
|
||||
|
||||
var delayed_trigger_tween : Tween = null
|
||||
|
||||
var damage : int = 10
|
||||
|
||||
var just_revealed : bool = false
|
||||
|
||||
signal disarmed(type : Trap.Type)
|
||||
signal activated(type : Trap.Type)
|
||||
|
||||
|
||||
func setup(type : Type, trap_owner : int) -> void:
|
||||
func setup(type : Type, direction : Vector3, trap_owner : int) -> void:
|
||||
self.type = type
|
||||
self.trap_owner = trap_owner
|
||||
if type == Type.FORCE_PANEL:
|
||||
var r : float = atan2(direction.z, direction.x)
|
||||
var cardinal : float = roundi(r * 2 / PI) * PI / 2
|
||||
self.direction = Vector3(cos(cardinal), 0, sin(cardinal))
|
||||
|
||||
func disarm() -> void:
|
||||
disarmed.emit(type)
|
||||
queue_free()
|
||||
|
||||
func reveal() -> void:
|
||||
if model.visible:
|
||||
return
|
||||
model.visible = true
|
||||
reveal_timer.start(5)
|
||||
just_revealed = true
|
||||
|
||||
func is_just_revealed() -> bool:
|
||||
return just_revealed
|
||||
|
||||
func is_revealed() -> bool:
|
||||
return model.visible
|
||||
|
||||
func _on_reveal_timeout() -> void:
|
||||
if Game.level.is_square_detected(square):
|
||||
if Game.level.is_square_detected(square) or disarming:
|
||||
reveal_timer.start(5)
|
||||
else:
|
||||
model.visible = false
|
||||
@@ -71,15 +95,87 @@ func _ready() -> void:
|
||||
icon.visible = owns_trap
|
||||
range_shape.size = range_shapes[type]
|
||||
material.albedo_color = Color.YELLOW if owns_trap else Color.RED
|
||||
match(type):
|
||||
Type.BOMB:
|
||||
damage = 15
|
||||
Type.MINE:
|
||||
damage = 10
|
||||
Type.SWITCH:
|
||||
damage = 5
|
||||
Type.GAS:
|
||||
activation_timer.start()
|
||||
Type.FORCE_PANEL:
|
||||
var r : float = atan2(direction.z, -direction.x) + PI/2
|
||||
force_strip.rotate_y(r)
|
||||
force_strip.visible = true
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
just_revealed = false
|
||||
|
||||
func blast(body : Player) -> void:
|
||||
body.hurt(damage)
|
||||
|
||||
func activate() -> void:
|
||||
var exp = explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
var explode : bool = false
|
||||
match(type):
|
||||
Type.FORCE_PANEL:
|
||||
for body in get_overlapping_bodies():
|
||||
body.fling(direction, 5.0)
|
||||
Type.MINE:
|
||||
var exp = mine_explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
explode = true
|
||||
Type.SWITCH:
|
||||
var exp = switch_explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
explode = true
|
||||
Type.BOMB:
|
||||
var exp = bomb_explosion_template.instantiate()
|
||||
Game.level.add_vfx(exp, square)
|
||||
explode = true
|
||||
Type.GAS:
|
||||
var emitter = gas_emitter_template.instantiate()
|
||||
emitter.trap_owner = trap_owner
|
||||
emitter.square = square
|
||||
emitter.damage = 4
|
||||
Game.level.add_vfx(emitter, square)
|
||||
|
||||
if explode:
|
||||
trigger_adjacent_bombs()
|
||||
blast_players()
|
||||
|
||||
Game.level.remove_trap_square(square)
|
||||
activated.emit(type)
|
||||
queue_free()
|
||||
|
||||
func trigger_adjacent_bombs() -> void:
|
||||
for trap : Trap in range_area.get_overlapping_areas():
|
||||
if trap.type == Type.BOMB:
|
||||
trap.delay_trigger()
|
||||
|
||||
func blast_players() -> void:
|
||||
for body in range_area.get_overlapping_bodies():
|
||||
body.hurt(damage)
|
||||
#match(type):
|
||||
blast(body)
|
||||
|
||||
func delay_trigger() -> void:
|
||||
if delayed_trigger_tween != null:
|
||||
return
|
||||
delayed_trigger_tween = create_tween()
|
||||
delayed_trigger_tween.tween_interval(.25)
|
||||
delayed_trigger_tween.tween_callback(activate)
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if type == Type.GAS:
|
||||
return
|
||||
|
||||
if body.id == trap_owner:
|
||||
return
|
||||
|
||||
if !disarming or body.id != disarm_id:
|
||||
if !body.detecting:
|
||||
activate()
|
||||
|
||||
|
||||
func _on_activation_timer_timeout() -> void:
|
||||
activate()
|
||||
|
||||
@@ -15,6 +15,10 @@ func proximal_shake(distance : float) -> void:
|
||||
if !Game.player:
|
||||
return
|
||||
var d = global_position.distance_squared_to(Game.player.global_position)
|
||||
if d <= distance * distance:
|
||||
Input.start_joy_vibration(0, 1,1,1000)
|
||||
var d_sq = distance * distance
|
||||
if d <= d_sq:
|
||||
var str : float = (d_sq - d) / d_sq
|
||||
var l_val : float = lerp(0.0, 1.0, str)
|
||||
Input.start_joy_vibration(0, l_val,l_val,lerp(0.5, 1.0, str))
|
||||
Game.player.camera.add_trauma(l_val)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=31 format=3 uid="uid://bgocskbofewsr"]
|
||||
[gd_scene load_steps=36 format=3 uid="uid://bgocskbofewsr"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bm50jiya4s3ei" path="res://scripts/hud.gd" id="1_jiiqi"]
|
||||
[ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="1_k5de2"]
|
||||
@@ -27,7 +27,17 @@
|
||||
[ext_resource type="Texture2D" uid="uid://diyks5oxgidoo" path="res://visuals/images/icons/ranged attack button.png" id="19_k0acs"]
|
||||
[ext_resource type="Texture2D" uid="uid://0ujjkgwiyveu" path="res://visuals/images/icons/lit ranged attack button.png" id="20_vhta5"]
|
||||
[ext_resource type="Texture2D" uid="uid://barbcaa2xvgkk" path="res://visuals/images/icons/switch button.png" id="21_iv5le"]
|
||||
[ext_resource type="Script" uid="uid://ci7vc41m5alq5" path="res://scripts/control_display.gd" id="21_jiiqv"]
|
||||
[ext_resource type="Texture2D" uid="uid://bd0xwm4wuuiuo" path="res://visuals/images/icons/lit switch button.png" id="22_1ghxf"]
|
||||
[ext_resource type="Texture2D" uid="uid://bg0h4l3162pn5" path="res://visuals/images/icons/melee attack button.png" id="28_jf5vi"]
|
||||
[ext_resource type="Texture2D" uid="uid://c64lykkbavdmi" path="res://visuals/images/icons/lit melee attack button.png" id="29_deun7"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_iv5le"]
|
||||
offsets = PackedFloat32Array(0, 0.59079283, 1)
|
||||
colors = PackedColorArray(0.33862844, 7.9006626e-05, 0.33938414, 1, 0, 0.36556464, 0, 1, 0.6879359, 1, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_1ghxf"]
|
||||
gradient = SubResource("Gradient_iv5le")
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_1ghxf"]
|
||||
|
||||
@@ -88,6 +98,8 @@ value = 100.0
|
||||
nine_patch_stretch = true
|
||||
texture_progress = ExtResource("3_vhta5")
|
||||
script = ExtResource("4_iv5le")
|
||||
healthy_gradient = ExtResource("3_vhta5")
|
||||
poisoned_gradient = SubResource("GradientTexture1D_1ghxf")
|
||||
|
||||
[node name="PanelContainer2" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer2"]
|
||||
custom_minimum_size = Vector2(250, 100)
|
||||
@@ -227,7 +239,8 @@ offset_bottom = 104.0
|
||||
texture = ExtResource("18_iv5le")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Label" type="Label" parent="Control/PanelContainer/HBoxContainer/VBoxContainer/PanelContainer3/Control"]
|
||||
[node name="AmmoLabel" type="Label" parent="Control/PanelContainer/HBoxContainer/VBoxContainer/PanelContainer3/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 0
|
||||
offset_left = 141.0
|
||||
offset_top = 29.0
|
||||
@@ -281,7 +294,8 @@ expand_mode = 1
|
||||
custom_minimum_size = Vector2(165, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Control2" type="Control" parent="."]
|
||||
[node name="ControlDisplay" type="Control" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
@@ -289,8 +303,9 @@ anchor_bottom = 1.0
|
||||
offset_top = -200.0
|
||||
offset_right = 200.0
|
||||
grow_vertical = 0
|
||||
script = ExtResource("21_jiiqv")
|
||||
|
||||
[node name="Trap" type="TextureButton" parent="Control2"]
|
||||
[node name="Trap" type="TextureButton" parent="ControlDisplay"]
|
||||
layout_mode = 0
|
||||
offset_left = 13.0
|
||||
offset_top = 71.0
|
||||
@@ -304,7 +319,7 @@ texture_pressed = ExtResource("16_aid7k")
|
||||
ignore_texture_size = true
|
||||
stretch_mode = 0
|
||||
|
||||
[node name="Detect" type="TextureButton" parent="Control2"]
|
||||
[node name="Detect" type="TextureButton" parent="ControlDisplay"]
|
||||
layout_mode = 0
|
||||
offset_left = 68.0
|
||||
offset_top = 35.0
|
||||
@@ -318,7 +333,7 @@ texture_pressed = ExtResource("18_yda1o")
|
||||
ignore_texture_size = true
|
||||
stretch_mode = 0
|
||||
|
||||
[node name="RangedAttack" type="TextureButton" parent="Control2"]
|
||||
[node name="RangedAttack" type="TextureButton" parent="ControlDisplay"]
|
||||
layout_mode = 0
|
||||
offset_left = 123.0
|
||||
offset_top = 71.0
|
||||
@@ -332,7 +347,22 @@ texture_pressed = ExtResource("20_vhta5")
|
||||
ignore_texture_size = true
|
||||
stretch_mode = 0
|
||||
|
||||
[node name="Switch" type="TextureButton" parent="Control2"]
|
||||
[node name="MeleeAttack" type="TextureButton" parent="ControlDisplay"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 123.0
|
||||
offset_top = 71.0
|
||||
offset_right = 187.0
|
||||
offset_bottom = 135.0
|
||||
mouse_filter = 2
|
||||
toggle_mode = true
|
||||
button_mask = 0
|
||||
texture_normal = ExtResource("28_jf5vi")
|
||||
texture_pressed = ExtResource("29_deun7")
|
||||
ignore_texture_size = true
|
||||
stretch_mode = 0
|
||||
|
||||
[node name="Switch" type="TextureButton" parent="ControlDisplay"]
|
||||
layout_mode = 0
|
||||
offset_left = 68.0
|
||||
offset_top = 110.0
|
||||
|
||||
46
templates/bullet.tscn
Normal file
46
templates/bullet.tscn
Normal file
@@ -0,0 +1,46 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://cfunlbp8arnlh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dqmdowebyfwbq" path="res://scripts/projectile.gd" id="1_tc5n7"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fnprb"]
|
||||
albedo_color = Color(1, 0.54124093, 0.4767593, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(1, 0, 0, 1)
|
||||
emission_energy_multiplier = 2.69
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_7i3j4"]
|
||||
size = Vector3(0.15, 0.15, 0.15)
|
||||
|
||||
[node name="Bullet" type="RigidBody3D"]
|
||||
gravity_scale = 0.0
|
||||
contact_monitor = true
|
||||
max_contacts_reported = 3
|
||||
script = ExtResource("1_tc5n7")
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="."]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
radius = 0.05
|
||||
radial_segments = 4
|
||||
rings = 3
|
||||
material = SubResource("StandardMaterial3D_fnprb")
|
||||
|
||||
[node name="HitArea" type="Area3D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea"]
|
||||
shape = SubResource("BoxShape3D_7i3j4")
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("BoxShape3D_7i3j4")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||
light_color = Color(1, 0, 0, 1)
|
||||
light_energy = 1.5
|
||||
light_indirect_energy = 0.0
|
||||
light_volumetric_fog_energy = 0.0
|
||||
light_size = 0.2
|
||||
omni_range = 0.4
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
[connection signal="body_entered" from="HitArea" to="." method="_on_hit_area_entered"]
|
||||
@@ -269,7 +269,7 @@ process_material = SubResource("ParticleProcessMaterial_6ym0g")
|
||||
draw_pass_1 = SubResource("SphereMesh_4y8np")
|
||||
|
||||
[node name="ParticleFX" type="GPUParticles3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4375714, 0, 0.5602956)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5)
|
||||
material_override = ExtResource("2_l2v4y")
|
||||
amount = 10
|
||||
lifetime = 0.6
|
||||
|
||||
12
templates/gas_emitter.tscn
Normal file
12
templates/gas_emitter.tscn
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cwway5752qsea"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b06ywr7w0wigy" path="res://scripts/gas_emitter.gd" id="1_4dy13"]
|
||||
|
||||
[node name="Gas Emitter" type="Node3D"]
|
||||
script = ExtResource("1_4dy13")
|
||||
|
||||
[node name="SpreadTimer" type="Timer" parent="."]
|
||||
wait_time = 1.25
|
||||
autostart = true
|
||||
|
||||
[connection signal="timeout" from="SpreadTimer" to="." method="_on_timeout"]
|
||||
90
templates/gas_square.tscn
Normal file
90
templates/gas_square.tscn
Normal file
@@ -0,0 +1,90 @@
|
||||
[gd_scene load_steps=14 format=3 uid="uid://p6gfy3gdm4fu"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://qs7mgm4vors6" path="res://visuals/textures/T_smoke_b7.png" id="1_i2t7o"]
|
||||
[ext_resource type="Script" uid="uid://6xmp5cbmjrbw" path="res://scripts/gas_square.gd" id="1_nit1s"]
|
||||
[ext_resource type="AudioStream" uid="uid://bk4s3yn7473pc" path="res://audio/sounds/gas_leak_med_burst_01.wav" id="3_6ouu1"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_oxb7l"]
|
||||
transparency = 1
|
||||
vertex_color_use_as_albedo = true
|
||||
vertex_color_is_srgb = true
|
||||
albedo_texture = ExtResource("1_i2t7o")
|
||||
billboard_mode = 3
|
||||
billboard_keep_scale = true
|
||||
particles_anim_h_frames = 1
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
proximity_fade_enabled = true
|
||||
|
||||
[sub_resource type="Curve" id="Curve_nit1s"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.25201073, 0.5114823), 1.9835948, 1.9835948, 0, 0, Vector2(0.81233245, 0.4979124), -1.8980947, -1.8980947, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_6ouu1"]
|
||||
curve = SubResource("Curve_nit1s")
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_mcwmv"]
|
||||
offsets = PackedFloat32Array(0, 0.5129683, 1)
|
||||
colors = PackedColorArray(0, 1, 0, 1, 0.5660992, 0.4395883, 0.22195616, 1, 0.46846813, 0.00015392214, 0.46846473, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_3hj10"]
|
||||
gradient = SubResource("Gradient_mcwmv")
|
||||
use_hdr = true
|
||||
|
||||
[sub_resource type="Curve" id="Curve_vcxlp"]
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.36461127, 0.4979124), 0.0, 0.0, 0, 0, Vector2(0.71581775, 0.5318372), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_qumvk"]
|
||||
curve = SubResource("Curve_vcxlp")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_6ur4r"]
|
||||
particle_flag_rotate_y = true
|
||||
emission_shape = 3
|
||||
emission_box_extents = Vector3(0.35, 0.1, 0.35)
|
||||
angle_min = -179.99998
|
||||
angle_max = 180.00002
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 0.0
|
||||
initial_velocity_min = 1.0
|
||||
initial_velocity_max = 1.5
|
||||
angular_velocity_min = -50.000015
|
||||
angular_velocity_max = 49.99998
|
||||
gravity = Vector3(0, 0, 0)
|
||||
scale_max = 1.35
|
||||
scale_curve = SubResource("CurveTexture_qumvk")
|
||||
color = Color(1.5257139, 1.5257139, 1.5257139, 1)
|
||||
color_ramp = SubResource("GradientTexture1D_3hj10")
|
||||
alpha_curve = SubResource("CurveTexture_6ouu1")
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_dws4p"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mcwmv"]
|
||||
size = Vector3(1, 2, 1)
|
||||
|
||||
[node name="Gas Square" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_nit1s")
|
||||
|
||||
[node name="ParticleFX" type="GPUParticles3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5)
|
||||
material_override = SubResource("StandardMaterial3D_oxb7l")
|
||||
emitting = false
|
||||
amount = 25
|
||||
one_shot = true
|
||||
explosiveness = 0.18
|
||||
fixed_fps = 60
|
||||
process_material = SubResource("ParticleProcessMaterial_6ur4r")
|
||||
draw_pass_1 = SubResource("QuadMesh_dws4p")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("BoxShape3D_mcwmv")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = ExtResource("3_6ouu1")
|
||||
autoplay = true
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
@@ -1,20 +1,216 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://c8xf3qawk5c6u"]
|
||||
[gd_scene load_steps=30 format=3 uid="uid://c8xf3qawk5c6u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bcs7ygh6s3l35" path="res://scripts/player.gd" id="1_a5wj7"]
|
||||
[ext_resource type="Script" uid="uid://wye3mat5y5yg" path="res://scripts/pawn_body.gd" id="2_ac3v1"]
|
||||
[ext_resource type="Material" uid="uid://b8e84edfrnn1a" path="res://visuals/materials/pawn.tres" id="2_j3lta"]
|
||||
[ext_resource type="Script" uid="uid://6w608y2grdqb" path="res://scripts/player_data.gd" id="2_sfa2f"]
|
||||
[ext_resource type="AudioStream" uid="uid://b8ko5lwikj8ts" path="res://audio/sounds/Whoosh Blade 001.wav" id="3_6r6k1"]
|
||||
[ext_resource type="PackedScene" uid="uid://cfunlbp8arnlh" path="res://templates/bullet.tscn" id="3_ghbft"]
|
||||
[ext_resource type="AudioStream" uid="uid://cjrlb4qiy23sj" path="res://audio/sounds/impact_deep_thud_bounce_09.wav" id="3_sfa2f"]
|
||||
[ext_resource type="AudioStream" uid="uid://dufoyvysi4pa1" path="res://audio/sounds/Whoosh Blade 002.wav" id="4_ac3v1"]
|
||||
[ext_resource type="AudioStream" uid="uid://cfq0pu0qxgb6u" path="res://audio/sounds/134688__otbtechno__bike-bell.wav" id="4_xb5g3"]
|
||||
[ext_resource type="Texture2D" uid="uid://dmnwtwu5v4voh" path="res://visuals/images/icons/detect mark.png" id="5_fwehh"]
|
||||
[ext_resource type="AudioStream" uid="uid://boe6fidhl6ut5" path="res://audio/sounds/Whoosh Blade 003.wav" id="5_rclin"]
|
||||
[ext_resource type="AudioStream" uid="uid://b3x0xqu8yrib4" path="res://audio/sounds/Whoosh Blade 004.wav" id="6_0pfk2"]
|
||||
[ext_resource type="AudioStream" uid="uid://cmnibhyxpag0a" path="res://audio/sounds/BeepBeep_high.wav" id="6_wva0c"]
|
||||
[ext_resource type="AudioStream" uid="uid://1m2yfje18spo" path="res://audio/sounds/Whoosh Blade 005.wav" id="7_fifli"]
|
||||
[ext_resource type="AudioStream" uid="uid://c1j8hjmw45x86" path="res://audio/sounds/Hitech Shot A.wav" id="9_fifli"]
|
||||
[ext_resource type="AudioStream" uid="uid://dgftxjb34d2ph" path="res://audio/sounds/Hitech Shot B.wav" id="10_ghbft"]
|
||||
[ext_resource type="AudioStream" uid="uid://bguwdvatsf87l" path="res://audio/sounds/Hitech Shot C.wav" id="11_fuq8x"]
|
||||
[ext_resource type="AudioStream" uid="uid://cw31ymbqgqcq2" path="res://audio/sounds/sci-fi_weapon_reload_03.wav" id="13_fuq8x"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"]
|
||||
next_pass = ExtResource("2_j3lta")
|
||||
albedo_color = Color(0.08468992, 0.08468992, 0.08468992, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnbra"]
|
||||
next_pass = ExtResource("2_j3lta")
|
||||
albedo_color = Color(0, 1, 1, 1)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_j3lta"]
|
||||
size = Vector3(0.25, 0.6, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fifli"]
|
||||
albedo_color = Color(1, 0.60701716, 0.54817975, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(1, 0, 0, 1)
|
||||
emission_energy_multiplier = 16.0
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ofpku"]
|
||||
resource_name = "melee"
|
||||
length = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeleeArea/HitShape:disabled")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MeleeArea/HitShape:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.03333333, 0.1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.6446533, 0.4691162, 0.6541977), Vector3(0.04156494, 0.4691162, 0.937973), Vector3(-0.645, 0.469, 0.654)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MeleeArea/HitShape:rotation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.03333333, 0.1),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.76134753, 0), Vector3(0, 0, 0), Vector3(0, -0.76096356, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MeleeArea/HitShape:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false]
|
||||
}
|
||||
tracks/4/type = "method"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("../MeleeSound")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [0.0],
|
||||
"method": &"play"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_56qyi"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeleeArea/HitShape:disabled")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MeleeArea/HitShape:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.6446533, 0.4691162, 0.6541977)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MeleeArea/HitShape:rotation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.76134753, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MeleeArea/HitShape:visible")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ac3v1"]
|
||||
resource_name = "shoot"
|
||||
length = 0.2
|
||||
tracks/0/type = "method"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("../RangedSound")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [0.0],
|
||||
"method": &"play"
|
||||
}]
|
||||
}
|
||||
tracks/1/type = "method"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("../..")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.033333335),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"fire_ranged"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ucins"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_56qyi"),
|
||||
&"melee": SubResource("Animation_ofpku"),
|
||||
&"shoot": SubResource("Animation_ac3v1")
|
||||
}
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ghbft"]
|
||||
streams_count = 5
|
||||
stream_0/stream = ExtResource("3_6r6k1")
|
||||
stream_1/stream = ExtResource("4_ac3v1")
|
||||
stream_2/stream = ExtResource("5_rclin")
|
||||
stream_3/stream = ExtResource("6_0pfk2")
|
||||
stream_4/stream = ExtResource("7_fifli")
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_rclin"]
|
||||
streams_count = 3
|
||||
stream_0/stream = ExtResource("9_fifli")
|
||||
stream_1/stream = ExtResource("10_ghbft")
|
||||
stream_2/stream = ExtResource("11_fuq8x")
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_a5wj7"]
|
||||
radius = 0.3
|
||||
height = 1.0
|
||||
|
||||
[node name="Player" type="CharacterBody3D"]
|
||||
[node name="Player" type="CharacterBody3D" groups=["combat"]]
|
||||
physics_interpolation_mode = 1
|
||||
collision_layer = 2
|
||||
collision_mask = 5
|
||||
@@ -24,17 +220,62 @@ floor_snap_length = 1.0
|
||||
script = ExtResource("1_a5wj7")
|
||||
speed = 3.0
|
||||
|
||||
[node name="Body" type="CSGBox3D" parent="."]
|
||||
[node name="PawnBody" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.425, 0)
|
||||
script = ExtResource("2_ac3v1")
|
||||
projectile_template = ExtResource("3_ghbft")
|
||||
|
||||
[node name="Mesh" type="CSGBox3D" parent="PawnBody"]
|
||||
size = Vector3(0.5, 0.85, 0.5)
|
||||
material = SubResource("StandardMaterial3D_y646j")
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Body"]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PawnBody/Mesh"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0.21490532, 0.29997927)
|
||||
radius = 0.15
|
||||
height = 0.05
|
||||
material = SubResource("StandardMaterial3D_lnbra")
|
||||
|
||||
[node name="MeleeArea" type="Area3D" parent="PawnBody/Mesh"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
|
||||
[node name="HitShape" type="CollisionShape3D" parent="PawnBody/Mesh/MeleeArea"]
|
||||
transform = Transform3D(0.723907, 0, 0.68989754, 0, 1, 0, -0.68989754, 0, 0.723907, 0.6446533, 0.4691162, 0.6541977)
|
||||
visible = false
|
||||
shape = SubResource("BoxShape3D_j3lta")
|
||||
disabled = true
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="PawnBody/Mesh/MeleeArea/HitShape"]
|
||||
size = Vector3(0.1, 0.1, 1)
|
||||
material = SubResource("StandardMaterial3D_fifli")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="PawnBody/Mesh/MeleeArea/HitShape/CSGBox3D"]
|
||||
light_color = Color(1, 0, 0, 1)
|
||||
light_energy = 1.137
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="PawnBody/Mesh"]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_ucins")
|
||||
}
|
||||
|
||||
[node name="RangedPoint" type="Node3D" parent="PawnBody/Mesh"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.4537468)
|
||||
|
||||
[node name="MeleeSound" type="AudioStreamPlayer3D" parent="PawnBody"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
|
||||
stream = SubResource("AudioStreamRandomizer_ghbft")
|
||||
|
||||
[node name="RangedSound" type="AudioStreamPlayer3D" parent="PawnBody"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
|
||||
stream = SubResource("AudioStreamRandomizer_rclin")
|
||||
|
||||
[node name="ReloadSound" type="AudioStreamPlayer3D" parent="PawnBody"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
|
||||
stream = ExtResource("13_fuq8x")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4665325, 0)
|
||||
shape = SubResource("CapsuleShape3D_a5wj7")
|
||||
@@ -47,3 +288,19 @@ stream = ExtResource("3_sfa2f")
|
||||
|
||||
[node name="AudioListener3D" type="AudioListener3D" parent="."]
|
||||
current = true
|
||||
|
||||
[node name="DetectSound" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = ExtResource("4_xb5g3")
|
||||
volume_db = -80.0
|
||||
max_db = -11.464
|
||||
|
||||
[node name="DetectIcon" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 1.2337646, 0)
|
||||
visible = false
|
||||
billboard = 1
|
||||
no_depth_test = true
|
||||
texture = ExtResource("5_fwehh")
|
||||
|
||||
[node name="DetonateSound" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = ExtResource("6_wva0c")
|
||||
max_db = -7.0
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://bk3yqawritfnj"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://bk3yqawritfnj"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://yjsgte3x7jjw" path="res://scripts/trap.gd" id="1_6h4aj"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://bih57xe642hrc" path="res://models/trap.obj" id="2_oj6ox"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmlp8tn6mnbd" path="res://visuals/images/icons/t-bomb.png" id="3_mxvh5"]
|
||||
[ext_resource type="Texture2D" uid="uid://cm288pisiir7v" path="res://visuals/images/force_panel_strip.png" id="4_oj6ox"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qcd3b"]
|
||||
albedo_color = Color(0, 0, 1, 1)
|
||||
@@ -36,7 +37,7 @@ shape = SubResource("BoxShape3D_dw7u0")
|
||||
|
||||
[node name="Icon" type="Sprite3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0)
|
||||
transform = Transform3D(0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 0.1, 0)
|
||||
pixel_size = 0.0075
|
||||
axis = 1
|
||||
double_sided = false
|
||||
@@ -48,11 +49,24 @@ unique_name_in_owner = true
|
||||
[node name="RangeArea" type="Area3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
collision_mask = 6
|
||||
|
||||
[node name="RangeShape" type="CollisionShape3D" parent="RangeArea"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_6h4aj")
|
||||
|
||||
[node name="ActivationTimer" type="Timer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 5.0
|
||||
|
||||
[node name="ForceStrip" type="Sprite3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1.4, 0, 0, 0, -6.119594e-08, 1.4, 0, -1.4, -6.119594e-08, 0, 0.1, 0)
|
||||
visible = false
|
||||
texture_filter = 0
|
||||
texture = ExtResource("4_oj6ox")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
[connection signal="timeout" from="RevealTimer" to="." method="_on_reveal_timeout"]
|
||||
[connection signal="timeout" from="ActivationTimer" to="." method="_on_activation_timer_timeout"]
|
||||
|
||||
BIN
visuals/images/force_panel_strip.png
Normal file
BIN
visuals/images/force_panel_strip.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 182 B |
41
visuals/images/force_panel_strip.png.import
Normal file
41
visuals/images/force_panel_strip.png.import
Normal file
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cm288pisiir7v"
|
||||
path.s3tc="res://.godot/imported/force_panel_strip.png-69c5aca74ab6d376cf20ee037697e182.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://visuals/images/force_panel_strip.png"
|
||||
dest_files=["res://.godot/imported/force_panel_strip.png-69c5aca74ab6d376cf20ee037697e182.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
BIN
visuals/images/icons/detect mark.png
Normal file
BIN
visuals/images/icons/detect mark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 368 B |
41
visuals/images/icons/detect mark.png.import
Normal file
41
visuals/images/icons/detect mark.png.import
Normal file
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dmnwtwu5v4voh"
|
||||
path.s3tc="res://.godot/imported/detect mark.png-69ea5d5e1361087ad3f965d64ee590d8.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://visuals/images/icons/detect mark.png"
|
||||
dest_files=["res://.godot/imported/detect mark.png-69ea5d5e1361087ad3f965d64ee590d8.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
BIN
visuals/images/icons/lit melee attack button.png
Normal file
BIN
visuals/images/icons/lit melee attack button.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
40
visuals/images/icons/lit melee attack button.png.import
Normal file
40
visuals/images/icons/lit melee attack button.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c64lykkbavdmi"
|
||||
path="res://.godot/imported/lit melee attack button.png-d458a8f85224bc0be9328940f42769ad.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://visuals/images/icons/lit melee attack button.png"
|
||||
dest_files=["res://.godot/imported/lit melee attack button.png-d458a8f85224bc0be9328940f42769ad.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
visuals/images/icons/melee attack button.png
Normal file
BIN
visuals/images/icons/melee attack button.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.9 KiB |
40
visuals/images/icons/melee attack button.png.import
Normal file
40
visuals/images/icons/melee attack button.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bg0h4l3162pn5"
|
||||
path="res://.godot/imported/melee attack button.png-18d4abc38507564a05c2563708cfedde.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://visuals/images/icons/melee attack button.png"
|
||||
dest_files=["res://.godot/imported/melee attack button.png-18d4abc38507564a05c2563708cfedde.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
|
||||
10
visuals/materials/pawn.tres
Normal file
10
visuals/materials/pawn.tres
Normal file
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://b8e84edfrnn1a"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://bv268o3fy46uq" path="res://visuals/shaders/player.gdshader" id="1_v6pdu"]
|
||||
|
||||
[resource]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 1
|
||||
shader = ExtResource("1_v6pdu")
|
||||
shader_parameter/color = Color(1.0762503, 0, 0.64059925, 1)
|
||||
shader_parameter/strength = 0.0
|
||||
17
visuals/shaders/player.gdshader
Normal file
17
visuals/shaders/player.gdshader
Normal file
@@ -0,0 +1,17 @@
|
||||
shader_type spatial;
|
||||
uniform vec4 color : source_color;
|
||||
uniform float strength : hint_range(0.0, 1.0, 0.1);
|
||||
void vertex() {
|
||||
// Called for every vertex the material is visible on.
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// Called for every pixel the material is visible on.
|
||||
ALBEDO = color.rgb;
|
||||
ALPHA = strength;
|
||||
}
|
||||
|
||||
//void light() {
|
||||
// // Called for every pixel for every light affecting the CanvasItem.
|
||||
// // Uncomment to replace the default light processing function with this one.
|
||||
//}
|
||||
1
visuals/shaders/player.gdshader.uid
Normal file
1
visuals/shaders/player.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bv268o3fy46uq
|
||||
BIN
visuals/textures/T_smoke_b7.png
Normal file
BIN
visuals/textures/T_smoke_b7.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 268 KiB |
41
visuals/textures/T_smoke_b7.png.import
Normal file
41
visuals/textures/T_smoke_b7.png.import
Normal file
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qs7mgm4vors6"
|
||||
path.s3tc="res://.godot/imported/T_smoke_b7.png-43856d9fe887be7559fba07c8c6babd3.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://visuals/textures/T_smoke_b7.png"
|
||||
dest_files=["res://.godot/imported/T_smoke_b7.png-43856d9fe887be7559fba07c8c6babd3.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
Reference in New Issue
Block a user