style: Make water buffalo hat taller with rounded dome top, and shorten horns to white base and brown tip
checkpoint / checkpoint (push) Successful in 6m21s

This commit is contained in:
2026-09-20 12:00:38 +00:00
parent 62fa0b0067
commit bb65274a49
2 changed files with 38 additions and 39 deletions
Binary file not shown.
+38 -39
View File
@@ -304,21 +304,33 @@ func _gen_water_buffalo_hat() -> void:
var root := Node3D.new() var root := Node3D.new()
root.name = "AttachmentRoot" root.name = "AttachmentRoot"
# 1. Hat Cap (royal blue felt lodge hat, sitting on head crown)
var cap := MeshInstance3D.new()
cap.name = "HatCap"
var cap_mesh := CylinderMesh.new()
cap_mesh.top_radius = 0.28
cap_mesh.bottom_radius = 0.32
cap_mesh.height = 0.26
cap.mesh = cap_mesh
cap.position = Vector3(0.0, 0.12, 0.0)
var cap_mat := StandardMaterial3D.new() var cap_mat := StandardMaterial3D.new()
cap_mat.albedo_color = Color(0.13, 0.20, 0.58) # Flintstones Water Buffalo blue cap_mat.albedo_color = Color(0.13, 0.20, 0.58) # Flintstones Water Buffalo blue
cap_mat.roughness = 0.95 cap_mat.roughness = 0.95
# 1. Hat Cap Base (taller cylindrical body)
var cap := MeshInstance3D.new()
cap.name = "HatCap"
var cap_mesh := CylinderMesh.new()
cap_mesh.top_radius = 0.30
cap_mesh.bottom_radius = 0.32
cap_mesh.height = 0.30
cap.mesh = cap_mesh
cap.position = Vector3(0.0, 0.15, 0.0)
cap.material_override = cap_mat cap.material_override = cap_mat
root.add_child(cap) root.add_child(cap)
# 1b. Rounded Dome Top (makes the hat taller and rounded, less flat)
var dome := MeshInstance3D.new()
dome.name = "HatDome"
var dome_mesh := SphereMesh.new()
dome_mesh.radius = 0.30
dome_mesh.height = 0.28
dome.mesh = dome_mesh
dome.position = Vector3(0.0, 0.26, 0.0)
dome.material_override = cap_mat
root.add_child(dome)
# 2. Fur Brim / Rim at bottom edge of cap # 2. Fur Brim / Rim at bottom edge of cap
var brim := MeshInstance3D.new() var brim := MeshInstance3D.new()
brim.name = "FurBrim" brim.name = "FurBrim"
@@ -339,7 +351,7 @@ func _gen_water_buffalo_hat() -> void:
var medal_mesh := BoxMesh.new() var medal_mesh := BoxMesh.new()
medal_mesh.size = Vector3(0.12, 0.10, 0.04) medal_mesh.size = Vector3(0.12, 0.10, 0.04)
medal.mesh = medal_mesh medal.mesh = medal_mesh
medal.position = Vector3(0.0, 0.12, -0.32) medal.position = Vector3(0.0, 0.16, -0.32)
var medal_mat := StandardMaterial3D.new() var medal_mat := StandardMaterial3D.new()
medal_mat.albedo_color = Color(0.96, 0.82, 0.18) # Gold lodge crest medal_mat.albedo_color = Color(0.96, 0.82, 0.18) # Gold lodge crest
medal_mat.metallic = 0.7 medal_mat.metallic = 0.7
@@ -347,55 +359,42 @@ func _gen_water_buffalo_hat() -> void:
medal.material_override = medal_mat medal.material_override = medal_mat
root.add_child(medal) root.add_child(medal)
# Horn material: ivory/bone # Horn material: first part is ivory/white, tip is brown (no middle piece)
var horn_mat := StandardMaterial3D.new() var horn_mat := StandardMaterial3D.new()
horn_mat.albedo_color = Color(0.92, 0.89, 0.82) # Bone/ivory horn_mat.albedo_color = Color(0.93, 0.90, 0.82) # Bone/ivory white
horn_mat.roughness = 0.5 horn_mat.roughness = 0.45
var tip_mat := StandardMaterial3D.new() var tip_mat := StandardMaterial3D.new()
tip_mat.albedo_color = Color(0.20, 0.17, 0.14) # Dark horn tip tip_mat.albedo_color = Color(0.28, 0.18, 0.12) # Buffalo horn brown
tip_mat.roughness = 0.6 tip_mat.roughness = 0.55
# 4. Sweeping Curved Water Buffalo Horns (curving outward and up) # 4. Short Water Buffalo Horns: white base + brown tip only
for side in [-1.0, 1.0]: for side in [-1.0, 1.0]:
var side_name := "Right" if side < 0.0 else "Left" var side_name := "Right" if side < 0.0 else "Left"
# Base segment (projecting horizontally outwards from side of hat) # First part: white base segment projecting outward from side of hat
var h_base := MeshInstance3D.new() var h_base := MeshInstance3D.new()
h_base.name = "Horn_%s_Base" % side_name h_base.name = "Horn_%s_Base" % side_name
var base_mesh := CylinderMesh.new() var base_mesh := CylinderMesh.new()
base_mesh.bottom_radius = 0.08 base_mesh.bottom_radius = 0.08
base_mesh.top_radius = 0.065 base_mesh.top_radius = 0.055
base_mesh.height = 0.20 base_mesh.height = 0.17
h_base.mesh = base_mesh h_base.mesh = base_mesh
h_base.position = Vector3(side * 0.36, 0.12, 0.02) h_base.position = Vector3(side * 0.34, 0.18, 0.01)
h_base.rotation_degrees = Vector3(10.0, side * -15.0, side * -70.0) h_base.rotation_degrees = Vector3(5.0, side * -10.0, side * -60.0)
h_base.material_override = horn_mat h_base.material_override = horn_mat
root.add_child(h_base) root.add_child(h_base)
# Mid segment (sweeping upward and outward) # Second part: brown tip segment curving upward (middle piece removed)
var h_mid := MeshInstance3D.new()
h_mid.name = "Horn_%s_Mid" % side_name
var mid_mesh := CylinderMesh.new()
mid_mesh.bottom_radius = 0.065
mid_mesh.top_radius = 0.045
mid_mesh.height = 0.22
h_mid.mesh = mid_mesh
h_mid.position = Vector3(side * 0.52, 0.24, 0.0)
h_mid.rotation_degrees = Vector3(15.0, side * -10.0, side * -25.0)
h_mid.material_override = horn_mat
root.add_child(h_mid)
# Tip segment (curving upward and inward to sharp tip)
var h_tip := MeshInstance3D.new() var h_tip := MeshInstance3D.new()
h_tip.name = "Horn_%s_Tip" % side_name h_tip.name = "Horn_%s_Tip" % side_name
var tip_mesh := CylinderMesh.new() var tip_mesh := CylinderMesh.new()
tip_mesh.bottom_radius = 0.045 tip_mesh.bottom_radius = 0.055
tip_mesh.top_radius = 0.005 tip_mesh.top_radius = 0.005
tip_mesh.height = 0.18 tip_mesh.height = 0.15
h_tip.mesh = tip_mesh h_tip.mesh = tip_mesh
h_tip.position = Vector3(side * 0.56, 0.40, -0.04) h_tip.position = Vector3(side * 0.46, 0.28, -0.01)
h_tip.rotation_degrees = Vector3(20.0, 0.0, side * 20.0) h_tip.rotation_degrees = Vector3(12.0, 0.0, side * 10.0)
h_tip.material_override = tip_mat h_tip.material_override = tip_mat
root.add_child(h_tip) root.add_child(h_tip)