blergh
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
||||
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
13
Globals/HudSignalBus.gd
Normal file
@ -0,0 +1,13 @@
|
||||
extends Node
|
||||
|
||||
signal minigun(current_ammo : int, max_ammo : int)
|
||||
signal missile(current_ammo : int, max_ammo : int)
|
||||
signal armor(current_ammo : int, max_ammo : int)
|
||||
signal roll_dialog(strings: Array[String])
|
||||
signal new_weapon_target(value: Node3D)
|
||||
|
||||
signal current_camera_changed
|
||||
var current_camera : Camera3D :
|
||||
set(value):
|
||||
current_camera = value
|
||||
current_camera_changed.emit()
|
||||
25
components/healthcomponent.gd
Normal file
@ -0,0 +1,25 @@
|
||||
extends Area3D
|
||||
class_name HealthComponent
|
||||
|
||||
@export var max_health : float = 100
|
||||
@onready var current_health : float = max_health
|
||||
@export var signal_name : String
|
||||
|
||||
signal start_dying
|
||||
|
||||
func damage(value: float):
|
||||
if current_health > 0:
|
||||
current_health -= value
|
||||
if signal_name:
|
||||
HudSignalBus.emit_signal(signal_name, current_health, max_health)
|
||||
if current_health <= 0:
|
||||
start_dying.emit()
|
||||
|
||||
|
||||
|
||||
func _on_area_entered(area: Area3D) -> void:
|
||||
if area is HealthPickup:
|
||||
current_health = current_health + area.value
|
||||
current_health = clamp(current_health, 0, max_health)
|
||||
HudSignalBus.emit_signal(signal_name, current_health, max_health)
|
||||
area.queue_free()
|
||||
8
components/healthcomponent.tscn
Normal file
@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://d2p86lb72dp61"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/healthcomponent.gd" id="1_y6nlw"]
|
||||
|
||||
[node name="Healthcomponent" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_y6nlw")
|
||||
15
components/hit_box.gd
Normal file
@ -0,0 +1,15 @@
|
||||
extends Area3D
|
||||
|
||||
@export var health_component : HealthComponent
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body is Projectile:
|
||||
if is_instance_valid(health_component):
|
||||
health_component.damage(body.damage)
|
||||
body.projectile_collision()
|
||||
|
||||
|
||||
func _on_area_entered(area: Area3D) -> void:
|
||||
if area is ExplosionHurtbox:
|
||||
if is_instance_valid(health_component):
|
||||
health_component.damage(area.damage)
|
||||
25
components/projectile.gd
Normal file
@ -0,0 +1,25 @@
|
||||
extends CharacterBody3D
|
||||
class_name Projectile
|
||||
|
||||
@export var damage : float = 10
|
||||
@export var lifetime : float = 1
|
||||
@export var collsion_scene : PackedScene
|
||||
|
||||
signal collided
|
||||
|
||||
var timeout_timer : Timer
|
||||
|
||||
func _ready() -> void:
|
||||
timeout_timer = Timer.new()
|
||||
add_child(timeout_timer)
|
||||
timeout_timer.timeout.connect(projectile_collision)
|
||||
timeout_timer.start(lifetime)
|
||||
|
||||
func projectile_collision():
|
||||
timeout_timer.stop()
|
||||
if collsion_scene:
|
||||
var new_collision_scene = collsion_scene.instantiate()
|
||||
get_tree().root.add_child(new_collision_scene)
|
||||
new_collision_scene.global_transform = global_transform
|
||||
get_tree().create_timer(lifetime).timeout.connect(queue_free)
|
||||
collided.emit()
|
||||
12
components/projectile_mover_linear.gd
Normal file
@ -0,0 +1,12 @@
|
||||
extends Node3D
|
||||
|
||||
@export var speed : float = 100
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var velocity = speed * -get_parent().transform.basis.z
|
||||
get_parent().velocity = velocity
|
||||
|
||||
if get_parent().move_and_slide():
|
||||
get_parent().projectile_collision()
|
||||
queue_free()
|
||||
|
||||
12
crt.gd
Normal file
@ -0,0 +1,12 @@
|
||||
extends CanvasLayer
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
if Input.is_action_just_pressed("shoot3"):
|
||||
visible = !visible
|
||||
41
crt.tscn
Normal file
@ -0,0 +1,41 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://bktxlnkg0r2kg"]
|
||||
|
||||
[ext_resource type="Script" path="res://crt.gd" id="1_mcp6h"]
|
||||
[ext_resource type="Shader" path="res://crtshader.gdshader" id="1_o1syp"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_0rfvd"]
|
||||
shader = ExtResource("1_o1syp")
|
||||
shader_parameter/overlay = true
|
||||
shader_parameter/scanlines_opacity = 0.057
|
||||
shader_parameter/scanlines_width = 0.0
|
||||
shader_parameter/grille_opacity = 0.129
|
||||
shader_parameter/resolution = Vector2(640, 480)
|
||||
shader_parameter/pixelate = false
|
||||
shader_parameter/roll = false
|
||||
shader_parameter/roll_speed = 8.0
|
||||
shader_parameter/roll_size = 0.0
|
||||
shader_parameter/roll_variation = 0.1
|
||||
shader_parameter/distort_intensity = 0.0
|
||||
shader_parameter/noise_opacity = 0.4
|
||||
shader_parameter/noise_speed = 5.0
|
||||
shader_parameter/static_noise_intensity = 0.02
|
||||
shader_parameter/aberration = -0.00499995
|
||||
shader_parameter/brightness = 1.4
|
||||
shader_parameter/discolor = true
|
||||
shader_parameter/warp_amount = 0.01
|
||||
shader_parameter/clip_warp = false
|
||||
shader_parameter/vignette_intensity = 0.435
|
||||
shader_parameter/vignette_opacity = 0.16
|
||||
|
||||
[node name="Crt" type="CanvasLayer"]
|
||||
layer = 128
|
||||
visible = false
|
||||
script = ExtResource("1_mcp6h")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
material = SubResource("ShaderMaterial_0rfvd")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
229
crtshader.gdshader
Normal file
@ -0,0 +1,229 @@
|
||||
/*
|
||||
Shader from Godot Shaders - the free shader library.
|
||||
godotshaders.com/shader/VHS-and-CRT-monitor-effect
|
||||
|
||||
This shader is under CC0 license. Feel free to use, improve and
|
||||
change this shader according to your needs and consider sharing
|
||||
the modified result to godotshaders.com.
|
||||
*/
|
||||
|
||||
shader_type canvas_item;
|
||||
|
||||
//*** IMPORTANT! ***/
|
||||
// - If you are using this shader to affect the node it is applied to set 'overlay' to false (unchecked in the instepctor).
|
||||
// - If you are using this shader as an overlay, and want the shader to affect the nodes below in the Scene hierarchy,
|
||||
// set 'overlay' to true (checked in the inspector).
|
||||
// On Mac there is potentially a bug causing this to not work properly. If that is the case and you want to use the shader as an overlay
|
||||
// change all "overlay ? SCREEN_TEXTURE : TEXTURE" to only "SCREEN_TEXTURE" on lines 129-140, and "vec2 uv = overlay ? warp(SCREEN_UV) : warp(UV);"
|
||||
// to "vec2 uv = warp(SCREEN_UV);" on line 98.
|
||||
uniform bool overlay = true;
|
||||
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
|
||||
uniform float scanlines_opacity : hint_range(0.0, 1.0) = 0.4;
|
||||
uniform float scanlines_width : hint_range(0.0, 0.5) = 0.25;
|
||||
uniform float grille_opacity : hint_range(0.0, 1.0) = 0.3;
|
||||
uniform vec2 resolution = vec2(640.0, 480.0); // Set the number of rows and columns the texture will be divided in. Scanlines and grille will make a square based on these values
|
||||
|
||||
uniform bool pixelate = true; // Fill each square ("pixel") with a sampled color, creating a pixel look and a more accurate representation of how a CRT monitor would work.
|
||||
|
||||
uniform bool roll = true;
|
||||
uniform float roll_speed = 8.0; // Positive values are down, negative are up
|
||||
uniform float roll_size : hint_range(0.0, 100.0) = 15.0;
|
||||
uniform float roll_variation : hint_range(0.1, 5.0) = 1.8; // This valie is not an exact science. You have to play around with the value to find a look you like. How this works is explained in the code below.
|
||||
uniform float distort_intensity : hint_range(0.0, 0.2) = 0.05; // The distortion created by the rolling effect.
|
||||
|
||||
uniform float noise_opacity : hint_range(0.0, 1.0) = 0.4;
|
||||
uniform float noise_speed = 5.0; // There is a movement in the noise pattern that can be hard to see first. This sets the speed of that movement.
|
||||
|
||||
uniform float static_noise_intensity : hint_range(0.0, 1.0) = 0.06;
|
||||
|
||||
uniform float aberration : hint_range(-1.0, 1.0) = 0.03; // Chromatic aberration, a distortion on each color channel.
|
||||
uniform float brightness = 1.4; // When adding scanline gaps and grille the image can get very dark. Brightness tries to compensate for that.
|
||||
uniform bool discolor = true; // Add a discolor effect simulating a VHS
|
||||
|
||||
uniform float warp_amount :hint_range(0.0, 5.0) = 1.0; // Warp the texture edges simulating the curved glass of a CRT monitor or old TV.
|
||||
uniform bool clip_warp = false;
|
||||
|
||||
uniform float vignette_intensity = 0.4; // Size of the vignette, how far towards the middle it should go.
|
||||
uniform float vignette_opacity : hint_range(0.0, 1.0) = 0.5;
|
||||
|
||||
// Used by the noise functin to generate a pseudo random value between 0.0 and 1.0
|
||||
vec2 random(vec2 uv){
|
||||
uv = vec2( dot(uv, vec2(127.1,311.7) ),
|
||||
dot(uv, vec2(269.5,183.3) ) );
|
||||
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
|
||||
}
|
||||
|
||||
// Generate a Perlin noise used by the distortion effects
|
||||
float noise(vec2 uv) {
|
||||
vec2 uv_index = floor(uv);
|
||||
vec2 uv_fract = fract(uv);
|
||||
|
||||
vec2 blur = smoothstep(0.0, 1.0, uv_fract);
|
||||
|
||||
return mix( mix( dot( random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ),
|
||||
dot( random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x),
|
||||
mix( dot( random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ),
|
||||
dot( random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) * 0.5 + 0.5;
|
||||
}
|
||||
|
||||
// Takes in the UV and warps the edges, creating the spherized effect
|
||||
vec2 warp(vec2 uv){
|
||||
vec2 delta = uv - 0.5;
|
||||
float delta2 = dot(delta.xy, delta.xy);
|
||||
float delta4 = delta2 * delta2;
|
||||
float delta_offset = delta4 * warp_amount;
|
||||
|
||||
return uv + delta * delta_offset;
|
||||
}
|
||||
|
||||
// Adds a black border to hide stretched pixel created by the warp effect
|
||||
float border (vec2 uv){
|
||||
float radius = min(warp_amount, 0.08);
|
||||
radius = max(min(min(abs(radius * 2.0), abs(1.0)), abs(1.0)), 1e-5);
|
||||
vec2 abs_uv = abs(uv * 2.0 - 1.0) - vec2(1.0, 1.0) + radius;
|
||||
float dist = length(max(vec2(0.0), abs_uv)) / radius;
|
||||
float square = smoothstep(0.96, 1.0, dist);
|
||||
return clamp(1.0 - square, 0.0, 1.0);
|
||||
}
|
||||
|
||||
// Adds a vignette shadow to the edges of the image
|
||||
float vignette(vec2 uv){
|
||||
uv *= 1.0 - uv.xy;
|
||||
float vignette = uv.x * uv.y * 15.0;
|
||||
return pow(vignette, vignette_intensity * vignette_opacity);
|
||||
}
|
||||
|
||||
void fragment()
|
||||
{
|
||||
vec2 uv = overlay ? warp(SCREEN_UV) : warp(UV); // Warp the uv. uv will be used in most cases instead of UV to keep the warping
|
||||
vec2 text_uv = uv;
|
||||
vec2 roll_uv = vec2(0.0);
|
||||
float time = roll ? TIME : 0.0;
|
||||
|
||||
|
||||
// Pixelate the texture based on the given resolution.
|
||||
if (pixelate)
|
||||
{
|
||||
text_uv = ceil(uv * resolution) / resolution;
|
||||
}
|
||||
|
||||
// Create the rolling effect. We need roll_line a bit later to make the noise effect.
|
||||
// That is why this runs if roll is true OR noise_opacity is over 0.
|
||||
float roll_line = 0.0;
|
||||
if (roll || noise_opacity > 0.0)
|
||||
{
|
||||
// Create the areas/lines where the texture will be distorted.
|
||||
roll_line = smoothstep(0.3, 0.9, sin(uv.y * roll_size - (time * roll_speed) ) );
|
||||
// Create more lines of a different size and apply to the first set of lines. This creates a bit of variation.
|
||||
roll_line *= roll_line * smoothstep(0.3, 0.9, sin(uv.y * roll_size * roll_variation - (time * roll_speed * roll_variation) ) );
|
||||
// Distort the UV where where the lines are
|
||||
roll_uv = vec2(( roll_line * distort_intensity * (1.-UV.x)), 0.0);
|
||||
}
|
||||
|
||||
vec4 text;
|
||||
if (roll)
|
||||
{
|
||||
// If roll is true distort the texture with roll_uv. The texture is split up into RGB to
|
||||
// make some chromatic aberration. We apply the aberration to the red and green channels accorging to the aberration parameter
|
||||
// and intensify it a bit in the roll distortion.
|
||||
text.r = texture(SCREEN_TEXTURE, text_uv + roll_uv * 0.8 + vec2(aberration, 0.0) * .1).r;
|
||||
text.g = texture(SCREEN_TEXTURE, text_uv + roll_uv * 1.2 - vec2(aberration, 0.0) * .1 ).g;
|
||||
text.b = texture(SCREEN_TEXTURE, text_uv + roll_uv).b;
|
||||
text.a = 1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If roll is false only apply the aberration without any distorion. The aberration values are very small so the .1 is only
|
||||
// to make the slider in the Inspector less sensitive.
|
||||
text.r = texture(SCREEN_TEXTURE, text_uv + vec2(aberration, 0.0) * .1).r;
|
||||
text.g = texture(SCREEN_TEXTURE, text_uv - vec2(aberration, 0.0) * .1).g;
|
||||
text.b = texture(SCREEN_TEXTURE, text_uv).b;
|
||||
text.a = 1.0;
|
||||
}
|
||||
|
||||
float r = text.r;
|
||||
float g = text.g;
|
||||
float b = text.b;
|
||||
|
||||
uv = warp(UV);
|
||||
|
||||
// CRT monitors don't have pixels but groups of red, green and blue dots or lines, called grille. We isolate the texture's color channels
|
||||
// and divide it up in 3 offsetted lines to show the red, green and blue colors next to each other, with a small black gap between.
|
||||
if (grille_opacity > 0.0){
|
||||
|
||||
float g_r = smoothstep(0.85, 0.95, abs(sin(uv.x * (resolution.x * 3.14159265))));
|
||||
r = mix(r, r * g_r, grille_opacity);
|
||||
|
||||
float g_g = smoothstep(0.85, 0.95, abs(sin(1.05 + uv.x * (resolution.x * 3.14159265))));
|
||||
g = mix(g, g * g_g, grille_opacity);
|
||||
|
||||
float b_b = smoothstep(0.85, 0.95, abs(sin(2.1 + uv.x * (resolution.x * 3.14159265))));
|
||||
b = mix(b, b * b_b, grille_opacity);
|
||||
|
||||
}
|
||||
|
||||
// Apply the grille to the texture's color channels and apply Brightness. Since the grille and the scanlines (below) make the image very dark you
|
||||
// can compensate by increasing the brightness.
|
||||
text.r = clamp(r * brightness, 0.0, 1.0);
|
||||
text.g = clamp(g * brightness, 0.0, 1.0);
|
||||
text.b = clamp(b * brightness, 0.0, 1.0);
|
||||
|
||||
// Scanlines are the horizontal lines that make up the image on a CRT monitor.
|
||||
// Here we are actual setting the black gap between each line, which I guess is not the right definition of the word, but you get the idea
|
||||
float scanlines = 0.5;
|
||||
if (scanlines_opacity > 0.0)
|
||||
{
|
||||
// Same technique as above, create lines with sine and applying it to the texture. Smoothstep to allow setting the line size.
|
||||
scanlines = smoothstep(scanlines_width, scanlines_width + 0.5, abs(sin(uv.y * (resolution.y * 3.14159265))));
|
||||
text.rgb = mix(text.rgb, text.rgb * vec3(scanlines), scanlines_opacity);
|
||||
}
|
||||
|
||||
// Apply the banded noise.
|
||||
if (noise_opacity > 0.0)
|
||||
{
|
||||
// Generate a noise pattern that is very stretched horizontally, and animate it with noise_speed
|
||||
float noise = smoothstep(0.4, 0.5, noise(uv * vec2(2.0, 200.0) + vec2(10.0, (TIME * (noise_speed))) ) );
|
||||
|
||||
// We use roll_line (set above) to define how big the noise should be vertically (multiplying cuts off all black parts).
|
||||
// We also add in some basic noise with random() to break up the noise pattern above. The noise is sized according to
|
||||
// the resolution value set in the inspector. If you don't like this look you can
|
||||
// change "ceil(uv * resolution) / resolution" to only "uv" to make it less pixelated. Or multiply resolution with som value
|
||||
// greater than 1.0 to make them smaller.
|
||||
roll_line *= noise * scanlines * clamp(random((ceil(uv * resolution) / resolution) + vec2(TIME * 0.8, 0.0)).x + 0.8, 0.0, 1.0);
|
||||
// Add it to the texture based on noise_opacity
|
||||
text.rgb = clamp(mix(text.rgb, text.rgb + roll_line, noise_opacity), vec3(0.0), vec3(1.0));
|
||||
}
|
||||
|
||||
// Apply static noise by generating it over the whole screen in the same way as above
|
||||
if (static_noise_intensity > 0.0)
|
||||
{
|
||||
text.rgb += clamp(random((ceil(uv * resolution) / resolution) + fract(TIME)).x, 0.0, 1.0) * static_noise_intensity;
|
||||
}
|
||||
|
||||
// Apply a black border to hide imperfections caused by the warping.
|
||||
// Also apply the vignette
|
||||
text.rgb *= border(uv);
|
||||
text.rgb *= vignette(uv);
|
||||
// Hides the black border and make that area transparent. Good if you want to add the the texture on top an image of a TV or monitor.
|
||||
if (clip_warp)
|
||||
{
|
||||
text.a = border(uv);
|
||||
}
|
||||
|
||||
// Apply discoloration to get a VHS look (lower saturation and higher contrast)
|
||||
// You can play with the values below or expose them in the Inspector.
|
||||
float saturation = 0.5;
|
||||
float contrast = 1.2;
|
||||
if (discolor)
|
||||
{
|
||||
// Saturation
|
||||
vec3 greyscale = vec3(text.r + text.g + text.b) / 3.;
|
||||
text.rgb = mix(text.rgb, greyscale, saturation);
|
||||
|
||||
// Contrast
|
||||
float midpoint = pow(0.5, 2.2);
|
||||
text.rgb = (text.rgb - vec3(midpoint)) * contrast + midpoint;
|
||||
}
|
||||
|
||||
COLOR = text;
|
||||
}
|
||||
15
default_bus_layout.tres
Normal file
@ -0,0 +1,15 @@
|
||||
[gd_resource type="AudioBusLayout" format=3 uid="uid://6hw5p6lx4ny"]
|
||||
|
||||
[resource]
|
||||
bus/1/name = &"SFX"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = -20.3764
|
||||
bus/1/send = &"Master"
|
||||
bus/2/name = &"MUSIC"
|
||||
bus/2/solo = false
|
||||
bus/2/mute = false
|
||||
bus/2/bypass_fx = false
|
||||
bus/2/volume_db = -20.3684
|
||||
bus/2/send = &"Master"
|
||||
8
effects/explosion.gd
Normal file
@ -0,0 +1,8 @@
|
||||
extends Node3D
|
||||
|
||||
|
||||
func play():
|
||||
$Fire.restart()
|
||||
$Smoke.restart()
|
||||
$Debris.restart()
|
||||
get_tree().create_timer(2).timeout.connect(free)
|
||||
117
effects/explosion.tscn
Normal file
@ -0,0 +1,117 @@
|
||||
[gd_scene load_steps=18 format=3 uid="uid://5q0aw58r81vp"]
|
||||
|
||||
[ext_resource type="Script" path="res://effects/explosion.gd" id="1_jtrlf"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg28fd1gyn80b" path="res://effects/flare_01.png" id="1_pbfcp"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_jmhc0"]
|
||||
max_value = 2.0
|
||||
_data = [Vector2(0.00397878, 0), 0.0, 0.0, 0, 0, Vector2(0.212202, 1.77182), 0.0, 0.0, 0, 0, Vector2(0.411141, 1.73482), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_4iamg"]
|
||||
curve = SubResource("Curve_jmhc0")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_rwstt"]
|
||||
direction = Vector3(0, 1, 0)
|
||||
initial_velocity_min = 3.0
|
||||
initial_velocity_max = 3.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
damping_min = 2.189
|
||||
damping_max = 2.189
|
||||
scale_curve = SubResource("CurveTexture_4iamg")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_284k0"]
|
||||
shading_mode = 2
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(1, 0.627451, 0.152941, 0.737255)
|
||||
emission = Color(1, 1, 1, 1)
|
||||
emission_energy_multiplier = 14.52
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_py84f"]
|
||||
material = SubResource("StandardMaterial3D_284k0")
|
||||
radial_segments = 8
|
||||
rings = 4
|
||||
|
||||
[sub_resource type="Curve" id="Curve_vev3p"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_kom26"]
|
||||
curve = SubResource("Curve_vev3p")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_dnohh"]
|
||||
max_value = 2.0
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.129973, 1.67932), 0.0, 0.0, 0, 0, Vector2(1, 2), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_e8dot"]
|
||||
curve = SubResource("Curve_dnohh")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_cdl35"]
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 80.0
|
||||
initial_velocity_min = 2.0
|
||||
initial_velocity_max = 2.0
|
||||
gravity = Vector3(0, 3, 0)
|
||||
scale_curve = SubResource("CurveTexture_e8dot")
|
||||
alpha_curve = SubResource("CurveTexture_kom26")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_eobj7"]
|
||||
transparency = 1
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.286275, 0.286275, 0.286275, 0.639216)
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_3m6v6"]
|
||||
material = SubResource("StandardMaterial3D_eobj7")
|
||||
radial_segments = 8
|
||||
rings = 4
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_xnx2l"]
|
||||
particle_flag_align_y = true
|
||||
angle_min = -360.0
|
||||
angle_max = 360.0
|
||||
direction = Vector3(0, 1, 0)
|
||||
initial_velocity_min = 5.0
|
||||
initial_velocity_max = 5.0
|
||||
gravity = Vector3(0, -5, 0)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m640o"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(1, 0.784318, 0.564951, 1)
|
||||
albedo_texture = ExtResource("1_pbfcp")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_ixem5"]
|
||||
material = SubResource("StandardMaterial3D_m640o")
|
||||
|
||||
[node name="Explosion" type="Node3D"]
|
||||
script = ExtResource("1_jtrlf")
|
||||
|
||||
[node name="Fire" type="GPUParticles3D" parent="."]
|
||||
emitting = false
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
fixed_fps = 60
|
||||
process_material = SubResource("ParticleProcessMaterial_rwstt")
|
||||
draw_pass_1 = SubResource("SphereMesh_py84f")
|
||||
|
||||
[node name="Smoke" type="GPUParticles3D" parent="."]
|
||||
emitting = false
|
||||
amount = 4
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
fixed_fps = 60
|
||||
process_material = SubResource("ParticleProcessMaterial_cdl35")
|
||||
draw_pass_1 = SubResource("SphereMesh_3m6v6")
|
||||
|
||||
[node name="Debris" type="GPUParticles3D" parent="."]
|
||||
emitting = false
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
process_material = SubResource("ParticleProcessMaterial_xnx2l")
|
||||
draw_pass_1 = SubResource("QuadMesh_ixem5")
|
||||
120
effects/explosion.tscn.bak
Normal file
@ -0,0 +1,120 @@
|
||||
[gd_scene load_steps=17 format=3 uid="uid://5q0aw58r81vp"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dg28fd1gyn80b" path="res://effects/flare_01.png" id="1_pbfcp"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_jmhc0"]
|
||||
max_value = 2.0
|
||||
_data = [Vector2(0.00397878, 0), 0.0, 0.0, 0, 0, Vector2(0.212202, 1.77182), 0.0, 0.0, 0, 0, Vector2(0.411141, 1.73482), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_4iamg"]
|
||||
curve = SubResource("Curve_jmhc0")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_rwstt"]
|
||||
direction = Vector3(0, 1, 0)
|
||||
initial_velocity_min = 3.0
|
||||
initial_velocity_max = 3.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
damping_min = 2.189
|
||||
damping_max = 2.189
|
||||
scale_curve = SubResource("CurveTexture_4iamg")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_284k0"]
|
||||
shading_mode = 2
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(1, 0.627451, 0.152941, 0.737255)
|
||||
emission = Color(1, 1, 1, 1)
|
||||
emission_energy_multiplier = 14.52
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_py84f"]
|
||||
material = SubResource("StandardMaterial3D_284k0")
|
||||
radial_segments = 8
|
||||
rings = 4
|
||||
|
||||
[sub_resource type="Curve" id="Curve_vev3p"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_kom26"]
|
||||
curve = SubResource("Curve_vev3p")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_dnohh"]
|
||||
max_value = 2.0
|
||||
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.129973, 1.67932), 0.0, 0.0, 0, 0, Vector2(1, 2), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_e8dot"]
|
||||
curve = SubResource("Curve_dnohh")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_cdl35"]
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 80.0
|
||||
initial_velocity_min = 2.0
|
||||
initial_velocity_max = 2.0
|
||||
gravity = Vector3(0, 3, 0)
|
||||
scale_curve = SubResource("CurveTexture_e8dot")
|
||||
alpha_curve = SubResource("CurveTexture_kom26")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_eobj7"]
|
||||
transparency = 1
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.286275, 0.286275, 0.286275, 0.639216)
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_3m6v6"]
|
||||
material = SubResource("StandardMaterial3D_eobj7")
|
||||
radial_segments = 8
|
||||
rings = 4
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_xnx2l"]
|
||||
particle_flag_align_y = true
|
||||
angle_min = -360.0
|
||||
angle_max = 360.0
|
||||
direction = Vector3(0, 1, 0)
|
||||
initial_velocity_min = 5.0
|
||||
initial_velocity_max = 5.0
|
||||
gravity = Vector3(0, -5, 0)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m640o"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(1, 0.784318, 0.564951, 1)
|
||||
albedo_texture = ExtResource("1_pbfcp")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_ixem5"]
|
||||
material = SubResource("StandardMaterial3D_m640o")
|
||||
|
||||
[node name="Explosion" type="Node3D"]
|
||||
|
||||
[node name="Fire" type="GPUParticles3D" parent="."]
|
||||
emitting = false
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
fixed_fps = 60
|
||||
process_material = SubResource("ParticleProcessMaterial_rwstt")
|
||||
draw_pass_1 = SubResource("SphereMesh_py84f")
|
||||
|
||||
[node name="Smoke" type="GPUParticles3D" parent="."]
|
||||
emitting = false
|
||||
amount = 4
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
fixed_fps = 60
|
||||
process_material = SubResource("ParticleProcessMaterial_cdl35")
|
||||
draw_pass_1 = SubResource("SphereMesh_3m6v6")
|
||||
|
||||
[node name="Debris" type="GPUParticles3D" parent="."]
|
||||
emitting = false
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
process_material = SubResource("ParticleProcessMaterial_xnx2l")
|
||||
draw_pass_1 = SubResource("QuadMesh_ixem5")
|
||||
|
||||
[connection signal="ready" from="." to="Fire" method="restart"]
|
||||
[connection signal="ready" from="." to="Smoke" method="restart"]
|
||||
[connection signal="ready" from="." to="Debris" method="restart"]
|
||||
[connection signal="finished" from="Smoke" to="." method="free"]
|
||||
BIN
effects/flare_01.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
35
effects/flare_01.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dg28fd1gyn80b"
|
||||
path.s3tc="res://.godot/imported/flare_01.png-969275195223e658fca4e4834cb8d7d1.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://effects/flare_01.png"
|
||||
dest_files=["res://.godot/imported/flare_01.png-969275195223e658fca4e4834cb8d7d1.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
effects/light_01.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
35
effects/light_01.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://byda217s5cq8v"
|
||||
path.s3tc="res://.godot/imported/light_01.png-043e946f6df880e55d2a4615e19b1007.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://effects/light_01.png"
|
||||
dest_files=["res://.godot/imported/light_01.png-043e946f6df880e55d2a4615e19b1007.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
effects/smoke_02.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
35
effects/smoke_02.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drr1nogesyvkd"
|
||||
path.s3tc="res://.godot/imported/smoke_02.png-183e92dff4c0a61c80d3c0b389ef903b.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://effects/smoke_02.png"
|
||||
dest_files=["res://.godot/imported/smoke_02.png-183e92dff4c0a61c80d3c0b389ef903b.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
effects/star_06.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
35
effects/star_06.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://t3u0gir8ycew"
|
||||
path.s3tc="res://.godot/imported/star_06.png-85536df29330704f6b3b20e0189245b8.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://effects/star_06.png"
|
||||
dest_files=["res://.godot/imported/star_06.png-85536df29330704f6b3b20e0189245b8.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
effects/trace_02.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
35
effects/trace_02.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8koxuqbiulnc"
|
||||
path.s3tc="res://.godot/imported/trace_02.png-01c92752c6308fa8bcb91dddf30a26f4.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://effects/trace_02.png"
|
||||
dest_files=["res://.godot/imported/trace_02.png-01c92752c6308fa8bcb91dddf30a26f4.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
9
enemies/EnemyWeaponSlot.tscn
Normal file
@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b7mq56myq16y6"]
|
||||
|
||||
[ext_resource type="Script" path="res://enemies/enemy_weapon_slot.gd" id="1_aqycl"]
|
||||
|
||||
[node name="EnemyWeaponSlot" type="Node3D"]
|
||||
script = ExtResource("1_aqycl")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
bus = &"SFX"
|
||||
43
enemies/barricade.tscn
Normal file
@ -0,0 +1,43 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://c4548r0io7hiy"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://dajephuqpori" path="res://level/protomaterial.tres" id="1_xq305"]
|
||||
[ext_resource type="PackedScene" uid="uid://cilj11mx2ahb1" path="res://enemies/enemy_hit_box.tscn" id="2_5uygx"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2p86lb72dp61" path="res://components/healthcomponent.tscn" id="3_a8b3n"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_cq42u"]
|
||||
material = ExtResource("1_xq305")
|
||||
size = Vector3(2, 2, 3)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_xnh82"]
|
||||
size = Vector3(2, 2, 3)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_mxspy"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_qy558"]
|
||||
size = Vector3(2, 2, 3)
|
||||
|
||||
[node name="Barricade" type="CharacterBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 7
|
||||
collision_priority = 10.0
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_cq42u")
|
||||
|
||||
[node name="EnemyHitBox" parent="." node_paths=PackedStringArray("health_component") instance=ExtResource("2_5uygx")]
|
||||
health_component = NodePath("../Healthcomponent")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyHitBox"]
|
||||
shape = SubResource("BoxShape3D_xnh82")
|
||||
|
||||
[node name="Healthcomponent" parent="." instance=ExtResource("3_a8b3n")]
|
||||
max_health = 30.0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Healthcomponent"]
|
||||
shape = SubResource("SphereShape3D_mxspy")
|
||||
disabled = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("BoxShape3D_qy558")
|
||||
|
||||
[connection signal="start_dying" from="Healthcomponent" to="." method="queue_free"]
|
||||
17
enemies/enemy_animation_handler.gd
Normal file
@ -0,0 +1,17 @@
|
||||
extends Node3D
|
||||
|
||||
@export var animation_tree: AnimationTree
|
||||
@onready var parent: CharacterBody3D = $".."
|
||||
@onready var animation_player: AnimationPlayer = $"../AnimationPlayer"
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if parent.velocity.length() <= .1:
|
||||
#animation_tree.set("parameters/attack/request", AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE)
|
||||
animation_tree.set("parameters/idle_walk_blend/blend_amount", 1)
|
||||
else:
|
||||
animation_tree.set("parameters/idle_walk_blend/blend_amount", -1)
|
||||
|
||||
func dying():
|
||||
animation_tree.active = false
|
||||
animation_player.speed_scale = randf_range(.8,1.2)
|
||||
animation_player.play("custom/death")
|
||||
3
enemies/enemy_animation_handler.tscn
Normal file
@ -0,0 +1,3 @@
|
||||
[gd_scene format=3 uid="uid://dnqcrvpokx0i0"]
|
||||
|
||||
[node name="EnemyAnimationHandler" type="Node3D"]
|
||||
11
enemies/enemy_hit_box.tscn
Normal file
@ -0,0 +1,11 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cilj11mx2ahb1"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/hit_box.gd" id="1_r4epu"]
|
||||
|
||||
[node name="EnemyHitBox" type="Area3D"]
|
||||
collision_layer = 32
|
||||
collision_mask = 16
|
||||
script = ExtResource("1_r4epu")
|
||||
|
||||
[connection signal="area_entered" from="." to="." method="_on_area_entered"]
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
44
enemies/enemy_mover_follow.gd
Normal file
@ -0,0 +1,44 @@
|
||||
extends NavigationAgent3D
|
||||
class_name EnemyMoverFollow
|
||||
|
||||
@export var follow_distance : float = 1
|
||||
@export var target : Node3D
|
||||
@export var MAX_SPEED := 2.0
|
||||
|
||||
var parent : CharacterBody3D
|
||||
var disabled := false
|
||||
|
||||
func disable():
|
||||
disabled = true
|
||||
|
||||
func _ready():
|
||||
parent = get_parent()
|
||||
|
||||
func set_target(new_target: Node3D):
|
||||
target = new_target
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
|
||||
if is_instance_valid(target) && target && !disabled:
|
||||
set_target_position(target.global_position)
|
||||
var next_path_position = get_next_path_position()
|
||||
#next_path_position.y = global_position.y
|
||||
var dir = parent.global_position.direction_to(next_path_position)
|
||||
var new_velocity = dir*MAX_SPEED
|
||||
parent.look_at(next_path_position)
|
||||
parent.velocity = new_velocity
|
||||
parent.move_and_slide()
|
||||
|
||||
#set_velocity(new_velocity)
|
||||
|
||||
#if global_position.distance_to(target.global_position) < 2:
|
||||
#queue_free()
|
||||
|
||||
else:
|
||||
parent.velocity = lerp(parent.velocity, Vector3.ZERO, 1)
|
||||
parent.move_and_slide()
|
||||
|
||||
|
||||
func _on_navigation_agent_3d_velocity_computed(safe_velocity: Vector3) -> void:
|
||||
parent.velocity = parent.velocity.move_toward(safe_velocity, .25)
|
||||
parent.move_and_slide()
|
||||
8
enemies/enemy_mover_follow.tscn
Normal file
@ -0,0 +1,8 @@
|
||||
[gd_scene format=3 uid="uid://dg4xjlf2wc5qw"]
|
||||
|
||||
[node name="EnemyMoverFollow" type="NavigationAgent3D"]
|
||||
path_desired_distance = 0.3
|
||||
path_height_offset = 0.2
|
||||
avoidance_enabled = true
|
||||
radius = 0.3
|
||||
debug_path_custom_color = Color(1, 0, 0, 1)
|
||||
30
enemies/enemy_mover_patrol.gd
Normal file
@ -0,0 +1,30 @@
|
||||
extends NavigationAgent3D
|
||||
|
||||
@export var MAX_SPEED : float = 3.0
|
||||
|
||||
var points : Array[Marker3D]
|
||||
var parent : CharacterBody3D
|
||||
|
||||
var current_point : int
|
||||
|
||||
func _ready() -> void:
|
||||
parent = get_parent()
|
||||
for child in get_children():
|
||||
if child is Marker3D:
|
||||
points.append(child)
|
||||
if points.size() > 0:
|
||||
current_point = 0
|
||||
set_target_position(points[current_point].global_position)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var next_path_position = get_next_path_position()
|
||||
var dir = parent.global_position.direction_to(next_path_position)
|
||||
var new_velocity = dir*MAX_SPEED
|
||||
#parent.look_at(next_path_position)
|
||||
#parent.rotate(Vector3.UP, parent.basis.z.angle_to(next_path_position)/2)
|
||||
parent.global_transform.basis = parent.global_transform.basis.slerp(parent.global_transform.looking_at(next_path_position, Vector3.UP).basis, delta * 10.0)
|
||||
parent.velocity = new_velocity
|
||||
parent.move_and_slide()
|
||||
if parent.global_position.distance_to(points[current_point].global_position) < 1:
|
||||
current_point = (current_point + 1)%points.size()
|
||||
set_target_position(points[current_point].global_position)
|
||||
6
enemies/enemy_mover_patrol.tscn
Normal file
@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cpevahnu0bbf1"]
|
||||
|
||||
[ext_resource type="Script" path="res://enemies/enemy_mover_patrol.gd" id="1_2okeu"]
|
||||
|
||||
[node name="EnemyMoverPatrol" type="NavigationAgent3D"]
|
||||
script = ExtResource("1_2okeu")
|
||||
43
enemies/enemy_weapon_slot.gd
Normal file
@ -0,0 +1,43 @@
|
||||
extends Node3D
|
||||
class_name EnemyWeaponSlot
|
||||
|
||||
@export var lead_speed := 10
|
||||
@export var weapon : Weapon
|
||||
@onready var audio_stream_player_3d: AudioStreamPlayer3D = $AudioStreamPlayer3D
|
||||
|
||||
var target : Node3D
|
||||
var can_shoot := true
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if weapon.shooting_sound:
|
||||
audio_stream_player_3d.stream = weapon.shooting_sound
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if is_instance_valid(target) && target:
|
||||
var dist = (target.global_position - global_position).length()
|
||||
var time_to_target = dist/lead_speed
|
||||
var lead = (target.velocity*time_to_target)
|
||||
look_at(target.global_position+Vector3(0,.5,0) + lead)
|
||||
shoot()
|
||||
else:
|
||||
rotation = Vector3.ZERO
|
||||
|
||||
|
||||
func shoot():
|
||||
if can_shoot:
|
||||
get_tree().create_timer(weapon.cooldown).timeout.connect(reload)
|
||||
audio_stream_player_3d.play()
|
||||
can_shoot = false
|
||||
var new_projectile = weapon.projectile_scene.instantiate()
|
||||
new_projectile.global_transform = global_transform
|
||||
get_tree().root.add_child(new_projectile)
|
||||
|
||||
|
||||
func reload():
|
||||
can_shoot = true
|
||||
|
||||
|
||||
func set_target(value: Node3D):
|
||||
target = value
|
||||
31
enemies/player_detector.gd
Normal file
@ -0,0 +1,31 @@
|
||||
extends Area3D
|
||||
|
||||
var current_players : Array[Node3D]
|
||||
var current_target : Node3D
|
||||
signal new_target
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
current_players.append(body)
|
||||
|
||||
func _on_body_exited(body: Node3D) -> void:
|
||||
current_players.erase(body)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var candidate : Node3D
|
||||
for body in current_players:
|
||||
if !candidate:
|
||||
candidate = body
|
||||
else:
|
||||
if global_position.distance_to(candidate.global_position) > global_position.distance_to(body.global_position):
|
||||
candidate = body
|
||||
if is_instance_valid(candidate):
|
||||
if candidate == current_target:
|
||||
return
|
||||
else:
|
||||
current_target = candidate
|
||||
new_target.emit(current_target)
|
||||
else:
|
||||
if is_instance_valid(current_target):
|
||||
current_target = null
|
||||
new_target.emit(current_target)
|
||||
11
enemies/player_detector.tscn
Normal file
@ -0,0 +1,11 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://mlq22lwd7tip"]
|
||||
|
||||
[ext_resource type="Script" path="res://enemies/player_detector.gd" id="1_ad1ks"]
|
||||
|
||||
[node name="PlayerDetector" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_ad1ks")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||
[connection signal="body_exited" from="." to="." method="_on_body_exited"]
|
||||
BIN
enemies/roomba/461697__leonelmail__body-falls-into-debris.mp3
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="mp3"
|
||||
type="AudioStreamMP3"
|
||||
uid="uid://de4uedmk5edgf"
|
||||
path="res://.godot/imported/461697__leonelmail__body-falls-into-debris.mp3-bb2688610ce51d8f9f8578f4998733e7.mp3str"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/roomba/461697__leonelmail__body-falls-into-debris.mp3"
|
||||
dest_files=["res://.godot/imported/461697__leonelmail__body-falls-into-debris.mp3-bb2688610ce51d8f9f8578f4998733e7.mp3str"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
enemies/roomba/circle_05.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
35
enemies/roomba/circle_05.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dyrknr7owcj2l"
|
||||
path.s3tc="res://.godot/imported/circle_05.png-642a93c66b1ec1ba5a1a752e418d94e7.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/roomba/circle_05.png"
|
||||
dest_files=["res://.godot/imported/circle_05.png-642a93c66b1ec1ba5a1a752e418d94e7.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
enemies/roomba/pistol-shot2.ogg
Normal file
19
enemies/roomba/pistol-shot2.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://b2wv3104111mm"
|
||||
path="res://.godot/imported/pistol-shot2.ogg-51b148b9fac9b33ad9f9483600ae7c59.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/roomba/pistol-shot2.ogg"
|
||||
dest_files=["res://.godot/imported/pistol-shot2.ogg-51b148b9fac9b33ad9f9483600ae7c59.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
11
enemies/roomba/roomba.gd
Normal file
@ -0,0 +1,11 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
|
||||
func _on_healthcomponent_start_dying() -> void:
|
||||
$blockbench_export.visible = false
|
||||
$CollisionShape3D.queue_free()
|
||||
$EnemyHitBox.queue_free()
|
||||
$Healthcomponent.queue_free()
|
||||
get_tree().create_timer(3).timeout.connect(queue_free)
|
||||
$AudioStreamPlayer3D.play()
|
||||
$EnemyWeaponSlot.queue_free()
|
||||
1
enemies/roomba/roomba.gltf
Normal file
36
enemies/roomba/roomba.gltf.import
Normal file
@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://5t571rk10fot"
|
||||
path="res://.godot/imported/roomba.gltf-c85637230b4fd27eac22407f3e7820ae.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/roomba/roomba.gltf"
|
||||
dest_files=["res://.godot/imported/roomba.gltf-c85637230b4fd27eac22407f3e7820ae.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
72
enemies/roomba/roomba.tscn
Normal file
@ -0,0 +1,72 @@
|
||||
[gd_scene load_steps=14 format=3 uid="uid://cah3scx7my3bo"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://5t571rk10fot" path="res://enemies/roomba/roomba.gltf" id="1_0byba"]
|
||||
[ext_resource type="Script" path="res://enemies/roomba/roomba.gd" id="1_ywmos"]
|
||||
[ext_resource type="PackedScene" uid="uid://cilj11mx2ahb1" path="res://enemies/enemy_hit_box.tscn" id="2_kryr4"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2p86lb72dp61" path="res://components/healthcomponent.tscn" id="3_lmjf6"]
|
||||
[ext_resource type="PackedScene" uid="uid://5q0aw58r81vp" path="res://effects/explosion.tscn" id="5_qdl43"]
|
||||
[ext_resource type="AudioStream" uid="uid://de4uedmk5edgf" path="res://enemies/roomba/461697__leonelmail__body-falls-into-debris.mp3" id="6_q81qv"]
|
||||
[ext_resource type="PackedScene" uid="uid://mlq22lwd7tip" path="res://enemies/player_detector.tscn" id="7_cyxum"]
|
||||
[ext_resource type="PackedScene" uid="uid://b7mq56myq16y6" path="res://enemies/EnemyWeaponSlot.tscn" id="8_7n6uh"]
|
||||
[ext_resource type="Resource" uid="uid://e6kduk7gil5d" path="res://enemies/roomba/roomba_weapon.tres" id="9_df07r"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_ryfyn"]
|
||||
height = 0.327
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_crthm"]
|
||||
height = 2.052
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_0wgue"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("6_q81qv")
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_7htvr"]
|
||||
height = 16.61
|
||||
radius = 4.445
|
||||
|
||||
[node name="Roomba" type="CharacterBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 3
|
||||
script = ExtResource("1_ywmos")
|
||||
|
||||
[node name="blockbench_export" parent="." instance=ExtResource("1_0byba")]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, 0)
|
||||
shape = SubResource("CylinderShape3D_ryfyn")
|
||||
|
||||
[node name="EnemyHitBox" parent="." node_paths=PackedStringArray("health_component") instance=ExtResource("2_kryr4")]
|
||||
health_component = NodePath("../Healthcomponent")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyHitBox"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, 0)
|
||||
shape = SubResource("CylinderShape3D_crthm")
|
||||
|
||||
[node name="Healthcomponent" parent="." instance=ExtResource("3_lmjf6")]
|
||||
max_health = 50.0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Healthcomponent"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, 0)
|
||||
shape = SubResource("CylinderShape3D_ryfyn")
|
||||
disabled = true
|
||||
|
||||
[node name="Explosion" parent="." instance=ExtResource("5_qdl43")]
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = SubResource("AudioStreamRandomizer_0wgue")
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="PlayerDetector" parent="." instance=ExtResource("7_cyxum")]
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="PlayerDetector"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -7.95)
|
||||
shape = SubResource("CylinderShape3D_7htvr")
|
||||
|
||||
[node name="EnemyWeaponSlot" parent="." instance=ExtResource("8_7n6uh")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -0.8)
|
||||
weapon = ExtResource("9_df07r")
|
||||
|
||||
[connection signal="start_dying" from="Healthcomponent" to="." method="_on_healthcomponent_start_dying"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="Explosion" method="play"]
|
||||
[connection signal="new_target" from="PlayerDetector" to="EnemyWeaponSlot" method="set_target"]
|
||||
BIN
enemies/roomba/roomba_0.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
37
enemies/roomba/roomba_0.png.import
Normal file
@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bbic8dstbrj8h"
|
||||
path="res://.godot/imported/roomba_0.png-c1549c6c179413abb430f9abb9ed6c8b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "bedb01a00a96b2e41e08b99e8b55e4ab"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/roomba/roomba_0.png"
|
||||
dest_files=["res://.godot/imported/roomba_0.png-c1549c6c179413abb430f9abb9ed6c8b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
57
enemies/roomba/roomba_projectile.tscn
Normal file
@ -0,0 +1,57 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://cebi3xpcvhuox"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dyrknr7owcj2l" path="res://enemies/roomba/circle_05.png" id="1_571d5"]
|
||||
[ext_resource type="Script" path="res://components/projectile.gd" id="1_bah41"]
|
||||
[ext_resource type="Script" path="res://components/projectile_mover_linear.gd" id="2_p2jl6"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_3m1f0"]
|
||||
radius = 0.1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ojfae"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_texture = ExtResource("1_571d5")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_03rak"]
|
||||
material = SubResource("StandardMaterial3D_ojfae")
|
||||
size = Vector2(0.5, 0.5)
|
||||
|
||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_4ol4i"]
|
||||
load_path = "res://.godot/imported/circle_05.png-642a93c66b1ec1ba5a1a752e418d94e7.s3tc.ctex"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4scl6"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0.443137, 0, 1)
|
||||
albedo_texture = SubResource("CompressedTexture2D_4ol4i")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_8mxox"]
|
||||
material = SubResource("StandardMaterial3D_4scl6")
|
||||
size = Vector2(0.5, 0.5)
|
||||
|
||||
[node name="RoombaProjectile" type="CharacterBody3D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 9
|
||||
script = ExtResource("1_bah41")
|
||||
lifetime = 3.0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_3m1f0")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("QuadMesh_03rak")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("QuadMesh_8mxox")
|
||||
|
||||
[node name="ProjectileMoverLinear" type="Node3D" parent="."]
|
||||
script = ExtResource("2_p2jl6")
|
||||
speed = 15.0
|
||||
|
||||
[connection signal="collided" from="." to="CollisionShape3D" method="queue_free"]
|
||||
[connection signal="collided" from="." to="MeshInstance3D" method="queue_free"]
|
||||
[connection signal="collided" from="." to="MeshInstance3D2" method="queue_free"]
|
||||
16
enemies/roomba/roomba_weapon.tres
Normal file
@ -0,0 +1,16 @@
|
||||
[gd_resource type="Resource" script_class="Weapon" load_steps=5 format=3 uid="uid://e6kduk7gil5d"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cebi3xpcvhuox" path="res://enemies/roomba/roomba_projectile.tscn" id="1_15rxa"]
|
||||
[ext_resource type="Script" path="res://player/weapons/weapon.gd" id="1_ywwl4"]
|
||||
[ext_resource type="AudioStream" uid="uid://b2wv3104111mm" path="res://enemies/roomba/pistol-shot2.ogg" id="2_2ih2p"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_xcj1h"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("2_2ih2p")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_ywwl4")
|
||||
cooldown = 1.0
|
||||
projectile_scene = ExtResource("1_15rxa")
|
||||
shooting_sound = SubResource("AudioStreamRandomizer_xcj1h")
|
||||
BIN
enemies/thug/argh.ogg
Normal file
19
enemies/thug/argh.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://c263o7igq1bue"
|
||||
path="res://.godot/imported/argh.ogg-8503a0ebee35f0cd47a4aff2ef845b42.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/thug/argh.ogg"
|
||||
dest_files=["res://.godot/imported/argh.ogg-8503a0ebee35f0cd47a4aff2ef845b42.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
enemies/thug/argh2.ogg
Normal file
19
enemies/thug/argh2.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bstxv3cg0wfat"
|
||||
path="res://.godot/imported/argh2.ogg-f82553d092e7ecbdac51d5797eb343db.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/thug/argh2.ogg"
|
||||
dest_files=["res://.godot/imported/argh2.ogg-f82553d092e7ecbdac51d5797eb343db.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
enemies/thug/argh3.ogg
Normal file
19
enemies/thug/argh3.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://uar0r0xk1ixh"
|
||||
path="res://.godot/imported/argh3.ogg-5cfd71678b491ec9e3381cd05197aa78.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/thug/argh3.ogg"
|
||||
dest_files=["res://.godot/imported/argh3.ogg-5cfd71678b491ec9e3381cd05197aa78.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
52
enemies/thug/thug.gd
Normal file
@ -0,0 +1,52 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
|
||||
@onready var enemy_hit_box: Area3D = $EnemyHitBox
|
||||
@onready var player_detector: Area3D = $PlayerDetector
|
||||
@onready var healthcomponent: HealthComponent = $Healthcomponent
|
||||
@onready var enemy_mover_follow: NavigationAgent3D = $EnemyMoverFollow
|
||||
@onready var collision_shape_3d: CollisionShape3D = $CollisionShape3D
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#@onready var navigation_agent_3d: NavigationAgent3D = $NavigationAgent3D
|
||||
#@export var target : Node3D
|
||||
#@export var MAX_SPEED := 2.0
|
||||
#
|
||||
#func set_target(new_target: Node3D):
|
||||
#target = new_target
|
||||
#
|
||||
#func _physics_process(delta: float) -> void:
|
||||
#
|
||||
#if is_instance_valid(target):
|
||||
#navigation_agent_3d.set_target_position(target.global_position)
|
||||
#var next_path_position = navigation_agent_3d.get_next_path_position()
|
||||
##next_path_position.y = global_position.y
|
||||
#var dir = global_position.direction_to(next_path_position)
|
||||
#var new_velocity = dir*MAX_SPEED
|
||||
#look_at(next_path_position)
|
||||
#navigation_agent_3d.set_velocity(new_velocity)
|
||||
#
|
||||
##if global_position.distance_to(target.global_position) < 2:
|
||||
##queue_free()
|
||||
#
|
||||
#else:
|
||||
#velocity = lerp(velocity, Vector3.ZERO, .1)
|
||||
#
|
||||
#
|
||||
#func _on_navigation_agent_3d_velocity_computed(safe_velocity: Vector3) -> void:
|
||||
#velocity = velocity.move_toward(safe_velocity, .25)
|
||||
#move_and_slide()
|
||||
|
||||
|
||||
func _on_healthcomponent_start_dying() -> void:
|
||||
#enemy_hit_box.monitoring = false
|
||||
#enemy_hit_box.monitorable = false
|
||||
#collision_shape_3d.disabled = true
|
||||
get_tree().create_timer(1).timeout.connect(queue_free)
|
||||
1
enemies/thug/thug.gltf
Normal file
3637
enemies/thug/thug.gltf.import
Normal file
936
enemies/thug/thug.tscn
Normal file
@ -0,0 +1,936 @@
|
||||
[gd_scene load_steps=38 format=3 uid="uid://ddmv73d5ey1yg"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cayq4g2opg201" path="res://enemies/thug/thug.gltf" id="1_4lv67"]
|
||||
[ext_resource type="Script" path="res://enemies/thug/thug.gd" id="2_q7xpr"]
|
||||
[ext_resource type="PackedScene" uid="uid://dg4xjlf2wc5qw" path="res://enemies/enemy_mover_follow.tscn" id="3_1p8x8"]
|
||||
[ext_resource type="PackedScene" uid="uid://cilj11mx2ahb1" path="res://enemies/enemy_hit_box.tscn" id="3_b7sbh"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2p86lb72dp61" path="res://components/healthcomponent.tscn" id="4_0yek0"]
|
||||
[ext_resource type="Script" path="res://enemies/enemy_mover_follow.gd" id="4_7s2u1"]
|
||||
[ext_resource type="PackedScene" uid="uid://dnqcrvpokx0i0" path="res://enemies/enemy_animation_handler.tscn" id="7_00xk1"]
|
||||
[ext_resource type="Script" path="res://enemies/enemy_animation_handler.gd" id="8_vuid0"]
|
||||
[ext_resource type="Texture2D" uid="uid://drr1nogesyvkd" path="res://effects/smoke_02.png" id="9_ufy0m"]
|
||||
[ext_resource type="AudioStream" uid="uid://bstxv3cg0wfat" path="res://enemies/thug/argh2.ogg" id="10_70jyq"]
|
||||
[ext_resource type="AudioStream" uid="uid://uar0r0xk1ixh" path="res://enemies/thug/argh3.ogg" id="11_p4jio"]
|
||||
[ext_resource type="AudioStream" uid="uid://c263o7igq1bue" path="res://enemies/thug/argh.ogg" id="12_j67ei"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_v6no0"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Node/left_arm2:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-0.265625, 1.71875, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Node/base:position")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 1, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Node/base/left_leg:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-0.203125, -0.109375, 0)]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Node/left_arm2:rotation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Node/base:rotation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Node/base/left_leg:rotation")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Node/base/right_leg:position")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.203125, -0.109375, 0)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Node/base/right_leg:rotation")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Node/base/right_leg/right_foot:position")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.5, 0)]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Node/base/right_leg/right_foot:rotation")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Node/base/left_leg/left_foot:position")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.5, 0)]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/path = NodePath("Node/base/left_leg/left_foot:rotation")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_3t24o"]
|
||||
resource_name = "attack"
|
||||
length = 0.833333
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = true
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node/base")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 0, 1, 0, 0.166667, 1, 0, 1, 0.0625, 0.5, 1, 0, 1, -0.1875, 0.833333, 1, 0, 1, 0)
|
||||
tracks/1/type = "rotation_3d"
|
||||
tracks/1/imported = true
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node/base")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1, 0.166667, 1, 0.0434534, -0.0870728, 0.00380168, 0.995247, 0.2, 1, 0.0348663, -0.0435528, 0.00305041, 0.998438, 0.233333, 1, 0.0262103, 5.33126e-05, 0.0022931, 0.999654, 0.266667, 1, 0.0175024, 0.0436594, 0.00153126, 0.998892, 0.333333, 1, 0, 0.130526, 0, 0.991445, 0.5, 1, -0.0421331, 0.258573, 0.0112895, 0.965006, 0.8, 1, -0.00426265, 0.0261601, 0.00114217, 0.999648, 0.833333, 1, 0, 0, 0, 1)
|
||||
tracks/2/type = "position_3d"
|
||||
tracks/2/imported = true
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Node/base/left_leg")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, -0.203125, -0.109375, 0)
|
||||
tracks/3/type = "rotation_3d"
|
||||
tracks/3/imported = true
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Node/base/left_leg")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, 0.0435779, -0.00190265, -0.0435779, 0.998097)
|
||||
tracks/4/type = "rotation_3d"
|
||||
tracks/4/imported = true
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Node/base/left_leg/left_foot")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = PackedFloat32Array(0, 1, -0.0871557, 0, 0, 0.996195)
|
||||
tracks/5/type = "rotation_3d"
|
||||
tracks/5/imported = true
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Node/base/left_arm")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = PackedFloat32Array(0, 1, 0.118261, -0.253611, 0.405735, 0.870101)
|
||||
tracks/6/type = "rotation_3d"
|
||||
tracks/6/imported = true
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Node/base/left_arm/left_hand")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = PackedFloat32Array(0, 1, 0, -0.608761, 0, 0.793353)
|
||||
tracks/7/type = "rotation_3d"
|
||||
tracks/7/imported = true
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Node/base/head")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1, 0.0333333, 1, 0.00436331, 0, 0, 0.999991, 0.166667, 1, 0.0218149, 0, 0, 0.999762, 0.2, 1, 0.0130896, 0, 0, 0.999914, 0.233333, 1, 0.00436331, 0, 0, 0.999991, 0.266667, 1, -0.00436331, 0, 0, 0.999991, 0.333333, 1, -0.0218149, 0, 0, 0.999762, 0.366667, 1, -0.0217941, -0.043609, 0.000951552, 0.99881, 0.5, 1, -0.0212978, -0.216388, 0.00472161, 0.976064, 0.8, 1, -0.00214676, -0.0218114, 0.000475926, 0.99976, 0.833333, 1, 0, 0, 0, 1)
|
||||
tracks/8/type = "rotation_3d"
|
||||
tracks/8/imported = true
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Node/base/right_arm")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = PackedFloat32Array(0, 1, 0.118261, 0.253611, -0.405735, 0.870101, 0.0333333, 1, 0.0652119, 0.162264, -0.383793, 0.906709, 0.0666667, 1, 0.0113164, 0.0688115, -0.35687, 0.931548, 0.1, 1, -0.0427259, -0.0255346, -0.325314, 0.944295, 0.133333, 1, -0.0962136, -0.119549, -0.289536, 0.944786, 0.166667, 1, -0.148453, -0.212012, -0.25, 0.933013, 0.2, 1, -0.0916947, -0.126838, -0.26413, 0.951704, 0.233333, 1, -0.033926, -0.0402647, -0.275347, 0.959902, 0.266667, 1, 0.0242169, 0.0467521, -0.283529, 0.957517, 0.3, 1, 0.0820927, 0.133254, -0.288585, 0.944576, 0.333333, 1, 0.139063, 0.218286, -0.290459, 0.92122, 0.433333, 1, 0.422185, 0.314113, -0.335185, 0.781501, 0.5, 1, 0.586689, 0.359159, -0.344498, 0.638844, 0.633333, 1, 0.412744, 0.328251, -0.382615, 0.758617, 0.733333, 1, 0.269066, 0.294836, -0.399466, 0.825289, 0.833333, 1, 0.118261, 0.253611, -0.405735, 0.870101)
|
||||
tracks/9/type = "rotation_3d"
|
||||
tracks/9/imported = true
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Node/base/right_arm/right_hand")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = PackedFloat32Array(0, 1, 0, 0.608761, 0, 0.793353, 0.166667, 1, 0, 0.876727, 0, 0.480989, 0.333333, 1, 0, 0.67559, 0, 0.737277, 0.5, 1, 0, 0.152123, 0, 0.988362, 0.833333, 1, 0, 0.608761, 0, 0.793353)
|
||||
tracks/10/type = "position_3d"
|
||||
tracks/10/imported = true
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Node/base/right_leg")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = PackedFloat32Array(0, 1, 0.203125, -0.109375, 0)
|
||||
tracks/11/type = "rotation_3d"
|
||||
tracks/11/imported = true
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Node/base/right_leg")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = PackedFloat32Array(0, 1, 0.0435779, 0.00190265, 0.0435779, 0.998097)
|
||||
tracks/12/type = "rotation_3d"
|
||||
tracks/12/imported = true
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Node/base/right_leg/right_foot")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = PackedFloat32Array(0, 1, -0.0871557, 0, 0, 0.996195)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_drd17"]
|
||||
resource_name = "idle"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = true
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node/base")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 0, 1, 0, 0.533333, 1, 0, 0.941667, 0, 1, 1, 0, 1, 0)
|
||||
tracks/1/type = "rotation_3d"
|
||||
tracks/1/imported = true
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node/base")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/2/type = "position_3d"
|
||||
tracks/2/imported = true
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Node/base/left_leg")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, -0.203125, -0.109375, 0, 0.533333, 1, -0.203125, -0.0510417, 0, 1, 1, -0.203125, -0.109375, 0)
|
||||
tracks/3/type = "rotation_3d"
|
||||
tracks/3/imported = true
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Node/base/left_leg")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, 0.0436194, 0, 0, 0.999048)
|
||||
tracks/4/type = "rotation_3d"
|
||||
tracks/4/imported = true
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Node/base/left_leg/left_foot")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = PackedFloat32Array(0, 1, -0.0871557, 0, 0, 0.996195)
|
||||
tracks/5/type = "rotation_3d"
|
||||
tracks/5/imported = true
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Node/base/left_arm")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = PackedFloat32Array(0, 1, 0, 0, 0.5373, 0.843391)
|
||||
tracks/6/type = "rotation_3d"
|
||||
tracks/6/imported = true
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Node/base/left_arm/left_hand")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = PackedFloat32Array(0, 1, 0, 0, 0.19509, 0.980785)
|
||||
tracks/7/type = "rotation_3d"
|
||||
tracks/7/imported = true
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Node/base/head")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/8/type = "rotation_3d"
|
||||
tracks/8/imported = true
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Node/base/right_arm")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = PackedFloat32Array(0, 1, 0, 0, -0.5373, 0.843391)
|
||||
tracks/9/type = "rotation_3d"
|
||||
tracks/9/imported = true
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Node/base/right_arm/right_hand")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = PackedFloat32Array(0, 1, 0, 0, -0.19509, 0.980785)
|
||||
tracks/10/type = "position_3d"
|
||||
tracks/10/imported = true
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Node/base/right_leg")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = PackedFloat32Array(0, 1, 0.203125, -0.109375, 0, 0.533333, 1, 0.203125, -0.0510417, 0, 1, 1, 0.203125, -0.109375, 0)
|
||||
tracks/11/type = "rotation_3d"
|
||||
tracks/11/imported = true
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Node/base/right_leg")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = PackedFloat32Array(0, 1, 0.0436194, 0, 0, 0.999048)
|
||||
tracks/12/type = "rotation_3d"
|
||||
tracks/12/imported = true
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Node/base/right_leg/right_foot")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = PackedFloat32Array(0, 1, -0.0871557, 0, 0, 0.996195)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_5uhgx"]
|
||||
resource_name = "reset"
|
||||
length = 0.001
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = true
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node/base")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 0, 1, 0)
|
||||
tracks/1/type = "rotation_3d"
|
||||
tracks/1/imported = true
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node/base")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/2/type = "position_3d"
|
||||
tracks/2/imported = true
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Node/base/left_leg")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, -0.203125, -0.109375, 0)
|
||||
tracks/3/type = "rotation_3d"
|
||||
tracks/3/imported = true
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Node/base/left_leg")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/4/type = "rotation_3d"
|
||||
tracks/4/imported = true
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Node/base/left_leg/left_foot")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/5/type = "rotation_3d"
|
||||
tracks/5/imported = true
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Node/base/left_arm")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/6/type = "rotation_3d"
|
||||
tracks/6/imported = true
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Node/base/left_arm/left_hand")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/7/type = "rotation_3d"
|
||||
tracks/7/imported = true
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Node/base/head")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/8/type = "rotation_3d"
|
||||
tracks/8/imported = true
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Node/base/right_arm")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/9/type = "rotation_3d"
|
||||
tracks/9/imported = true
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Node/base/right_arm/right_hand")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/10/type = "position_3d"
|
||||
tracks/10/imported = true
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Node/base/right_leg")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = PackedFloat32Array(0, 1, 0.203125, -0.109375, 0)
|
||||
tracks/11/type = "rotation_3d"
|
||||
tracks/11/imported = true
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Node/base/right_leg")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/12/type = "rotation_3d"
|
||||
tracks/12/imported = true
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Node/base/right_leg/right_foot")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_7ag3q"]
|
||||
resource_name = "walk"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = true
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node/base")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, 0, 1, 0, 0.1, 1, 0, 0.95, 0, 0.133333, 1, 0, 0.945833, 0, 0.233333, 1, 0, 1.04583, 0, 0.266667, 1, 0, 1.07083, 0, 0.366667, 1, 0, 1.12083, 0, 0.4, 1, 0, 1.1, 0, 0.5, 1, 0, 1, 0, 0.6, 1, 0, 0.95, 0, 0.633333, 1, 0, 0.945833, 0, 0.733333, 1, 0, 1.04583, 0, 0.766667, 1, 0, 1.07083, 0, 0.866667, 1, 0, 1.12083, 0, 0.9, 1, 0, 1.1, 0, 1, 1, 0, 1, 0)
|
||||
tracks/1/type = "rotation_3d"
|
||||
tracks/1/imported = true
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node/base")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
tracks/2/type = "position_3d"
|
||||
tracks/2/imported = true
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Node/base/left_leg")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, -0.203125, -0.109375, 0)
|
||||
tracks/3/type = "rotation_3d"
|
||||
tracks/3/imported = true
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Node/base/left_leg")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, -0.21644, 0, 0, 0.976296, 0.1, 1, -0.25038, 0, 0, 0.968148, 0.133333, 1, -0.234859, 0, 0, 0.972029, 0.2, 1, -0.0392598, 0, 0, 0.999229, 0.233333, 1, 0.0595967, 0, 0, 0.998223, 0.266667, 1, 0.172216, 0, 0, 0.985059, 0.366667, 1, 0.528685, 0, 0, 0.848818, 0.4, 1, 0.503774, 0, 0, 0.863835, 0.5, 1, 0.279829, 0, 0, 0.96005, 0.6, 1, 0.346117, 0, 0, 0.938191, 0.633333, 1, 0.340653, 0, 0, 0.940189, 0.733333, 1, 0.0683055, 0, 0, 0.997664, 0.766667, 1, 0.00727216, 0, 0, 0.999974, 0.866667, 1, -0.079909, 0, 0, 0.996802, 0.9, 1, -0.113203, 0, 0, 0.993572, 1, 1, -0.21644, 0, 0, 0.976296)
|
||||
tracks/4/type = "rotation_3d"
|
||||
tracks/4/imported = true
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Node/base/left_leg/left_foot")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = PackedFloat32Array(0, 1, -0.108867, 0, 0, 0.994056, 0.1, 1, -0.19509, 0, 0, 0.980785, 0.133333, 1, -0.244743, 0, 0, 0.969588, 0.233333, 1, -0.561602, 0, 0, 0.827407, 0.266667, 1, -0.620236, 0, 0, 0.784416, 0.366667, 1, -0.686242, 0, 0, 0.727374, 0.4, 1, -0.573576, 0, 0, 0.819152, 0.466667, 1, -0.202218, 0, 0, 0.979341, 0.5, 1, 0, 0, 0, 1, 0.6, 1, -0.173648, 0, 0, 0.984808, 0.633333, 1, -0.203642, 0, 0, 0.979045, 0.733333, 1, -0.0479781, 0, 0, 0.998848, 0.766667, 1, -0.0189066, 0, 0, 0.999821, 0.833333, 1, -0.00727215, 0, 0, 0.999974, 0.866667, 1, -0.00145444, 0, 0, 0.999999, 0.9, 1, -0.0218149, 0, 0, 0.999762, 1, 1, -0.108867, 0, 0, 0.994056)
|
||||
tracks/5/type = "rotation_3d"
|
||||
tracks/5/imported = true
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Node/base/left_arm")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = PackedFloat32Array(0, 1, 0.12941, -0.224144, 0.482963, 0.836516, 0.1, 1, 0.187303, -0.324419, 0.463592, 0.802965, 0.133333, 1, 0.188651, -0.326753, 0.463045, 0.802018, 0.2, 1, 0.0825238, -0.142935, 0.493143, 0.854148, 0.233333, 1, 0.0276203, -0.0478398, 0.499237, 0.864703, 0.266667, 1, -0.0116345, 0.0201515, 0.499865, 0.865791, 0.366667, 1, -0.081089, 0.14045, 0.493381, 0.854561, 0.4, 1, -0.0975452, 0.168953, 0.490393, 0.849385, 0.5, 1, -0.139915, 0.242339, 0.480025, 0.831428, 0.6, 1, -0.205359, 0.355693, 0.455881, 0.789609, 0.633333, 1, -0.207347, 0.359135, 0.454981, 0.78805, 0.666667, 1, -0.150353, 0.260419, 0.476859, 0.825943, 0.7, 1, -0.0911178, 0.157821, 0.491627, 0.851524, 0.733333, 1, -0.0305242, 0.0528695, 0.499067, 0.86441, 0.766667, 1, 0.0116345, -0.0201515, 0.499865, 0.865791, 0.866667, 1, 0.081089, -0.14045, 0.493381, 0.854561, 0.9, 1, 0.0954045, -0.165245, 0.490814, 0.850114, 1, 1, 0.12941, -0.224144, 0.482963, 0.836516)
|
||||
tracks/6/type = "rotation_3d"
|
||||
tracks/6/imported = true
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Node/base/left_arm/left_hand")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = PackedFloat32Array(0, 1, 0, 0, 0.258819, 0.965926)
|
||||
tracks/7/type = "rotation_3d"
|
||||
tracks/7/imported = true
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Node/base/right_arm")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = PackedFloat32Array(0, 1, -0.139915, -0.242339, -0.480025, 0.831428, 0.1, 1, -0.205359, -0.355693, -0.455881, 0.789609, 0.133333, 1, -0.207347, -0.359135, -0.454981, 0.78805, 0.166667, 1, -0.150353, -0.260419, -0.476859, 0.825943, 0.2, 1, -0.0911178, -0.157821, -0.491628, 0.851524, 0.233333, 1, -0.0305243, -0.0528696, -0.499067, 0.86441, 0.266667, 1, 0.0116345, 0.0201515, -0.499865, 0.865791, 0.366667, 1, 0.081089, 0.14045, -0.493381, 0.854561, 0.4, 1, 0.0954045, 0.165245, -0.490814, 0.850114, 0.5, 1, 0.12941, 0.224144, -0.482963, 0.836516, 0.6, 1, 0.187303, 0.324419, -0.463592, 0.802965, 0.633333, 1, 0.188651, 0.326753, -0.463045, 0.802018, 0.7, 1, 0.0825238, 0.142935, -0.493143, 0.854148, 0.733333, 1, 0.0276203, 0.0478397, -0.499237, 0.864703, 0.766667, 1, -0.0116345, -0.0201515, -0.499865, 0.865791, 0.866667, 1, -0.081089, -0.14045, -0.493381, 0.854561, 0.9, 1, -0.0975452, -0.168953, -0.490393, 0.849385, 1, 1, -0.139915, -0.242339, -0.480025, 0.831428)
|
||||
tracks/8/type = "rotation_3d"
|
||||
tracks/8/imported = true
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Node/base/right_arm/right_hand")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = PackedFloat32Array(0, 1, 0, 0, -0.258819, 0.965926)
|
||||
tracks/9/type = "position_3d"
|
||||
tracks/9/imported = true
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Node/base/right_leg")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = PackedFloat32Array(0, 1, 0.203125, -0.109375, 0)
|
||||
tracks/10/type = "rotation_3d"
|
||||
tracks/10/imported = true
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Node/base/right_leg")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = PackedFloat32Array(0, 1, 0.279829, 0, 0, 0.96005, 0.1, 1, 0.346117, 0, 0, 0.938191, 0.133333, 1, 0.340653, 0, 0, 0.940189, 0.233333, 1, 0.0683055, 0, 0, 0.997664, 0.266667, 1, 0.00727213, 0, 0, 0.999974, 0.366667, 1, -0.079909, 0, 0, 0.996802, 0.4, 1, -0.113203, 0, 0, 0.993572, 0.5, 1, -0.21644, 0, 0, 0.976296, 0.6, 1, -0.25038, 0, 0, 0.968148, 0.633333, 1, -0.234859, 0, 0, 0.972029, 0.7, 1, -0.0392599, 0, 0, 0.999229, 0.733333, 1, 0.0595968, 0, 0, 0.998223, 0.766667, 1, 0.172216, 0, 0, 0.985059, 0.866667, 1, 0.528685, 0, 0, 0.848818, 0.9, 1, 0.503774, 0, 0, 0.863835, 1, 1, 0.279829, 0, 0, 0.96005)
|
||||
tracks/11/type = "rotation_3d"
|
||||
tracks/11/imported = true
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Node/base/right_leg/right_foot")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1, 0.1, 1, -0.173648, 0, 0, 0.984808, 0.133333, 1, -0.203642, 0, 0, 0.979046, 0.233333, 1, -0.0479781, 0, 0, 0.998848, 0.266667, 1, -0.0189066, 0, 0, 0.999821, 0.333333, 1, -0.00727214, 0, 0, 0.999974, 0.366667, 1, -0.00145444, 0, 0, 0.999999, 0.4, 1, -0.0218149, 0, 0, 0.999762, 0.6, 1, -0.19509, 0, 0, 0.980785, 0.633333, 1, -0.244743, 0, 0, 0.969588, 0.733333, 1, -0.561602, 0, 0, 0.827407, 0.766667, 1, -0.620236, 0, 0, 0.784416, 0.866667, 1, -0.686242, 0, 0, 0.727374, 0.9, 1, -0.573577, 0, 0, 0.819152, 0.966667, 1, -0.202218, 0, 0, 0.979341, 1, 1, 0, 0, 0, 1)
|
||||
tracks/12/type = "rotation_3d"
|
||||
tracks/12/imported = true
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Node/base/head")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_sodno"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_v6no0"),
|
||||
"attack": SubResource("Animation_3t24o"),
|
||||
"idle": SubResource("Animation_drd17"),
|
||||
"reset": SubResource("Animation_5uhgx"),
|
||||
"walk": SubResource("Animation_7ag3q")
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_01rqh"]
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Node:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.266667, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.3, 0.266667), Vector3(0, 0, 0.5)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Node:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(1.5708, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Node/left_arm2:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-0.265625, 1.71875, 0), Vector3(-0.265625, 1.71875, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Node/base:position")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 1, 0), Vector3(0, 1, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Node/base/left_leg:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(-0.203125, -0.109375, 0), Vector3(-0.203125, -0.109375, 0)]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Node/left_arm2:rotation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Node/base:rotation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Node/base/left_leg:rotation")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Node/base/right_leg:position")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0.203125, -0.109375, 0), Vector3(0.203125, -0.109375, 0)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Node/base/right_leg:rotation")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Node/base/right_leg/right_foot:position")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.5, 0), Vector3(0, -0.5, 0)]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Node/base/right_leg/right_foot:rotation")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Node/base/left_leg/left_foot:position")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, -0.5, 0), Vector3(0, -0.5, 0)]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/path = NodePath("Node/base/left_leg/left_foot:rotation")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ncqu2"]
|
||||
_data = {
|
||||
"death": SubResource("Animation_01rqh")
|
||||
}
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_nuhqq"]
|
||||
radius = 0.2
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_gsh0o"]
|
||||
animation = &"idle"
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_g4uqm"]
|
||||
animation = &"attack"
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_bdo2q"]
|
||||
animation = &"walk"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id="AnimationNodeTimeScale_no4fp"]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_6b2mn"]
|
||||
|
||||
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_sf7fy"]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_qugov"]
|
||||
graph_offset = Vector2(-86.9528, -40.6286)
|
||||
nodes/Animation/node = SubResource("AnimationNodeAnimation_bdo2q")
|
||||
nodes/Animation/position = Vector2(100, 60)
|
||||
"nodes/Animation 2/node" = SubResource("AnimationNodeAnimation_gsh0o")
|
||||
"nodes/Animation 2/position" = Vector2(100, 280)
|
||||
"nodes/Animation 3/node" = SubResource("AnimationNodeAnimation_g4uqm")
|
||||
"nodes/Animation 3/position" = Vector2(100, 520)
|
||||
nodes/TimeScale/node = SubResource("AnimationNodeTimeScale_no4fp")
|
||||
nodes/TimeScale/position = Vector2(560, 0)
|
||||
nodes/attack/node = SubResource("AnimationNodeOneShot_6b2mn")
|
||||
nodes/attack/position = Vector2(800, -20)
|
||||
nodes/idle_walk_blend/node = SubResource("AnimationNodeBlend2_sf7fy")
|
||||
nodes/idle_walk_blend/position = Vector2(320, 40)
|
||||
nodes/output/position = Vector2(1020, -20)
|
||||
node_connections = [&"TimeScale", 0, &"idle_walk_blend", &"attack", 0, &"TimeScale", &"attack", 1, &"Animation 3", &"idle_walk_blend", 0, &"Animation", &"idle_walk_blend", 1, &"Animation 2", &"output", 0, &"attack"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_8i6dy"]
|
||||
radius = 0.2
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_2xuhp"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wjrfk"]
|
||||
radius = 17.0
|
||||
|
||||
[sub_resource type="Curve" id="Curve_idfk0"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_0ctqo"]
|
||||
curve = SubResource("Curve_idfk0")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_dwd3a"]
|
||||
angle_min = 1.07288e-05
|
||||
angle_max = 361.5
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 15.0
|
||||
initial_velocity_min = 1.45
|
||||
initial_velocity_max = 2.75
|
||||
gravity = Vector3(0, 0, 0)
|
||||
alpha_curve = SubResource("CurveTexture_0ctqo")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kfvph"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(1, 0, 0, 1)
|
||||
albedo_texture = ExtResource("9_ufy0m")
|
||||
billboard_mode = 3
|
||||
particles_anim_h_frames = 1
|
||||
particles_anim_v_frames = 1
|
||||
particles_anim_loop = false
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_kig6q"]
|
||||
material = SubResource("StandardMaterial3D_kfvph")
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_280ad"]
|
||||
streams_count = 3
|
||||
stream_0/stream = ExtResource("10_70jyq")
|
||||
stream_1/stream = ExtResource("11_p4jio")
|
||||
stream_2/stream = ExtResource("12_j67ei")
|
||||
|
||||
[node name="thug" instance=ExtResource("1_4lv67")]
|
||||
collision_layer = 4
|
||||
collision_mask = 7
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_z = true
|
||||
script = ExtResource("2_q7xpr")
|
||||
|
||||
[node name="Node" parent="." index="0"]
|
||||
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, 0, 0)
|
||||
|
||||
[node name="left_leg" parent="Node/base" index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.999999, 0, 0, 0, 0.999999, -0.203125, -0.109375, 0)
|
||||
|
||||
[node name="left_foot" parent="Node/base/left_leg" index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.999999, 0, 0, 0, 0.999999, 0, -0.5, 0)
|
||||
|
||||
[node name="left_arm" parent="Node/base" index="2"]
|
||||
transform = Transform3D(0.557044, -0.830473, -0.00381199, 0.773273, 0.51699, 0.367109, -0.302905, -0.207444, 0.930167, -0.265625, 0.71875, 0)
|
||||
|
||||
[node name="left_hand" parent="Node/base/left_arm" index="2"]
|
||||
transform = Transform3D(0.793353, -0.608761, 0, 0.608761, 0.793353, 0, 0, 0, 1, -0.453125, -0.015625, 0)
|
||||
|
||||
[node name="right_arm" parent="Node/base" index="4"]
|
||||
transform = Transform3D(0.557043, 0.830472, -0.00381183, -0.773272, 0.516989, -0.36711, -0.302904, 0.207443, 0.930171, 0.265625, 0.71875, 0)
|
||||
|
||||
[node name="right_hand" parent="Node/base/right_arm" index="1"]
|
||||
transform = Transform3D(0.793353, 0.608761, 0, -0.608761, 0.793353, 0, 0, 0, 1, 0.453125, -0.015625, 0)
|
||||
|
||||
[node name="right_leg" parent="Node/base" index="5"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.999999, 0, 0, 0, 0.999999, 0.203125, -0.109375, 0)
|
||||
|
||||
[node name="right_foot" parent="Node/base/right_leg" index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.999999, 0, 0, 0, 0.999999, 0, -0.5, 0)
|
||||
|
||||
[node name="AnimationPlayer" parent="." index="1"]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_sodno"),
|
||||
"custom": SubResource("AnimationLibrary_ncqu2")
|
||||
}
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." index="2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("CapsuleShape3D_nuhqq")
|
||||
|
||||
[node name="AnimationTree" type="AnimationTree" parent="." index="3"]
|
||||
tree_root = SubResource("AnimationNodeBlendTree_qugov")
|
||||
anim_player = NodePath("../AnimationPlayer")
|
||||
parameters/TimeScale/scale = 1.5
|
||||
parameters/attack/active = false
|
||||
parameters/attack/internal_active = false
|
||||
parameters/attack/request = 0
|
||||
parameters/idle_walk_blend/blend_amount = -1.0
|
||||
|
||||
[node name="EnemyMoverFollow" parent="." index="4" instance=ExtResource("3_1p8x8")]
|
||||
avoidance_enabled = false
|
||||
script = ExtResource("4_7s2u1")
|
||||
|
||||
[node name="EnemyHitBox" parent="." index="5" node_paths=PackedStringArray("health_component") instance=ExtResource("3_b7sbh")]
|
||||
health_component = NodePath("../Healthcomponent")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyHitBox" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("CapsuleShape3D_8i6dy")
|
||||
|
||||
[node name="Healthcomponent" parent="." index="6" instance=ExtResource("4_0yek0")]
|
||||
max_health = 10.0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Healthcomponent" index="0"]
|
||||
shape = SubResource("SphereShape3D_2xuhp")
|
||||
disabled = true
|
||||
|
||||
[node name="PlayerDetector" type="Area3D" parent="." index="7"]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector" index="0"]
|
||||
shape = SubResource("SphereShape3D_wjrfk")
|
||||
|
||||
[node name="EnemyAnimationHandler" parent="." index="8" node_paths=PackedStringArray("animation_tree") instance=ExtResource("7_00xk1")]
|
||||
script = ExtResource("8_vuid0")
|
||||
animation_tree = NodePath("../AnimationTree")
|
||||
|
||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="." index="9"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0)
|
||||
emitting = false
|
||||
amount = 3
|
||||
one_shot = true
|
||||
explosiveness = 0.8
|
||||
randomness = 0.77
|
||||
process_material = SubResource("ParticleProcessMaterial_dwd3a")
|
||||
draw_pass_1 = SubResource("QuadMesh_kig6q")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="." index="10"]
|
||||
stream = SubResource("AudioStreamRandomizer_280ad")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="velocity_computed" from="EnemyMoverFollow" to="EnemyMoverFollow" method="_on_navigation_agent_3d_velocity_computed"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="." method="_on_healthcomponent_start_dying"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="CollisionShape3D" method="free"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="EnemyMoverFollow" method="disable"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="EnemyHitBox/CollisionShape3D" method="free"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="EnemyAnimationHandler" method="dying"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="AudioStreamPlayer3D" method="play"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="GPUParticles3D" method="set_emitting" binds= [true]]
|
||||
[connection signal="body_entered" from="PlayerDetector" to="EnemyMoverFollow" method="set_target"]
|
||||
BIN
enemies/thug/thug_0.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
37
enemies/thug/thug_0.png.import
Normal file
@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dsauxiqvxm0vp"
|
||||
path="res://.godot/imported/thug_0.png-52f4cbdca1415c493083fcd86193d1e1.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "3c49c0714937235842ef49f7a008a94f"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/thug/thug_0.png"
|
||||
dest_files=["res://.godot/imported/thug_0.png-52f4cbdca1415c493083fcd86193d1e1.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
enemies/turret/450768__tycoh__plasmapistol_shot.wav
Normal file
24
enemies/turret/450768__tycoh__plasmapistol_shot.wav.import
Normal file
@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://66n4ntndws0b"
|
||||
path="res://.godot/imported/450768__tycoh__plasmapistol_shot.wav-5860a471a3d60e44953d0c59bc09f915.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/turret/450768__tycoh__plasmapistol_shot.wav"
|
||||
dest_files=["res://.godot/imported/450768__tycoh__plasmapistol_shot.wav-5860a471a3d60e44953d0c59bc09f915.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=0
|
||||
53
enemies/turret/Plasma_explosion.tscn
Normal file
@ -0,0 +1,53 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://bn8pvmo4pf52t"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dg28fd1gyn80b" path="res://effects/flare_01.png" id="1_w0wl5"]
|
||||
[ext_resource type="Script" path="res://effects/explosion.gd" id="2_ot2uu"]
|
||||
[ext_resource type="AudioStream" uid="uid://cj6j27c05nnia" path="res://enemies/turret/energy_projectile_hit.ogg" id="3_hiu5e"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_0c3bx"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.739691, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_1nivw"]
|
||||
curve = SubResource("Curve_0c3bx")
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_qsa11"]
|
||||
colors = PackedColorArray(1, 1, 1, 1, 0, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_qb1bo"]
|
||||
gradient = SubResource("Gradient_qsa11")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_c46h2"]
|
||||
direction = Vector3(0, 1, 0)
|
||||
initial_velocity_max = 3.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
color_ramp = SubResource("GradientTexture1D_qb1bo")
|
||||
alpha_curve = SubResource("CurveTexture_1nivw")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hqavp"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_texture = ExtResource("1_w0wl5")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_25sbj"]
|
||||
material = SubResource("StandardMaterial3D_hqavp")
|
||||
|
||||
[node name="Node3D" type="GPUParticles3D"]
|
||||
emitting = false
|
||||
amount = 16
|
||||
lifetime = 0.5
|
||||
one_shot = true
|
||||
explosiveness = 0.9
|
||||
process_material = SubResource("ParticleProcessMaterial_c46h2")
|
||||
draw_pass_1 = SubResource("QuadMesh_25sbj")
|
||||
script = ExtResource("2_ot2uu")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = ExtResource("3_hiu5e")
|
||||
autoplay = true
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="ready" from="." to="." method="restart"]
|
||||
BIN
enemies/turret/building_explosion.ogg
Normal file
19
enemies/turret/building_explosion.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://daij4ugs4fca4"
|
||||
path="res://.godot/imported/building_explosion.ogg-b91d84e896c0aad51493da22860aa670.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/turret/building_explosion.ogg"
|
||||
dest_files=["res://.godot/imported/building_explosion.ogg-b91d84e896c0aad51493da22860aa670.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
BIN
enemies/turret/energy_projectile_hit.ogg
Normal file
19
enemies/turret/energy_projectile_hit.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://cj6j27c05nnia"
|
||||
path="res://.godot/imported/energy_projectile_hit.ogg-e9d13549971fb79d34cc222218dd80f2.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/turret/energy_projectile_hit.ogg"
|
||||
dest_files=["res://.godot/imported/energy_projectile_hit.ogg-e9d13549971fb79d34cc222218dd80f2.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
||||
11
enemies/turret/plasma_launcher.tres
Normal file
@ -0,0 +1,11 @@
|
||||
[gd_resource type="Resource" script_class="Weapon" load_steps=4 format=3 uid="uid://bmdx14r8log88"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://begy52yll3dbl" path="res://enemies/turret/plasma_projectile.tscn" id="1_tfytu"]
|
||||
[ext_resource type="Script" path="res://player/weapons/weapon.gd" id="1_yyw1r"]
|
||||
[ext_resource type="AudioStream" uid="uid://66n4ntndws0b" path="res://enemies/turret/450768__tycoh__plasmapistol_shot.wav" id="3_5xj18"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_yyw1r")
|
||||
cooldown = 3.0
|
||||
projectile_scene = ExtResource("1_tfytu")
|
||||
shooting_sound = ExtResource("3_5xj18")
|
||||
157
enemies/turret/plasma_projectile.tscn
Normal file
@ -0,0 +1,157 @@
|
||||
[gd_scene load_steps=20 format=3 uid="uid://begy52yll3dbl"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/projectile.gd" id="1_oxlg3"]
|
||||
[ext_resource type="Script" path="res://components/projectile_mover_linear.gd" id="1_wakmi"]
|
||||
[ext_resource type="PackedScene" uid="uid://bn8pvmo4pf52t" path="res://enemies/turret/Plasma_explosion.tscn" id="2_m6ryp"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg28fd1gyn80b" path="res://effects/flare_01.png" id="3_myjsa"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_l4npu"]
|
||||
radius = 0.1
|
||||
|
||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_30vvv"]
|
||||
load_path = "res://.godot/imported/light_01.png-043e946f6df880e55d2a4615e19b1007.s3tc.ctex"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rnbhs"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
albedo_texture = SubResource("CompressedTexture2D_30vvv")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_6dujq"]
|
||||
material = SubResource("StandardMaterial3D_rnbhs")
|
||||
|
||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_8hau8"]
|
||||
load_path = "res://.godot/imported/light_01.png-043e946f6df880e55d2a4615e19b1007.s3tc.ctex"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8m8ga"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0, 1, 1, 1)
|
||||
albedo_texture = SubResource("CompressedTexture2D_8hau8")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_rfbef"]
|
||||
material = SubResource("StandardMaterial3D_8m8ga")
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1ejtb"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeshInstance3D:mesh:size")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MeshInstance3D/MeshInstance3D2:mesh:size")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_eeyvp"]
|
||||
resource_name = "glow"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MeshInstance3D:mesh:size")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1), Vector2(0.5, 0.5)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MeshInstance3D/MeshInstance3D2:mesh:size")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1), Vector2(0.5, 0.5)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lu8c1"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_1ejtb"),
|
||||
"glow": SubResource("Animation_eeyvp")
|
||||
}
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_od0rb"]
|
||||
colors = PackedColorArray(0.505882, 1, 1, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_h0x7y"]
|
||||
gradient = SubResource("Gradient_od0rb")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_rnpni"]
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 0.3
|
||||
gravity = Vector3(0, 1, 0)
|
||||
color_ramp = SubResource("GradientTexture1D_h0x7y")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_h0omr"]
|
||||
transparency = 1
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_texture = ExtResource("3_myjsa")
|
||||
billboard_mode = 1
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_2084w"]
|
||||
material = SubResource("StandardMaterial3D_h0omr")
|
||||
|
||||
[node name="PlasmaProjectile" type="CharacterBody3D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 9
|
||||
script = ExtResource("1_oxlg3")
|
||||
damage = 100.0
|
||||
collsion_scene = ExtResource("2_m6ryp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_l4npu")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("QuadMesh_6dujq")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="MeshInstance3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0)
|
||||
mesh = SubResource("QuadMesh_rfbef")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_lu8c1")
|
||||
}
|
||||
autoplay = "glow"
|
||||
speed_scale = 3.0
|
||||
|
||||
[node name="ProjectileMoverLinear" type="Node3D" parent="."]
|
||||
script = ExtResource("1_wakmi")
|
||||
speed = 15.0
|
||||
|
||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
|
||||
amount = 16
|
||||
process_material = SubResource("ParticleProcessMaterial_rnpni")
|
||||
draw_pass_1 = SubResource("QuadMesh_2084w")
|
||||
|
||||
[connection signal="collided" from="." to="ProjectileMoverLinear" method="queue_free"]
|
||||
[connection signal="collided" from="." to="CollisionShape3D" method="set_disabled" binds= [true]]
|
||||
[connection signal="collided" from="." to="MeshInstance3D" method="set_visible" binds= [false]]
|
||||
[connection signal="collided" from="." to="GPUParticles3D" method="set_emitting" binds= [false]]
|
||||
6
enemies/turret/plasma_turret.gd
Normal file
@ -0,0 +1,6 @@
|
||||
extends StaticBody3D
|
||||
|
||||
|
||||
func _on_healthcomponent_start_dying() -> void:
|
||||
get_tree().create_timer(3).timeout.connect(queue_free)
|
||||
$CollisionShape3D.queue_free()
|
||||
209
enemies/turret/plasma_turret.tscn
Normal file
@ -0,0 +1,209 @@
|
||||
[gd_scene load_steps=16 format=3 uid="uid://myjcm7eg043b"]
|
||||
|
||||
[ext_resource type="Script" path="res://enemies/turret/plasma_turret.gd" id="1_5cmh7"]
|
||||
[ext_resource type="PackedScene" uid="uid://ccsrmndqy43ph" path="res://enemies/turret/turret.tscn" id="1_5hqga"]
|
||||
[ext_resource type="PackedScene" uid="uid://b7mq56myq16y6" path="res://enemies/EnemyWeaponSlot.tscn" id="2_eiq1i"]
|
||||
[ext_resource type="PackedScene" uid="uid://mlq22lwd7tip" path="res://enemies/player_detector.tscn" id="2_we0x8"]
|
||||
[ext_resource type="Resource" uid="uid://bmdx14r8log88" path="res://enemies/turret/plasma_launcher.tres" id="3_6qvlc"]
|
||||
[ext_resource type="PackedScene" uid="uid://cilj11mx2ahb1" path="res://enemies/enemy_hit_box.tscn" id="3_gaf3p"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2p86lb72dp61" path="res://components/healthcomponent.tscn" id="4_l8nu8"]
|
||||
[ext_resource type="PackedScene" uid="uid://5q0aw58r81vp" path="res://effects/explosion.tscn" id="7_uavmy"]
|
||||
[ext_resource type="AudioStream" uid="uid://daij4ugs4fca4" path="res://enemies/turret/building_explosion.ogg" id="8_iow2f"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_2ydgc"]
|
||||
radius = 20.0
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_a2pej"]
|
||||
size = Vector3(1, 1.3, 1)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_ae38j"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_xts0o"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Turret/blockbench_export/Node/base/bearing:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.8125, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Turret/blockbench_export/Node/base/bearing:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Turret/blockbench_export/Node/base/bearing/tilt:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.359375, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Turret/blockbench_export/Node/base/bearing/tilt:rotation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Turret:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_j1uus"]
|
||||
resource_name = "dying"
|
||||
length = 3.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Turret/blockbench_export/Node/base/bearing:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.8125, 0), Vector3(1, 0.1125, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Turret/blockbench_export/Node/base/bearing:rotation")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(8.74228e-08, 2.35619, 3.14159)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Turret/blockbench_export/Node/base/bearing/tilt:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.359375, 0), Vector3(-1.7, 0.059375, -1.3)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Turret/blockbench_export/Node/base/bearing/tilt:rotation")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(3.14159, 0, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Turret:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 3),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0), Vector3(0, -3, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_j87wu"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_xts0o"),
|
||||
"dying": SubResource("Animation_j1uus")
|
||||
}
|
||||
|
||||
[node name="PlasmaTurret" type="StaticBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 7
|
||||
script = ExtResource("1_5cmh7")
|
||||
|
||||
[node name="Turret" parent="." instance=ExtResource("1_5hqga")]
|
||||
|
||||
[node name="EnemyWeaponSlot" parent="Turret/blockbench_export/Node/base/bearing/tilt/beveled_cuboid" index="0" instance=ExtResource("2_eiq1i")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -7.34788e-17, 0.3, 0.6)
|
||||
lead_speed = 15
|
||||
weapon = ExtResource("3_6qvlc")
|
||||
|
||||
[node name="PlayerDetector" parent="." instance=ExtResource("2_we0x8")]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"]
|
||||
shape = SubResource("SphereShape3D_2ydgc")
|
||||
|
||||
[node name="EnemyHitBox" parent="." node_paths=PackedStringArray("health_component") instance=ExtResource("3_gaf3p")]
|
||||
health_component = NodePath("../Healthcomponent")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyHitBox"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0)
|
||||
shape = SubResource("BoxShape3D_a2pej")
|
||||
|
||||
[node name="Healthcomponent" parent="." instance=ExtResource("4_l8nu8")]
|
||||
max_health = 500.0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Healthcomponent"]
|
||||
shape = SubResource("SphereShape3D_ae38j")
|
||||
disabled = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0)
|
||||
shape = SubResource("BoxShape3D_a2pej")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_j87wu")
|
||||
}
|
||||
|
||||
[node name="Explosion" parent="." instance=ExtResource("7_uavmy")]
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||
stream = ExtResource("8_iow2f")
|
||||
bus = &"SFX"
|
||||
|
||||
[connection signal="new_target" from="PlayerDetector" to="Turret" method="set_target"]
|
||||
[connection signal="new_target" from="PlayerDetector" to="Turret/blockbench_export/Node/base/bearing/tilt/beveled_cuboid/EnemyWeaponSlot" method="set_target"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="." method="_on_healthcomponent_start_dying"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="Turret/blockbench_export/Node/base/bearing/tilt/beveled_cuboid/EnemyWeaponSlot" method="queue_free"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="Explosion" method="play"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="AudioStreamPlayer3D" method="play"]
|
||||
[connection signal="start_dying" from="Healthcomponent" to="AnimationPlayer" method="play" binds= ["dying"]]
|
||||
|
||||
[editable path="Turret"]
|
||||
[editable path="Turret/blockbench_export"]
|
||||
1
enemies/turret/turret.gltf
Normal file
36
enemies/turret/turret.gltf.import
Normal file
@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dvddh2sdnjmld"
|
||||
path="res://.godot/imported/turret.gltf-e0420d9bd2228ac60b53cd4787255b60.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/turret/turret.gltf"
|
||||
dest_files=["res://.godot/imported/turret.gltf-e0420d9bd2228ac60b53cd4787255b60.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
11
enemies/turret/turret.tscn
Normal file
@ -0,0 +1,11 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ccsrmndqy43ph"]
|
||||
|
||||
[ext_resource type="Script" path="res://turrettest.gd" id="1_vb1n6"]
|
||||
[ext_resource type="PackedScene" uid="uid://dvddh2sdnjmld" path="res://enemies/turret/turret.gltf" id="2_vhgge"]
|
||||
|
||||
[node name="Turret" type="Node3D"]
|
||||
script = ExtResource("1_vb1n6")
|
||||
|
||||
[node name="blockbench_export" parent="." instance=ExtResource("2_vhgge")]
|
||||
|
||||
[editable path="blockbench_export"]
|
||||
BIN
enemies/turret/turret_0.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
37
enemies/turret/turret_0.png.import
Normal file
@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dtvy2uv7vfpyq"
|
||||
path="res://.godot/imported/turret_0.png-1a69b56efa6f848da3d972614b1bd6a8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "60ff1eea1ccf495e7d357320f50368ce"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://enemies/turret/turret_0.png"
|
||||
dest_files=["res://.godot/imported/turret_0.png-1a69b56efa6f848da3d972614b1bd6a8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
41
export_presets.cfg
Normal file
@ -0,0 +1,41 @@
|
||||
[preset.0]
|
||||
|
||||
name="Web"
|
||||
platform="Web"
|
||||
runnable=true
|
||||
advanced_options=false
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="../exports/index.html"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_export_mode=2
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
variant/extensions_support=false
|
||||
variant/thread_support=false
|
||||
vram_texture_compression/for_desktop=true
|
||||
vram_texture_compression/for_mobile=false
|
||||
html/export_icon=true
|
||||
html/custom_html_shell=""
|
||||
html/head_include=""
|
||||
html/canvas_resize_policy=2
|
||||
html/focus_canvas_on_start=true
|
||||
html/experimental_virtual_keyboard=false
|
||||
progressive_web_app/enabled=false
|
||||
progressive_web_app/ensure_cross_origin_isolation_headers=true
|
||||
progressive_web_app/offline_page=""
|
||||
progressive_web_app/display=1
|
||||
progressive_web_app/orientation=0
|
||||
progressive_web_app/icon_144x144=""
|
||||
progressive_web_app/icon_180x180=""
|
||||
progressive_web_app/icon_512x512=""
|
||||
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
||||
BIN
future-cop-lapd-TEST.jpg
Normal file
|
After Width: | Height: | Size: 94 KiB |
34
future-cop-lapd-TEST.jpg.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://drgmrltsxybdb"
|
||||
path="res://.godot/imported/future-cop-lapd-TEST.jpg-faf7a3cd7407b6317ac706575bc7758f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://future-cop-lapd-TEST.jpg"
|
||||
dest_files=["res://.godot/imported/future-cop-lapd-TEST.jpg-faf7a3cd7407b6317ac706575bc7758f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
228
gdd.html
Normal file
@ -0,0 +1,228 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>R.A.I.D.E.R. - Rapid AI Drone Emergency Response</title>
|
||||
<style>
|
||||
/* From extension vscode.github */
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
.vscode-dark img[src$=\#gh-light-mode-only],
|
||||
.vscode-light img[src$=\#gh-dark-mode-only],
|
||||
.vscode-high-contrast:not(.vscode-high-contrast-light) img[src$=\#gh-light-mode-only],
|
||||
.vscode-high-contrast-light img[src$=\#gh-dark-mode-only] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css">
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif;
|
||||
font-size: 14px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.task-list-item {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.task-list-item-checkbox {
|
||||
margin-left: -20px;
|
||||
vertical-align: middle;
|
||||
pointer-events: none;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
:root {
|
||||
--color-note: #0969da;
|
||||
--color-tip: #1a7f37;
|
||||
--color-warning: #9a6700;
|
||||
--color-severe: #bc4c00;
|
||||
--color-caution: #d1242f;
|
||||
--color-important: #8250df;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--color-note: #2f81f7;
|
||||
--color-tip: #3fb950;
|
||||
--color-warning: #d29922;
|
||||
--color-severe: #db6d28;
|
||||
--color-caution: #f85149;
|
||||
--color-important: #a371f7;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
.markdown-alert {
|
||||
padding: 0.5rem 1rem;
|
||||
margin-bottom: 16px;
|
||||
color: inherit;
|
||||
border-left: .25em solid #888;
|
||||
}
|
||||
|
||||
.markdown-alert>:first-child {
|
||||
margin-top: 0
|
||||
}
|
||||
|
||||
.markdown-alert>:last-child {
|
||||
margin-bottom: 0
|
||||
}
|
||||
|
||||
.markdown-alert .markdown-alert-title {
|
||||
display: flex;
|
||||
font-weight: 500;
|
||||
align-items: center;
|
||||
line-height: 1
|
||||
}
|
||||
|
||||
.markdown-alert .markdown-alert-title .octicon {
|
||||
margin-right: 0.5rem;
|
||||
display: inline-block;
|
||||
overflow: visible !important;
|
||||
vertical-align: text-bottom;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-note {
|
||||
border-left-color: var(--color-note);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-note .markdown-alert-title {
|
||||
color: var(--color-note);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-important {
|
||||
border-left-color: var(--color-important);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-important .markdown-alert-title {
|
||||
color: var(--color-important);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-warning {
|
||||
border-left-color: var(--color-warning);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-warning .markdown-alert-title {
|
||||
color: var(--color-warning);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-tip {
|
||||
border-left-color: var(--color-tip);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-tip .markdown-alert-title {
|
||||
color: var(--color-tip);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-caution {
|
||||
border-left-color: var(--color-caution);
|
||||
}
|
||||
|
||||
.markdown-alert.markdown-alert-caution .markdown-alert-title {
|
||||
color: var(--color-caution);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body class="vscode-body vscode-light">
|
||||
<h1 id="raider---rapid-ai-drone-emergency-response">R.A.I.D.E.R. - Rapid AI Drone Emergency Response</h1>
|
||||
<h3 id="game-design-document">Game Design Document</h3>
|
||||
<ul>
|
||||
<li><a href="#raider---rapid-ai-drone-emergency-response">R.A.I.D.E.R. - Rapid AI Drone Emergency Response</a>
|
||||
<ul>
|
||||
<li><a href="#game-design-document">Game Design Document</a></li>
|
||||
<li><a href="#elevator-pitch">Elevator Pitch</a></li>
|
||||
<li><a href="#theme">Theme</a></li>
|
||||
<li><a href="#general-info">General Info</a>
|
||||
<ul>
|
||||
<li><a href="#platform">Platform</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#inspiration">Inspiration</a></li>
|
||||
<li><a href="#development-software">Development Software</a></li>
|
||||
<li><a href="#concept">Concept</a>
|
||||
<ul>
|
||||
<li><a href="#overview">Overview</a></li>
|
||||
<li><a href="#movement">Movement</a></li>
|
||||
<li><a href="#combat">Combat</a></li>
|
||||
<li><a href="#enemies">Enemies</a></li>
|
||||
<li><a href="#environments">Environments</a></li>
|
||||
<li><a href="#lore">Lore</a></li>
|
||||
<li><a href="#progression">Progression</a></li>
|
||||
<li><a href="#prototype">Prototype</a></li>
|
||||
<li><a href="#sounds-and-music">Sounds and Music</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="elevator-pitch">Elevator Pitch</h2>
|
||||
<p>R.A.I.D.E.R. is a throwback 3D action shooter, inspired by classic games of the 5th gen of game consoles, first and formost Future Cop: LAPD. The twist is that the player will controll multiple robots ('drones') to accomplish each mission, which means that resources of multiple entities have to be managed.</p>
|
||||
<h2 id="theme">Theme</h2>
|
||||
<p>R.A.I.D.E.R. is about feeling powerful. Piloting a powerful mech, or even a group of mechs, is an awesome feeling, and the game should try to evoke that feeling in a player. While being powerful, the environments in the game should feel threatening, and the player will need to move and apply their might carefully.</p>
|
||||
<p>The game will be set in a dystopian future. Crime is ubiquitous, and environments should be run-down and dilapidated. The game will have a semi serious tone, with self aware humour and fourth wall breaking jokes.</p>
|
||||
<h2 id="general-info">General Info</h2>
|
||||
<h3 id="platform">Platform</h3>
|
||||
<p>The game should be developed for PC and released on digital video game storefronts. A prototype/early demo will be developed for the Pirate Software Gamejam 16 and released on <a href="http://itch.io">itch.io</a>.</p>
|
||||
<h2 id="inspiration">Inspiration</h2>
|
||||
<p><img src="file:///c:\Users\Felix\Godot\raider\future-cop-lapd-TEST.jpg" alt="alt text"></p>
|
||||
<p><img src="file:///c:\Users\Felix\Godot\raider\mechwarrior-3-is-one-of-my-favorite-vehicle-combat-games-of-v0-n0z89pks5iua1.webp" alt="alt text"></p>
|
||||
<p>The game will take inspiration from games like Future Cop: LAPD and the Battle Tech series, e.g. the MechWarrior series.</p>
|
||||
<h2 id="development-software">Development Software</h2>
|
||||
<p>The game will be developed in the Godot Engine, Version 4.3. 3D Assets will be made with Blockbench and Fusion 360. Audacity will be used for creating/modifying audio assets.</p>
|
||||
<h2 id="concept">Concept</h2>
|
||||
<h3 id="overview">Overview</h3>
|
||||
<p>R.A.I.D.E.R. will be a top-down action shooter. This section will describe gameplay mechanics in more detail.</p>
|
||||
<h3 id="movement">Movement</h3>
|
||||
<p>The player can move their mech in four directions (front/back, strafe left/right), and turn left to right. There will be no mouse control/aim, as this could feel to modern/out of place for the style the game will try to evoke. The ability to jump could be added to add variety to the gameplay by adding short platforming sections. Also, a way to traverse the environment faster could be added, i.e., by sprinting.</p>
|
||||
<h3 id="combat">Combat</h3>
|
||||
<p>The player will have multiple weapons at their disposal. A high-firerate weapon, like a machine gun, to deal with smaller, high volume enemies, and a heavier hitting, but clunkier to use weapon for bigger enemies, like a rocket launcher. A third weapon slot could be filled with another weapon or utility tool, like mortars, shields, distractions, repair packs, etc. Ammo reserves for every wepon will be limited, but can be replenished during the mission by picking up items.</p>
|
||||
<p>There should be a way to damage enemies while being empty on all weapons, for example with a melee attack. This should be a last resort however.</p>
|
||||
<p>Weapons should aim automatically at targets in front of them.</p>
|
||||
<p>Depending on the level, the player should be able to control multiple mechs. The player can switch between mechs under his control. Mechs that are currently not controlled should idle/patrol at their last position, and keep shooting at incoming enemies. By carefully positioning their mechs, a player can secure his flanks against incoming cannon fodder enemies and focus on dangerous enemies coming from straight ahead.</p>
|
||||
<h3 id="enemies">Enemies</h3>
|
||||
<p>The game should feature a variety of enemeis with different behaviours:</p>
|
||||
<ul>
|
||||
<li>Idle/Static Enemies/Destructable doodads</li>
|
||||
<li>Turrets</li>
|
||||
<li>Patrolling enemies</li>
|
||||
<li>Enemies that follow the player</li>
|
||||
</ul>
|
||||
<p>Enemies should be sporting weapons with which to attack the player. The players mechs health pool will be limited and needs to be managed. Mech health can be replenished during missions by picking up health boosters.</p>
|
||||
<p>The roster of enemies should feature humans, robots, tanks, hovercraft, aerial vehicles, and so on.</p>
|
||||
<h3 id="environments">Environments</h3>
|
||||
<p>The game should feature a variety of environments. City-scapes, parks, ghettos, but also interiors, underground lairs, and, of course, a sewer level. Mission briefings should explain the environment of the upcoming missions. Enemies should be fitting for the environment.</p>
|
||||
<h3 id="lore">Lore</h3>
|
||||
<p>The player being part of a police/law enforcement unit, should have a superior overlooking their missions. This character should give out hints, explain lore bits, and be comic relief during gameplay.</p>
|
||||
<h3 id="progression">Progression</h3>
|
||||
<p>Depending on their perforamnce during a mission, a player might spend in game currency on upgrades, new mechs or new weapons between missions. Starting a mission should show a loadout screen, where unlocked equipment can be selected for the upcoming deployment.</p>
|
||||
<h3 id="prototype">Prototype</h3>
|
||||
<p>A prototype with greatly reduced scope should be developed for the Pirate Software Jam 16. The scope should be reduced to:</p>
|
||||
<ul>
|
||||
<li>A single level</li>
|
||||
<li>A single mech</li>
|
||||
<li>Two weapons</li>
|
||||
<li>A few enemies</li>
|
||||
<li>No progression</li>
|
||||
</ul>
|
||||
<p>The aim of the prototype is to gauge interest in a game like this, test potential art styles, and evaluate core gameplay elements.</p>
|
||||
<h3 id="sounds-and-music">Sounds and Music</h3>
|
||||
<p>Music should incorporate styles which were popular during the late 90s/early 00s, like Rock, Industrial, Nu Metal, Grunge, Trip Hop and Techno. Music can feel "corny" or "cheesy" to lean into the retro feeling the game is trying to evoke. Music files can be compressed/low quality to further emulate limitations of it's inspirations.</p>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
97
gdd.md
Normal file
@ -0,0 +1,97 @@
|
||||
# R.A.I.D.E.R. - Rapid AI Drone Emergency Response
|
||||
### Game Design Document
|
||||
|
||||
- [R.A.I.D.E.R. - Rapid AI Drone Emergency Response](#raider---rapid-ai-drone-emergency-response)
|
||||
- [Game Design Document](#game-design-document)
|
||||
- [Elevator Pitch](#elevator-pitch)
|
||||
- [Theme](#theme)
|
||||
- [General Info](#general-info)
|
||||
- [Platform](#platform)
|
||||
- [Inspiration](#inspiration)
|
||||
- [Development Software](#development-software)
|
||||
- [Concept](#concept)
|
||||
- [Overview](#overview)
|
||||
- [Movement](#movement)
|
||||
- [Combat](#combat)
|
||||
- [Enemies](#enemies)
|
||||
- [Environments](#environments)
|
||||
- [Lore](#lore)
|
||||
- [Progression](#progression)
|
||||
- [Prototype](#prototype)
|
||||
- [Sounds and Music](#sounds-and-music)
|
||||
|
||||
|
||||
## Elevator Pitch
|
||||
R.A.I.D.E.R. is a throwback 3D action shooter, inspired by classic games of the 5th gen of game consoles, first and formost Future Cop: LAPD. The twist is that the player will controll multiple robots ('drones') to accomplish each mission, which means that resources of multiple entities have to be managed.
|
||||
|
||||
## Theme
|
||||
R.A.I.D.E.R. is about feeling powerful. Piloting a powerful mech, or even a group of mechs, is an awesome feeling, and the game should try to evoke that feeling in a player. While being powerful, the environments in the game should feel threatening, and the player will need to move and apply their might carefully.
|
||||
|
||||
The game will be set in a dystopian future. Crime is ubiquitous, and environments should be run-down and dilapidated. The game will have a semi serious tone, with self aware humour and fourth wall breaking jokes.
|
||||
|
||||
## General Info
|
||||
### Platform
|
||||
The game should be developed for PC and released on digital video game storefronts. A prototype/early demo will be developed for the Pirate Software Gamejam 16 and released on itch.io.
|
||||
|
||||
## Inspiration
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The game will take inspiration from games like Future Cop: LAPD and the Battle Tech series, e.g. the MechWarrior series.
|
||||
|
||||
## Development Software
|
||||
The game will be developed in the Godot Engine, Version 4.3. 3D Assets will be made with Blockbench and Fusion 360. Audacity will be used for creating/modifying audio assets.
|
||||
|
||||
## Concept
|
||||
|
||||
### Overview
|
||||
R.A.I.D.E.R. will be a top-down action shooter. This section will describe gameplay mechanics in more detail.
|
||||
|
||||
### Movement
|
||||
The player can move their mech in four directions (front/back, strafe left/right), and turn left to right. There will be no mouse control/aim, as this could feel to modern/out of place for the style the game will try to evoke. The ability to jump could be added to add variety to the gameplay by adding short platforming sections. Also, a way to traverse the environment faster could be added, i.e., by sprinting.
|
||||
|
||||
### Combat
|
||||
The player will have multiple weapons at their disposal. A high-firerate weapon, like a machine gun, to deal with smaller, high volume enemies, and a heavier hitting, but clunkier to use weapon for bigger enemies, like a rocket launcher. A third weapon slot could be filled with another weapon or utility tool, like mortars, shields, distractions, repair packs, etc. Ammo reserves for every wepon will be limited, but can be replenished during the mission by picking up items.
|
||||
|
||||
There should be a way to damage enemies while being empty on all weapons, for example with a melee attack. This should be a last resort however.
|
||||
|
||||
Weapons should aim automatically at targets in front of them.
|
||||
|
||||
Depending on the level, the player should be able to control multiple mechs. The player can switch between mechs under his control. Mechs that are currently not controlled should idle/patrol at their last position, and keep shooting at incoming enemies. By carefully positioning their mechs, a player can secure his flanks against incoming cannon fodder enemies and focus on dangerous enemies coming from straight ahead.
|
||||
|
||||
### Enemies
|
||||
The game should feature a variety of enemeis with different behaviours:
|
||||
|
||||
* Idle/Static Enemies/Destructable doodads
|
||||
* Turrets
|
||||
* Patrolling enemies
|
||||
* Enemies that follow the player
|
||||
|
||||
Enemies should be sporting weapons with which to attack the player. The players mechs health pool will be limited and needs to be managed. Mech health can be replenished during missions by picking up health boosters.
|
||||
|
||||
The roster of enemies should feature humans, robots, tanks, hovercraft, aerial vehicles, and so on.
|
||||
|
||||
### Environments
|
||||
The game should feature a variety of environments. City-scapes, parks, ghettos, but also interiors, underground lairs, and, of course, a sewer level. Mission briefings should explain the environment of the upcoming missions. Enemies should be fitting for the environment.
|
||||
|
||||
### Lore
|
||||
The player being part of a police/law enforcement unit, should have a superior overlooking their missions. This character should give out hints, explain lore bits, and be comic relief during gameplay.
|
||||
|
||||
### Progression
|
||||
Depending on their perforamnce during a mission, a player might spend in game currency on upgrades, new mechs or new weapons between missions. Starting a mission should show a loadout screen, where unlocked equipment can be selected for the upcoming deployment.
|
||||
|
||||
### Prototype
|
||||
A prototype with greatly reduced scope should be developed for the Pirate Software Jam 16. The scope should be reduced to:
|
||||
|
||||
* A single level
|
||||
* A single mech
|
||||
* Two weapons
|
||||
* A few enemies
|
||||
* No progression
|
||||
|
||||
The aim of the prototype is to gauge interest in a game like this, test potential art styles, and evaluate core gameplay elements.
|
||||
|
||||
### Sounds and Music
|
||||
Music should incorporate styles which were popular during the late 90s/early 00s, like Rock, Industrial, Nu Metal, Grunge, Trip Hop and Techno. Music can feel "corny" or "cheesy" to lean into the retro feeling the game is trying to evoke. Music files can be compressed/low quality to further emulate limitations of it's inspirations.
|
||||
1
icon.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
|
||||
|
After Width: | Height: | Size: 994 B |
37
icon.svg.import
Normal file
@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dephuhc6btov6"
|
||||
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
BIN
level/Photoreal_Concrete_03-512x512.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
34
level/Photoreal_Concrete_03-512x512.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cqharsprh3uwr"
|
||||
path="res://.godot/imported/Photoreal_Concrete_03-512x512.png-5aa9d287f799ba3b405466f8606a3196.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://level/Photoreal_Concrete_03-512x512.png"
|
||||
dest_files=["res://.godot/imported/Photoreal_Concrete_03-512x512.png-5aa9d287f799ba3b405466f8606a3196.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
level/Photoreal_Concrete_08-512x512.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
34
level/Photoreal_Concrete_08-512x512.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://uyc41qckg5nj"
|
||||
path="res://.godot/imported/Photoreal_Concrete_08-512x512.png-e45f5fb9a76170b0abe76278a9ce906b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://level/Photoreal_Concrete_08-512x512.png"
|
||||
dest_files=["res://.godot/imported/Photoreal_Concrete_08-512x512.png-e45f5fb9a76170b0abe76278a9ce906b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
level/bricks2.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
35
level/bricks2.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dup74p22kide7"
|
||||
path.s3tc="res://.godot/imported/bricks2.png-df6e6f917768ab430e8b35a214d9db1d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://level/bricks2.png"
|
||||
dest_files=["res://.godot/imported/bricks2.png-df6e6f917768ab430e8b35a214d9db1d.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
9
level/brickwall_material.tres
Normal file
@ -0,0 +1,9 @@
|
||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bo7p14voeendf"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dup74p22kide7" path="res://level/bricks2.png" id="1_cev4d"]
|
||||
|
||||
[resource]
|
||||
albedo_texture = ExtResource("1_cev4d")
|
||||
uv1_scale = Vector3(0.4, 0.4, 0.4)
|
||||
uv1_triplanar = true
|
||||
texture_filter = 2
|
||||
BIN
level/clear+sea+water-128x128.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
35
level/clear+sea+water-128x128.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ggl6eey5qoqw"
|
||||
path.s3tc="res://.godot/imported/clear+sea+water-128x128.png-28fa408ab485098366995b9944a979fa.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://level/clear+sea+water-128x128.png"
|
||||
dest_files=["res://.godot/imported/clear+sea+water-128x128.png-28fa408ab485098366995b9944a979fa.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
1
level/container.gltf
Normal file
36
level/container.gltf.import
Normal file
@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://odn2qd1638ak"
|
||||
path="res://.godot/imported/container.gltf-c8b77bc3e67bf0f7ebe6f02ab864432f.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://level/container.gltf"
|
||||
dest_files=["res://.godot/imported/container.gltf-c8b77bc3e67bf0f7ebe6f02ab864432f.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type="StaticBody3D"
|
||||
nodes/root_name="Container1"
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
1
level/container2.gltf
Normal file
36
level/container2.gltf.import
Normal file
@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://daxbgobllphuj"
|
||||
path="res://.godot/imported/container2.gltf-836f258578abcdcd8fc04b3a1320eb85.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://level/container2.gltf"
|
||||
dest_files=["res://.godot/imported/container2.gltf-836f258578abcdcd8fc04b3a1320eb85.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type="StaticBody3D"
|
||||
nodes/root_name="Container2"
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||