Compare commits

...

8 Commits

Author SHA1 Message Date
scorpion21211-cmd 052798f8d4 fucking around with player script
nothing changed really
2026-10-10 18:08:19 -04:00
scorpion21211-cmd 4d94b62ea3 just messing around
added a couple props, will need to reupload latest batch so didnt go crazy
2026-10-10 01:06:43 -04:00
scorpion21211-cmd 369a0e2b52 Arcology Update
updated textures and collision on Young Arcology
2026-10-10 00:39:35 -04:00
scorpion21211-cmd 84e22fe12e test planets
open source planets and satellites provided
2026-10-09 23:35:02 -04:00
scorpion21211-cmd 13bbef255a Update kestrel_driver.gd
gear and FX fixed!!!!
2026-10-08 21:58:16 -04:00
scorpion21211-cmd 24a30fd4f4 minor test and object placement change
minor test
2026-10-08 17:30:49 -04:00
scorpion21211-cmd fa7bbacb22 Particle FX fix
particles on kestrel are working, landing gear and hatch animations are not
2026-10-08 00:46:40 -04:00
scorpion21211-cmd 3bf5338ede models added to game
all models are added to the main scene to look at and compare size
2026-10-05 23:03:01 -04:00
158 changed files with 12082 additions and 9659 deletions
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://ditcckm4p6trr"]
[ext_resource type="PackedScene" uid="uid://bxu7kvlou3p6a" path="res://planets_whatnot/earth.glb" id="1_vtalr"]
[node name="Node3D" type="Node3D" unique_id=343978544]
[node name="earth" parent="." unique_id=1567940005 instance=ExtResource("1_vtalr")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://copsfu6pmpnuu"]
[ext_resource type="PackedScene" uid="uid://dfw2nwijt2v1f" path="res://planets_whatnot/SM_Jupiter.glb" id="1_jmycg"]
[node name="Node3D" type="Node3D" unique_id=1895679827]
[node name="SM_Jupiter2" parent="." unique_id=1950196769 instance=ExtResource("1_jmycg")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://bnj0kiimhmp0w"]
[ext_resource type="PackedScene" uid="uid://cnkgiutgow12k" path="res://planets_whatnot/SM_Mercury.glb" id="1_bevoa"]
[node name="Node3D" type="Node3D" unique_id=1538303107]
[node name="SM_Mercury2" parent="." unique_id=2094884334 instance=ExtResource("1_bevoa")]
+156 -87
View File
@@ -10,11 +10,12 @@ extends CharacterBody3D
@onready var pause_menu: Control = get_node_or_null("/root/Node3D/HUD/PauseMenu") @onready var pause_menu: Control = get_node_or_null("/root/Node3D/HUD/PauseMenu")
@onready var body_collision: CollisionShape3D = get_node_or_null("CollisionShape3D") @onready var body_collision: CollisionShape3D = get_node_or_null("CollisionShape3D")
@onready var flight_label: Label = get_node_or_null("/root/Node3D/HUD/FlightLabel") @onready var flight_label: Label = get_node_or_null("/root/Node3D/HUD/FlightLabel")
@onready var kestrel: Node3D = get_node_or_null("Kestrel") @onready var kestrel: Node3D = get_node_or_null("kestrel_body")
var player_inside: bool = false var player_inside: bool = false
var player_ref: CharacterBody3D = null var player_ref: CharacterBody3D = null
var using_third_person: bool = false var using_third_person: bool = false
var f_was_down: bool = false
var mass: float = 6500.0 var mass: float = 6500.0
var thrust_force: float = 180000.0 var thrust_force: float = 180000.0
@@ -63,12 +64,12 @@ var _hatch_crew_open: bool = false
var _hatch_dock_open: bool = false var _hatch_dock_open: bool = false
var _ladder_out: bool = false var _ladder_out: bool = false
var _cabin_dim: bool = false var _cabin_dim: bool = false
var _thrust_input: float = 0.0 var _instruments_on: bool = false
var _v_was: bool = false
func _ready() -> void: func _ready() -> void:
GameplayInput.command_requested.connect(_handle_vehicle_command) _ensure_actions()
GameplayInput.transient_input_cleared.connect(_clear_vehicle_input)
if interaction_area: if interaction_area:
interaction_area.monitoring = true interaction_area.monitoring = true
interaction_area.monitorable = true interaction_area.monitorable = true
@@ -92,14 +93,31 @@ func _ready() -> void:
call_deferred("_update_crust_exception") call_deferred("_update_crust_exception")
var _hull_driver: Node = null
func _bind_kestrel() -> void: func _bind_kestrel() -> void:
if kestrel == null: if kestrel == null:
kestrel = get_node_or_null("Kestrel") for name in ["kestrel_body", "Kestrel", "KestrelBody"]:
print("Kestrel hull=", kestrel, " driver=", kestrel.get_script() if kestrel else null) kestrel = get_node_or_null(name) as Node3D
if kestrel:
break
if kestrel == null:
for c in find_children("*", "Node", true, false):
if "abort_burn" in c and "gear_deploy" in c:
kestrel = c as Node3D
break
_hull_driver = kestrel
if kestrel and not ("abort_burn" in kestrel):
for c in kestrel.find_children("*", "Node", true, false):
if "abort_burn" in c and "gear_deploy" in c:
_hull_driver = c
break
print("Kestrel hull=", kestrel, " driver=", _hull_driver)
func _hull() -> Node: func _hull() -> Node:
return kestrel if kestrel else null return _hull_driver if _hull_driver else kestrel
func _set_hull(prop: String, value: Variant) -> void: func _set_hull(prop: String, value: Variant) -> void:
@@ -108,6 +126,16 @@ func _set_hull(prop: String, value: Variant) -> void:
h.set(prop, value) h.set(prop, value)
func _drive_hull(thrusting: bool, pitch: float, yaw: float, roll: float) -> void:
_set_hull("abort_burn", thrusting)
_set_hull("att_pitch", pitch)
_set_hull("att_yaw", yaw)
_set_hull("att_roll", roll)
var h := _hull()
if h and h.has_method("drive"):
h.drive(thrusting, pitch, yaw, roll)
func _moon() -> Node3D: func _moon() -> Node3D:
return get_node_or_null("/root/Node3D/SolarSystem/Moon") as Node3D return get_node_or_null("/root/Node3D/SolarSystem/Moon") as Node3D
@@ -193,7 +221,7 @@ func _gravity_accel() -> Vector3:
func _update_telemetry() -> void: func _update_telemetry() -> void:
telem_speed = velocity.length() telem_speed = velocity.length()
telem_thrust = _thrust_input > 0.0 telem_thrust = Input.is_key_pressed(KEY_SPACE)
var earth := _earth() var earth := _earth()
if earth: if earth:
telem_earth_rng = maxf(0.0, global_position.distance_to(earth.global_position) - EARTH_RADIUS) telem_earth_rng = maxf(0.0, global_position.distance_to(earth.global_position) - EARTH_RADIUS)
@@ -262,7 +290,7 @@ func _on_body_entered(body: Node3D) -> void:
if body.is_in_group("player"): if body.is_in_group("player"):
player_ref = body player_ref = body
if interact_prompt and not player_inside: if interact_prompt and not player_inside:
interact_prompt.text = "[%s] Enter" % GameplayInput.binding_label(&"interact") interact_prompt.text = "Press F to Enter"
interact_prompt.visible = true interact_prompt.visible = true
@@ -273,61 +301,104 @@ func _on_body_exited(body: Node3D) -> void:
interact_prompt.visible = false interact_prompt.visible = false
## Handles semantic vehicle commands; proximity permits entry only on foot. func _unhandled_input(event: InputEvent) -> void:
func _handle_vehicle_command(action: StringName, command_context: int) -> void: if not player_inside:
if command_context != GameplayInput.context:
return return
if action == &"interact": if event.is_action_pressed("ui_cancel"):
if player_inside: if pause_menu and pause_menu.has_method("open_pause") and player_ref:
exit_capsule() pause_menu.open_pause(player_ref)
elif player_ref and interaction_area.overlaps_body(player_ref) and GameplayInput.context == GameplayInput.Context.ON_FOOT: get_viewport().set_input_as_handled()
enter_capsule()
return return
if not player_inside or GameplayInput.context != GameplayInput.Context.VEHICLE: if _event_toggles(event, "capsule_gear", KEY_G):
return
match action:
&"toggle_view":
toggle_camera()
&"vehicle_toggle_gear":
_gear_down = not _gear_down _gear_down = not _gear_down
_set_hull("gear_deploy", 1.0 if _gear_down else 0.0) _set_hull("gear_deploy", 1.0 if _gear_down else 0.0)
&"vehicle_toggle_crew_hatch": get_viewport().set_input_as_handled()
elif _event_toggles(event, "capsule_hatch_crew", KEY_H):
_hatch_crew_open = not _hatch_crew_open _hatch_crew_open = not _hatch_crew_open
_set_hull("hatch_crew_open", 1.0 if _hatch_crew_open else 0.0) _set_hull("hatch_crew_open", 1.0 if _hatch_crew_open else 0.0)
&"vehicle_toggle_dock_hatch": get_viewport().set_input_as_handled()
elif _event_toggles(event, "capsule_hatch_dock", KEY_J):
_hatch_dock_open = not _hatch_dock_open _hatch_dock_open = not _hatch_dock_open
_set_hull("hatch_dock_open", 1.0 if _hatch_dock_open else 0.0) _set_hull("hatch_dock_open", 1.0 if _hatch_dock_open else 0.0)
&"capsule_toggle_ladder": get_viewport().set_input_as_handled()
elif _event_toggles(event, "capsule_ladder", KEY_L):
_ladder_out = not _ladder_out _ladder_out = not _ladder_out
_set_hull("hatch_ladder_deploy", 1.0 if _ladder_out else 0.0) _set_hull("hatch_ladder_deploy", 1.0 if _ladder_out else 0.0)
&"vehicle_activate_instruments": get_viewport().set_input_as_handled()
_set_hull("instruments_demo", 1.0) elif _event_toggles(event, "capsule_instruments", KEY_I):
&"vehicle_toggle_cabin_lights": _instruments_on = not _instruments_on
_set_hull("instruments_demo", 1.0 if _instruments_on else 0.35)
get_viewport().set_input_as_handled()
elif _event_toggles(event, "capsule_cabin_light", KEY_K):
_cabin_dim = not _cabin_dim _cabin_dim = not _cabin_dim
_set_hull("cabin_dim", _cabin_dim) _set_hull("cabin_dim", _cabin_dim)
get_viewport().set_input_as_handled()
## Clears held cockpit look and visual thrust on menus, handoffs, or focus loss. func _ensure_actions() -> void:
func _clear_vehicle_input() -> void: var binds := {
free_look = false "interact": KEY_F,
cockpit_yaw = 0.0 "toggle_first_person": KEY_V,
cockpit_pitch = 0.0 "capsule_gear": KEY_G,
_thrust_input = 0.0 "capsule_hatch_crew": KEY_H,
if player_inside: "capsule_hatch_dock": KEY_J,
_set_hull("abort_burn", false) "capsule_ladder": KEY_L,
_set_hull("att_pitch", 0.0) "capsule_instruments": KEY_I,
_set_hull("att_yaw", 0.0) "capsule_cabin_light": KEY_K,
_set_hull("att_roll", 0.0) }
for action in binds.keys():
if InputMap.has_action(action):
continue
InputMap.add_action(action)
var ev := InputEventKey.new()
ev.physical_keycode = binds[action]
InputMap.action_add_event(action, ev)
func _event_toggles(event: InputEvent, action: String, key: Key) -> bool:
if InputMap.has_action(action) and event.is_action_pressed(action):
return true
if event is InputEventKey and event.pressed and not event.echo and event.physical_keycode == key:
return true
return false
func _act_pressed(action: String) -> bool:
return InputMap.has_action(action) and Input.is_action_pressed(action)
func _act_just(action: String) -> bool:
return InputMap.has_action(action) and Input.is_action_just_pressed(action)
## Updates active vehicle input/cameras while retaining the original flight timing.
func _process(delta: float) -> void: func _process(delta: float) -> void:
var interact_now := _act_just("interact") or _just_key(KEY_F)
if not player_inside and player_ref and interact_now:
f_was_down = true
enter_capsule()
return
if not player_inside: if not player_inside:
if player_ref and interact_prompt: f_was_down = Input.is_physical_key_pressed(KEY_F)
interact_prompt.text = "[%s] Enter" % GameplayInput.binding_label(&"interact")
_update_crust_exception() _update_crust_exception()
return return
_update_vehicle_look(delta) if interact_now and not f_was_down:
f_was_down = true
exit_capsule()
return
f_was_down = _act_pressed("interact") or Input.is_physical_key_pressed(KEY_F)
if _act_just("toggle_first_person"):
toggle_camera()
elif not InputMap.has_action("toggle_first_person") and _just_key(KEY_V):
toggle_camera()
var was_free = free_look
free_look = Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)
if was_free and not free_look and not using_third_person:
cockpit_yaw = 0.0
cockpit_pitch = 0.0
if Input.is_key_pressed(KEY_ALT):
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
handle_flight(delta) handle_flight(delta)
_update_telemetry() _update_telemetry()
_update_flight_hud() _update_flight_hud()
@@ -341,38 +412,30 @@ func _process(delta: float) -> void:
capsule_camera.make_current() capsule_camera.make_current()
## Updates cockpit/orbit look without letting menu input reach the vehicle camera. func _just_key(key: Key) -> bool:
func _update_vehicle_look(delta: float) -> void: var down := Input.is_physical_key_pressed(key)
var cursor_released := GameplayInput.is_held(&"vehicle_release_cursor") if key == KEY_V:
if GameplayInput.gameplay_enabled(): var edge := down and not _v_was
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if cursor_released else Input.MOUSE_MODE_CAPTURED _v_was = down
var previous_freelook := free_look return edge
free_look = GameplayInput.is_held(&"vehicle_freelook") return false
if previous_freelook and not free_look and not using_third_person:
cockpit_yaw = 0.0
cockpit_pitch = 0.0 func _input(event: InputEvent) -> void:
var mouse_displacement := GameplayInput.consume_mouse_displacement() if not player_inside:
if cursor_released:
return return
var mouse_turn := mouse_displacement * look_sensitivity if Input.is_key_pressed(KEY_ALT):
var controller_turn := GameplayInput.read_controller_look(delta) return
if event is InputEventMouseMotion:
if using_third_person: if using_third_person:
_apply_vehicle_look(mouse_turn + controller_turn) orbit_yaw -= event.relative.x * look_sensitivity
else: orbit_pitch += event.relative.y * look_sensitivity
_apply_vehicle_look((mouse_turn if free_look else Vector2.ZERO) + controller_turn)
## Applies angular displacement in radians while preserving existing camera limits.
func _apply_vehicle_look(look_delta: Vector2) -> void:
if using_third_person:
orbit_yaw -= look_delta.x
orbit_pitch += look_delta.y
orbit_pitch = clampf(orbit_pitch, orbit_pitch_min, orbit_pitch_max) orbit_pitch = clampf(orbit_pitch, orbit_pitch_min, orbit_pitch_max)
else: elif free_look:
cockpit_yaw -= look_delta.x cockpit_yaw -= event.relative.x * look_sensitivity
cockpit_pitch -= look_delta.y cockpit_pitch -= event.relative.y * look_sensitivity
cockpit_yaw = clampf(cockpit_yaw, -cockpit_look_limit_yaw, cockpit_look_limit_yaw) cockpit_yaw = clamp(cockpit_yaw, -cockpit_look_limit_yaw, cockpit_look_limit_yaw)
cockpit_pitch = clampf(cockpit_pitch, -cockpit_look_limit_down, cockpit_look_limit_up) cockpit_pitch = clamp(cockpit_pitch, -cockpit_look_limit_down, cockpit_look_limit_up)
func enter_capsule() -> void: func enter_capsule() -> void:
@@ -402,6 +465,7 @@ func enter_capsule() -> void:
orbit_yaw = 0.0 orbit_yaw = 0.0
orbit_pitch = 0.4 orbit_pitch = 0.4
using_third_person = false using_third_person = false
f_was_down = true
free_look = false free_look = false
if camera_pivot: if camera_pivot:
camera_pivot.top_level = false camera_pivot.top_level = false
@@ -419,7 +483,6 @@ func enter_capsule() -> void:
if flight_label: if flight_label:
flight_label.visible = true flight_label.visible = true
_update_crust_exception() _update_crust_exception()
GameplayInput.set_context(GameplayInput.Context.VEHICLE)
func exit_capsule() -> void: func exit_capsule() -> void:
@@ -429,6 +492,7 @@ func exit_capsule() -> void:
player_inside = false player_inside = false
velocity = Vector3.ZERO velocity = Vector3.ZERO
free_look = false free_look = false
f_was_down = false
using_third_person = false using_third_person = false
_set_hull("abort_burn", false) _set_hull("abort_burn", false)
_set_hull("rcs_direction", 0) _set_hull("rcs_direction", 0)
@@ -469,7 +533,6 @@ func exit_capsule() -> void:
FloatingOrigin.set_focus(exiting_player) FloatingOrigin.set_focus(exiting_player)
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
player_ref = null player_ref = null
GameplayInput.set_context(GameplayInput.Context.ON_FOOT)
func toggle_camera() -> void: func toggle_camera() -> void:
@@ -535,25 +598,31 @@ func update_third_person_camera() -> void:
third_person_camera.global_basis = cam_basis third_person_camera.global_basis = cam_basis
## Reads signed flight intent while preserving the existing flight equations/timing.
func handle_flight(delta: float) -> void: func handle_flight(delta: float) -> void:
_update_crust_exception() _update_crust_exception()
var input_pitch := GameplayInput.read_axis(&"vehicle_pitch_up", &"vehicle_pitch_down") var input_pitch := 0.0
var input_roll := GameplayInput.read_axis(&"vehicle_roll_left", &"vehicle_roll_right") var input_roll := 0.0
var input_yaw := GameplayInput.read_axis(&"vehicle_yaw_right", &"vehicle_yaw_left") var input_yaw := 0.0
if Input.is_key_pressed(KEY_W):
input_pitch -= 1.0
if Input.is_key_pressed(KEY_S):
input_pitch += 1.0
if Input.is_key_pressed(KEY_A):
input_yaw += 1.0
if Input.is_key_pressed(KEY_D):
input_yaw -= 1.0
if Input.is_key_pressed(KEY_Q):
input_roll -= 1.0
if Input.is_key_pressed(KEY_E):
input_roll += 1.0
rotate_object_local(Vector3.RIGHT, input_pitch * rotation_speed * delta) rotate_object_local(Vector3.RIGHT, input_pitch * rotation_speed * delta)
rotate_object_local(Vector3.FORWARD, -input_yaw * rotation_speed * delta) rotate_object_local(Vector3.FORWARD, -input_yaw * rotation_speed * delta)
rotate_object_local(Vector3.UP, input_roll * rotation_speed * delta) rotate_object_local(Vector3.UP, input_roll * rotation_speed * delta)
_thrust_input = GameplayInput.read_strength(&"vehicle_thrust") var thrusting := Input.is_key_pressed(KEY_SPACE)
var thrusting := _thrust_input > 0.0 _drive_hull(thrusting, input_pitch, input_yaw, input_roll)
_set_hull("abort_burn", thrusting)
_set_hull("att_pitch", input_pitch)
_set_hull("att_yaw", input_yaw)
_set_hull("att_roll", input_roll)
_set_hull("rcs_direction", 0)
var acceleration: Vector3 = _gravity_accel() var acceleration: Vector3 = _gravity_accel()
if thrusting: if thrusting:
acceleration += global_transform.basis.y * (thrust_force / mass) * _thrust_input acceleration += global_transform.basis.y * (thrust_force / mass)
velocity += acceleration * delta velocity += acceleration * delta
var near_surface := is_on_floor() or _crust_exception var near_surface := is_on_floor() or _crust_exception
if not near_surface: if not near_surface:
+121 -120
View File
@@ -1,5 +1,6 @@
extends CharacterBody3D extends CharacterBody3D
## PASTE 2026-09-27 — Station volume includes pads. Habitat trimesh collision + stair step. ## PASTE 2026-10-10 — Habitat trimesh. View stairs + port ring are floors.
@export var speed: float = 5.5 @export var speed: float = 5.5
@export var sprint_speed: float = 9.0 @export var sprint_speed: float = 9.0
@@ -75,6 +76,8 @@ const WALK_FLOORS: Array[String] = [
"Yard_Bridges", "Yard_Stairs", "Yard_CollarWalk", "Yard_Piers", "Yard_Bridges", "Yard_Stairs", "Yard_CollarWalk", "Yard_Piers",
"Dock_Gallery", "Dock_Threshold", "Dock_Gallery", "Dock_Threshold",
"Elev_Landings", "Fusion_Basemat", "Fusion_AmbulatoryWide", "Elev_Landings", "Fusion_Basemat", "Fusion_AmbulatoryWide",
"Fusion_HeaderStands",
"Port_Ring",
"Live_Terraces", "Live_Terraces",
] ]
const WALK_WALLS: Array[String] = [ const WALK_WALLS: Array[String] = [
@@ -117,14 +120,34 @@ var interact_cd: float = 0.0
var jump_anim_cd: float = 0.0 var jump_anim_cd: float = 0.0
var _crust_on: bool = false var _crust_on: bool = false
var _moon_colliders: Array[PhysicsBody3D] = [] var _moon_colliders: Array[PhysicsBody3D] = []
var _movement_input: Vector2 = Vector2.ZERO
var _fire_requested: bool = false
func _ensure_action(action: String, keycode: Key) -> void:
if not InputMap.has_action(action):
InputMap.add_action(action)
for ev in InputMap.action_get_events(action):
if ev is InputEventKey and (ev as InputEventKey).physical_keycode == keycode:
return
var evk := InputEventKey.new()
evk.physical_keycode = keycode
InputMap.action_add_event(action, evk)
func _ensure_default_actions() -> void:
_ensure_action("interact", KEY_F)
_ensure_action("mag_boots", KEY_C)
_ensure_action("toggle_mag_boots", KEY_C)
_ensure_action("toggle_pistol", KEY_G)
_ensure_action("reload", KEY_R)
_ensure_action("toggle_inventory", KEY_TAB)
_ensure_action("toggle_first_person", KEY_V)
_ensure_action("sprint", KEY_SHIFT)
_ensure_action("eva_roll_left", KEY_Q)
_ensure_action("eva_roll_right", KEY_E)
func _ready() -> void: func _ready() -> void:
GameplayInput.command_requested.connect(_handle_gameplay_command) _ensure_default_actions()
GameplayInput.transient_input_cleared.connect(_clear_player_input)
GameplayInput.set_context(GameplayInput.Context.ON_FOOT)
scale = Vector3.ONE scale = Vector3.ONE
safe_margin = 0.05 safe_margin = 0.05
floor_snap_length = 0.45 floor_snap_length = 0.45
@@ -363,7 +386,6 @@ func _find_l5_spawn() -> Node3D:
func set_in_vehicle(value: bool) -> void: func set_in_vehicle(value: bool) -> void:
in_vehicle = value in_vehicle = value
_clear_player_input()
if value: if value:
pressurized = true pressurized = true
_set_moon_surface_visible(true) _set_moon_surface_visible(true)
@@ -389,10 +411,7 @@ func _update_waist_aim() -> void:
look_loader.set_aim_pitch(pitch) look_loader.set_aim_pitch(pitch)
## Updates device-independent camera look before existing visual camera smoothing.
func _process(delta: float) -> void: func _process(delta: float) -> void:
if not in_vehicle:
_update_player_look(delta)
if first_person: if first_person:
_cam_pos_target = _fp_cam_pos() _cam_pos_target = _fp_cam_pos()
_update_fp_meshes() _update_fp_meshes()
@@ -707,17 +726,92 @@ func _set_alt_look(on: bool) -> void:
camera_pivot.rotation.z = 0.0 camera_pivot.rotation.z = 0.0
## Keeps development shortcuts separate from remappable gameplay controls.
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if in_vehicle or not GameplayInput.gameplay_enabled(): if in_vehicle:
return return
if vendor_menu and vendor_menu.visible:
if event.is_action_pressed("ui_cancel"):
close_vendor_menu()
return
if event is InputEventKey and event.keycode == KEY_QUOTELEFT:
if event.pressed:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
else:
if not get_tree().paused and not (vendor_menu and vendor_menu.visible):
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
return
if event is InputEventKey and event.keycode == KEY_ALT:
_set_alt_look(event.pressed)
return
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT:
if pistol_drawn:
ads = event.pressed
_apply_camera_mode(false)
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
if pistol_drawn:
_try_fire()
if event is InputEventMouseMotion and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
if _is_eva():
# Whole-body look in 1P and 3P EVA. World-Y yaw felt broken after a roll.
rotate_object_local(Vector3.UP, -event.relative.x * mouse_sensitivity)
rotate_object_local(Vector3.RIGHT, -event.relative.y * mouse_sensitivity)
if camera_pivot:
camera_pivot.rotation = Vector3.ZERO
elif first_person:
if free_looking:
# Euler SET — rotate_x+rotate_y on a pitched pivot was the warp.
free_look_yaw -= event.relative.x * mouse_sensitivity
free_look_pitch -= event.relative.y * mouse_sensitivity
free_look_pitch = clamp(free_look_pitch, deg_to_rad(-78), deg_to_rad(62))
free_look_yaw = clamp(free_look_yaw, deg_to_rad(-75), deg_to_rad(75))
camera_pivot.rotation = Vector3(free_look_pitch, free_look_yaw, 0.0)
else:
rotate_y(-event.relative.x * mouse_sensitivity)
camera_pivot.rotate_x(-event.relative.y * mouse_sensitivity)
camera_pivot.rotation.x = clamp(camera_pivot.rotation.x, deg_to_rad(-78), deg_to_rad(85))
elif free_looking:
free_look_yaw -= event.relative.x * free_look_sensitivity
free_look_pitch -= event.relative.y * free_look_sensitivity
free_look_pitch = clamp(free_look_pitch, deg_to_rad(-80), deg_to_rad(80))
if camera_pivot:
camera_pivot.rotation.y = free_look_yaw
camera_pivot.rotation.x = free_look_pitch
else:
rotate_y(-event.relative.x * mouse_sensitivity)
camera_pivot.rotate_x(-event.relative.y * mouse_sensitivity)
camera_pivot.rotation.x = clamp(camera_pivot.rotation.x, deg_to_rad(-78), deg_to_rad(55))
if event is InputEventKey and event.pressed and not event.echo: if event is InputEventKey and event.pressed and not event.echo:
match event.keycode: match event.keycode:
KEY_1:
_toggle_pistol()
KEY_F3: KEY_F3:
_debug_fp_eye() _debug_fp_eye()
KEY_F4: KEY_F4:
if look_loader and look_loader.has_method("cycle_arm_axis"): if look_loader and look_loader.has_method("cycle_arm_axis"):
look_loader.cycle_arm_axis() look_loader.cycle_arm_axis()
if event.is_action_pressed("interact"):
if can_interact and current_interactable:
_try_interact()
if event.is_action_pressed("mag_boots"):
mag_boots_on = not mag_boots_on
if mag_boots_on:
eva_peak_height = 0.0
velocity = velocity.slide(_walk_up()) * 0.35
_align_walk(_walk_up())
_reset_camera_to_walk()
print("Mag Boots: ", "ON" if mag_boots_on else "OFF")
if event.is_action_pressed("toggle_pistol"):
_toggle_pistol()
if event.is_action_pressed("reload"):
_reload_pistol()
if event.is_action_pressed("toggle_inventory"):
inventory_open = not inventory_open
if event.is_action_pressed("toggle_first_person"):
if in_vehicle:
return
first_person = not first_person
_set_alt_look(false)
_apply_camera_mode(false)
if event.is_action_pressed("ui_page_up"): if event.is_action_pressed("ui_page_up"):
food = min(food + 25.0, 100.0) food = min(food + 25.0, 100.0)
if event.is_action_pressed("ui_page_down"): if event.is_action_pressed("ui_page_down"):
@@ -734,93 +828,6 @@ func _unhandled_input(event: InputEvent) -> void:
banner.hide_banner() banner.hide_banner()
## Dispatches device-independent commands only while the player owns control.
func _handle_gameplay_command(action: StringName, command_context: int) -> void:
if in_vehicle or command_context != GameplayInput.Context.ON_FOOT or GameplayInput.context != command_context:
return
match action:
&"interact":
if can_interact and current_interactable:
_try_interact()
&"combat_fire":
_fire_requested = pistol_drawn
&"combat_reload":
_reload_pistol()
&"combat_toggle_weapon":
_toggle_pistol()
&"character_toggle_inventory":
inventory_open = not inventory_open
&"toggle_view":
first_person = not first_person
_set_alt_look(false)
_apply_camera_mode(false)
&"character_toggle_mag_boots":
_toggle_magnetic_boots()
## Toggles boots without changing the existing landing or gravity mechanics.
func _toggle_magnetic_boots() -> void:
mag_boots_on = not mag_boots_on
if mag_boots_on:
eva_peak_height = 0.0
velocity = velocity.slide(_walk_up()) * 0.35
_align_walk(_walk_up())
_reset_camera_to_walk()
print("Mag Boots: ", "ON" if mag_boots_on else "OFF")
## Clears pending shots and held camera states at input ownership boundaries.
func _clear_player_input() -> void:
_movement_input = Vector2.ZERO
_fire_requested = false
ads = false
_set_alt_look(false)
_apply_camera_mode(false)
## Combines mouse displacement and time-scaled controller turn rate once per frame.
func _update_player_look(delta: float) -> void:
var cursor_released := GameplayInput.is_held(&"release_cursor")
if GameplayInput.gameplay_enabled():
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if cursor_released else Input.MOUSE_MODE_CAPTURED
var next_freelook := GameplayInput.is_held(&"freelook")
if next_freelook != free_looking:
_set_alt_look(next_freelook)
var next_aim := pistol_drawn and GameplayInput.is_held(&"combat_aim")
if next_aim != ads:
ads = next_aim
_apply_camera_mode(false)
var mouse_displacement := GameplayInput.consume_mouse_displacement()
if cursor_released:
return
var sensitivity := free_look_sensitivity if free_looking and not first_person else mouse_sensitivity
_apply_player_look(mouse_displacement * sensitivity + GameplayInput.read_controller_look(delta))
## Applies radians of yaw/pitch to existing walking, freelook, and body-local EVA modes.
func _apply_player_look(look_delta: Vector2) -> void:
if camera_pivot == null or look_delta == Vector2.ZERO:
return
if _is_eva():
rotate_object_local(Vector3.UP, -look_delta.x)
rotate_object_local(Vector3.RIGHT, -look_delta.y)
camera_pivot.rotation = Vector3.ZERO
elif free_looking:
free_look_yaw -= look_delta.x
free_look_pitch -= look_delta.y
var minimum_pitch := deg_to_rad(-78.0) if first_person else deg_to_rad(-80.0)
var maximum_pitch := deg_to_rad(62.0) if first_person else deg_to_rad(80.0)
free_look_pitch = clampf(free_look_pitch, minimum_pitch, maximum_pitch)
if first_person:
free_look_yaw = clampf(free_look_yaw, deg_to_rad(-75.0), deg_to_rad(75.0))
camera_pivot.rotation = Vector3(free_look_pitch, free_look_yaw, 0.0)
else:
rotate_y(-look_delta.x)
var maximum_pitch := deg_to_rad(85.0) if first_person else deg_to_rad(55.0)
camera_pivot.rotation.x = clampf(camera_pivot.rotation.x - look_delta.y, deg_to_rad(-78.0), maximum_pitch)
## Samples movement once and consumes queued jump/fire requests on physics ticks.
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
_update_crust_exception() _update_crust_exception()
if fire_cd > 0.0: if fire_cd > 0.0:
@@ -834,12 +841,6 @@ func _physics_process(delta: float) -> void:
if vendor_menu and vendor_menu.visible: if vendor_menu and vendor_menu.visible:
velocity = Vector3.ZERO velocity = Vector3.ZERO
return return
_movement_input = GameplayInput.read_movement()
var jump_requested := GameplayInput.consume_jump_request()
if _fire_requested:
_fire_requested = false
if GameplayInput.gameplay_enabled() and pistol_drawn:
_try_fire()
if is_on_floor(): if is_on_floor():
coyote_time = 0.14 coyote_time = 0.14
else: else:
@@ -848,15 +849,17 @@ func _physics_process(delta: float) -> void:
var gvec: Vector3 = _soi_gravity() var gvec: Vector3 = _soi_gravity()
if _is_eva(): if _is_eva():
_set_body_visible(true) _set_body_visible(true)
var roll_input := GameplayInput.read_axis(&"eva_roll_left", &"eva_roll_right") if Input.is_action_pressed("eva_roll_left") or Input.is_key_pressed(KEY_Q):
rotate_object_local(Vector3.FORWARD, roll_input * 2.2 * delta) rotate_object_local(Vector3.FORWARD, -2.2 * delta)
if Input.is_action_pressed("eva_roll_right") or Input.is_key_pressed(KEY_E):
rotate_object_local(Vector3.FORWARD, 2.2 * delta)
if gvec.length() > 0.01: if gvec.length() > 0.01:
velocity += gvec * delta velocity += gvec * delta
var input_dir_eva: Vector2 = _movement_input var input_dir_eva: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
if input_dir_eva.length() > 0.001: if input_dir_eva.length() > 0.1:
var thrust: Vector3 = ( var thrust: Vector3 = (
-transform.basis.z * -input_dir_eva.y + transform.basis.x * input_dir_eva.x -transform.basis.z * -input_dir_eva.y + transform.basis.x * input_dir_eva.x
) * speed * 0.35 ).normalized() * speed * 0.35
velocity += thrust * delta velocity += thrust * delta
move_and_slide() move_and_slide()
_process_needs(delta) _process_needs(delta)
@@ -876,13 +879,13 @@ func _physics_process(delta: float) -> void:
else: else:
g_amt = maxf(g_amt, MOON_G) g_amt = maxf(g_amt, MOON_G)
velocity += -up * g_amt * delta velocity += -up * g_amt * delta
var input_dir: Vector2 = _movement_input var input_dir: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0.0, input_dir.y)).slide(up) var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0.0, input_dir.y)).slide(up)
if direction.length() > 0.001: if direction.length() > 0.001:
direction = direction.normalized() * input_dir.length() direction = direction.normalized()
else: else:
direction = Vector3.ZERO direction = Vector3.ZERO
var want_sprint: bool = GameplayInput.sprint_enabled and input_dir.y < -0.12 var want_sprint: bool = Input.is_action_pressed("sprint") and input_dir.y < -0.12
var current_speed: float = sprint_speed if want_sprint else speed var current_speed: float = sprint_speed if want_sprint else speed
if ads and pistol_drawn: if ads and pistol_drawn:
current_speed *= ads_sprint_scale if want_sprint else ads_walk_scale current_speed *= ads_sprint_scale if want_sprint else ads_walk_scale
@@ -904,13 +907,13 @@ func _physics_process(delta: float) -> void:
velocity = v_h + up * v_up velocity = v_h + up * v_up
# Jump LAST so floor rebuild cannot eat or replace the impulse. # Jump LAST so floor rebuild cannot eat or replace the impulse.
var can_jump: bool = is_on_floor() or coyote_time > 0.0 var can_jump: bool = is_on_floor() or coyote_time > 0.0
if jump_requested and can_jump: if Input.is_action_just_pressed("ui_accept") and can_jump:
coyote_time = 0.0 coyote_time = 0.0
jump_anim_cd = 0.45 jump_anim_cd = 0.45
var jv: float = 1.7 if mag_boots_on else 6.4 var jv: float = 1.7 if mag_boots_on else 6.4
velocity = velocity.slide(up) + up * jv velocity = velocity.slide(up) + up * jv
print("JUMP boots=", mag_boots_on, " jv=", jv, " g=", g_amt, " floor=", is_on_floor()) print("JUMP boots=", mag_boots_on, " jv=", jv, " g=", g_amt, " floor=", is_on_floor())
if is_on_floor() and not jump_requested: if is_on_floor() and not Input.is_action_just_pressed("ui_accept"):
_try_step(up) _try_step(up)
move_and_slide() move_and_slide()
_keep_walk_upright() _keep_walk_upright()
@@ -1033,7 +1036,6 @@ func open_vendor_menu() -> void:
func close_vendor_menu() -> void: func close_vendor_menu() -> void:
if vendor_menu: if vendor_menu:
vendor_menu.visible = false vendor_menu.visible = false
GameplayInput.set_menu_open(vendor_menu, false)
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
@@ -1056,10 +1058,10 @@ func _update_animations() -> void:
_play_move_anim("Idle") _play_move_anim("Idle")
return return
# Stick, not velocity — accel must not pick the clip. # Stick, not velocity — accel must not pick the clip.
var stick: Vector2 = _movement_input var stick: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var strafe: float = clampf(stick.x, -1.0, 1.0) var strafe: float = clampf(stick.x, -1.0, 1.0)
var back: float = clampf(stick.y, -1.0, 1.0) var back: float = clampf(stick.y, -1.0, 1.0)
var want_sprint: bool = GameplayInput.sprint_enabled and stick.y < -0.12 var want_sprint: bool = Input.is_action_pressed("sprint") and stick.y < -0.12
var run_amt: float = 1.0 if want_sprint else 0.0 var run_amt: float = 1.0 if want_sprint else 0.0
if look_loader and look_loader.has_method("set_loco"): if look_loader and look_loader.has_method("set_loco"):
look_loader.set_loco(strafe, back, run_amt, dt, _is_aiming()) look_loader.set_loco(strafe, back, run_amt, dt, _is_aiming())
@@ -1074,7 +1076,7 @@ func _update_animations() -> void:
func _update_hud() -> void: func _update_hud() -> void:
if needs_label: if needs_label:
var interact_text: String = " [%s] Use" % GameplayInput.binding_label(&"interact") if can_interact else "" var interact_text: String = " [F] Use" if can_interact else ""
var gun_text: String = "" var gun_text: String = ""
if pistol_drawn: if pistol_drawn:
gun_text = " | PISTOL %d/%d%s" % [pistol_ammo, pistol_reserve, " ADS" if ads else ""] gun_text = " | PISTOL %d/%d%s" % [pistol_ammo, pistol_reserve, " ADS" if ads else ""]
@@ -1283,4 +1285,3 @@ func _try_step(up: Vector3) -> void:
if lift < 0.04 or lift > STEP_HEIGHT: if lift < 0.04 or lift > STEP_HEIGHT:
return return
global_position += up * (lift + 0.02) global_position += up * (lift + 0.02)
+9242 -4
View File
File diff suppressed because one or more lines are too long
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://b8y3aengdwocl"]
[ext_resource type="PackedScene" uid="uid://tr8nf8lfnu17" path="res://planets_whatnot/SM_Argonaut.glb" id="1_ry5ki"]
[node name="Node3D" type="Node3D" unique_id=1733269516]
[node name="SM_Argonaut2" parent="." unique_id=1143788198 instance=ExtResource("1_ry5ki")]
View File
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://x6rn3alij5xn"]
[ext_resource type="PackedScene" uid="uid://fxb63xdux2ck" path="res://planets_whatnot/SM_LunarPathfinder.glb" id="1_wjvs3"]
[node name="Node3D" type="Node3D" unique_id=476531828]
[node name="SM_LunarPathfinder2" parent="." unique_id=301867733 instance=ExtResource("1_wjvs3")]
+39 -9203
View File
File diff suppressed because one or more lines are too long
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://ca1ng6ji6tf2w"]
[ext_resource type="PackedScene" uid="uid://2c7v4mq03by1" path="res://planets_whatnot/SM_Mars.glb" id="1_xn7oe"]
[node name="Node3D" type="Node3D" unique_id=727006843]
[node name="SM_Mars2" parent="." unique_id=1017543924 instance=ExtResource("1_xn7oe")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://dkc7hc6ovxru"]
[ext_resource type="PackedScene" uid="uid://dqh01pphoqxcf" path="res://planets_whatnot/moon.glb" id="1_4eue2"]
[node name="Node3D" type="Node3D" unique_id=1744434808]
[node name="moon" parent="." unique_id=802733849 instance=ExtResource("1_4eue2")]
View File
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://csxmevxg7nrmo"]
[ext_resource type="PackedScene" uid="uid://bfgf0ibpg3j62" path="res://planets_whatnot/Satellite_LM2100_style.glb" id="1_06l82"]
[node name="Node3D" type="Node3D" unique_id=1048597782]
[node name="Satellite_LM2100_style2" parent="." unique_id=1804165031 instance=ExtResource("1_06l82")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://c1kfhlrmg2djl"]
[ext_resource type="PackedScene" uid="uid://dgtcs2yl15jl3" path="res://planets_whatnot/SM_Saturn.glb" id="1_i5hrf"]
[node name="Node3D" type="Node3D" unique_id=480200195]
[node name="SM_Saturn2" parent="." unique_id=1887248500 instance=ExtResource("1_i5hrf")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://beqqptwylaqc8"]
[ext_resource type="PackedScene" uid="uid://c6piu2kmiqwlb" path="res://planets_whatnot/sun.glb" id="1_iveel"]
[node name="Node3D" type="Node3D" unique_id=817764565]
[node name="sun" parent="." unique_id=1468497573 instance=ExtResource("1_iveel")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://cv1uijj3b6cbw"]
[ext_resource type="PackedScene" uid="uid://sy53rgptcuup" path="res://planets_whatnot/SM_Uranus.glb" id="1_8q3j1"]
[node name="Node3D" type="Node3D" unique_id=1605047630]
[node name="SM_Uranus2" parent="." unique_id=1482713817 instance=ExtResource("1_8q3j1")]
+7
View File
@@ -0,0 +1,7 @@
[gd_scene format=3 uid="uid://ccarj6maquw4s"]
[ext_resource type="PackedScene" uid="uid://dqbugk60c38qs" path="res://planets_whatnot/SM_Venus.glb" id="1_mg830"]
[node name="Node3D" type="Node3D" unique_id=926823776]
[node name="SM_Venus2" parent="." unique_id=525378127 instance=ExtResource("1_mg830")]
View File
+43
View File
@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://qj5pba1nqy2x"
path="res://.godot/imported/Young_2077 (1)_blast.png-03c6d58a9f5bd556300f2a6fe613a39a.ctex"
metadata={
"vram_texture": false
}
generator_parameters={
"md5": "d6aa4936eecbaaa962450eb3e1c70146"
}
[deps]
source_file="res://Textures/Young_2077 (1)_blast.png"
dest_files=["res://.godot/imported/Young_2077 (1)_blast.png-03c6d58a9f5bd556300f2a6fe613a39a.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=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=1
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://spi08lnpt7ip" uid="uid://djne54xci5iqs"
path="res://.godot/imported/Young_2077_brick.png-5bd8d5b5b7f73ec03855fa602284c10b.ctex" path="res://.godot/imported/Young_2077 (1)_brick.png-7b1942ef3e9607be457fb3b0d6a8596a.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
@@ -13,8 +13,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_brick.png" source_file="res://Textures/Young_2077 (1)_brick.png"
dest_files=["res://.godot/imported/Young_2077_brick.png-5bd8d5b5b7f73ec03855fa602284c10b.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_brick.png-7b1942ef3e9607be457fb3b0d6a8596a.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://20f80n21d46j" uid="uid://82ifmradciqo"
path.s3tc="res://.godot/imported/Young_2077_core.png-e72e5e3deb547c04117a9ec816abec93.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_core.png-3f6f52094191fe33a0a81c1e9ff0682b.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_core.png" source_file="res://Textures/Young_2077 (1)_core.png"
dest_files=["res://.godot/imported/Young_2077_core.png-e72e5e3deb547c04117a9ec816abec93.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_core.png-3f6f52094191fe33a0a81c1e9ff0682b.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://ca75rn0cohjl" uid="uid://by23y35cqceo0"
path.s3tc="res://.godot/imported/Young_2077_cyber.png-9c506a502f916ddac2efe6e19e6917bb.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_cyber.png-39a29d6337dbc62a469762dbe9386122.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_cyber.png" source_file="res://Textures/Young_2077 (1)_cyber.png"
dest_files=["res://.godot/imported/Young_2077_cyber.png-9c506a502f916ddac2efe6e19e6917bb.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_cyber.png-39a29d6337dbc62a469762dbe9386122.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dxsyl2preexp2" uid="uid://ubc7yx0a1od5"
path.s3tc="res://.godot/imported/Young_2077_cyber_emit.png-df6c0f98bc5e1718b500f219d9492002.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_cyber_emit.png-013b7fa22e3b552842bca8a549a00eed.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_cyber_emit.png" source_file="res://Textures/Young_2077 (1)_cyber_emit.png"
dest_files=["res://.godot/imported/Young_2077_cyber_emit.png-df6c0f98bc5e1718b500f219d9492002.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_cyber_emit.png-013b7fa22e3b552842bca8a549a00eed.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bb47b3lobt6ob" uid="uid://7tb628tmiqt0"
path.s3tc="res://.godot/imported/Young_2077_elev.png-f073fc23f2a7ed2242a006b15a04f33a.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_elev.png-f3c39019d526562fae19e6aa42a76c3e.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_elev.png" source_file="res://Textures/Young_2077 (1)_elev.png"
dest_files=["res://.godot/imported/Young_2077_elev.png-f073fc23f2a7ed2242a006b15a04f33a.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_elev.png-f3c39019d526562fae19e6aa42a76c3e.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://5571ygam76sn" uid="uid://c4gkd4ft3x5bt"
path.s3tc="res://.godot/imported/Young_2077_hab.png-98f1c86cd37466f995035871e568b19f.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_hab.png-776923a31f7a5772a1d1051771583420.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_hab.png" source_file="res://Textures/Young_2077 (1)_hab.png"
dest_files=["res://.godot/imported/Young_2077_hab.png-98f1c86cd37466f995035871e568b19f.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_hab.png-776923a31f7a5772a1d1051771583420.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cvkudulwacfv5" uid="uid://w3jluul55dtq"
path.s3tc="res://.godot/imported/Young_2077_landing.png-580f79ac1d84cdcf6026c083dab58a6e.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_landing.png-115ccfcaefffca49ab6e96230447f16d.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_landing.png" source_file="res://Textures/Young_2077 (1)_landing.png"
dest_files=["res://.godot/imported/Young_2077_landing.png-580f79ac1d84cdcf6026c083dab58a6e.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_landing.png-115ccfcaefffca49ab6e96230447f16d.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://b00u6ue1l0dq2" uid="uid://er3o0bw7ygcq"
path.s3tc="res://.godot/imported/Young_2077_machine.png-ed5dad4accd44c63ee43273a867dfdf8.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_machine.png-bb62f2677c7ea3be93f8b77bb86ff6a3.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_machine.png" source_file="res://Textures/Young_2077 (1)_machine.png"
dest_files=["res://.godot/imported/Young_2077_machine.png-ed5dad4accd44c63ee43273a867dfdf8.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_machine.png-bb62f2677c7ea3be93f8b77bb86ff6a3.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://c5dr10k3lhptk" uid="uid://ss811cc2ihfh"
path="res://.godot/imported/Young_2077_marble.png-83b704b5d1e6327653959f27f34d7431.ctex" path="res://.godot/imported/Young_2077 (1)_marble.png-473d093f109dd2c5cacb0893575aa3fa.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
@@ -13,8 +13,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_marble.png" source_file="res://Textures/Young_2077 (1)_marble.png"
dest_files=["res://.godot/imported/Young_2077_marble.png-83b704b5d1e6327653959f27f34d7431.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_marble.png-473d093f109dd2c5cacb0893575aa3fa.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://d1trkcen3ftf" uid="uid://d2x7om4dvwmu3"
path.s3tc="res://.godot/imported/Young_2077_panel.png-3bc818c4d058dd91ff53f23af7976a19.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_panel.png-ed9d0379a8400adf3347c00e98cc3615.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_panel.png" source_file="res://Textures/Young_2077 (1)_panel.png"
dest_files=["res://.godot/imported/Young_2077_panel.png-3bc818c4d058dd91ff53f23af7976a19.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_panel.png-ed9d0379a8400adf3347c00e98cc3615.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cd607o8u8rnoe" uid="uid://bqkp3bduwjohg"
path.s3tc="res://.godot/imported/Young_2077_pillar.png-181f4f5801bd3fb0749f2f8b9b2edcbd.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_pillar.png-71dd59615bdd26c39df039c2be05e55f.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_pillar.png" source_file="res://Textures/Young_2077 (1)_pillar.png"
dest_files=["res://.godot/imported/Young_2077_pillar.png-181f4f5801bd3fb0749f2f8b9b2edcbd.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_pillar.png-71dd59615bdd26c39df039c2be05e55f.s3tc.ctex"]
[params] [params]
Binary file not shown.
+44
View File
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bgyplv6rdgflo"
path.s3tc="res://.godot/imported/Young_2077 (1)_plate.png-b16e4731f1aa5dbf3abb36f5fb6d4a32.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "5b9ba292a904ed7cf06dad137b16cde3"
}
[deps]
source_file="res://Textures/Young_2077 (1)_plate.png"
dest_files=["res://.godot/imported/Young_2077 (1)_plate.png-b16e4731f1aa5dbf3abb36f5fb6d4a32.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.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bjgm0my8yem3m"
path.s3tc="res://.godot/imported/Young_2077 (1)_plate_l1.png-aff2c771c5f2efdbd93dec411193e1d9.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "b29ffbe757f119d54c7d462ea930cc77"
}
[deps]
source_file="res://Textures/Young_2077 (1)_plate_l1.png"
dest_files=["res://.godot/imported/Young_2077 (1)_plate_l1.png-aff2c771c5f2efdbd93dec411193e1d9.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.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bsssj0pbxifeh"
path.s3tc="res://.godot/imported/Young_2077 (1)_plate_l4.png-bb606b2f2dca6c65c36481a66a79d62c.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "e322360e5baadc6c332ba39df1f3dea9"
}
[deps]
source_file="res://Textures/Young_2077 (1)_plate_l4.png"
dest_files=["res://.godot/imported/Young_2077 (1)_plate_l4.png-bb606b2f2dca6c65c36481a66a79d62c.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.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6bbcpawt05xw"
path.s3tc="res://.godot/imported/Young_2077 (1)_plate_l5.png-20a70a48f613c824ca4d4c376a370716.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "a10c9b54f300420cd3efda1ffec7e8c6"
}
[deps]
source_file="res://Textures/Young_2077 (1)_plate_l5.png"
dest_files=["res://.godot/imported/Young_2077 (1)_plate_l5.png-20a70a48f613c824ca4d4c376a370716.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
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bqsegbrmbkqn0" uid="uid://covdrcj2rhfa2"
path.s3tc="res://.godot/imported/Young_2077_rib.png-20cb6beac176f488f2bc480ee52c8e51.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_rib.png-954e200776b8390838a7cc69d1dd227f.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_rib.png" source_file="res://Textures/Young_2077 (1)_rib.png"
dest_files=["res://.godot/imported/Young_2077_rib.png-20cb6beac176f488f2bc480ee52c8e51.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_rib.png-954e200776b8390838a7cc69d1dd227f.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://15ilicb345pk" uid="uid://dqy1hhuvcq1h"
path.s3tc="res://.godot/imported/Young_2077_school.png-416a9d9b58fc0973e773fb09e02320f8.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_school.png-72b1409ab476099406fd74e41df9f58c.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_school.png" source_file="res://Textures/Young_2077 (1)_school.png"
dest_files=["res://.godot/imported/Young_2077_school.png-416a9d9b58fc0973e773fb09e02320f8.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_school.png-72b1409ab476099406fd74e41df9f58c.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bs18lajcddph4" uid="uid://1jlb3rvjl2o"
path.s3tc="res://.godot/imported/Young_2077_soffit.png-20eed9b10c026b621e80aa7dcbfa7a76.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_soffit.png-8ffa9452e046c2080b67edf0ceb31d37.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_soffit.png" source_file="res://Textures/Young_2077 (1)_soffit.png"
dest_files=["res://.godot/imported/Young_2077_soffit.png-20eed9b10c026b621e80aa7dcbfa7a76.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_soffit.png-8ffa9452e046c2080b67edf0ceb31d37.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bp74jds8n4ce8" uid="uid://dslbplrpwmwej"
path.s3tc="res://.godot/imported/Young_2077_street.png-d6fec24cdd742f3d7bb7390de10ed9a8.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_street.png-681d7ced10dd6db4d92bd5390759321a.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_street.png" source_file="res://Textures/Young_2077 (1)_street.png"
dest_files=["res://.godot/imported/Young_2077_street.png-d6fec24cdd742f3d7bb7390de10ed9a8.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_street.png-681d7ced10dd6db4d92bd5390759321a.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bimksgdbf1toc" uid="uid://cults08a61iu7"
path.s3tc="res://.godot/imported/Young_2077_street_emit.png-3e9ca62bdd797e7f860ab16a042cfdd3.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_street_emit.png-d6070d2362453123f33e42760c65da20.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_street_emit.png" source_file="res://Textures/Young_2077 (1)_street_emit.png"
dest_files=["res://.godot/imported/Young_2077_street_emit.png-3e9ca62bdd797e7f860ab16a042cfdd3.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_street_emit.png-d6070d2362453123f33e42760c65da20.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://clrnbwgdfs57j" uid="uid://cml82bakt433y"
path.s3tc="res://.godot/imported/Young_2077_tread.png-441a0e32e9847091495aa6d16b8aeec8.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_tread.png-2b1c400ec977dc4e2b7c17f8adba6459.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_tread.png" source_file="res://Textures/Young_2077 (1)_tread.png"
dest_files=["res://.godot/imported/Young_2077_tread.png-441a0e32e9847091495aa6d16b8aeec8.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_tread.png-2b1c400ec977dc4e2b7c17f8adba6459.s3tc.ctex"]
[params] [params]
@@ -2,8 +2,8 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dqkp7k533fddb" uid="uid://i4aixbbct0ip"
path.s3tc="res://.godot/imported/Young_2077_yard.png-45f15ec3da2cd2ee01e105cea210a6cc.s3tc.ctex" path.s3tc="res://.godot/imported/Young_2077 (1)_yard.png-e35e02a5d12c1216f3ef31b8d6011a92.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@@ -14,8 +14,8 @@ generator_parameters={
[deps] [deps]
source_file="res://Young_2077_yard.png" source_file="res://Textures/Young_2077 (1)_yard.png"
dest_files=["res://.godot/imported/Young_2077_yard.png-45f15ec3da2cd2ee01e105cea210a6cc.s3tc.ctex"] dest_files=["res://.godot/imported/Young_2077 (1)_yard.png-e35e02a5d12c1216f3ef31b8d6011a92.s3tc.ctex"]
[params] [params]
Binary file not shown.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cef1xfq366mja"
path.s3tc="res://.godot/imported/Young_2077 (1)_yardfloor.png-e6910c8cc42a5c842768943b0a8950bd.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "a53d8efefa9742a8c85d3920999234da"
}
[deps]
source_file="res://Textures/Young_2077 (1)_yardfloor.png"
dest_files=["res://.godot/imported/Young_2077 (1)_yardfloor.png-e6910c8cc42a5c842768943b0a8950bd.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
BIN
View File
Binary file not shown.
+45
View File
@@ -0,0 +1,45 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://2f8ctlljoctl"
path="res://.godot/imported/Young_2077 (1).glb-d115b3b196cc7b5a6c0bcb6e2eaf2a63.scn"
[deps]
source_file="res://Young_2077 (1).glb"
dest_files=["res://.godot/imported/Young_2077 (1).glb-d115b3b196cc7b5a6c0bcb6e2eaf2a63.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={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
-44
View File
@@ -1,44 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://6vsodm2wgqha"
path.s3tc="res://.godot/imported/Young_2077_plate.png-a671f10c81a24b0ce917c36a71378e17.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "b69b538b9646c2643dd3a44e989afe6b"
}
[deps]
source_file="res://Young_2077_plate.png"
dest_files=["res://.godot/imported/Young_2077_plate.png-a671f10c81a24b0ce917c36a71378e17.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.
+3 -3
View File
@@ -1,5 +1,5 @@
[gd_scene load_steps=2 format=3] [gd_scene format=3 uid="uid://bu0ogftnp05bm"]
[ext_resource type="PackedScene" path="hongqi.glb" id="1_glb"] [ext_resource type="PackedScene" uid="uid://do2qpkqynubyv" path="res://fleet_godot47/fleet_godot47/hongqi.glb" id="1_glb"]
[node name="Hongqi" instance=ExtResource("1_glb")] [node name="Hongqi" unique_id=844692418 instance=ExtResource("1_glb")]
+212 -91
View File
@@ -1,3 +1,4 @@
@tool
extends Node3D extends Node3D
## Kestrel EC-01 plume driver. Godot 4.7. ## Kestrel EC-01 plume driver. Godot 4.7.
## Attach to the Kestrel child. Leave escape_capsule.gd on EscapeCapsule. ## Attach to the Kestrel child. Leave escape_capsule.gd on EscapeCapsule.
@@ -7,21 +8,27 @@ extends Node3D
## listen_keys is off so walking the player does not light jets or shove the craft. ## listen_keys is off so walking the player does not light jets or shove the craft.
## Capsule sets abort_burn, att_pitch/yaw/roll, rcs_direction, hatches, cabin_dim. ## Capsule sets abort_burn, att_pitch/yaw/roll, rcs_direction, hatches, cabin_dim.
@export var listen_keys := false @export var listen_keys := false # leave off; capsule owns G H J L K Space
@export_range(0.0, 1.0) var gear_deploy := 1.0 @export_range(0.0, 1.0) var gear_deploy := 1.0
@export_range(0.0, 1.0) var hatch_crew_open := 0.0 @export_range(0.0, 1.0) var hatch_crew_open := 0.0
@export_range(0.0, 1.0) var hatch_ladder_deploy := 0.0 @export_range(0.0, 1.0) var hatch_ladder_deploy := 0.0
@export_range(0.0, 1.0) var hatch_dock_open := 0.0 @export_range(0.0, 1.0) var hatch_dock_open := 0.0
@export_range(0.0, 1.0) var instruments_demo := 0.4 @export_range(0.0, 1.0) var instruments_demo := 0.4
@export var cabin_lights := true @export var cabin_lights := true:
@export var cabin_dim := false set(value):
cabin_lights = value
if is_inside_tree():
_apply_cabin()
@export var cabin_dim := false:
set(value):
cabin_dim = value
if is_inside_tree():
_apply_cabin()
@export_enum("Off", "Nose", "Tail", "Starboard", "Port", "Dorsal", "Ventral") var rcs_direction := 0 @export_enum("Off", "Nose", "Tail", "Starboard", "Port", "Dorsal", "Ventral") var rcs_direction := 0
@export var att_pitch := 0.0 @export var att_pitch := 0.0
@export var att_yaw := 0.0 @export var att_yaw := 0.0
@export var att_roll := 0.0 @export var att_roll := 0.0
@export var abort_burn := false @export var abort_burn := false
## Tick this in the inspector (or Remote tab while running) to self-test every jet.
@export var debug_fire := false
const _RIBBON := "shader_type spatial; const _RIBBON := "shader_type spatial;
render_mode blend_add, unshaded, cull_disabled, depth_draw_never, fog_disabled; render_mode blend_add, unshaded, cull_disabled, depth_draw_never, fog_disabled;
@@ -42,17 +49,14 @@ void fragment() {
}" }"
var _player: AnimationPlayer var _player: AnimationPlayer
var _clip_players: Dictionary = {}
var _shader: Shader var _shader: Shader
var _rcs: Array[Node3D] = [] var _rcs: Array[Node3D] = []
var _aborts: Array[Dictionary] = [] var _aborts: Array[Dictionary] = []
var _abort_hold := 0.0 var _abort_hold := 0.0
var _time := 0.0 var _time := 0.0
var _prev := {} var _prev := {}
var _clip_cache := {}
var _warm_frames := 12
var _cabin_ready := false var _cabin_ready := false
var _applied_dim := false
var _applied_lights := true
var _cabin_lights_n: Array[Light3D] = [] var _cabin_lights_n: Array[Light3D] = []
var _cabin_rest: Array[Dictionary] = [] var _cabin_rest: Array[Dictionary] = []
var _cabin_mats: Array[Dictionary] = [] var _cabin_mats: Array[Dictionary] = []
@@ -69,32 +73,37 @@ func _ready() -> void:
_player = get_node_or_null("AnimationPlayer") as AnimationPlayer _player = get_node_or_null("AnimationPlayer") as AnimationPlayer
if _player == null: if _player == null:
_player = find_child("AnimationPlayer", true, false) as AnimationPlayer _player = find_child("AnimationPlayer", true, false) as AnimationPlayer
if _player == null and get_parent():
_player = get_parent().find_child("AnimationPlayer", true, false) as AnimationPlayer
_split_clips()
_arm() _arm()
_collect_cabin()
_apply_clips()
print("Kestrel driver ready: rcs=", _rcs.size(), " abort=", _aborts.size(),
" cabin_lights=", _cabin_lights_n.size(), " strips=", _cabin_mats.size(),
" anim_player=", _player != null)
if _rcs.is_empty():
push_warning("Kestrel driver: no Vfx_RCS_* nodes found under " + str(get_path()))
if _aborts.is_empty(): if _aborts.is_empty():
push_warning("Kestrel driver: no Vfx_Abort_* nodes found under " + str(get_path())) _fallback_abort()
if _player == null: _collect_cabin()
push_warning("Kestrel driver: no AnimationPlayer found (gear/hatches will not move)") _gear_shown = gear_deploy
_crew_shown = hatch_crew_open
_dock_shown = hatch_dock_open
func _physics_process(delta: float) -> void: _ladder_shown = hatch_ladder_deploy
_time += delta _apply_clips()
if listen_keys: var clips := PackedStringArray()
_read_keys() if _player:
if debug_fire: clips = _player.get_animation_list()
abort_burn = true print("Kestrel driver ready rcs=", _rcs.size(), " abort=", _aborts.size(), " clips=", clips, " lights=", _cabin_lights_n.size())
rcs_direction = 1 + int(_time) % 6
func drive(thrusting: bool, pitch: float, yaw: float, roll: float) -> void:
abort_burn = thrusting
att_pitch = pitch
att_yaw = yaw
att_roll = roll
func _process(delta: float) -> void:
_time += delta
if listen_keys and not Engine.is_editor_hint():
_read_keys()
_ease_poses(delta)
_apply_clips() _apply_clips()
if _warm_frames > 0:
_warm_frames -= 1
# FIX: the capsule sets cabin_dim as a plain variable, so nothing re-applied it.
if cabin_dim != _applied_dim or cabin_lights != _applied_lights:
_apply_cabin() _apply_cabin()
_burn(_wish(), delta) _burn(_wish(), delta)
@@ -112,6 +121,7 @@ func _read_keys() -> void:
instruments_demo = 0.15 if instruments_demo > 0.5 else 1.0 instruments_demo = 0.15 if instruments_demo > 0.5 else 1.0
if _pressed(KEY_K): if _pressed(KEY_K):
cabin_lights = not cabin_lights cabin_lights = not cabin_lights
_apply_cabin()
abort_burn = Input.is_physical_key_pressed(KEY_SPACE) abort_burn = Input.is_physical_key_pressed(KEY_SPACE)
@@ -145,41 +155,135 @@ func _wish() -> Vector3:
return (global_transform.basis * local).normalized() return (global_transform.basis * local).normalized()
func _apply_clips() -> void: var _anim_root: Node = null
_seek("gear_deploy", gear_deploy) var _hinge_report: bool = false
_seek("hatch_crew_open", hatch_crew_open) var _gear_shown: float = 1.0
_seek("hatch_ladder_deploy", hatch_ladder_deploy) var _crew_shown: float = 0.0
_seek("hatch_dock_open", hatch_dock_open) var _dock_shown: float = 0.0
_seek("instruments_demo", instruments_demo) var _ladder_shown: float = 0.0
const GEAR_SECONDS: float = 4.0
const HATCH_SECONDS: float = 2.5
## FIX: only re-seek when the value actually changed. The old version called func _split_clips() -> void:
## play()+seek()+pause() on five clips every physics frame. _anim_root = self
func _clip_name(clip: StringName) -> StringName:
if _player.has_animation(clip):
return clip
for a in _player.get_animation_list():
if String(a).ends_with("/" + String(clip)):
return a
return &""
## Re-seeks only when the value changed, but keeps re-applying for the first few
## frames so the pose sticks after the AnimationPlayer finishes initializing.
func _seek(clip: StringName, t: float) -> void:
if _player == null: if _player == null:
print("Kestrel clips: no AnimationPlayer")
return return
var clip_id := _clip_name(clip) var root := _player.get_node_or_null(_player.root_node)
if clip_id == &"": if root:
_anim_root = root
print("Kestrel clips root=", _anim_root.name, " list=", _player.get_animation_list())
func _apply_clips() -> void:
_hard_pose()
func _hinge(node_name: String) -> Node3D:
var n := find_child(node_name, true, false) as Node3D
if n == null and get_parent() != null:
n = get_parent().find_child(node_name, true, false) as Node3D
return n
func _q(x: float, y: float, z: float, w: float) -> Quaternion:
return Quaternion(x, y, z, w)
func _ease_poses(delta: float) -> void:
_gear_shown = move_toward(_gear_shown, gear_deploy, delta / GEAR_SECONDS)
_crew_shown = move_toward(_crew_shown, hatch_crew_open, delta / HATCH_SECONDS)
_dock_shown = move_toward(_dock_shown, hatch_dock_open, delta / HATCH_SECONDS)
_ladder_shown = move_toward(_ladder_shown, hatch_ladder_deploy, delta / HATCH_SECONDS)
func _hard_pose() -> void:
var g := clampf(_gear_shown, 0.0, 1.0)
var hip0 := _q(0.572867, 0.0, 0.0, 0.819648)
var hip1 := _q(0.470626, 0.0, 0.0, 0.882333)
var knee0 := _q(0.998152, 0.0, 0.0, 0.060759)
var knee1 := _q(0.208460, 0.0, 0.0, 0.978031)
var hit := 0
for side in ["FR", "FL", "RR", "RL"]:
hit += _swing("Gear_%s_Hip" % side, hip0, hip1, g)
hit += _slide_z("Gear_%s_UpperStrut" % side, 0.0138, 0.46, g)
hit += _stretch_y("Gear_%s_UpperStrut" % side, 0.16, 1.0, g)
hit += _slide_z("Gear_%s_Knee" % side, 0.0276, 0.92, g)
hit += _swing("Gear_%s_Knee" % side, knee0, knee1, g)
hit += _slide_z("Gear_%s_Shock" % side, 0.0147, 0.49, g)
hit += _stretch_y("Gear_%s_Shock" % side, 0.16, 1.0, g)
hit += _slide_z("Gear_%s_Foot" % side, 0.0294, 0.98, g)
hit += _swing("CrewHatch_Hinge", Quaternion.IDENTITY, _q(0.0, -0.854714, 0.0, 0.519099), _crew_shown)
hit += _swing("DockHatch_Hinge", Quaternion.IDENTITY, _q(0.0, 0.0, -0.854714, 0.519099), _dock_shown)
hit += _swing("CrewStep_Hinge", _q(0.0, 0.0, 0.02, 0.9998), _q(0.0, 0.0, 0.305059, 0.952334), _ladder_shown)
hit += _stretch_y("CrewStep_Ladder", 0.12, 1.0, _ladder_shown)
if not _hinge_report:
_hinge_report = true
print("Kestrel hinges hit=", hit, " crew=", _hinge("CrewHatch_Hinge"), " gear=", _hinge("Gear_FR_Hip"))
func _swing(node_name: String, a: Quaternion, b: Quaternion, t: float) -> int:
var n := _hinge(node_name)
if n == null:
return 0
n.quaternion = a.slerp(b, clampf(t, 0.0, 1.0))
return 1
func _slide_z(node_name: String, a: float, b: float, t: float) -> int:
var n := _hinge(node_name)
if n == null:
return 0
n.position.z = lerpf(a, b, clampf(t, 0.0, 1.0))
return 1
func _stretch_y(node_name: String, a: float, b: float, t: float) -> int:
var n := _hinge(node_name)
if n == null:
return 0
n.scale.y = lerpf(a, b, clampf(t, 0.0, 1.0))
return 1
func _pose(clip: StringName, t: float) -> void:
if _player == null or not _player.has_animation(clip):
return return
t = clampf(t, 0.0, 1.0) var anim := _player.get_animation(clip)
if _warm_frames <= 0 and _clip_cache.has(clip) and is_equal_approx(float(_clip_cache[clip]), t): var at := clampf(t, 0.0, 1.0) * anim.length
return var root: Node = _anim_root if _anim_root else self
_clip_cache[clip] = t for i in anim.get_track_count():
var clip_len := _player.get_animation(clip_id).length var full := String(anim.track_get_path(i))
_player.play(clip_id) var node_path := full.get_slice(":", 0)
_player.seek(t * clip_len, true) var prop := full.get_slice(":", 1)
_player.pause() var node := root.get_node_or_null(NodePath(node_path))
if node == null:
node = find_child(node_path.get_file(), true, false)
if node == null:
continue
var typ := anim.track_get_type(i)
if typ == Animation.TYPE_ROTATION_3D:
var q := anim.rotation_track_interpolate(i, at)
if prop == "" or prop == "quaternion" or prop == "rotation":
(node as Node3D).quaternion = q
else:
node.set(prop, q)
elif typ == Animation.TYPE_POSITION_3D:
var pos := anim.position_track_interpolate(i, at)
if prop == "" or prop == "position":
(node as Node3D).position = pos
else:
node.set(prop, pos)
elif typ == Animation.TYPE_SCALE_3D:
var sc := anim.scale_track_interpolate(i, at)
if prop == "" or prop == "scale":
(node as Node3D).scale = sc
else:
node.set(prop, sc)
elif typ == Animation.TYPE_VALUE and prop != "":
node.set(prop, anim.value_track_interpolate(i, at))
func _collect_cabin() -> void: func _collect_cabin() -> void:
@@ -219,24 +323,36 @@ func _collect_cabin() -> void:
func _apply_cabin() -> void: func _apply_cabin() -> void:
if not _cabin_ready: if not _cabin_ready:
return return
_applied_dim = cabin_dim
_applied_lights = cabin_lights
var dim := cabin_dim or not cabin_lights var dim := cabin_dim or not cabin_lights
for i in _cabin_lights_n.size(): for i in _cabin_lights_n.size():
var lamp := _cabin_lights_n[i] var lamp := _cabin_lights_n[i]
var rest: Dictionary = _cabin_rest[i] var rest: Dictionary = _cabin_rest[i]
lamp.light_color = rest.color lamp.light_color = rest.color
lamp.light_energy = float(rest.energy) * (0.08 if dim else 1.0) lamp.light_energy = float(rest.energy) * (0.16 if dim else 1.0)
for row in _cabin_mats: for row in _cabin_mats:
var mat := row.mat as StandardMaterial3D var mat := row.mat as StandardMaterial3D
mat.emission_enabled = true if dim else bool(row.on) mat.emission_enabled = true if dim else bool(row.on)
mat.emission = row.color mat.emission = row.color
mat.emission_energy_multiplier = float(row.energy) * (0.05 if dim else 1.0) mat.emission_energy_multiplier = float(row.energy) * (0.18 if dim else 1.0)
func _scope() -> Array[Node]:
var found: Array[Node] = []
var roots: Array[Node] = [self]
if get_parent():
roots.append(get_parent())
for root in roots:
found.append(root)
for n in root.find_children("*", "Node", true, false):
found.append(n)
return found
func _arm() -> void: func _arm() -> void:
var i := 0 var i := 0
for n in find_children("*", "Node3D", true, false): for n in _scope():
if not (n is Node3D):
continue
var nm := String(n.name) var nm := String(n.name)
if nm.begins_with("Vfx_RCS_"): if nm.begins_with("Vfx_RCS_"):
_rcs.append(_spear(n, 1.2, 0.09, Color(0.863, 0.937, 1.0, 0.95), Color(0.41, 0.67, 1.0, 0.35), Color(0.25, 0.45, 0.8, 0.0), 0.82, 2, float(i))) _rcs.append(_spear(n, 1.2, 0.09, Color(0.863, 0.937, 1.0, 0.95), Color(0.41, 0.67, 1.0, 0.35), Color(0.25, 0.45, 0.8, 0.0), 0.82, 2, float(i)))
@@ -245,27 +361,34 @@ func _arm() -> void:
_aborts.append(_make_abort(n)) _aborts.append(_make_abort(n))
func _fallback_abort() -> void:
var spots: Array[Vector3] = [Vector3(0.55, -0.35, 0.55), Vector3(-0.55, -0.35, 0.55), Vector3(0.55, -0.35, -0.55), Vector3(-0.55, -0.35, -0.55)]
for i in spots.size():
var s := Marker3D.new()
s.name = "Vfx_Abort_Fallback_%d" % i
s.position = spots[i]
add_child(s)
_aborts.append(_make_abort(s))
print("Kestrel driver built fallback abort plumes")
func _burn(wish: Vector3, delta: float) -> void: func _burn(wish: Vector3, delta: float) -> void:
var ship := global_transform.basis var ship := global_transform.basis
var ship_inv := ship.inverse() var cmd := Vector3(att_pitch, att_roll, -att_yaw)
# FIX: capsule yaws about +Z by +att_yaw (rotate_object_local(FORWARD, -yaw) == +Z, +yaw),
# so the commanded angular velocity is (pitch, roll, +yaw). The old -att_yaw fired the
# opposite-side jets for yaw.
var cmd := Vector3(att_pitch, att_roll, att_yaw)
var turning := cmd.length() > 0.15 var turning := cmd.length() > 0.15
var origin := global_position var origin := global_position
for ribbon in _rcs: for ribbon in _rcs:
var want := 0.0 var want := 0.0
var exhaust: Vector3 = (ship_inv * ribbon.global_transform.basis.y).normalized() var exhaust: Vector3 = (ship.inverse() * ribbon.global_transform.basis.y).normalized()
if turning: if turning:
var local_pos: Vector3 = ship_inv * (ribbon.global_position - origin) var local_pos: Vector3 = ship.inverse() * (ribbon.global_position - origin)
if local_pos.length() < 0.05: if local_pos.length() < 0.05:
local_pos = -exhaust local_pos = -exhaust
var torque: Vector3 = local_pos.cross(-exhaust) var torque: Vector3 = local_pos.cross(-exhaust)
if torque.dot(cmd) > 0.12: if torque.dot(cmd) > 0.12:
want = 1.0 want = 1.0
if want < 0.5 and wish != Vector3.ZERO: if want < 0.5 and wish != Vector3.ZERO:
if exhaust.dot(-(ship_inv * wish)) > 0.7: if exhaust.dot(-(ship.inverse() * wish)) > 0.7:
want = 1.0 want = 1.0
var burn := float(ribbon.get_meta("burn")) var burn := float(ribbon.get_meta("burn"))
burn = _smooth(burn, want, delta, 0.08 if want > burn else 0.14) burn = _smooth(burn, want, delta, 0.08 if want > burn else 0.14)
@@ -306,8 +429,6 @@ func _burn(wish: Vector3, delta: float) -> void:
light.light_energy = _abort_hold * 8.0 if on else 0.0 light.light_energy = _abort_hold * 8.0 if on else 0.0
## Exhaust direction in the socket's parent space. The model puts each Vfx_ socket's
## translation along its exhaust direction (RCS = +Y, Abort = -Y), so position is the aim.
func _exhaust(socket: Node3D) -> Vector3: func _exhaust(socket: Node3D) -> Vector3:
var dir := socket.position var dir := socket.position
if dir.length() < 0.001: if dir.length() < 0.001:
@@ -365,13 +486,13 @@ func _taper(length: float, w0: float, w1: float) -> ArrayMesh:
return st.commit() return st.commit()
func _crossed(socket: Node3D, mesh: ArrayMesh, mat: ShaderMaterial, planes: int, node_name: String, length: float, opacity: float, flick_seed: float) -> Node3D: func _crossed(socket: Node3D, mesh: ArrayMesh, mat: ShaderMaterial, planes: int, node_name: String, length: float, opacity: float, seed: float) -> Node3D:
var g := Node3D.new() var g := Node3D.new()
g.name = node_name g.name = node_name
g.set_meta("mat", mat) g.set_meta("mat", mat)
g.set_meta("len", length) g.set_meta("len", length)
g.set_meta("opacity", opacity) g.set_meta("opacity", opacity)
g.set_meta("seed", flick_seed) g.set_meta("seed", seed)
g.set_meta("burn", 0.0) g.set_meta("burn", 0.0)
for i in planes: for i in planes:
var m := MeshInstance3D.new() var m := MeshInstance3D.new()
@@ -387,8 +508,8 @@ func _crossed(socket: Node3D, mesh: ArrayMesh, mat: ShaderMaterial, planes: int,
return g return g
func _spear(socket: Node3D, length: float, width: float, root: Color, mid: Color, tip: Color, opacity: float, planes: int, flick_seed: float) -> Node3D: func _spear(socket: Node3D, length: float, width: float, root: Color, mid: Color, tip: Color, opacity: float, planes: int, seed: float) -> Node3D:
return _crossed(socket, _sheet(length, width), _ribbon_mat(root, mid, tip), planes, "Spear", length, opacity, flick_seed) return _crossed(socket, _sheet(length, width), _ribbon_mat(root, mid, tip), planes, "Spear", length, opacity, seed)
func _taper_ribbon(socket: Node3D, length: float, w0: float, w1: float, root: Color, mid: Color, tip: Color, opacity: float, planes: int, node_name: String) -> Node3D: func _taper_ribbon(socket: Node3D, length: float, w0: float, w1: float, root: Color, mid: Color, tip: Color, opacity: float, planes: int, node_name: String) -> Node3D:
@@ -407,8 +528,8 @@ func _set_spear(ribbon: Node3D, amount: float, time: float) -> void:
if a < 0.02: if a < 0.02:
_set_opacity(ribbon, 0.0) _set_opacity(ribbon, 0.0)
return return
var flick_seed := float(ribbon.get_meta("seed")) var seed := float(ribbon.get_meta("seed"))
var flick := 0.82 + 0.18 * sin(time * 37.0 + flick_seed * 2.1) var flick := 0.82 + 0.18 * sin(time * 37.0 + seed * 2.1)
ribbon.scale = Vector3.ONE ribbon.scale = Vector3.ONE
_set_opacity(ribbon, float(ribbon.get_meta("opacity")) * minf(a, 1.0) * flick) _set_opacity(ribbon, float(ribbon.get_meta("opacity")) * minf(a, 1.0) * flick)
@@ -534,11 +655,11 @@ func _spot(socket: Node3D) -> SpotLight3D:
func _make_abort(socket: Node3D) -> Dictionary: func _make_abort(socket: Node3D) -> Dictionary:
var core := _taper_ribbon(socket, 2.1, 0.06, 0.20, Color(1.0, 0.97, 0.92, 1.0), Color(1.0, 0.45, 0.12, 0.72), Color(0.40, 0.08, 0.02, 0.0), 0.95, 3, "AbortCore") var core := _taper_ribbon(socket, 2.1, 0.06, 0.20, Color(1.0, 0.97, 0.92, 1.0), Color(1.0, 0.45, 0.12, 0.72), Color(0.40, 0.08, 0.02, 0.0), 0.95, 3, "AbortCore")
var sheath := _taper_ribbon(socket, 5.2, 0.10, 0.78, Color(1.0, 0.55, 0.18, 1.0), Color(1.0, 0.28, 0.06, 0.55), Color(0.35, 0.06, 0.01, 0.0), 0.82, 3, "AbortSheath") var sheath := _taper_ribbon(socket, 5.2, 0.10, 0.78, Color(1.0, 0.55, 0.18, 1.0), Color(1.0, 0.28, 0.06, 0.55), Color(0.35, 0.06, 0.01, 0.0), 0.82, 3, "AbortSheath")
return { var row: Dictionary = {}
"core": core, row["core"] = core
"sheath": sheath, row["sheath"] = sheath
"sparks": _sparks(socket, "AbortCoreSparks", 10, 0.15, 18.0, 28.0, 1.6, 0.05, 6.0), row["sparks"] = _sparks(socket, "AbortCoreSparks", 10, 0.15, 18.0, 28.0, 1.6, 0.05, 6.0)
"sheath_sparks": _sparks(socket, "AbortSheathSparks", 18, 0.26, 14.0, 22.0, 4.5, 0.09, 8.0), row["sheath_sparks"] = _sparks(socket, "AbortSheathSparks", 18, 0.26, 14.0, 22.0, 4.5, 0.09, 8.0)
"flash": _abort_flash(socket), row["flash"] = _abort_flash(socket)
"light": _spot(socket), row["light"] = _spot(socket)
} return row
Binary file not shown.
+45
View File
@@ -0,0 +1,45 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bsf6cehnp2xy7"
path="res://.godot/imported/ArgonautSite.glb-70ba0fb5c0cd1a3e0d9ec4b62d093975.scn"
[deps]
source_file="res://planets_whatnot/ArgonautSite.glb"
dest_files=["res://.godot/imported/ArgonautSite.glb-70ba0fb5c0cd1a3e0d9ec4b62d093975.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={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
Binary file not shown.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://qm03fqdikunu"
path.s3tc="res://.godot/imported/ArgonautSite_T_Argonaut_BaseColor.png-f9116cbc16640290d36eea9e578baf60.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "9955b192993b0ed878a790621f61b451"
}
[deps]
source_file="res://planets_whatnot/ArgonautSite_T_Argonaut_BaseColor.png"
dest_files=["res://.godot/imported/ArgonautSite_T_Argonaut_BaseColor.png-f9116cbc16640290d36eea9e578baf60.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
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ckug0ehydgt26"
path.s3tc="res://.godot/imported/ArgonautSite_T_Argonaut_Metallic-T_Argonaut_Roughness.png-aec96d683db590467207937d3b13cbc7.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "b344bbdc7dca8b71bbcb9acc04c79c2b"
}
[deps]
source_file="res://planets_whatnot/ArgonautSite_T_Argonaut_Metallic-T_Argonaut_Roughness.png"
dest_files=["res://.godot/imported/ArgonautSite_T_Argonaut_Metallic-T_Argonaut_Roughness.png-aec96d683db590467207937d3b13cbc7.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.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bapdvqvr8fqpi"
path.s3tc="res://.godot/imported/ArgonautSite_T_Regolith_BaseColor.png-e82f3c739731fd7b363f6af5f4f6bce8.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "65f447decf9bf29e384cfe0675874154"
}
[deps]
source_file="res://planets_whatnot/ArgonautSite_T_Regolith_BaseColor.png"
dest_files=["res://.godot/imported/ArgonautSite_T_Regolith_BaseColor.png-e82f3c739731fd7b363f6af5f4f6bce8.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.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dnw6yyqc27ijy"
path.s3tc="res://.godot/imported/ArgonautSite_T_Regolith_Normal.png-0e10b000b00deb0b8335dedea0d5e244.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "d4a3f8a9c4a38a6305d7ad8eb7305c20"
}
[deps]
source_file="res://planets_whatnot/ArgonautSite_T_Regolith_Normal.png"
dest_files=["res://.godot/imported/ArgonautSite_T_Regolith_Normal.png-0e10b000b00deb0b8335dedea0d5e244.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://planets_whatnot/ArgonautSite_T_Regolith_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
Binary file not shown.
+45
View File
@@ -0,0 +1,45 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://tr8nf8lfnu17"
path="res://.godot/imported/SM_Argonaut.glb-73a73880652f88539c9b873743d513ba.scn"
[deps]
source_file="res://planets_whatnot/SM_Argonaut.glb"
dest_files=["res://.godot/imported/SM_Argonaut.glb-73a73880652f88539c9b873743d513ba.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={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
Binary file not shown.
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://de1cxt8h7fg2"
path.s3tc="res://.godot/imported/SM_Argonaut_T_Argonaut_BaseColor.png-ab3707f28deecd6a93517aa680ff7854.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "9955b192993b0ed878a790621f61b451"
}
[deps]
source_file="res://planets_whatnot/SM_Argonaut_T_Argonaut_BaseColor.png"
dest_files=["res://.godot/imported/SM_Argonaut_T_Argonaut_BaseColor.png-ab3707f28deecd6a93517aa680ff7854.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
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://di3kk6hcc0ywm"
path.s3tc="res://.godot/imported/SM_Argonaut_T_Argonaut_Metallic-T_Argonaut_Roughness.png-3d4c4542ebeb676786691949c1454238.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "b344bbdc7dca8b71bbcb9acc04c79c2b"
}
[deps]
source_file="res://planets_whatnot/SM_Argonaut_T_Argonaut_Metallic-T_Argonaut_Roughness.png"
dest_files=["res://.godot/imported/SM_Argonaut_T_Argonaut_Metallic-T_Argonaut_Roughness.png-3d4c4542ebeb676786691949c1454238.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.
+45
View File
@@ -0,0 +1,45 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dfw2nwijt2v1f"
path="res://.godot/imported/SM_Jupiter.glb-1328e41b794dd98cd297fbebab0f402e.scn"
[deps]
source_file="res://planets_whatnot/SM_Jupiter.glb"
dest_files=["res://.godot/imported/SM_Jupiter.glb-1328e41b794dd98cd297fbebab0f402e.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={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c71y8d5r2ksgr"
path.s3tc="res://.godot/imported/SM_Jupiter_jupiter_map.webp-7ba72de1d10775a6a1ae52ab62a342c1.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "220e04f06ec0fd74f1e2ac296a954e41"
}
[deps]
source_file="res://planets_whatnot/SM_Jupiter_jupiter_map.webp"
dest_files=["res://.godot/imported/SM_Jupiter_jupiter_map.webp-7ba72de1d10775a6a1ae52ab62a342c1.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.
@@ -0,0 +1,45 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://fxb63xdux2ck"
path="res://.godot/imported/SM_LunarPathfinder.glb-933ba4b4e9c8e561997ffd0c43e143d6.scn"
[deps]
source_file="res://planets_whatnot/SM_LunarPathfinder.glb"
dest_files=["res://.godot/imported/SM_LunarPathfinder.glb-933ba4b4e9c8e561997ffd0c43e143d6.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={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
@@ -0,0 +1,44 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://t5fk7qymkxst"
path.s3tc="res://.godot/imported/SM_LunarPathfinder_T_LunarPathfinder_BaseColor.png-58edc6baf2fc42083ec4cd6b1e14a5de.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "f0531fe31f9dc7667c6ecf829eba6777"
}
[deps]
source_file="res://planets_whatnot/SM_LunarPathfinder_T_LunarPathfinder_BaseColor.png"
dest_files=["res://.godot/imported/SM_LunarPathfinder_T_LunarPathfinder_BaseColor.png-58edc6baf2fc42083ec4cd6b1e14a5de.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

Some files were not shown because too many files have changed in this diff Show More