Hold net artwork and refresh contributor credits

This commit is contained in:
Alexander Sellite 2026-08-21 21:33:13 -04:00
parent 24d91b37e5
commit 6d0e996583
13 changed files with 77 additions and 323 deletions

Binary file not shown.

View file

@ -1,45 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cvwxg6kh8ulqv"
path="res://.godot/imported/net.glb-cbbc53905aec6a50c4a3322ca7a93b1e.scn"
[deps]
source_file="res://art/exported/items/equipment/net.glb"
dest_files=["res://.godot/imported/net.glb-cbbc53905aec6a50c4a3322ca7a93b1e.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.

Before

Width:  |  Height:  |  Size: 276 KiB

View file

@ -1,45 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://binoqhg45vgbs"
path.s3tc="res://.godot/imported/net_Material.png-f4c4b0400561bc2751fe719b6b1a1e1a.s3tc.ctex"
path.etc2="res://.godot/imported/net_Material.png-f4c4b0400561bc2751fe719b6b1a1e1a.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "ef2c2ae657c9460c90eb808ba5217f39"
}
[deps]
source_file="res://art/exported/items/equipment/net_Material.png"
dest_files=["res://.godot/imported/net_Material.png-f4c4b0400561bc2751fe719b6b1a1e1a.s3tc.ctex", "res://.godot/imported/net_Material.png-f4c4b0400561bc2751fe719b6b1a1e1a.etc2.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=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View file

@ -1,45 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cdsabucjy5rpk"
path.s3tc="res://.godot/imported/net_Plane Base Color.png-3875ae3dd186ddf319c55aabb13e663f.s3tc.ctex"
path.etc2="res://.godot/imported/net_Plane Base Color.png-3875ae3dd186ddf319c55aabb13e663f.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "a6001c381d4c8e16bd2d64ea74ccff82"
}
[deps]
source_file="res://art/exported/items/equipment/net_Plane Base Color.png"
dest_files=["res://.godot/imported/net_Plane Base Color.png-3875ae3dd186ddf319c55aabb13e663f.s3tc.ctex", "res://.godot/imported/net_Plane Base Color.png-3875ae3dd186ddf319c55aabb13e663f.etc2.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=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

View file

@ -24,8 +24,10 @@ independent team Woofmeow.
arms, ears and tails, and multiple world props and decorative assets, arms, ears and tails, and multiple world props and decorative assets,
including trees and bridges. The contributor requested to be credited as including trees and bridges. The contributor requested to be credited as
`chillnfill`. `chillnfill`.
- adamantris: contributor of the original hand-net model and texture artwork; - kat: supplied the original source voice recording for the kat animalese set.
the contributor is credited as `adamantris`. Voyager created the sliced, normalized runtime derivatives.
- kim: supplied the original source voice recording for the kim animalese set.
Voyager created the sliced, normalized runtime derivatives.
Voyager is also the original catalog porter credit in PortMaster metadata. Voyager is also the original catalog porter credit in PortMaster metadata.
Third-party creators are credited with their individual records below. Those Third-party creators are credited with their individual records below. Those
@ -156,6 +158,8 @@ against the repository when this record was revised.
| Material | Runtime location | Credit or terms | | Material | Runtime location | Credit or terms |
| --- | --- | --- | | --- | --- | --- |
| Kat animalese alphabet and number sounds | `sound/dialogue/animalese/alphanumeric/` | Project-processed derivatives of the original source voice recording supplied by NETfishing community member kat. |
| Kim animalese alphabet and number sounds | `sound/dialogue/animalese/kim/` | Project-processed derivatives of the original source voice recording supplied by NETfishing community member kim. |
| Tuffy font | `ui/fonts/Tuffy_Bold.otf` | Public-domain dedication in `ui/fonts/Tuffy-LICENSE.txt`. | | Tuffy font | `ui/fonts/Tuffy_Bold.otf` | Public-domain dedication in `ui/fonts/Tuffy-LICENSE.txt`. |
| Seattle Avenue font | `ui/fonts/seattle_avenue.otf` | Public-domain font by JLH Fonts; notice in `ui/fonts/Seattle-Avenue-LICENSE.txt`. | | Seattle Avenue font | `ui/fonts/seattle_avenue.otf` | Public-domain font by JLH Fonts; notice in `ui/fonts/Seattle-Avenue-LICENSE.txt`. |
| Fishing fight loop | `audio/sfx/fishing/fighting.wav` | Edited from “Spinning reel.wav” by Freesound user tosha73, sound 509902, CC0. | | Fishing fight loop | `audio/sfx/fishing/fighting.wav` | Edited from “Spinning reel.wav” by Freesound user tosha73, sound 509902, CC0. |
@ -185,20 +189,6 @@ https://creativecommons.org/licenses/by/3.0/legalcode.
later written confirmation covering Project use, modification, later written confirmation covering Project use, modification,
distribution, commercial release, and applicable sublicensing. distribution, commercial release, and applicable sublicensing.
### adamantris hand-net contribution record
- Requested credit: `adamantris`.
- Original contribution: hand-net model and texture artwork.
- The maintained repository source and runtime export contain later Project
adaptations. Git history, rather than a duplicated current-file hash here,
identifies their bytes at any given revision.
- Repository adaptation: reshaping and the generic `net_root`, `net_rim`,
`net_mid`, and `net_tip` deformation rig were prepared by Voyager for
reuse across gathering activities.
- Permission record: retain the original submission correspondence or a
written confirmation accepting `CONTRIBUTOR-TERMS.md` with the project
records.
### Endeavour 2D contribution record ### Endeavour 2D contribution record
Endeavour created the incorporated character customization patterns and Endeavour created the incorporated character customization patterns and

View file

@ -1,88 +1,7 @@
extends "res://player/tool_socket_attachment.gd" extends "res://player/tool_socket_attachment.gd"
const TextureSamplingPolicyScript := preload( @onready var _impact_marker: Marker3D = %ImpactMarker
"res://main/texture_sampling_policy.gd"
)
const SPRING_ROOT_BONE: StringName = &"net_mid"
const SPRING_END_BONE: StringName = &"net_tip"
const IMPACT_BONE: StringName = &"net_rim"
@export_range(0.0, 10.0, 0.05) var spring_stiffness: float = 1.8
@export_range(0.0, 1.0, 0.01) var spring_drag: float = 0.68
@export_range(0.0, 10.0, 0.05) var spring_gravity: float = 0.3
@export_range(0.01, 0.5, 0.01) var spring_end_length: float = 0.1
@onready var _catching_net: Node3D = %CatchingNet
@onready var _net_model: Node3D = %NetModel
var _spring: SpringBoneSimulator3D
var _spring_was_visible: bool = false
var _net_skeleton: Skeleton3D
func _ready() -> void:
super._ready()
TextureSamplingPolicyScript.enforce_subtree(_net_model)
_configure_spring()
_sync_spring_activity()
func _process(_delta: float) -> void:
_sync_spring_activity()
func _configure_spring() -> void:
_net_skeleton = _net_model.find_child(
"Skeleton3D", true, false
) as Skeleton3D
if _net_skeleton == null:
push_error("Imported net model is missing its Skeleton3D.")
return
if _net_skeleton.find_bone(SPRING_ROOT_BONE) < 0:
push_error("Imported net model is missing bone %s." % SPRING_ROOT_BONE)
return
if _net_skeleton.find_bone(SPRING_END_BONE) < 0:
push_error("Imported net model is missing bone %s." % SPRING_END_BONE)
return
if _net_skeleton.find_bone(IMPACT_BONE) < 0:
push_error("Imported net model is missing bone %s." % IMPACT_BONE)
return
_spring = SpringBoneSimulator3D.new()
_spring.name = "NetSpring"
_spring.set_setting_count(1)
_spring.set_root_bone_name(0, SPRING_ROOT_BONE)
_spring.set_end_bone_name(0, SPRING_END_BONE)
_spring.set_extend_end_bone(0, true)
_spring.set_end_bone_direction(
0, SkeletonModifier3D.BONE_DIRECTION_FROM_PARENT
)
_spring.set_end_bone_length(0, spring_end_length)
_spring.set_stiffness(0, spring_stiffness)
_spring.set_drag(0, spring_drag)
_spring.set_gravity(0, spring_gravity)
_spring.set_gravity_direction(0, Vector3.DOWN)
_net_skeleton.add_child(_spring)
func get_impact_world_position() -> Vector3: func get_impact_world_position() -> Vector3:
if _net_skeleton == null: return _impact_marker.global_position
return _catching_net.global_position
var impact_bone_index := _net_skeleton.find_bone(IMPACT_BONE)
if impact_bone_index < 0:
return _catching_net.global_position
return _net_skeleton.global_transform * (
_net_skeleton.get_bone_global_pose(impact_bone_index).origin
)
func _sync_spring_activity() -> void:
if _spring == null:
return
var is_visible := _catching_net.is_visible_in_tree()
if is_visible and not _spring_was_visible:
_spring.active = true
_spring.reset()
elif not is_visible:
_spring.active = false
_spring_was_visible = is_visible

View file

@ -1,7 +1,42 @@
[gd_scene load_steps=3 format=3] [gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://player/net_attachment.gd" id="1_script"] [ext_resource type="Script" path="res://player/net_attachment.gd" id="1_script"]
[ext_resource type="PackedScene" path="res://art/exported/items/equipment/net.glb" id="2_model"]
[sub_resource type="StandardMaterial3D" id="HandleMaterial"]
albedo_color = Color(0.25, 0.13, 0.055, 1)
roughness = 0.9
[sub_resource type="CylinderMesh" id="HandleMesh"]
material = SubResource("HandleMaterial")
top_radius = 0.025
bottom_radius = 0.035
height = 1.25
[sub_resource type="StandardMaterial3D" id="HoopMaterial"]
albedo_color = Color(0.34, 0.39, 0.4, 1)
metallic = 0.25
roughness = 0.65
[sub_resource type="TorusMesh" id="HoopMesh"]
material = SubResource("HoopMaterial")
inner_radius = 0.24
outer_radius = 0.29
rings = 12
ring_segments = 18
[sub_resource type="StandardMaterial3D" id="NetMaterial"]
transparency = 1
albedo_color = Color(0.65, 0.78, 0.75, 0.42)
shading_mode = 0
cull_mode = 2
[sub_resource type="CylinderMesh" id="NetMesh"]
material = SubResource("NetMaterial")
top_radius = 0.24
bottom_radius = 0.08
height = 0.34
radial_segments = 12
rings = 1
[node name="NetAttachment" type="BoneAttachment3D"] [node name="NetAttachment" type="BoneAttachment3D"]
bone_name = "rod_socket" bone_name = "rod_socket"
@ -12,9 +47,18 @@ aligned_mount_path = NodePath("CatchingNet")
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
[node name="ModelMount" type="Node3D" parent="CatchingNet"] [node name="Handle" type="MeshInstance3D" parent="CatchingNet"]
position = Vector3(-0.000217, -0.098636, -0.020218) position = Vector3(0, 0.55, 0)
rotation = Vector3(0, 3.1415927, 0) mesh = SubResource("HandleMesh")
[node name="NetModel" parent="CatchingNet/ModelMount" unique_id=1627767240 instance=ExtResource("2_model")] [node name="Hoop" type="MeshInstance3D" parent="CatchingNet"]
position = Vector3(0, 1.17, 0)
mesh = SubResource("HoopMesh")
[node name="Bag" type="MeshInstance3D" parent="CatchingNet"]
position = Vector3(0, 1, 0)
mesh = SubResource("NetMesh")
[node name="ImpactMarker" type="Marker3D" parent="CatchingNet"]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector3(0, 1.17, 0)

View file

@ -57,66 +57,22 @@ func _run() -> void:
"Net rear face did not follow the socket direction guide.", "Net rear face did not follow the socket direction guide.",
) )
var model := catching_net.get_node_or_null("ModelMount/NetModel") as Node3D var handle := catching_net.get_node_or_null("Handle") as MeshInstance3D
_check(model != null, "Imported net model is missing.") var hoop := catching_net.get_node_or_null("Hoop") as MeshInstance3D
if model == null: var bag := catching_net.get_node_or_null("Bag") as MeshInstance3D
_finish(host_skeleton) var impact_marker := (
return catching_net.get_node_or_null("ImpactMarker") as Marker3D
var skeleton := model.find_child("Skeleton3D", true, false) as Skeleton3D
_check(skeleton != null, "Imported net Skeleton3D is missing.")
if skeleton == null:
_finish(host_skeleton)
return
_check(
skeleton.find_bone("net_root") >= 0,
"Imported net_root bone is missing.",
) )
_check(handle != null and handle.mesh != null, "Placeholder handle is missing.")
_check(hoop != null and hoop.mesh != null, "Placeholder hoop is missing.")
_check(bag != null and bag.mesh != null, "Placeholder net bag is missing.")
_check(impact_marker != null, "Net impact marker is missing.")
if impact_marker != null:
_check( _check(
skeleton.find_bone("net_rim") >= 0, attachment.get_impact_world_position().is_equal_approx(
"Imported net_rim bone is missing.", impact_marker.global_position
) ),
_check( "Net impact position moved away from its marker.",
skeleton.find_bone("net_mid") >= 0,
"Imported net_mid bone is missing.",
)
_check(
skeleton.find_bone("net_tip") >= 0,
"Imported net_tip bone is missing.",
)
var spring := skeleton.get_node_or_null("NetSpring") as SpringBoneSimulator3D
_check(spring != null, "Net spring simulator was not created.")
if spring != null:
_check(spring.get_setting_count() == 1, "Net spring settings changed.")
_check(
spring.get_root_bone_name(0) == &"net_mid",
"Net spring root must remain net_mid.",
)
_check(
spring.get_end_bone_name(0) == &"net_tip",
"Net spring end must remain net_tip.",
)
_check(not spring.active, "Hidden net spring must be suspended.")
catching_net.visible = true
await process_frame
await process_frame
_check(spring.active, "Visible net spring must be active.")
_check(spring.get_joint_count(0) == 2, "Net spring chain is incomplete.")
catching_net.visible = false
await process_frame
_check(not spring.active, "Hidden net spring did not suspend.")
for child: Node in model.find_children("*", "MeshInstance3D", true, false):
var mesh_instance := child as MeshInstance3D
if mesh_instance.mesh == null:
continue
for surface_index: int in mesh_instance.mesh.get_surface_count():
var material := mesh_instance.mesh.surface_get_material(surface_index)
if material is BaseMaterial3D:
_check(
(material as BaseMaterial3D).texture_filter
== BaseMaterial3D.TEXTURE_FILTER_NEAREST,
"Net material does not use nearest texture sampling.",
) )
var rod_attachment := ( var rod_attachment := (

View file

@ -149,12 +149,6 @@ func _run() -> void:
var chillnfill_credit := credits_page.get_node( var chillnfill_credit := credits_page.get_node(
"Paper/Margin/Layout/Columns/CreativeCredits/ChillnfillCredit" "Paper/Margin/Layout/Columns/CreativeCredits/ChillnfillCredit"
) as Label ) as Label
var adamantris_name := credits_page.get_node(
"Paper/Margin/Layout/Columns/CreativeCredits/AdamantrisName"
) as Label
var adamantris_credit := credits_page.get_node(
"Paper/Margin/Layout/Columns/CreativeCredits/AdamantrisCredit"
) as Label
var credits_paper := credits_page.get_node("Paper") as PanelContainer var credits_paper := credits_page.get_node("Paper") as PanelContainer
var audio_credits := credits_page.get_node( var audio_credits := credits_page.get_node(
"Paper/Margin/Layout/Columns/AdditionalCredits/AudioCredits" "Paper/Margin/Layout/Columns/AdditionalCredits/AudioCredits"
@ -173,13 +167,12 @@ func _run() -> void:
"in-game credits describe the supplied model families", "in-game credits describe the supplied model families",
) )
_expect( _expect(
adamantris_name.text == "adamantris", "kat • animalese source recording" in audio_credits.text,
"in-game credits name adamantris", "in-game credits name kat's animalese source contribution",
) )
_expect( _expect(
"hand-net model" in adamantris_credit.text.to_lower() "kim • animalese source recording" in audio_credits.text,
and "texture artwork" in adamantris_credit.text.to_lower(), "in-game credits name kim's animalese source contribution",
"in-game credits describe adamantris's hand-net contribution",
) )
_expect( _expect(
credits_paper.get_global_rect().encloses( credits_paper.get_global_rect().encloses(

View file

@ -114,19 +114,6 @@ theme_override_font_sizes/font_size = 15
text = "original 3d models for character bodies and arms, ears and tails, and multiple world props and decorative assets including trees and bridges" text = "original 3d models for character bodies and arms, ears and tails, and multiple world props and decorative assets including trees and bridges"
autowrap_mode = 2 autowrap_mode = 2
[node name="AdamantrisName" type="Label" parent="Paper/Margin/Layout/Columns/CreativeCredits"]
layout_mode = 2
theme_override_colors/font_color = Color(0.902, 0.969, 0.969, 1)
theme_override_font_sizes/font_size = 18
text = "adamantris"
[node name="AdamantrisCredit" type="Label" parent="Paper/Margin/Layout/Columns/CreativeCredits"]
layout_mode = 2
theme_override_colors/font_color = Color(0.624, 0.812, 0.824, 1)
theme_override_font_sizes/font_size = 15
text = "original hand-net model and texture artwork"
autowrap_mode = 2
[node name="AdditionalCredits" type="VBoxContainer" parent="Paper/Margin/Layout/Columns"] [node name="AdditionalCredits" type="VBoxContainer" parent="Paper/Margin/Layout/Columns"]
custom_minimum_size = Vector2(404, 0) custom_minimum_size = Vector2(404, 0)
layout_mode = 2 layout_mode = 2
@ -143,7 +130,7 @@ text = "additional audio"
layout_mode = 2 layout_mode = 2
theme_override_colors/font_color = Color(0.624, 0.812, 0.824, 1) theme_override_colors/font_color = Color(0.624, 0.812, 0.824, 1)
theme_override_font_sizes/font_size = 15 theme_override_font_sizes/font_size = 15
text = "tosha73 • fishing reel sounds\nkkenny101 • ocean ambience\nqubodup • water impact\nAyton • rain ambience\nivolipa • dog bark\nChristyboy100 • cat meow" text = "kat • animalese source recording\nkim • animalese source recording\ntosha73 • fishing reel sounds\nkkenny101 • ocean ambience\nqubodup • water impact\nAyton • rain ambience\nivolipa • dog bark\nChristyboy100 • cat meow"
[node name="TechnologySpacer" type="Control" parent="Paper/Margin/Layout/Columns/AdditionalCredits"] [node name="TechnologySpacer" type="Control" parent="Paper/Margin/Layout/Columns/AdditionalCredits"]
custom_minimum_size = Vector2(0, 9) custom_minimum_size = Vector2(0, 9)