TURDRUNNER SLUR 500, FLOORED XD LOLTOP, DADSON 420YO repaint
Builder learns 2-door coupes, two-tone accent bonnets, vinyl roof caps and boot spoilers. Datto repainted orange with vinyl roof per reference. Screenshot harness gains cam=front for front three-quarter checks. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
99718774fd
commit
09c7b2b280
Binary file not shown.
@ -4,7 +4,7 @@
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
display_name = "Datto 120Y"
|
||||
display_name = "DADSON 420YO"
|
||||
model_path = "res://cars/datto_120y/car.glb"
|
||||
engine_power = 11.0
|
||||
mass = 850.0
|
||||
|
||||
BIN
cars/floored_xd/car.glb
Normal file
BIN
cars/floored_xd/car.glb
Normal file
Binary file not shown.
42
cars/floored_xd/car.glb.import
Normal file
42
cars/floored_xd/car.glb.import
Normal file
@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cxi104t18ug8x"
|
||||
path="res://.godot/imported/car.glb-0a80c2c77b5fd88764c90110abc62a5c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://cars/floored_xd/car.glb"
|
||||
dest_files=["res://.godot/imported/car.glb-0a80c2c77b5fd88764c90110abc62a5c.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=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
|
||||
13
cars/floored_xd/stats.tres
Normal file
13
cars/floored_xd/stats.tres
Normal file
@ -0,0 +1,13 @@
|
||||
[gd_resource type="Resource" script_class="CarStats" load_steps=2 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://src/car_stats.gd" id="1"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
display_name = "FLOORED XD LOLTOP"
|
||||
model_path = "res://cars/floored_xd/car.glb"
|
||||
engine_power = 22.0
|
||||
mass = 1450.0
|
||||
grip = 5.2
|
||||
length = 4.85
|
||||
width = 1.91
|
||||
BIN
cars/turdrunner_slur/car.glb
Normal file
BIN
cars/turdrunner_slur/car.glb
Normal file
Binary file not shown.
42
cars/turdrunner_slur/car.glb.import
Normal file
42
cars/turdrunner_slur/car.glb.import
Normal file
@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://vplokepyfsqq"
|
||||
path="res://.godot/imported/car.glb-82b38045503d6fb6d0c217ab3364162e.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://cars/turdrunner_slur/car.glb"
|
||||
dest_files=["res://.godot/imported/car.glb-82b38045503d6fb6d0c217ab3364162e.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=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
|
||||
13
cars/turdrunner_slur/stats.tres
Normal file
13
cars/turdrunner_slur/stats.tres
Normal file
@ -0,0 +1,13 @@
|
||||
[gd_resource type="Resource" script_class="CarStats" load_steps=2 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://src/car_stats.gd" id="1"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
display_name = "TURDRUNNER SLUR 500"
|
||||
model_path = "res://cars/turdrunner_slur/car.glb"
|
||||
engine_power = 21.0
|
||||
mass = 1200.0
|
||||
grip = 6.0
|
||||
length = 4.51
|
||||
width = 1.71
|
||||
40
shot_crash.png.import
Normal file
40
shot_crash.png.import
Normal file
@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://x0ap1xtqufy"
|
||||
path="res://.godot/imported/shot_crash.png-0fd81ecc7f94fef4c0d6e80bfb3abf5a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://shot_crash.png"
|
||||
dest_files=["res://.godot/imported/shot_crash.png-0fd81ecc7f94fef4c0d6e80bfb3abf5a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
@ -16,12 +16,19 @@ func _run() -> void:
|
||||
Game.car_path = cars.get(opts.get("car", ""), cars.values()[0])
|
||||
Game.level_path = Registry.levels().values()[0]
|
||||
Game.mode = opts.get("mode", "cruise")
|
||||
root.add_child((load("res://src/game.tscn") as PackedScene).instantiate())
|
||||
var game: Game = (load("res://src/game.tscn") as PackedScene).instantiate()
|
||||
root.add_child(game)
|
||||
await process_frame
|
||||
if opts.get("throttle", "1") == "1":
|
||||
Input.action_press("throttle")
|
||||
for i in int(opts.get("frames", "90")):
|
||||
await physics_frame
|
||||
if opts.get("cam", "") == "front":
|
||||
game.set_process(false) # stop the chase cam fighting us
|
||||
game.cam.global_position = game.car.global_position + game.car.global_basis * Vector3(2.6, 1.6, -6.5)
|
||||
game.cam.look_at(game.car.global_position + Vector3.UP * 0.4)
|
||||
await process_frame
|
||||
await process_frame
|
||||
root.get_texture().get_image().save_png("res://" + opts.get("out", "screenshot.png"))
|
||||
print("screenshot saved")
|
||||
quit(0)
|
||||
|
||||
@ -29,12 +29,24 @@ LIGHT_F = (0.95, 0.92, 0.75, 1)
|
||||
LIGHT_R = (0.7, 0.1, 0.08, 1)
|
||||
|
||||
# L, W, heights: nose/belt/tail, lengths: bonnet/boot, roof height + rear roof end,
|
||||
# axle overhangs, wheel radius, paint, chrome bumpers, hatch rear
|
||||
# axle overhangs, wheel radius, paint, chrome bumpers, hatch rear.
|
||||
# Optional: doors=2, bonnet_color (two-tone accent), roof_cap (vinyl roof), spoiler.
|
||||
CARS = {
|
||||
"datto_120y": dict(L=3.92, W=1.50, nose=0.62, belt=0.78, tail=0.72,
|
||||
bonnet=1.00, boot=0.85, roof=1.32, roof_rear=0.75,
|
||||
ohang_f=0.72, ohang_r=0.80, wheel=0.27,
|
||||
paint=(0.78, 0.62, 0.16, 1), chrome_bumpers=True, hatch=False),
|
||||
paint=(0.90, 0.45, 0.08, 1), chrome_bumpers=True, hatch=False,
|
||||
roof_cap=(0.24, 0.23, 0.22, 1)),
|
||||
"turdrunner_slur": dict(L=4.51, W=1.71, nose=0.64, belt=0.82, tail=0.76,
|
||||
bonnet=1.35, boot=1.15, roof=1.34, roof_rear=0.85,
|
||||
ohang_f=0.85, ohang_r=0.95, wheel=0.30,
|
||||
paint=(0.95, 0.75, 0.05, 1), chrome_bumpers=False, hatch=False,
|
||||
bonnet_color=(0.04, 0.04, 0.04, 1), spoiler=True),
|
||||
"floored_xd": dict(L=4.85, W=1.91, nose=0.62, belt=0.86, tail=0.80,
|
||||
bonnet=1.60, boot=1.00, roof=1.31, roof_rear=0.70,
|
||||
ohang_f=0.95, ohang_r=1.00, wheel=0.31,
|
||||
paint=(0.04, 0.04, 0.045, 1), chrome_bumpers=False, hatch=False,
|
||||
doors=2),
|
||||
"gemmy_tx": dict(L=4.13, W=1.57, nose=0.60, belt=0.76, tail=0.70,
|
||||
bonnet=1.15, boot=0.95, roof=1.28, roof_rear=0.80,
|
||||
ohang_f=0.80, ohang_r=0.85, wheel=0.28,
|
||||
@ -165,28 +177,40 @@ def build(car_id, s):
|
||||
door_z = (bottom + 0.3 + s["belt"]) / 2
|
||||
door_h = s["belt"] - bottom - 0.32
|
||||
span = (ws_base - 0.05) - (boot_y + 0.05)
|
||||
half = span / 2
|
||||
parts.append(box("det_door_f%s" % side, (sx * hw, ws_base - 0.05 - half / 2, door_z),
|
||||
(0.06, half - 0.06, door_h), paint_dk))
|
||||
parts.append(box("det_door_r%s" % side, (sx * hw, boot_y + 0.05 + half / 2, door_z),
|
||||
(0.06, half - 0.06, door_h), paint_dk))
|
||||
if s.get("doors", 4) == 2:
|
||||
parts.append(box("det_door_%s" % side, (sx * hw, ws_base - 0.05 - span * 0.35, door_z),
|
||||
(0.06, span * 0.68, door_h), paint_dk))
|
||||
else:
|
||||
half = span / 2
|
||||
parts.append(box("det_door_f%s" % side, (sx * hw, ws_base - 0.05 - half / 2, door_z),
|
||||
(0.06, half - 0.06, door_h), paint_dk))
|
||||
parts.append(box("det_door_r%s" % side, (sx * hw, boot_y + 0.05 + half / 2, door_z),
|
||||
(0.06, half - 0.06, door_h), paint_dk))
|
||||
parts.append(box("det_mirror_%s" % side, (sx * (hw + 0.09), ws_base + 0.05, s["belt"] + 0.10),
|
||||
(0.14, 0.09, 0.12), dark))
|
||||
parts.append(box("det_bumper_f", (0, f + 0.05, bottom + 0.16), (W + 0.06, 0.15, 0.16), bumper_mat))
|
||||
parts.append(box("det_bumper_r", (0, r - 0.05, bottom + 0.16), (W + 0.06, 0.15, 0.16), bumper_mat))
|
||||
|
||||
# bonnet plate follows the bonnet slope
|
||||
# bonnet plate follows the bonnet slope; optional two-tone accent colour
|
||||
bonnet_mat = material("bonnet", s["bonnet_color"], rough=0.35) if "bonnet_color" in s else paint_dk
|
||||
by1, bz1, by2, bz2 = f - 0.35, nose2, ws_base + 0.03, s["belt"]
|
||||
ang = math.atan2(bz2 - bz1, by2 - by1)
|
||||
parts.append(box("det_bonnet", ((0, (by1 + by2) / 2, (bz1 + bz2) / 2 + 0.02)),
|
||||
(W * 0.7, math.hypot(by2 - by1, bz2 - bz1) - 0.1, 0.04), paint_dk, rot_x=-ang))
|
||||
(W * 0.7, math.hypot(by2 - by1, bz2 - bz1) - 0.1, 0.04), bonnet_mat, rot_x=-ang))
|
||||
if not s["hatch"]:
|
||||
ty1, tz1, ty2, tz2 = boot_y - 0.03, s["belt"], r + 0.1, s["tail"]
|
||||
ang = math.atan2(tz2 - tz1, ty2 - ty1)
|
||||
parts.append(box("det_boot", ((0, (ty1 + ty2) / 2, (tz1 + tz2) / 2 + 0.02)),
|
||||
(W * 0.7, math.hypot(ty2 - ty1, tz2 - tz1) - 0.1, 0.04), paint_dk, rot_x=-ang))
|
||||
|
||||
trim = [
|
||||
trim = []
|
||||
if "roof_cap" in s: # vinyl roof
|
||||
cap_f, cap_r = ws_base - 0.55, boot_y + s["roof_rear"]
|
||||
trim.append(box("trim_roof", (0, (cap_f + cap_r) / 2, s["roof"] + 0.012),
|
||||
(W * 0.86, cap_f - cap_r + 0.1, 0.035), material("vinyl", s["roof_cap"], rough=0.9)))
|
||||
if s.get("spoiler"): # bootlid ducktail
|
||||
trim.append(box("trim_spoiler", (0, r + 0.22, s["tail"] + 0.05), (W * 0.8, 0.28, 0.09), paint))
|
||||
trim += [
|
||||
box("trim_grille", (0, f + 0.01, s["nose"] - 0.14), (W * 0.5, 0.05, 0.12), dark),
|
||||
box("trim_light_fl", (-W * 0.33, f + 0.02, s["nose"] - 0.13), (0.24, 0.05, 0.13), material("lf", LIGHT_F)),
|
||||
box("trim_light_fr", (W * 0.33, f + 0.02, s["nose"] - 0.13), (0.24, 0.05, 0.13), material("lf2", LIGHT_F)),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user