Premier commit
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
extends Area3D
|
||||
class_name Alien
|
||||
|
||||
const DEATH_SCENE : PackedScene = preload("res://entities/alien/alien_death_effect/alien_death_effect.tscn") as PackedScene
|
||||
const DEATH_SCENE_TIME : float = 10.
|
||||
|
||||
const COLLISION_HEIGHT = 5
|
||||
const COLLISION_RADIUS = 1.5
|
||||
const NEIGHBOR_DETECTION_MARGIN = 0.5
|
||||
|
||||
const ATTACK_DISTANCE = 6.
|
||||
|
||||
const NEIGHBOR_ROTATION = 0.5
|
||||
const NEIGHBOR_BUMP_FORCE = 4. * AlienHordeManager.CALCULATE_SCATTER_FREQUENCY
|
||||
const NEIGHBOR_BLOCKED_SPEED_FACTOR = 0.5
|
||||
const DIRECTION_DRIFT_RANGE = PI/8
|
||||
const DAMAGE_EFFECT_DURATION : float = 0.5
|
||||
|
||||
const DEFAULT_HP : float = 20.
|
||||
const DEFAULT_DAMAGE_RATE : float = 1.
|
||||
|
||||
signal died
|
||||
|
||||
enum State {RUNNING, ATTACKING, DEAD}
|
||||
|
||||
@export var size : float = 1.0
|
||||
@export var speed : float = 10.
|
||||
@export var turn_speed : float = 20.
|
||||
|
||||
@onready var damage_rate : float = size * DEFAULT_DAMAGE_RATE
|
||||
@onready var hp : float = size * DEFAULT_HP
|
||||
var state : State = State.RUNNING
|
||||
var damage_effect_last : float = 0.
|
||||
|
||||
var id : int = 0
|
||||
var target : Node3D
|
||||
|
||||
@onready var collision_shape : CollisionShape3D = generate_collision_shape()
|
||||
|
||||
func _ready():
|
||||
monitoring = false
|
||||
|
||||
func generate_collision_shape() -> CollisionShape3D:
|
||||
var new_collision_shape : CollisionShape3D= CollisionShape3D.new()
|
||||
var cylinder_shape : CylinderShape3D = CylinderShape3D.new()
|
||||
|
||||
cylinder_shape.height = COLLISION_HEIGHT
|
||||
cylinder_shape.radius = COLLISION_RADIUS
|
||||
|
||||
new_collision_shape.shape = cylinder_shape
|
||||
|
||||
new_collision_shape.position = Vector3(0,COLLISION_HEIGHT/2.,0)
|
||||
|
||||
add_child(new_collision_shape)
|
||||
|
||||
return new_collision_shape
|
||||
|
||||
func move(
|
||||
delta: float,
|
||||
calculate_direction: bool,
|
||||
calculate_scatter : bool
|
||||
):
|
||||
var target_angle = rotation.y
|
||||
var current_speed = speed
|
||||
|
||||
if calculate_direction and target:
|
||||
target_angle = calculate_target_angle()
|
||||
|
||||
if calculate_scatter:
|
||||
var collision_right = has_neighbor(1)
|
||||
var collision_left = has_neighbor(-1)
|
||||
|
||||
if collision_left and not collision_right:
|
||||
target_angle += - NEIGHBOR_ROTATION
|
||||
position += Vector3.RIGHT.rotated(Vector3.UP, rotation.y) * NEIGHBOR_BUMP_FORCE * delta
|
||||
elif collision_right and not collision_left:
|
||||
target_angle += NEIGHBOR_ROTATION
|
||||
position += Vector3.LEFT.rotated(Vector3.UP, rotation.y) * NEIGHBOR_BUMP_FORCE * delta
|
||||
elif collision_left and collision_right:
|
||||
current_speed = speed * get_random().randf_range(0., NEIGHBOR_BLOCKED_SPEED_FACTOR)
|
||||
|
||||
rotation.y = lerp_angle(
|
||||
rotation.y,
|
||||
target_angle,
|
||||
min(1, delta*turn_speed)
|
||||
)
|
||||
|
||||
position += Vector3.FORWARD.rotated(Vector3.UP, rotation.y) * current_speed * delta
|
||||
|
||||
func calculate_target_angle() -> float:
|
||||
|
||||
var target_angle : float = (
|
||||
Vector2(global_position.z,global_position.x)
|
||||
- Vector2(target.global_position.z,target.global_position.x)
|
||||
).normalized().angle()
|
||||
|
||||
# Random drift in direction
|
||||
target_angle += get_random().randf_range(-DIRECTION_DRIFT_RANGE, DIRECTION_DRIFT_RANGE)
|
||||
|
||||
return target_angle
|
||||
|
||||
|
||||
|
||||
func has_neighbor(direction = 1) -> bool:
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
|
||||
var query = PhysicsRayQueryParameters3D.create(
|
||||
global_position,
|
||||
global_position + Vector3(
|
||||
direction * (COLLISION_RADIUS + NEIGHBOR_DETECTION_MARGIN), 0,0
|
||||
).rotated(Vector3.UP, rotation.y)
|
||||
)
|
||||
query.collide_with_areas = true
|
||||
query.exclude.append(get_rid())
|
||||
|
||||
var result = space_state.intersect_ray(query)
|
||||
|
||||
return result != {}
|
||||
|
||||
func attack_target(delta : float):
|
||||
if target and target.has_method("hit"):
|
||||
target.hit(delta * damage_rate)
|
||||
|
||||
func hit(damage = 1.):
|
||||
hp = max(0, hp - damage)
|
||||
damage_effect_last = DAMAGE_EFFECT_DURATION
|
||||
if hp == 0:
|
||||
die()
|
||||
|
||||
func die():
|
||||
died.emit()
|
||||
state = State.DEAD
|
||||
collision_shape.disabled = true
|
||||
add_child(DEATH_SCENE.instantiate())
|
||||
await get_tree().create_timer(DEATH_SCENE_TIME).timeout
|
||||
queue_free()
|
||||
|
||||
func get_random() -> RandomNumberGenerator:
|
||||
var random : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
random.seed = id
|
||||
|
||||
return random
|
||||
@@ -0,0 +1 @@
|
||||
uid://bkfr1dvvrmota
|
||||
@@ -0,0 +1,43 @@
|
||||
[gd_scene format=3 uid="uid://10ogf77klwu"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bkfr1dvvrmota" path="res://entities/alien/alien.gd" id="1_qp64o"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvgqy34aw6xfc" path="res://entities/mecha/assets/textures/pointer.svg" id="3_ym0y8"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_g4v7s"]
|
||||
height = 4.0
|
||||
radius = 1.5
|
||||
|
||||
[node name="Alien" type="Area3D" unique_id=537229132]
|
||||
monitoring = false
|
||||
monitorable = false
|
||||
script = ExtResource("1_qp64o")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=209124875]
|
||||
unique_name_in_owner = true
|
||||
shape = SubResource("CylinderShape3D_g4v7s")
|
||||
|
||||
[node name="ColliderRayCast3D" type="RayCast3D" parent="." unique_id=303441313]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 2, -0.1)
|
||||
target_position = Vector3(0, -2, 0)
|
||||
|
||||
[node name="NeighborRRayCast3D" type="RayCast3D" parent="." unique_id=91948683]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0.1, 2, 0.5)
|
||||
target_position = Vector3(2, 0, 0)
|
||||
collide_with_areas = true
|
||||
collide_with_bodies = false
|
||||
|
||||
[node name="NeighborLRayCast3D" type="RayCast3D" parent="." unique_id=580620392]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -0.1, 2, 0.5)
|
||||
target_position = Vector3(-2, 0, 0)
|
||||
collide_with_areas = true
|
||||
collide_with_bodies = false
|
||||
|
||||
[node name="Indicator" type="Sprite3D" parent="." unique_id=1377230752]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.514289, 0)
|
||||
visible = false
|
||||
billboard = 1
|
||||
texture = ExtResource("3_ym0y8")
|
||||
@@ -0,0 +1,5 @@
|
||||
extends Node3D
|
||||
|
||||
func _ready():
|
||||
%ExplosionGPUParticles3D.emitting = true
|
||||
%CorpseGPUParticles3D.emitting = true
|
||||
@@ -0,0 +1 @@
|
||||
uid://lhn14psdj7hr
|
||||
@@ -0,0 +1,121 @@
|
||||
[gd_scene format=3 uid="uid://mi0hwb80ud8h"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://lhn14psdj7hr" path="res://entities/alien/alien_death_effect/alien_death_effect.gd" id="1_vt2i7"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://667gyf6p35nw" path="res://entities/alien/assets/3d/alien_part.tres" id="2_on0xa"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_t4u1q"]
|
||||
offsets = PackedFloat32Array(0, 0.8219697, 1)
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_p1u0y"]
|
||||
gradient = SubResource("Gradient_t4u1q")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_p83er"]
|
||||
_data = [Vector2(0, 0), 0.0, 2.7057414, 0, 0, Vector2(0.8, 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_3gngh"]
|
||||
curve = SubResource("Curve_p83er")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_g4v7s"]
|
||||
lifetime_randomness = 0.5
|
||||
angle_min = 1.0728835e-05
|
||||
angle_max = 1.0728835e-05
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 114.231
|
||||
initial_velocity_min = 2.0
|
||||
initial_velocity_max = 3.0
|
||||
radial_velocity_min = -2.2351742e-05
|
||||
radial_velocity_max = 0.39997762
|
||||
gravity = Vector3(0, 0, 0)
|
||||
use_scale_3d = true
|
||||
scale_3d_min = Vector3(1, 1, 1)
|
||||
scale_3d_max = Vector3(1, 1, 1)
|
||||
scale_min = 0.5
|
||||
scale_max = 0.5
|
||||
scale_curve = SubResource("CurveTexture_3gngh")
|
||||
color_ramp = SubResource("GradientTexture1D_p1u0y")
|
||||
hue_variation_min = -2.2351742e-08
|
||||
hue_variation_max = 0.09999997
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_d6cdn"]
|
||||
interpolation_mode = 1
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_fcnqv"]
|
||||
gradient = SubResource("Gradient_d6cdn")
|
||||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
fill_to = Vector2(1, 0.5)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_57qmd"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.73333335, 0.6156863, 0.69803923, 1)
|
||||
albedo_texture = SubResource("GradientTexture2D_fcnqv")
|
||||
billboard_mode = 1
|
||||
billboard_keep_scale = true
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_yf5fn"]
|
||||
material = SubResource("StandardMaterial3D_57qmd")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_kxalf"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.8793103, 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_fcnqv"]
|
||||
curve = SubResource("Curve_kxalf")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_emcji"]
|
||||
lifetime_randomness = 0.5
|
||||
angle_min = 1.0728835e-05
|
||||
angle_max = 1.0728835e-05
|
||||
use_rotation_3d = true
|
||||
rotation_3d_min = Vector3(0, 0, 0)
|
||||
rotation_3d_max = Vector3(360, 360, 360)
|
||||
inherit_velocity_ratio = 1.0
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 33.462
|
||||
initial_velocity_min = 4.0
|
||||
initial_velocity_max = 6.0
|
||||
radial_velocity_min = -2.2351742e-05
|
||||
radial_velocity_max = 0.39997762
|
||||
gravity = Vector3(0, -9.1, 0)
|
||||
scale_min = 0.59999996
|
||||
scale_curve = SubResource("CurveTexture_fcnqv")
|
||||
collision_mode = 1
|
||||
collision_friction = 1.0
|
||||
collision_bounce = 0.5
|
||||
|
||||
[node name="AlienDeathEffect" type="Node3D" unique_id=1248383251]
|
||||
script = ExtResource("1_vt2i7")
|
||||
|
||||
[node name="ExplosionGPUParticles3D" type="GPUParticles3D" parent="." unique_id=416874722]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2686481, -0.70010376)
|
||||
emitting = false
|
||||
amount = 20
|
||||
one_shot = true
|
||||
speed_scale = 3.0
|
||||
explosiveness = 1.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_g4v7s")
|
||||
draw_pass_1 = SubResource("QuadMesh_yf5fn")
|
||||
|
||||
[node name="CorpseGPUParticles3D" type="GPUParticles3D" parent="." unique_id=810474087]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2686481, -0.70010376)
|
||||
emitting = false
|
||||
amount = 5
|
||||
lifetime = 10.0
|
||||
one_shot = true
|
||||
speed_scale = 2.0
|
||||
explosiveness = 1.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_emcji")
|
||||
draw_pass_1 = ExtResource("2_on0xa")
|
||||
|
||||
[node name="GPUParticlesCollisionBox3D" type="GPUParticlesCollisionBox3D" parent="." unique_id=813937432]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
|
||||
size = Vector3(12, 2, 12)
|
||||
@@ -0,0 +1,143 @@
|
||||
extends Node
|
||||
class_name AlienHordeManager
|
||||
|
||||
const CALCULATE_TARGET_FREQUENCY = 10
|
||||
const CALCULATE_DIRECTION_FREQUENCY = 10
|
||||
const CALCULATE_SCATTER_FREQUENCY = 5
|
||||
const CALCULATE_STATE_FREQUENCY = 5
|
||||
const ATTACK_DISTANCE = 10.
|
||||
const MECHA_ATTACK_DISTANCE = 5.
|
||||
const MAX_ALIEN_MECHA_AGGRO_DISTANCE = 100
|
||||
const ALIEN_RANDOM_SCALE = 0.3
|
||||
const MASTODONT_CHANCE = 0.01
|
||||
const MASTODONT_SCALE_FACTOR = 4.
|
||||
|
||||
@export var hex_map : HexMap
|
||||
@export var mecha : Mecha
|
||||
|
||||
@onready var multimeshes : Array[MultiMeshInstance3D] = [
|
||||
%RunningAlienMultiMesh,
|
||||
%AttackingAlienMultiMesh
|
||||
]
|
||||
@onready var targets : Array = hex_map.get_all_tiles_with_id("House")
|
||||
|
||||
var current_frame : int = 0
|
||||
|
||||
var alien_id_acc : int = 0
|
||||
|
||||
var aliens : Array[Alien] = []
|
||||
|
||||
func _physics_process(delta):
|
||||
current_frame += 1
|
||||
|
||||
for t in targets:
|
||||
if t is HouseHexTile:
|
||||
if t.destroyed:
|
||||
targets.erase(t)
|
||||
|
||||
# if current_frame % CALCULATE_CLUSTERS_FREQUENCY == 0:
|
||||
# calculate_clusters()
|
||||
|
||||
calculate_target()
|
||||
calculate_state()
|
||||
update_horde(delta)
|
||||
spawn_models(delta)
|
||||
|
||||
func spawn_alien(position : Vector3, rotation: float) -> Alien:
|
||||
var alien : Alien = Alien.new()
|
||||
alien.id = alien_id_acc
|
||||
alien.position = position
|
||||
alien.rotation.y = rotation
|
||||
var is_mastodont = randf() < MASTODONT_CHANCE
|
||||
alien.size = randf_range(1. - ALIEN_RANDOM_SCALE, 1. + ALIEN_RANDOM_SCALE) * (MASTODONT_SCALE_FACTOR if is_mastodont else 1.)
|
||||
alien.scale = Vector3.ONE * alien.size
|
||||
|
||||
add_child(alien)
|
||||
|
||||
aliens.append(alien)
|
||||
|
||||
alien.died.connect(
|
||||
func():
|
||||
aliens.erase(alien)
|
||||
)
|
||||
|
||||
|
||||
alien_id_acc += 1
|
||||
|
||||
return alien
|
||||
|
||||
func calculate_target():
|
||||
for alien in aliens:
|
||||
if (current_frame + alien.id)%CALCULATE_TARGET_FREQUENCY and alien.state != Alien.State.DEAD :
|
||||
if (
|
||||
len(targets) == 0
|
||||
or mecha.position.distance_to(alien.position) < alien.get_random().randf_range(0., MAX_ALIEN_MECHA_AGGRO_DISTANCE)
|
||||
):
|
||||
alien.target = mecha
|
||||
else :
|
||||
var old_target = alien.target
|
||||
alien.target = targets[alien.get_random().randi() % len(targets)]
|
||||
if old_target != alien.target:
|
||||
alien.state = Alien.State.RUNNING
|
||||
|
||||
|
||||
func calculate_state():
|
||||
for alien in aliens:
|
||||
if (current_frame + alien.id)%CALCULATE_STATE_FREQUENCY and alien.state != Alien.State.DEAD and alien.target:
|
||||
var target_attack_distance = MECHA_ATTACK_DISTANCE if alien.target is Mecha else ATTACK_DISTANCE
|
||||
alien.state = (
|
||||
Alien.State.RUNNING if alien.target.position.distance_to(alien.position) > target_attack_distance
|
||||
else Alien.State.ATTACKING
|
||||
)
|
||||
|
||||
func update_horde(delta):
|
||||
for alien in aliens:
|
||||
match alien.state:
|
||||
Alien.State.RUNNING:
|
||||
alien.move(
|
||||
delta,
|
||||
(current_frame + alien.id)%CALCULATE_DIRECTION_FREQUENCY,
|
||||
(current_frame + alien.id)%CALCULATE_SCATTER_FREQUENCY
|
||||
)
|
||||
Alien.State.ATTACKING:
|
||||
alien.attack_target(delta)
|
||||
|
||||
func alien_to_multimesh_id(alien : Alien) -> int:
|
||||
match alien.state:
|
||||
Alien.State.RUNNING:
|
||||
return 0
|
||||
Alien.State.ATTACKING:
|
||||
return 1
|
||||
_: return -1
|
||||
|
||||
func spawn_models(delta):
|
||||
|
||||
for m_id in range(len(multimeshes)):
|
||||
var multimesh = multimeshes[m_id].multimesh
|
||||
|
||||
multimesh.instance_count = len(aliens)
|
||||
|
||||
for i in range(len(aliens)):
|
||||
var alien = aliens[i]
|
||||
var is_current = m_id == alien_to_multimesh_id(alien)
|
||||
|
||||
multimesh.set_instance_transform(
|
||||
i,
|
||||
alien.transform.scaled(Vector3.ONE if is_current else Vector3.ZERO)
|
||||
)
|
||||
|
||||
if alien.damage_effect_last > 0:
|
||||
alien.damage_effect_last -= delta
|
||||
|
||||
multimesh.set_instance_custom_data(
|
||||
i,
|
||||
Color(
|
||||
alien.id,
|
||||
alien.damage_effect_last > 0,
|
||||
alien.size,
|
||||
0
|
||||
))
|
||||
multimesh.set_instance_color(i ,Color(alien.get_random().randi()%255,alien.get_random().randi()%255,alien.get_random().randi()%255))
|
||||
|
||||
func is_alien_alive(alien):
|
||||
return alien and alien is Alien and alien.hp > 0
|
||||
@@ -0,0 +1 @@
|
||||
uid://bsiixctjr7ml4
|
||||
@@ -0,0 +1,28 @@
|
||||
[gd_scene format=3 uid="uid://brr2idsr7qmpf"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://cgv8clg8y80on" path="res://entities/alien/assets/vat/running_alien_vat/alien_mesh.tres" id="1_0bggl"]
|
||||
[ext_resource type="Script" uid="uid://bsiixctjr7ml4" path="res://entities/alien/alien_horde_manager/alien_horde_manager.gd" id="1_hjbcl"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://chhggu10sxmuc" path="res://entities/alien/assets/vat/attacking_alien_vat/alien_mesh.tres" id="2_hjbcl"]
|
||||
|
||||
[sub_resource type="MultiMesh" id="MultiMesh_33mok"]
|
||||
transform_format = 1
|
||||
use_colors = true
|
||||
use_custom_data = true
|
||||
mesh = ExtResource("2_hjbcl")
|
||||
|
||||
[sub_resource type="MultiMesh" id="MultiMesh_tj3hn"]
|
||||
transform_format = 1
|
||||
use_colors = true
|
||||
use_custom_data = true
|
||||
mesh = ExtResource("1_0bggl")
|
||||
|
||||
[node name="AlienHordeManager" type="Node" unique_id=1604717993]
|
||||
script = ExtResource("1_hjbcl")
|
||||
|
||||
[node name="AttackingAlienMultiMesh" type="MultiMeshInstance3D" parent="." unique_id=1055420147]
|
||||
unique_name_in_owner = true
|
||||
multimesh = SubResource("MultiMesh_33mok")
|
||||
|
||||
[node name="RunningAlienMultiMesh" type="MultiMeshInstance3D" parent="." unique_id=245629817]
|
||||
unique_name_in_owner = true
|
||||
multimesh = SubResource("MultiMesh_tj3hn")
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,75 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cyjynungpt2a6"
|
||||
path="res://.godot/imported/alien_part.blend-3b5a9ff739e267fe3e3ee37a08e055a3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/3d/alien_part.blend"
|
||||
dest_files=["res://.godot/imported/alien_part.blend-3b5a9ff739e267fe3e3ee37a08e055a3.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"meshes": {
|
||||
"alien_part_Plane_002": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 20.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://entities/alien/assets/3d/alien_part.tres",
|
||||
"save_to_file/path": "uid://dbxb76bsurcoy"
|
||||
}
|
||||
}
|
||||
}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/vertex_colors=1
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/gpu_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
gltf/naming_version=2
|
||||
gltf/texture_map_mode=1
|
||||
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
[gd_resource type="ArrayMesh" format=4 uid="uid://667gyf6p35nw"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://41afldgohk0o" path="res://common/materials/default3d.tres" id="1_ndtte"]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_ndtte"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.875597, -0.4483304, -0.68256557, 1.751194, 1.2514424, 1.2417288),
|
||||
"format": 34359742465,
|
||||
"index_count": 102,
|
||||
"index_data": PackedByteArray("CQABAAIAAwABAAkAAAADAAkAAAAEAAMACQAMAAAAAAAFAAQADAAFAAAACgAMAAkAAgAKAAkABQAMAA0ACgANAAwACgAOAA0ABQANAA4AAgAPAAoAEAAOAAoAEAAKAA8ABQAOABAAAgARAA8AEAAPABEABQAQABIAEAARABIAEQATABIAFAASABMAEQAUABMAFAAFABIAAgAGABEAEQAGABQABgACAAcACAAGAAcABgALABQACwAGAAgABQAUAAsACwAIAAQABQALAAQA"),
|
||||
"lods": [0.7015672, PackedByteArray("CQABAAIAAwABAAkAAAADAAkAAAAEAAMAAgAKAAkACgAAAAkACgACAAYABgACAAcACgAFAAAACgAGAAUAAAAFAAQACAAGAAcABgALAAUACwAGAAgABQALAAQACwAIAAQA"), 1.0523508, PackedByteArray("AAABAAIAAwABAAAAAAAEAAMAAgAFAAAAAAAFAAQAAgAGAAUABQAGAAQABgACAAcABgAIAAQACAAGAAcA")],
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 21,
|
||||
"vertex_data": PackedByteArray("ISdgPwiTGr5SJQ8/2gkwu8CYTT/gi28+sCxlsxiS6j7A4Qc9WD6TuiCyRz5Agb0+eNEDMyj6Ir78ywo/8AUBM/xJ5b6uUCq/yAYav7B/QD78Mbg+vgkwO8CYTT/Yi28+fD2TOiCyRz5Agb0+xwYaP8B/QD4AMrg+SncBP4DqSTxQA5a+ICdgvwiTGr5SJQ8/tQk6P8iij7748Gs+tQk6P9TYvr4Au3C+dmqQPoiL5b5mRyq/YCOHsjjmwD44ErK+wPeaMfAN9b2evC6/S3cBv4DqSTxQA5a+dGqQvpCL5b52Ryq/tQk6v9jYvr4gu3C+tQk6v8iij7748Gs+")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[resource]
|
||||
resource_name = "alien_part_Plane_002"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.875597, -0.4483304, -0.68256557, 1.751194, 1.2514424, 1.2417288),
|
||||
"attribute_data": PackedByteArray("qFa/PjyPYT+oVr8+bMeHPqhWvz6Sn88+qFa/PsO5YD+oVr8+VoVhP6hWvz5MFyM/qFa/PmzHhz5C8Lg+VCp8P0LwuD6uI3w/QvC4PsEEUj9C8Lg+YD4SP0LwuD4MM1I/QvC4PsEEUj9C8Lg+YD4SP6hWvz5MFyM/qFa/PkWOIz+oVr8+PI9hP0LwuD4MM1I/QvC4PlQqfD+oVr8+RY4jP6hWvz4uv9E+qFa/PsuPYT+oVr8+y49hP6hWvz7gzmA/qFa/PhzSLD+oVr8+4M5gP6hWvz7Lj2E/qFa/PsuPYT8="),
|
||||
"format": 34359742487,
|
||||
"index_count": 102,
|
||||
"index_data": PackedByteArray("DgABAAIABQACAAYAAgAPAA4AAgAFABMAAgAUAA8AAgATABQAEwAFABUABQAQABUAEwAVABYAAwAVABAAAwAQAAQAFQAXABYAEwAWABcAFQADABcAGAAUABMAGAATABcAGAAPABQAAwAYABcAGAAZAA8AAwAZABgADwAZABoAAwAaABkAAAADAAQADwAaABsAAwAbABoAGwADAAAADwAbAA4ADgAbAAAABwAJABEACQAKABEABwAIAAkAEgAMAAgAEgALAAwADAALAA0A"),
|
||||
"lods": [0.7015672, PackedByteArray("DgABAAIAAgAPAA4ADwAAAA4ADwACAAUABQACAAYADwADAAAADwAFAAMAAAADAAQABQAQAAMAAwAQAAQABwAJABEACQAKABEABwAIAAkAEgAMAAgAEgALAAwADAALAA0A"), 1.0523508, PackedByteArray("AAABAAIAAgADAAAAAAADAAQAAwAFAAQAAgAFAAMABQACAAYABwAIAAkACQAKAAcACwAMAAgADAALAA0A")],
|
||||
"material": ExtResource("1_ndtte"),
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 28,
|
||||
"vertex_data": PackedByteArray("ISdgPwiTGr5SJQ8/2gkwu8CYTT/gi28+sCxlsxiS6j7A4Qc98AUBM/xJ5b6uUCq/eNEDMyj6Ir78ywo/yAYav7B/QD78Mbg+vgkwO8CYTT/Yi28+ISdgPwiTGr5SJQ8/eNEDMyj6Ir78ywo/WD6TuiCyRz5Agb0+2gkwu8CYTT/gi28+yAYav7B/QD78Mbg+fD2TOiCyRz5Agb0+vgkwO8CYTT/Yi28+xwYaP8B/QD4AMrg+SncBP4DqSTxQA5a+ICdgvwiTGr5SJQ8/xwYaP8B/QD4AMrg+ICdgvwiTGr5SJQ8/S3cBv4DqSTxQA5a+YCOHsjjmwD44ErK+tQk6v8iij7748Gs+tQk6v9jYvr4gu3C+dGqQvpCL5b52Ryq/wPeaMfAN9b2evC6/dmqQPoiL5b5mRyq/tQk6P9TYvr4Au3C+tQk6P8iij7748Gs+gMYlbv///z8Gvsu9////P4G2//////+/YbYAAP///7//f0FY////PwJSkLb///8/+EHLvf///z+AxiVu////P/9/QVj///8/wIBjov///z8Gvsu9////PwJSkLb///8/Pn9jov///z/4Qcu9////P/ytkLb///8/hth3zP///79+OSVu////P/ytkLb///8/fjklbv///z94J3fM////v6i0//////+/SyvGTf///79lK7xC////v6AuBx3///+/MNv//////79e0Qcd////v5nUvEL///+/s9TGTf///78=")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_ndtte")
|
||||
@@ -0,0 +1,29 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://b48t0vv053qrt"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://gjx57s1ye44t" path="res://entities/alien/assets/shader/vat.gdshader" id="1_nk817"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmyt23s5n76ak" path="res://entities/alien/assets/textures/alien_base_color.png" id="2_a2hb3"]
|
||||
[ext_resource type="Texture2D" uid="uid://4peb6wokfoyu" path="res://entities/alien/assets/textures/alien_normal.png" id="3_7iaoq"]
|
||||
[ext_resource type="Texture2D" uid="uid://cbjj8cusm385o" path="res://entities/alien/assets/vat/attacking_alien_vat/Alien_vat.exr" id="4_nk817"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_nk817")
|
||||
shader_parameter/vertex_animation_texture = ExtResource("4_nk817")
|
||||
shader_parameter/min_bounds = Vector3(-0.2, -0.8, -0.4)
|
||||
shader_parameter/max_bounds = Vector3(1, 2.2, 4.9)
|
||||
shader_parameter/autoplay = true
|
||||
shader_parameter/autoplay_speed = 30.0
|
||||
shader_parameter/frame = 12.0
|
||||
shader_parameter/use_uv_1 = false
|
||||
shader_parameter/cull_mode = 0
|
||||
shader_parameter/albedo_map = ExtResource("2_a2hb3")
|
||||
shader_parameter/albedo_tint = Color(1, 1, 1, 1)
|
||||
shader_parameter/occlusion_channel = Color(1, 0, 0, 1)
|
||||
shader_parameter/occlusion = 1.0
|
||||
shader_parameter/roughness_channel = Color(0, 1, 0, 1)
|
||||
shader_parameter/roughness = 1.0
|
||||
shader_parameter/metallic_channel = Color(0, 0, 1, 1)
|
||||
shader_parameter/metallic = 1.0
|
||||
shader_parameter/specular = 0.5
|
||||
shader_parameter/normal_map = ExtResource("3_7iaoq")
|
||||
shader_parameter/normal_map_scale = 1.0
|
||||
@@ -0,0 +1,29 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://b7o0pgg1fweqq"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://gjx57s1ye44t" path="res://entities/alien/assets/shader/vat.gdshader" id="1_ig0tm"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmyt23s5n76ak" path="res://entities/alien/assets/textures/alien_base_color.png" id="2_cxjnj"]
|
||||
[ext_resource type="Texture2D" uid="uid://4peb6wokfoyu" path="res://entities/alien/assets/textures/alien_normal.png" id="3_1leus"]
|
||||
[ext_resource type="Texture2D" uid="uid://cxy6bh1jymqsk" path="res://entities/alien/assets/vat/running_alien_vat/Alien_vat.exr" id="3_ig0tm"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_ig0tm")
|
||||
shader_parameter/vertex_animation_texture = ExtResource("3_ig0tm")
|
||||
shader_parameter/min_bounds = Vector3(-0.2, -2, -0.9)
|
||||
shader_parameter/max_bounds = Vector3(0.1, 3.4, 1.1)
|
||||
shader_parameter/autoplay = true
|
||||
shader_parameter/autoplay_speed = 30.0
|
||||
shader_parameter/frame = 12.0
|
||||
shader_parameter/use_uv_1 = false
|
||||
shader_parameter/cull_mode = 0
|
||||
shader_parameter/albedo_map = ExtResource("2_cxjnj")
|
||||
shader_parameter/albedo_tint = Color(1, 1, 1, 1)
|
||||
shader_parameter/occlusion_channel = Color(1, 0, 0, 1)
|
||||
shader_parameter/occlusion = 1.0
|
||||
shader_parameter/roughness_channel = Color(0, 1, 0, 1)
|
||||
shader_parameter/roughness = 1.0
|
||||
shader_parameter/metallic_channel = Color(0, 0, 1, 1)
|
||||
shader_parameter/metallic = 1.0
|
||||
shader_parameter/specular = 0.5
|
||||
shader_parameter/normal_map = ExtResource("3_1leus")
|
||||
shader_parameter/normal_map_scale = 1.0
|
||||
@@ -0,0 +1,169 @@
|
||||
// Shader stolen here : https://godotshaders.com/shader/vertex-animation-texture-uses-openvat-output/
|
||||
shader_type spatial;
|
||||
render_mode cull_disabled; // Prevents GPU hardware culling so shader can handle it
|
||||
/*
|
||||
For use with models exported from Blender using the OpenVAT plugin.
|
||||
Expects:
|
||||
Vertex Normals - Packed (Math gets too complex to include a toggle. Making a separate shader recommended if normals are not needed.)
|
||||
Use Single Row - On
|
||||
Export Model - On
|
||||
Model Format - glTF Binary. (Unsure why the otherse do not work)
|
||||
|
||||
Ensure .exr file is set to Lossless compression and MipMaps - Off.
|
||||
*/
|
||||
|
||||
// --- Uniforms ---
|
||||
group_uniforms openVAT_inputs;
|
||||
/** OpenVAT texture exported from Blender plugin. */
|
||||
uniform sampler2D vertex_animation_texture : repeat_disable;
|
||||
/** Min values from the .json file included with OpenVAT exports. */
|
||||
uniform vec3 min_bounds;
|
||||
/** Max values from the .json file included with OpenVAT exports. */
|
||||
uniform vec3 max_bounds;
|
||||
/** Plays animation automatically. Turn off to control manually via keyframes. */
|
||||
uniform bool autoplay = true;
|
||||
/**
|
||||
Autoplay speed in frames per second. Defaults to 30.
|
||||
[b]Blender default is 24. May require adjustment either in Blender or Here to match speed.[b]
|
||||
*/
|
||||
uniform float autoplay_speed = 30.0;
|
||||
/** Frame to display if animating manually. */
|
||||
uniform float frame = 1.0;
|
||||
|
||||
/** Enable this if the asset does not have 2 UV sets. */
|
||||
uniform bool use_uv_1 = false;
|
||||
/** Cull Mode, editable here for flexibility.
|
||||
0: Backface Cull
|
||||
1: Frontface Cull
|
||||
2: Cull disabled (double sided rendering)*/
|
||||
uniform int cull_mode : hint_enum("Back:0", "Front:1", "Disabled:2") = 0;
|
||||
group_uniforms;
|
||||
|
||||
group_uniforms Albedo_map;
|
||||
uniform sampler2D albedo_map : source_color, hint_default_white;
|
||||
uniform vec4 albedo_tint : source_color = vec4(1.0);
|
||||
group_uniforms;
|
||||
|
||||
group_uniforms ORM_inputs;
|
||||
/**
|
||||
[b]ORM texture.[/b] Standardized detail maps for PBR materials. Ignore, remap, or remove as needed.
|
||||
[b]O[/b]cclusion (Ambient)
|
||||
[b]R[/b]oughness
|
||||
[b]M[/b]etallic
|
||||
*/
|
||||
uniform sampler2D orm_map : hint_default_white;
|
||||
/** Select channel used by Occlusion map. R G [b]or[/b] B, combining will have strange results */
|
||||
uniform vec4 occlusion_channel : source_color = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
/** Strength of Occlusion*/
|
||||
uniform float occlusion : hint_range(0.0, 1.0) = 1.0;
|
||||
/** Select channel used by Roughness map. R G [b]or[/b] B, combining will have strange results */
|
||||
uniform vec4 roughness_channel : source_color = vec4(0.0, 1.0, 0.0, 1.0);
|
||||
/** Strength of Roughness*/
|
||||
uniform float roughness : hint_range(0.0, 1.0) = 1.0;
|
||||
/** Select channel used by Metallic map. R G [b]or[/b] B, combining will have strange results */
|
||||
uniform vec4 metallic_channel : source_color = vec4(0.0, 0.0, 1.0, 1.0);
|
||||
/** Strength of Metallic*/
|
||||
uniform float metallic : hint_range(0.0, 1.0) = 1.0;
|
||||
/** Strength of Specular (No Map Included)*/
|
||||
uniform float specular : hint_range(0.0, 1.0) = 0.5;
|
||||
group_uniforms;
|
||||
|
||||
group_uniforms Normal_map;
|
||||
uniform sampler2D normal_map : hint_roughness_normal;
|
||||
uniform float normal_map_scale : hint_range(-10.0, 10.0) = 1.0;
|
||||
|
||||
/** Passed data from INSTANCE_CUSTOM_VARIABLE :
|
||||
x : Unique Id
|
||||
y : Damage effect
|
||||
z : Size
|
||||
**/
|
||||
|
||||
varying flat float unique_id;
|
||||
varying flat float damage_effect;
|
||||
varying flat float size;
|
||||
|
||||
float remapFloat(float value, float input_min, float input_max, float output_min, float output_max){
|
||||
// Code to replicate the remap feature from Visual Shader.
|
||||
float _input_range = input_max - input_min;
|
||||
float _output_range = output_max - output_min;
|
||||
return output_min + _output_range * ((value - input_min) / _input_range);
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
unique_id = INSTANCE_CUSTOM.x;
|
||||
damage_effect = INSTANCE_CUSTOM.y;
|
||||
size = INSTANCE_CUSTOM.z;
|
||||
|
||||
// Animation Timing
|
||||
// ------
|
||||
// Divided by 2. since bottom half of texture is the normal data.
|
||||
// Second argument (0) is MipMap level. These VATs use no mipmaps so always 0.
|
||||
int total_frames = textureSize(vertex_animation_texture, 0).y / 2;
|
||||
// Checks if Autoplaying is checked
|
||||
float play_frame = autoplay ? (TIME * autoplay_speed / size) : frame;
|
||||
|
||||
|
||||
// Loops the current frame counter so it stays between 0 and total_frames - 1
|
||||
float current_frame = mod(play_frame + unique_id, float(total_frames));
|
||||
|
||||
// Compute UV Coordinates
|
||||
// ------
|
||||
// samples pixel from the center, not the edge. Avoid unwanted bleeding into normal data pixels at the end of the loop.
|
||||
float center_pixel = current_frame - 0.5;
|
||||
float vat_y = center_pixel / float(total_frames);
|
||||
vat_y = clamp(vat_y * 0.5, 0.0, 0.5);
|
||||
|
||||
vec2 vat_uv = vec2((use_uv_1 ? UV.x : UV2.x), vat_y);
|
||||
|
||||
// Vertex Position Displacement
|
||||
// ------
|
||||
vec4 vat_pos_raw = texture(vertex_animation_texture, vat_uv);
|
||||
// Must go through some remapping to convert Blender to Godot coordinates
|
||||
vec3 offset_values = vec3(
|
||||
remapFloat(vat_pos_raw.r, 0.0, 1.0, min_bounds.x, max_bounds.x),
|
||||
remapFloat(vat_pos_raw.b, 0.0, 1.0, min_bounds.z, max_bounds.z),
|
||||
remapFloat(vat_pos_raw.g, 1.0, 0.0, min_bounds.y, max_bounds.y)
|
||||
);
|
||||
VERTEX += offset_values;
|
||||
|
||||
// Normals. 0.5 added to UV.y to shift it down by 1/2 the map - to the normals section.
|
||||
vec4 vat_norm_raw = texture(vertex_animation_texture, vat_uv + vec2(0.0, 0.5));
|
||||
vec3 decoded_normals = vec3(
|
||||
remapFloat(vat_norm_raw.r, 0.0, 1.0, -1.0, 1.0),
|
||||
remapFloat(vat_norm_raw.b, 0.0, 1.0, -1.0, 1.0),
|
||||
remapFloat(vat_norm_raw.g, 1.0, 0.0, -1.0, 1.0)
|
||||
);
|
||||
NORMAL = normalize(decoded_normals);
|
||||
|
||||
// Calculate Tangent and Binormal from computed Normal
|
||||
TANGENT = normalize(vec3(abs(NORMAL.y) + abs(NORMAL.z), 0.0, -abs(NORMAL.x)));
|
||||
BINORMAL = normalize(vec3(0.0, abs(NORMAL.x) + abs(NORMAL.z), -abs(NORMAL.y)));
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// Cull Mode
|
||||
if (cull_mode == 0 && !FRONT_FACING) {
|
||||
discard; // Cull back faces
|
||||
}
|
||||
else if (cull_mode == 1 && FRONT_FACING) {
|
||||
discard; // Cull front faces
|
||||
}
|
||||
|
||||
// Albedo
|
||||
ALBEDO = texture(albedo_map, UV).rgb * albedo_tint.rgb;
|
||||
|
||||
EMISSION = vec3(1.,1.,1.) * damage_effect;
|
||||
|
||||
// ORM maps (Occlusion, Roughness, Metallic) Packing
|
||||
vec4 orm_tex = texture(orm_map, UV);
|
||||
AO = occlusion * dot(orm_tex.rgb, occlusion_channel.rgb);
|
||||
ROUGHNESS = roughness * dot(orm_tex.rgb, roughness_channel.rgb);
|
||||
METALLIC = metallic * dot(orm_tex.rgb, metallic_channel.rgb);
|
||||
|
||||
// Specular
|
||||
SPECULAR = specular;
|
||||
|
||||
// Normal Map
|
||||
NORMAL_MAP = texture(normal_map, UV).rgb;
|
||||
NORMAL_MAP_DEPTH = normal_map_scale;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://gjx57s1ye44t
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 94 KiB |
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmyt23s5n76ak"
|
||||
path.s3tc="res://.godot/imported/alien_base_color.png-86b98d00ab0dc2f32c9eec134715ed52.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/textures/alien_base_color.png"
|
||||
dest_files=["res://.godot/imported/alien_base_color.png-86b98d00ab0dc2f32c9eec134715ed52.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://4peb6wokfoyu"
|
||||
path.s3tc="res://.godot/imported/alien_normal.png-1cf9a8467a6c91a4f9725d4eaacfcf3f.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/textures/alien_normal.png"
|
||||
dest_files=["res://.godot/imported/alien_normal.png-1cf9a8467a6c91a4f9725d4eaacfcf3f.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=1
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=1
|
||||
roughness/src_normal="res://entities/alien/assets/textures/alien_normal.png"
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="79.375mm"
|
||||
height="79.375mm"
|
||||
viewBox="0 0 79.375 79.375"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
sodipodi:docname="stain.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="2.2375049"
|
||||
inkscape:cx="130.27904"
|
||||
inkscape:cy="161.78736"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
|
||||
d="M 38.600507,23.826755 C 33.435229,26.617406 23.967905,12.705978 24.302365,13.542127 c 0.334459,0.836148 5.450332,11.19757 3.488055,12.308192 -3.353618,1.898103 -18.037041,-10.71951 -18.037041,-10.71951 0,0 7.412537,9.636789 5.68581,14.548987 -1.130403,3.215773 -8.863175,5.100506 -8.863175,5.100506 0,0 9.071694,-1.522301 10.869932,1.672296 2.071801,3.680585 -4.849662,11.706082 -4.849662,11.706082 0,0 12.541637,-4.879053 15.30152,-0.585304 2.379106,3.701344 -5.936656,11.789697 -5.936656,11.789697 0,0 9.269778,-8.334192 13.766893,-6.103886 5.414476,2.685263 4.180743,17.642735 4.180743,17.642735 0,0 0.304675,-12.335049 4.962837,-14.130912 8.343511,-3.216675 23.579391,12.793076 23.579391,12.793076 0,0 -16.366284,-17.953012 -14.381755,-20.820102 1.468454,-2.121506 11.873309,3.260979 12.709459,3.428209 0.836149,0.16723 -5.713781,-3.30117 -5.184122,-5.853039 0.562559,-2.710379 7.525337,-3.511825 7.525337,-3.511825 0,0 -9.290842,-1.681472 -9.699323,-5.351351 -0.659584,-5.925848 13.378378,-11.873311 13.378378,-11.873311 0,0 -15.447192,6.786266 -17.057432,4.766048 -1.251294,-1.569883 12.040541,-8.612332 12.040541,-8.612332 0,0 -8.720738,4.194812 -12.124156,1.923143 -3.266774,-2.180465 -2.759291,-11.455237 -2.759291,-11.455237 0,0 -2.332874,6.07263 -5.016891,6.354729 -4.251764,0.446876 -9.866554,-8.194256 -9.866554,-8.194256 0,0 4.537013,11.326998 0.585304,13.461993 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="asscacacacacacssacacscacaca" />
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
|
||||
d="m 19.680232,16.465199 c 0.896728,4.593961 3.477795,7.479963 3.341915,2.902904 -0.05403,-1.819945 -3.341915,-2.902904 -3.341915,-2.902904 z"
|
||||
id="path2"
|
||||
sodipodi:nodetypes="czc" />
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
|
||||
d="m 59.353071,52.958861 c -1.811385,2.713194 7.483347,6.307322 7.483347,6.307322 -1.359715,-1.888021 -6.479923,-7.810307 -7.483347,-6.307322 z"
|
||||
id="path3"
|
||||
sodipodi:nodetypes="scs" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ci1qyjgjvtpbj"
|
||||
path.s3tc="res://.godot/imported/stain.svg-f2fdcdf42fafc92b5172e9a1b9c7292d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/textures/stain.svg"
|
||||
dest_files=["res://.godot/imported/stain.svg-f2fdcdf42fafc92b5172e9a1b9c7292d.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"os-remap": {
|
||||
"Min": [
|
||||
-0.2,
|
||||
-0.8,
|
||||
-0.4
|
||||
],
|
||||
"Max": [
|
||||
1.0,
|
||||
2.2,
|
||||
4.9
|
||||
],
|
||||
"Frames": 12
|
||||
},
|
||||
"animations": {}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,63 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://blpvoauvdf700"
|
||||
path="res://.godot/imported/Alien.glb-d7449a099f5202e69c28d18dd7bdda8c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/attacking_alien_vat/Alien.glb"
|
||||
dest_files=["res://.godot/imported/Alien.glb-d7449a099f5202e69c28d18dd7bdda8c.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"@MATERIAL:0": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "uid://b48t0vv053qrt"
|
||||
}
|
||||
},
|
||||
"meshes": {
|
||||
"Alien_Alien_mesh": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 20.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://entities/alien/assets/vat/attacking_alien_vat/alien_mesh.tres",
|
||||
"save_to_file/path": "uid://dmkpueem7h3gg"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
Binary file not shown.
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cbjj8cusm385o"
|
||||
path="res://.godot/imported/Alien_vat.exr-0e18ace1cc9af2d3f2eab97c0bf74649.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/attacking_alien_vat/Alien_vat.exr"
|
||||
dest_files=["res://.godot/imported/Alien_vat.exr-0e18ace1cc9af2d3f2eab97c0bf74649.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"os-remap": {
|
||||
"Min": [
|
||||
-0.2,
|
||||
-2.0,
|
||||
-0.9
|
||||
],
|
||||
"Max": [
|
||||
0.1,
|
||||
3.4,
|
||||
1.1
|
||||
],
|
||||
"Frames": 12
|
||||
},
|
||||
"animations": {}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,63 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://c8b280nh1i42w"
|
||||
path="res://.godot/imported/Alien.glb-fad778d224a52bd474cfd3984bcf01f5.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/running_alien_vat/Alien.glb"
|
||||
dest_files=["res://.godot/imported/Alien.glb-fad778d224a52bd474cfd3984bcf01f5.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"@MATERIAL:0": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "uid://b7o0pgg1fweqq"
|
||||
}
|
||||
},
|
||||
"meshes": {
|
||||
"Alien_Alien_mesh_001": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 20.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://entities/alien/assets/vat/running_alien_vat/alien_mesh.tres",
|
||||
"save_to_file/path": "uid://cgv8clg8y80on"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
Binary file not shown.
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cxy6bh1jymqsk"
|
||||
path="res://.godot/imported/Alien_vat.exr-412e4d42f972d99628cc1bff26b09e66.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/running_alien_vat/Alien_vat.exr"
|
||||
dest_files=["res://.godot/imported/Alien_vat.exr-412e4d42f972d99628cc1bff26b09e66.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user