Rebrand project and refresh title presentation

This commit is contained in:
Alexander Sellite 2026-08-25 17:14:12 -04:00
parent 17fef2c5d4
commit 7ae20789a9
138 changed files with 1511 additions and 1498 deletions

View file

@ -1,15 +1,15 @@
# NETfishing Asset License 1.1
# straywild Asset License 1.1
Copyright © 2026 Woofmeow. All rights reserved except for the permissions
expressly granted below.
## 1. Scope
This license applies to original NETfishing artwork, graphics, textures,
This license applies to original straywild artwork, graphics, textures,
models, animations, music, sound recordings, narrative content, visual
designs, characters, and other creative assets owned by the NETfishing owners
designs, characters, and other creative assets owned by the straywild owners
or licensed to them with authority to sublicense, publishing as Woofmeow (the
**“NETfishing Assets”**).
**“straywild Assets”**).
It does not apply to:
@ -17,77 +17,77 @@ It does not apply to:
- third-party material identified in the source repository's
`docs/ATTRIBUTION.md` or the packaged `ATTRIBUTION.md` notice;
- material accompanied by a different license; or
- the NETfishing and Woofmeow names and logos, which are addressed in
- the straywild and Woofmeow names and logos, which are addressed in
`TRADEMARKS.md`.
Repository location alone does not change third-party ownership or licensing.
## 2. Definitions
**Official NETfishing Software** means:
**Official straywild Software** means:
- an unmodified binary release published by the NETfishing owners through an
official NETfishing distribution channel; or
- a build made from an unmodified official NETfishing source release or tagged
- an unmodified binary release published by the straywild owners through an
official straywild distribution channel; or
- a build made from an unmodified official straywild source release or tagged
revision.
**Mod** means a non-standalone add-on created to operate with Official
NETfishing Software. A Mod may add, replace, or alter content loaded by the
Official NETfishing Software, but it may not redistribute a replacement copy
straywild Software. A Mod may add, replace, or alter content loaded by the
Official straywild Software, but it may not redistribute a replacement copy
of the game or represent a fork, clone, sequel, or separate game.
**Contribution Fork** means a source-control fork or clone of an official
NETfishing source repository that is created and maintained in good faith
straywild source repository that is created and maintained in good faith
primarily to prepare, test, review, or submit changes for possible inclusion
in Official NETfishing Software. It does not include a fork presented or
in Official straywild Software. It does not include a fork presented or
developed as an independent game, community edition, replacement distribution,
or ongoing product separate from the official NETfishing project.
or ongoing product separate from the official straywild project.
## 3. Permission to use the official game
You may reproduce NETfishing Assets as technically necessary to install, run,
back up, and privately modify a lawfully obtained copy of Official NETfishing
You may reproduce straywild Assets as technically necessary to install, run,
back up, and privately modify a lawfully obtained copy of Official straywild
Software.
You may capture, publish, and monetize screenshots, gameplay videos,
livestreams, reviews, tutorials, and similar commentary showing a lawfully
obtained copy of NETfishing. This permission does not authorize redistribution
obtained copy of straywild. This permission does not authorize redistribution
of the source asset files or imply endorsement.
## 4. Community Mod license
Subject to this license, you may create, modify, and distribute NETfishing
Assets solely as part of a Mod for Official NETfishing Software.
Subject to this license, you may create, modify, and distribute straywild
Assets solely as part of a Mod for Official straywild Software.
This permission is worldwide, nonexclusive, royalty-free, and available for
as long as you comply with this license. It permits only the copies of
NETfishing Assets reasonably necessary for the Mod to function. It does not
straywild Assets reasonably necessary for the Mod to function. It does not
permit distributing the original game, a substantially complete collection of
its assets, or a general-purpose asset pack.
A distributed Mod must:
1. require a separately obtained copy of Official NETfishing Software;
1. require a separately obtained copy of Official straywild Software;
2. be presented as unofficial community content;
3. include the following notice in its documentation or distribution page:
> Contains or adapts NETfishing assets © 2026 Woofmeow, used under the
> NETfishing Asset License 1.1. This Mod is unofficial and is not endorsed
> Contains or adapts straywild assets © 2026 Woofmeow, used under the
> straywild Asset License 1.1. This Mod is unofficial and is not endorsed
> by Woofmeow.
4. identify material created by the Mod author separately from NETfishing
4. identify material created by the Mod author separately from straywild
Assets; and
5. comply with `TRADEMARKS.md`.
Mods may be shared without charge and may accept voluntary donations that do
not purchase access, features, or preferential treatment. Selling a Mod,
charging for access to it, licensing it commercially, or using NETfishing
charging for access to it, licensing it commercially, or using straywild
Assets in paid products requires separate written permission from both
NETfishing owners.
straywild owners.
## 5. Contribution Fork license
Subject to this license, you may reproduce, modify, and distribute NETfishing
Subject to this license, you may reproduce, modify, and distribute straywild
Assets within a Contribution Fork. You may also make the nonpublic builds
reasonably necessary to develop, test, and review its proposed contribution.
@ -99,8 +99,8 @@ fork are permitted distributions.
A Contribution Fork must:
1. remain primarily directed toward preparing changes for possible inclusion
in the official NETfishing project;
2. preserve this license and the official NETfishing project's applicable
in the official straywild project;
2. preserve this license and the official straywild project's applicable
attribution, third-party license, and copyright notices;
3. remain visibly linked to or identified as a fork of the official source
repository and not be presented as official or endorsed;
@ -109,63 +109,63 @@ A Contribution Fork must:
contribution;
5. not publish general-audience binaries, releases, packages, or downloads,
operate a persistent public alternative service, or monetize access;
6. not distribute the NETfishing Assets as a standalone extraction, archive,
6. not distribute the straywild Assets as a standalone extraction, archive,
or general-purpose asset pack; and
7. comply with `TRADEMARKS.md`.
Temporary access-controlled servers may be operated when reasonably necessary
to test a proposed contribution. They may not be promoted or maintained as a
public alternative to Official NETfishing Software or its services.
public alternative to Official straywild Software or its services.
Submitting work from a Contribution Fork is governed separately by
`CONTRIBUTOR-TERMS.md` and does not require the NETfishing owners to accept the
`CONTRIBUTOR-TERMS.md` and does not require the straywild owners to accept the
work. Declining or closing a proposed contribution does not retroactively
invalidate good-faith use under this section. A compliant Contribution Fork
may remain publicly accessible as an archival development record, but it may
not be repurposed for continued development or distribution of a separate
product containing NETfishing Assets.
product containing straywild Assets.
## 6. Uses not permitted
Except as expressly permitted by Sections 3, 4, and 5 or by separate written
permission from both NETfishing owners, you may not use or distribute
NETfishing Assets:
permission from both straywild owners, you may not use or distribute
straywild Assets:
- in a fork, clone, remake, sequel, or standalone game that is not a qualifying
Contribution Fork;
- with a modified distribution of the GPL-covered NETfishing code that is not
Official NETfishing Software, except for nonpublic contribution-testing
- with a modified distribution of the GPL-covered straywild code that is not
Official straywild Software, except for nonpublic contribution-testing
builds permitted by Section 5;
- in another game, application, asset library, template, or merchandise;
- as a substantially complete asset extraction or archive;
- in a way that implies sponsorship, endorsement, or official status;
- to register a confusingly similar trademark, domain, account, or product
identity; or
- under terms that claim ownership of the NETfishing Assets themselves.
- under terms that claim ownership of the straywild Assets themselves.
The GPL permits forks and redistribution of the GPL-covered code. Except for a
qualifying Contribution Fork under Section 5, this asset license does not
permit those forks to carry NETfishing Assets. A code fork that is not a
Contribution Fork must remove or replace the NETfishing Assets and reserved
permit those forks to carry straywild Assets. A code fork that is not a
Contribution Fork must remove or replace the straywild Assets and reserved
branding unless both owners grant separate written permission.
## 7. Ownership of Mods and contribution work
You retain ownership of your original Mod material and original material
created in a Contribution Fork. The NETfishing owners retain ownership of the
NETfishing Assets and adaptations of those assets to the extent provided by
created in a Contribution Fork. The straywild owners retain ownership of the
straywild Assets and adaptations of those assets to the extent provided by
applicable law.
This license does not require you to assign or submit your original material.
It also does not grant you ownership of the underlying NETfishing Assets. If
you intentionally submit material for inclusion in NETfishing,
It also does not grant you ownership of the underlying straywild Assets. If
you intentionally submit material for inclusion in straywild,
`CONTRIBUTOR-TERMS.md` applies separately.
## 8. Termination and cure
Your permissions under this license terminate automatically if you violate
its terms. They are reinstated provisionally when you stop the violation and
permanently if both NETfishing owners do not notify you of the violation
permanently if both straywild owners do not notify you of the violation
within sixty days after it has been cured.
Termination does not limit remedies available for activity outside this
@ -173,15 +173,15 @@ license.
## 9. No warranty
THE NETFISHING ASSETS ARE PROVIDED “AS IS,” WITHOUT WARRANTY OF ANY KIND,
THE straywild ASSETS ARE PROVIDED “AS IS,” WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, TITLE, OR NON-INFRINGEMENT. TO THE MAXIMUM EXTENT
PERMITTED BY LAW, THE OWNERS WILL NOT BE LIABLE FOR ANY CLAIM, DAMAGES, OR
OTHER LIABILITY ARISING FROM THIS LICENSE OR USE OF THE NETFISHING ASSETS.
OTHER LIABILITY ARISING FROM THIS LICENSE OR USE OF THE straywild ASSETS.
## 10. Additional permission
Uses not granted here require written permission from both NETfishing owners.
Uses not granted here require written permission from both straywild owners.
A permission granted to one person or project does not amend this license for
others.

View file

@ -1,6 +1,6 @@
# Contribution policy
NETfishing is an owner-directed Woofmeow project and is not accepting
straywild is an owner-directed Woofmeow project and is not accepting
unsolicited contributions. Please do not submit pull requests, patches, code,
artwork, models, audio, writing, documentation, translations, designs, or
other implementation work. Pull requests are disabled for the official
@ -17,7 +17,7 @@ work; it is not a standing invitation to contribute.
## Contribution forks
The [NETfishing Asset License](ASSET-LICENSE.md) contains limited permissions
The [straywild Asset License](ASSET-LICENSE.md) contains limited permissions
for qualifying Contribution Forks. Those permissions do not promise review or
acceptance and do not override the policy above. Keep the hosting platform's
fork relationship visible, preserve all license and attribution notices, and
@ -79,4 +79,4 @@ using display strings as persistent identifiers.
New standalone source files should use `SPDX-License-Identifier:
GPL-3.0-or-later` where the file format permits comments. Do not add that
identifier to asset files governed by the NETfishing Asset License.
identifier to asset files governed by the straywild Asset License.

View file

@ -1,6 +1,6 @@
# NETfishing contributor terms
# straywild contributor terms
NETfishing does not accept unsolicited contributions. These terms are retained
straywild does not accept unsolicited contributions. These terms are retained
as the governing record for contributions previously accepted after their
publication and for specific future work that both Owners expressly invite in
writing before submission. They are not a request or standing invitation for
@ -9,9 +9,9 @@ patches, pull requests, assets, or other material.
These terms do not retroactively change ownership of earlier work or replace a
separately signed agreement.
“Owners” means the two NETfishing co-owners who publish the Project as
“Owners” means the two straywild co-owners who publish the Project as
Woofmeow and are publicly credited as Voyager and Endeavour. “Project” means
the official NETfishing game, its servers, tools, documentation, websites,
the official straywild game, its servers, tools, documentation, websites,
ports, updates, and promotional materials.
## 1. Your ownership and authority
@ -56,8 +56,8 @@ royalty-free, transferable, and sublicensable license to:
- license it to Project users under `ASSET-LICENSE.md` or a later Project asset
license jointly approved by the Owners.
This grant is limited to NETfishing, its promotion, and official successor or
derived NETfishing products. It does not transfer your copyright or authorize
This grant is limited to straywild, its promotion, and official successor or
derived straywild products. It does not transfer your copyright or authorize
the Owners to sell your contribution as an unrelated standalone asset.
## 4. Documentation accompanying code
@ -78,7 +78,7 @@ or release.
## 6. No automatic ownership, employment, or payment
Submitting a contribution does not provide ownership of NETfishing, create an
Submitting a contribution does not provide ownership of straywild, create an
employment, agency, partnership, or fiduciary relationship, or create a right
to compensation. Any payment, ownership, or employment arrangement requires a
separate written agreement signed by the appropriate parties.

View file

@ -1,6 +1,6 @@
# NETfishing
# straywild
NETfishing is a multiplayer-first fishing game built with Godot 4.7. The
straywild is a multiplayer-first fishing game built with Godot 4.7. The
current pre-alpha includes host-authoritative fishing and economy flows,
freshwater and saltwater habitats, persistent player data, social features,
customization, jobs, and a controller-aware interface.
@ -8,39 +8,39 @@ customization, jobs, and a controller-aware interface.
The project is under active development. Interfaces, balance, content, and
save migrations may continue to change before a stable release.
NETfishing is developed and published by **Woofmeow**, the independent team of
straywild is developed and published by **Woofmeow**, the independent team of
co-owners publicly credited as Voyager and Endeavour.
## Links
Patreon: https://www.patreon.com/cw/woofmeowgames
Steam: https://store.steampowered.com/app/5068950/NETfishing/
Steam: https://store.steampowered.com/app/5068950/straywild/
Itch.io: https://sol6-vi.itch.io/netfishing
Itch.io: https://sol6-vi.itch.io/straywild
Discord: https://discord.gg/5gP22447kc
Matrix: https://matrix.to/#/#netfishing:matrix.makearmy.io
Matrix: https://matrix.to/#/#straywild:matrix.makearmy.io
Repo: https://forge.makearmy.io/woofmeow/netfishing
Repo: https://forge.makearmy.io/woofmeow/straywild
Releases: https://forge.makearmy.io/woofmeow/netfishing/releases
Releases: https://forge.makearmy.io/woofmeow/straywild/releases
## Installing release builds
Download and extract the archive for your platform from the official release
page, then run NETfishing from the extracted platform folder.
page, then run straywild from the extracted platform folder.
### macOS
Current macOS builds are not signed or notarized. macOS may block the first
launch because it cannot verify the developer. Control-click the NETfishing
launch because it cannot verify the developer. Control-click the straywild
application, choose **Open**, then confirm **Open**. If that option is not
available, attempt to open the application once, then use **System Settings →
Privacy & Security → Open Anyway**.
Only bypass this warning for a NETfishing build downloaded from an official
Only bypass this warning for a straywild build downloaded from an official
project release.
## Requirements
@ -110,10 +110,10 @@ world and UI authoring, and testing are consolidated in
- Project-owned software code is licensed under
[GPL-3.0-or-later](LICENSE).
- Project-owned artwork, models, music, and other creative assets are covered
by the [NETfishing Asset License](ASSET-LICENSE.md). It permits community
Mods for official NETfishing software and narrowly scoped contribution forks,
by the [straywild Asset License](ASSET-LICENSE.md). It permits community
Mods for official straywild software and narrowly scoped contribution forks,
but not independent forks, clones, or unrelated products.
- The NETfishing and Woofmeow names and branding are reserved as described in
- The straywild and Woofmeow names and branding are reserved as described in
[TRADEMARKS.md](TRADEMARKS.md).
- Third-party materials retain their own terms; see the consolidated
[credits, notices, and provenance record](docs/ATTRIBUTION.md).

View file

@ -1,7 +1,7 @@
# NETfishing and Woofmeow branding
# straywild and Woofmeow branding
The NETfishing and Woofmeow names, logos, icons, trade dress, and other source
identifiers are reserved by the NETfishing owners, publishing as Woofmeow.
The straywild and Woofmeow names, logos, icons, trade dress, and other source
identifiers are reserved by the straywild owners, publishing as Woofmeow.
Their presence in a GPL-licensed repository does not grant trademark rights or
imply permission to represent another product as official.
@ -10,30 +10,30 @@ exist through use and other law.
## Permitted references
You may use the names NETfishing and Woofmeow truthfully to:
You may use the names straywild and Woofmeow truthfully to:
- refer to the official game or development team;
- state that software interoperates with or is a Mod for NETfishing;
- state that software interoperates with or is a Mod for straywild;
- link to an official repository or distribution page; and
- discuss, review, criticize, or report on the Project.
Use only the amount of branding reasonably necessary to identify the Project.
Do not imply sponsorship, certification, endorsement, or official status.
An unofficial Mod may use wording such as “Example Mod for NETfishing” if its
An unofficial Mod may use wording such as “Example Mod for straywild” if its
name and presentation remain clearly distinct and it displays an unofficial
notice.
## Contribution forks
A qualifying Contribution Fork under `ASSET-LICENSE.md` may retain the
NETfishing and Woofmeow names, logos, icons, and trade dress already present in
straywild and Woofmeow names, logos, icons, and trade dress already present in
the official source repository solely as necessary to reproduce, modify, and
test the Project while preparing a proposed contribution. The source-control
host's visible fork relationship or an equivalent repository notice must make
its unofficial contribution purpose clear.
This permission does not allow a Contribution Fork to use NETfishing or
This permission does not allow a Contribution Fork to use straywild or
Woofmeow branding to advertise a public build, release, service, community
edition, or independent product. It does not imply acceptance, sponsorship,
endorsement, or official status.
@ -44,7 +44,7 @@ The GNU GPL permits forks and redistribution of covered code. A fork or
modified distribution that is not a qualifying Contribution Fork must:
- use a distinct product name;
- remove NETfishing and Woofmeow logos, icons, and official trade dress;
- remove straywild and Woofmeow logos, icons, and official trade dress;
- avoid confusingly similar names, domains, package identifiers, and account
names; and
- clearly identify itself as independent and unofficial.
@ -53,4 +53,4 @@ These branding terms do not limit rights granted by the GPL to the software
code or lawful nominative, descriptive, comparative, or fair use.
Permission for broader branding use must be obtained in writing from both
NETfishing owners.
straywild owners.

View file

@ -1,6 +1,6 @@
[plugin]
name="NETfishing Shoreline Auto-Baker"
name="straywild Shoreline Auto-Baker"
description="Rebuilds configured static shoreline ribbons after authored terrain reimports."
author="woofmeow"
version="1.0.0"

View file

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://w7n4gjqq1juc"
path="res://.godot/imported/netfishing_base_character.glb-0167c087f16181d405afb962dc877d2c.scn"
path="res://.godot/imported/straywild_base_character.glb-65021653e51a906d3b4a3494f170317f.scn"
[deps]
source_file="res://art/exported/characters/base/netfishing_base_character.glb"
dest_files=["res://.godot/imported/netfishing_base_character.glb-0167c087f16181d405afb962dc877d2c.scn"]
source_file="res://art/exported/characters/base/straywild_base_character.glb"
dest_files=["res://.godot/imported/straywild_base_character.glb-65021653e51a906d3b4a3494f170317f.scn"]
[params]

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dyjwgkgw0syo8"
path.s3tc="res://.godot/imported/netfishing_base_character_eyes_simple_shine.png-140bfa3aa0b6f662e8ff9e5721213a61.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_base_character_eyes_simple_shine.png-140bfa3aa0b6f662e8ff9e5721213a61.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_base_character_eyes_simple_shine.png-200a946ddace2078bbe44addb4e4524c.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_base_character_eyes_simple_shine.png-200a946ddace2078bbe44addb4e4524c.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/exported/characters/base/netfishing_base_character_eyes_simple_shine.png"
dest_files=["res://.godot/imported/netfishing_base_character_eyes_simple_shine.png-140bfa3aa0b6f662e8ff9e5721213a61.s3tc.ctex", "res://.godot/imported/netfishing_base_character_eyes_simple_shine.png-140bfa3aa0b6f662e8ff9e5721213a61.etc2.ctex"]
source_file="res://art/exported/characters/base/straywild_base_character_eyes_simple_shine.png"
dest_files=["res://.godot/imported/straywild_base_character_eyes_simple_shine.png-200a946ddace2078bbe44addb4e4524c.s3tc.ctex", "res://.godot/imported/straywild_base_character_eyes_simple_shine.png-200a946ddace2078bbe44addb4e4524c.etc2.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Before After
Before After

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dt5gitdtjdvcd"
path.s3tc="res://.godot/imported/netfishing_base_character_mouth_three.png-90b4a98403d2a291a56a8ed42aaa8473.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_base_character_mouth_three.png-90b4a98403d2a291a56a8ed42aaa8473.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_base_character_mouth_three.png-5bcf329b31a11eff496760a63e62d0e2.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_base_character_mouth_three.png-5bcf329b31a11eff496760a63e62d0e2.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/exported/characters/base/netfishing_base_character_mouth_three.png"
dest_files=["res://.godot/imported/netfishing_base_character_mouth_three.png-90b4a98403d2a291a56a8ed42aaa8473.s3tc.ctex", "res://.godot/imported/netfishing_base_character_mouth_three.png-90b4a98403d2a291a56a8ed42aaa8473.etc2.ctex"]
source_file="res://art/exported/characters/base/straywild_base_character_mouth_three.png"
dest_files=["res://.godot/imported/straywild_base_character_mouth_three.png-5bcf329b31a11eff496760a63e62d0e2.s3tc.ctex", "res://.godot/imported/straywild_base_character_mouth_three.png-5bcf329b31a11eff496760a63e62d0e2.etc2.ctex"]
[params]

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bmho1ryst3smt"
path.s3tc="res://.godot/imported/netfishing_base_character_nose_dog_round.png-0008adff5271dd0403e610ef13dd52cf.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_base_character_nose_dog_round.png-0008adff5271dd0403e610ef13dd52cf.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_base_character_nose_dog_round.png-e6909a2c139cf4a2748c2b79d1e12d92.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_base_character_nose_dog_round.png-e6909a2c139cf4a2748c2b79d1e12d92.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/exported/characters/base/netfishing_base_character_nose_dog_round.png"
dest_files=["res://.godot/imported/netfishing_base_character_nose_dog_round.png-0008adff5271dd0403e610ef13dd52cf.s3tc.ctex", "res://.godot/imported/netfishing_base_character_nose_dog_round.png-0008adff5271dd0403e610ef13dd52cf.etc2.ctex"]
source_file="res://art/exported/characters/base/straywild_base_character_nose_dog_round.png"
dest_files=["res://.godot/imported/straywild_base_character_nose_dog_round.png-e6909a2c139cf4a2748c2b79d1e12d92.s3tc.ctex", "res://.godot/imported/straywild_base_character_nose_dog_round.png-e6909a2c139cf4a2748c2b79d1e12d92.etc2.ctex"]
[params]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bkh5hw8wwu8pc"
path="res://.godot/imported/netfishing_1024.png-7c53a099ed2743b4a623c258641b1d29.ctex"
path="res://.godot/imported/straywild_1024.png-b9b5c159c9fcecc21b04324370d4522f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/exported/system_icons/netfishing_1024.png"
dest_files=["res://.godot/imported/netfishing_1024.png-7c53a099ed2743b4a623c258641b1d29.ctex"]
source_file="res://art/exported/system_icons/straywild_1024.png"
dest_files=["res://.godot/imported/straywild_1024.png-b9b5c159c9fcecc21b04324370d4522f.ctex"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cty16m8ydla06"
path="res://.godot/imported/netfishing_256.png-d9dfc9c7871ac38bc73d09d00df679be.ctex"
path="res://.godot/imported/straywild_256.png-87b7e62e710eae4d3e3ed24a8454ca6d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/exported/system_icons/netfishing_256.png"
dest_files=["res://.godot/imported/netfishing_256.png-d9dfc9c7871ac38bc73d09d00df679be.ctex"]
source_file="res://art/exported/system_icons/straywild_256.png"
dest_files=["res://.godot/imported/straywild_256.png-87b7e62e710eae4d3e3ed24a8454ca6d.ctex"]
[params]

View file

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cb4bcakhoprm8"
path="res://.godot/imported/netfishing_base_character.blend-65bf3bc5b77cc1a37fa3f81ebd808d37.scn"
path="res://.godot/imported/straywild_base_character.blend-02abbfdb9b1d393f1bd3cfface615e27.scn"
[deps]
source_file="res://art/source/characters/base/netfishing_base_character.blend"
dest_files=["res://.godot/imported/netfishing_base_character.blend-65bf3bc5b77cc1a37fa3f81ebd808d37.scn"]
source_file="res://art/source/characters/base/straywild_base_character.blend"
dest_files=["res://.godot/imported/straywild_base_character.blend-02abbfdb9b1d393f1bd3cfface615e27.scn"]
[params]

View file

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bfhnup14638r7"
path="res://.godot/imported/netfishing_base_character.glb-cbdc33eaa4fcd1d2d2a8f4a463b228d6.scn"
path="res://.godot/imported/straywild_base_character.glb-c9650c715a1b5b9ae0d8541191f7d7a9.scn"
[deps]
source_file="res://art/source/characters/base/netfishing_base_character.glb"
dest_files=["res://.godot/imported/netfishing_base_character.glb-cbdc33eaa4fcd1d2d2a8f4a463b228d6.scn"]
source_file="res://art/source/characters/base/straywild_base_character.glb"
dest_files=["res://.godot/imported/straywild_base_character.glb-c9650c715a1b5b9ae0d8541191f7d7a9.scn"]
[params]

View file

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://d38y8blk2w5c5"
path="res://.godot/imported/netfishing_character_source.blend-1d18c95606937d4c8bcb87e334e02ee5.scn"
path="res://.godot/imported/straywild_character_source.blend-0e7b8a87008f88e309ad73a63561ef5b.scn"
[deps]
source_file="res://art/source/characters/base/netfishing_character_source.blend"
dest_files=["res://.godot/imported/netfishing_character_source.blend-1d18c95606937d4c8bcb87e334e02ee5.scn"]
source_file="res://art/source/characters/base/straywild_character_source.blend"
dest_files=["res://.godot/imported/straywild_character_source.blend-0e7b8a87008f88e309ad73a63561ef5b.scn"]
[params]

View file

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://3uq4cxiomttt"
path="res://.godot/imported/netfishing_character_source.glb-9c98ee44b142c5b3d06f0838b7d2c9c4.scn"
path="res://.godot/imported/straywild_character_source.glb-3a8ccc55dbe60da1b70b62110b206353.scn"
[deps]
source_file="res://art/source/characters/base/netfishing_character_source.glb"
dest_files=["res://.godot/imported/netfishing_character_source.glb-9c98ee44b142c5b3d06f0838b7d2c9c4.scn"]
source_file="res://art/source/characters/base/straywild_character_source.glb"
dest_files=["res://.godot/imported/straywild_character_source.glb-3a8ccc55dbe60da1b70b62110b206353.scn"]
[params]

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bdomsntfeovnc"
path.s3tc="res://.godot/imported/netfishing_character_source_eyes1_eyebrows1.png-a0b9f287e407afd9688e141dc5f2b801.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_character_source_eyes1_eyebrows1.png-a0b9f287e407afd9688e141dc5f2b801.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_character_source_eyes1_eyebrows1.png-3c638377e631a94b998336d0ca1d8b8e.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_character_source_eyes1_eyebrows1.png-3c638377e631a94b998336d0ca1d8b8e.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/source/characters/base/netfishing_character_source_eyes1_eyebrows1.png"
dest_files=["res://.godot/imported/netfishing_character_source_eyes1_eyebrows1.png-a0b9f287e407afd9688e141dc5f2b801.s3tc.ctex", "res://.godot/imported/netfishing_character_source_eyes1_eyebrows1.png-a0b9f287e407afd9688e141dc5f2b801.etc2.ctex"]
source_file="res://art/source/characters/base/straywild_character_source_eyes1_eyebrows1.png"
dest_files=["res://.godot/imported/straywild_character_source_eyes1_eyebrows1.png-3c638377e631a94b998336d0ca1d8b8e.s3tc.ctex", "res://.godot/imported/straywild_character_source_eyes1_eyebrows1.png-3c638377e631a94b998336d0ca1d8b8e.etc2.ctex"]
[params]

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://du4u6meapay05"
path.s3tc="res://.godot/imported/netfishing_character_source_eyes_simple_shine.png-965743f3716320bbc385096956ffef2d.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_character_source_eyes_simple_shine.png-965743f3716320bbc385096956ffef2d.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_character_source_eyes_simple_shine.png-97500ad873e0da3aaf0e9e3c3198e38a.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_character_source_eyes_simple_shine.png-97500ad873e0da3aaf0e9e3c3198e38a.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/source/characters/base/netfishing_character_source_eyes_simple_shine.png"
dest_files=["res://.godot/imported/netfishing_character_source_eyes_simple_shine.png-965743f3716320bbc385096956ffef2d.s3tc.ctex", "res://.godot/imported/netfishing_character_source_eyes_simple_shine.png-965743f3716320bbc385096956ffef2d.etc2.ctex"]
source_file="res://art/source/characters/base/straywild_character_source_eyes_simple_shine.png"
dest_files=["res://.godot/imported/straywild_character_source_eyes_simple_shine.png-97500ad873e0da3aaf0e9e3c3198e38a.s3tc.ctex", "res://.godot/imported/straywild_character_source_eyes_simple_shine.png-97500ad873e0da3aaf0e9e3c3198e38a.etc2.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://css0k0virgoph"
path.s3tc="res://.godot/imported/netfishing_character_source_mouth1.png-b323b9153acd3f552f35c1d1108567c8.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_character_source_mouth1.png-b323b9153acd3f552f35c1d1108567c8.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_character_source_mouth1.png-ff2ed280ca7e84bdd0749ed5b5b16f54.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_character_source_mouth1.png-ff2ed280ca7e84bdd0749ed5b5b16f54.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/source/characters/base/netfishing_character_source_mouth1.png"
dest_files=["res://.godot/imported/netfishing_character_source_mouth1.png-b323b9153acd3f552f35c1d1108567c8.s3tc.ctex", "res://.godot/imported/netfishing_character_source_mouth1.png-b323b9153acd3f552f35c1d1108567c8.etc2.ctex"]
source_file="res://art/source/characters/base/straywild_character_source_mouth1.png"
dest_files=["res://.godot/imported/straywild_character_source_mouth1.png-ff2ed280ca7e84bdd0749ed5b5b16f54.s3tc.ctex", "res://.godot/imported/straywild_character_source_mouth1.png-ff2ed280ca7e84bdd0749ed5b5b16f54.etc2.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Before After
Before After

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://di20c1x8vksi1"
path.s3tc="res://.godot/imported/netfishing_character_source_mouth_three.png-6bf79d4c9c660d30fb7fc365f0039313.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_character_source_mouth_three.png-6bf79d4c9c660d30fb7fc365f0039313.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_character_source_mouth_three.png-adf40ee30e725bafadf6a8fa4dbd8abf.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_character_source_mouth_three.png-adf40ee30e725bafadf6a8fa4dbd8abf.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/source/characters/base/netfishing_character_source_mouth_three.png"
dest_files=["res://.godot/imported/netfishing_character_source_mouth_three.png-6bf79d4c9c660d30fb7fc365f0039313.s3tc.ctex", "res://.godot/imported/netfishing_character_source_mouth_three.png-6bf79d4c9c660d30fb7fc365f0039313.etc2.ctex"]
source_file="res://art/source/characters/base/straywild_character_source_mouth_three.png"
dest_files=["res://.godot/imported/straywild_character_source_mouth_three.png-adf40ee30e725bafadf6a8fa4dbd8abf.s3tc.ctex", "res://.godot/imported/straywild_character_source_mouth_three.png-adf40ee30e725bafadf6a8fa4dbd8abf.etc2.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://7dwa0bfev1rk"
path.s3tc="res://.godot/imported/netfishing_character_source_nose1.2.png-ef4dd456c5b0f0db73b3dc063bfba941.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_character_source_nose1.2.png-ef4dd456c5b0f0db73b3dc063bfba941.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_character_source_nose1.2.png-0a8355472731651768eaa5fc2ee168d4.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_character_source_nose1.2.png-0a8355472731651768eaa5fc2ee168d4.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/source/characters/base/netfishing_character_source_nose1.2.png"
dest_files=["res://.godot/imported/netfishing_character_source_nose1.2.png-ef4dd456c5b0f0db73b3dc063bfba941.s3tc.ctex", "res://.godot/imported/netfishing_character_source_nose1.2.png-ef4dd456c5b0f0db73b3dc063bfba941.etc2.ctex"]
source_file="res://art/source/characters/base/straywild_character_source_nose1.2.png"
dest_files=["res://.godot/imported/straywild_character_source_nose1.2.png-0a8355472731651768eaa5fc2ee168d4.s3tc.ctex", "res://.godot/imported/straywild_character_source_nose1.2.png-0a8355472731651768eaa5fc2ee168d4.etc2.ctex"]
[params]

View file

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b0p55hwdry2cr"
path.s3tc="res://.godot/imported/netfishing_character_source_nose_dog_round.png-1c89150861ebff3f930698c1747a0369.s3tc.ctex"
path.etc2="res://.godot/imported/netfishing_character_source_nose_dog_round.png-1c89150861ebff3f930698c1747a0369.etc2.ctex"
path.s3tc="res://.godot/imported/straywild_character_source_nose_dog_round.png-d1ea0db61e41dfeeed3b599286ffb82c.s3tc.ctex"
path.etc2="res://.godot/imported/straywild_character_source_nose_dog_round.png-d1ea0db61e41dfeeed3b599286ffb82c.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -15,8 +15,8 @@ generator_parameters={
[deps]
source_file="res://art/source/characters/base/netfishing_character_source_nose_dog_round.png"
dest_files=["res://.godot/imported/netfishing_character_source_nose_dog_round.png-1c89150861ebff3f930698c1747a0369.s3tc.ctex", "res://.godot/imported/netfishing_character_source_nose_dog_round.png-1c89150861ebff3f930698c1747a0369.etc2.ctex"]
source_file="res://art/source/characters/base/straywild_character_source_nose_dog_round.png"
dest_files=["res://.godot/imported/straywild_character_source_nose_dog_round.png-d1ea0db61e41dfeeed3b599286ffb82c.s3tc.ctex", "res://.godot/imported/straywild_character_source_nose_dog_round.png-d1ea0db61e41dfeeed3b599286ffb82c.etc2.ctex"]
[params]

View file

@ -7,7 +7,7 @@ prove authorship or licensing.
## Ownership and credits
NETfishing is jointly owned, developed, and published by its creators,
straywild is jointly owned, developed, and published by its creators,
publicly credited as Voyager and Endeavour and operating collectively as the
independent team Woofmeow.
@ -31,7 +31,7 @@ independent team Woofmeow.
Voyager is also the original catalog porter credit in PortMaster metadata.
Third-party creators are credited with their individual records below. Those
credits do not imply endorsement of NETfishing, Woofmeow, or its owners.
credits do not imply endorsement of straywild, Woofmeow, or its owners.
## License map
@ -41,7 +41,7 @@ Do not describe the complete repository as covered only by the GPL.
| --- | --- |
| Project-owned software code, shaders, code-oriented scene/resource configuration, tests, build tooling, and server software | GPL-3.0-or-later; source-root `LICENSE` and packaged `GPL-3.0-or-later.txt` |
| Project-owned artwork, textures, models, animation, music, audio, narrative content, characters, and other creative assets | Source-root or packaged `ASSET-LICENSE.md` |
| NETfishing and Woofmeow names, logos, icons, and official identity | Source-root or packaged `TRADEMARKS.md` |
| straywild and Woofmeow names, logos, icons, and official identity | Source-root or packaged `TRADEMARKS.md` |
| Third-party engines, fonts, sounds, and other external material | Their original terms, recorded below and in adjacent license texts where applicable |
| Previously accepted or expressly invited outside contributions | Source-root `CONTRIBUTOR-TERMS.md` plus any separately signed agreement |
@ -50,22 +50,22 @@ the terms of their source material or generating code. Repository location
alone does not relicense third-party material.
The GPL permits study, modification, redistribution, and forks of covered
code. It does not grant rights to NETfishing creative assets or branding. The
NETfishing Asset License separately permits qualifying noncommercial add-on
Mods for official NETfishing software and narrowly scoped Contribution Forks
code. It does not grant rights to straywild creative assets or branding. The
straywild Asset License separately permits qualifying noncommercial add-on
Mods for official straywild software and narrowly scoped Contribution Forks
used to prepare changes for possible upstream inclusion. It does not permit
those assets to accompany independent code forks, clones, standalone games,
unrelated products, or general-purpose asset packs. A GPL fork that is not a
qualifying Contribution Fork must replace NETfishing assets and reserved
qualifying Contribution Fork must replace straywild assets and reserved
branding with independently licensed material and a distinct identity.
Project-wide code, asset, branding, or contributor-license changes require
written approval from both NETfishing owners under their private joint
written approval from both straywild owners under their private joint
ownership agreement.
## Godot Engine notice
NETfishing uses Godot Engine under the MIT License:
straywild uses Godot Engine under the MIT License:
> Copyright (c) 2014-present Godot Engine contributors.
> Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.
@ -103,7 +103,7 @@ FreeType for font rendering; portions are copyright The FreeType Project
Runtime file: `ui/fonts/seattle_avenue.otf`; source, hash, and original notice:
`ui/fonts/Seattle-Avenue-LICENSE.txt`.
Public-domain fonts are not governed by the NETfishing Asset License.
Public-domain fonts are not governed by the straywild Asset License.
## Intake policy
@ -122,7 +122,7 @@ owners' private project records. This public document should contain the
credits and license notices needed by recipients; it should not duplicate a
changing file inventory that can be derived from the repository itself.
NETfishing does not accept unsolicited contributions. For work expressly
straywild does not accept unsolicited contributions. For work expressly
invited by both Owners, maintainers must obtain affirmative agreement to the
source-root `CONTRIBUTOR-TERMS.md` and retain the written invitation and
agreement in a durable Project record.
@ -159,8 +159,8 @@ against the repository when this record was revised.
| 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. |
| Kat animalese alphabet and number sounds | `sound/dialogue/animalese/alphanumeric/` | Project-processed derivatives of the original source voice recording supplied by straywild community member kat. |
| Kim animalese alphabet and number sounds | `sound/dialogue/animalese/kim/` | Project-processed derivatives of the original source voice recording supplied by straywild community member kim. |
| 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`. |
| Fishing fight loop | `audio/sfx/fishing/fighting.wav` | Edited from “Spinning reel.wav” by Freesound user tosha73, sound 509902, CC0. |

View file

@ -1,6 +1,6 @@
# Development reference
This is the authoritative reference for NETfishing architecture, engineering
This is the authoritative reference for straywild architecture, engineering
decisions, content policy, authoring, and validation.
## Architecture
@ -43,7 +43,7 @@ open host may publish a short-lived room lease, and the shared Join Game page
may browse compatible leases before handing the selected address back to the
existing direct ENet connection flow. The directory does not carry gameplay
traffic or become a gameplay authority. Its base URL comes from
`network/discovery/base_url`, with `NETFISHING_DISCOVERY_URL` available as a
`network/discovery/base_url`, with `straywild_DISCOVERY_URL` available as a
development/deployment override.
Friendships are local identity relationships shared across save slots. A live,
@ -261,7 +261,7 @@ copies of the entire customization catalog.
### Texture sampling
NETfishing artwork uses nearest-neighbor sampling. Do not enable linear,
straywild artwork uses nearest-neighbor sampling. Do not enable linear,
bilinear, trilinear, or anisotropic texture filtering. Shader samplers must
declare `filter_nearest`. The three canonical repeating terrain textures are
the sole mipmap exception: their projected shader uses nearest-filtered
@ -351,10 +351,10 @@ godot --headless --path . --script tests/fish_catalog_content_validation.gd
rm -rf -- "$test_root"
```
Do not point `NETFISHING_DATA_DIR` at an arbitrary empty directory; it is an
Do not point `straywild_DATA_DIR` at an arbitrary empty directory; it is an
explicit portable-data override and must identify a valid data root. The
PortMaster launcher is the narrow exception: it also sets
`NETFISHING_CREATE_DATA_DIR=1`, allowing the game to initialize its known empty
`straywild_CREATE_DATA_DIR=1`, allowing the game to initialize its known empty
external save directory on first launch.
Headless tests cannot prove visual alignment, mouse routing, shader appearance,

View file

@ -1,15 +1,15 @@
# PortMaster reference
NETfishing's PortMaster release is a canonical PortMaster package, not a
straywild's PortMaster release is a canonical PortMaster package, not a
version-named generic ZIP. The installer-facing archive must be named
`netfishing.zip`, and its root must contain exactly:
`straywild.zip`, and its root must contain exactly:
```text
NETfishing.sh
netfishing/
straywild.sh
straywild/
```
`port.json` belongs at `netfishing/port.json` in the distributable archive.
`port.json` belongs at `straywild/port.json` in the distributable archive.
The upstream source-submission layout keeps it beside the launcher and port
directory, but PortMaster's release builder relocates it into the declared
port directory. Do not copy the source-submission layout directly into a
@ -17,7 +17,7 @@ release ZIP.
HarbourMaster's installer also relocates recognized non-script files found at
an archive root into the detected port directory. That compatibility behavior
masked NETfishing's former root-level `port.json` during auto-install tests.
masked straywild's former root-level `port.json` during auto-install tests.
Directly extracting the same archive into `/ports` did not perform the repair.
Do not rely on installer relocation; build the distributable layout correctly.
@ -26,30 +26,30 @@ directory. The templates in `scripts/portmaster/` are authoritative.
## Release contract
- `port.json` uses schema version 4, names `netfishing.zip`, and marks the
- `port.json` uses schema version 4, names `straywild.zip`, and marks the
self-contained package ready to run.
- `NETfishing.sh` does not contain a `# PORTMASTER:` signature in the source or
- `straywild.sh` does not contain a `# PORTMASTER:` signature in the source or
distributable archive. HarbourMaster adds that installation marker when it
installs the port.
- The executable is `netfishing/NETfishing.aarch64`.
- The executable is `straywild/straywild.aarch64`.
- The package declares AArch64, two analog sticks, GLIBC 2.28, and
`weston_pkg_0.2.squashfs`.
- The launcher starts GPTOKEYB with the explicit `netfishing.gptk` no-op map.
- The launcher starts GPTOKEYB with the explicit `straywild.gptk` no-op map.
Every keyboard and mouse binding is disabled, leaving only GPTOKEYB's
device-specific force-quit chord while Godot and NETfishing's controller
device-specific force-quit chord while Godot and straywild's controller
mapping manager handle gameplay input. The explicit map also avoids the
anomalous controller behavior observed on ROCKNIX without a passthrough map.
- The launcher calls `pm_platform_helper` for the game executable after
starting GPTOKEYB and calls `pm_finish` after the game exits.
- NETfishing automatically creates player data for new installations under
`ports/saves/netfishing/` and does not present the in-game folder picker.
- straywild automatically creates player data for new installations under
`ports/saves/straywild/` and does not present the in-game folder picker.
- Existing installations with a selected data root keep that location when
upgraded. Device-local data, configuration, and cache remain under
`netfishing/conf/data`, `netfishing/conf/config`, and
`netfishing/conf/cache`.
`straywild/conf/data`, `straywild/conf/config`, and
`straywild/conf/cache`.
- The archive must not contain `conf/`, saves, identities, logs, source files,
`.git`, or `.godot` content.
- Release downloads must publish only the canonical `netfishing.zip` for this
- Release downloads must publish only the canonical `straywild.zip` for this
platform. Do not also publish a byte-identical versioned PortMaster ZIP;
HarbourMaster identifies the port by its canonical archive name and the
Forgejo release tag already supplies the version.
@ -67,7 +67,7 @@ The script deletes and regenerates the Linux ARM64 export, stages the package,
validates its structure, and writes:
```text
builds/v<project-version>/netfishing.zip
builds/v<project-version>/straywild.zip
```
`--package-only` is reserved for repackaging an already validated ARM64 export.
@ -83,7 +83,7 @@ bash scripts/build_portmaster.sh --package-only --hotfix
The hotfix keeps the game executable and PCK tied to the release tag while
recording the newer packaging commit separately in `BUILD-INFO.txt`. Replace
the release's existing `netfishing.zip`; never move the game release tag.
the release's existing `straywild.zip`; never move the game release tag.
## Local muOS installation
@ -93,22 +93,22 @@ The muOS auto-install directory is:
/mnt/mmc/MUOS/PortMaster/autoinstall/
```
For an explicit offline installation test, copy `netfishing.zip` to a temporary
For an explicit offline installation test, copy `straywild.zip` to a temporary
device directory and run:
```bash
/mnt/mmc/MUOS/PortMaster/harbourmaster \
--offline --no-check install ./netfishing.zip
--offline --no-check install ./straywild.zip
```
Before upgrading an existing installation, preserve
`/mnt/mmc/ports/netfishing/conf/` and `/mnt/mmc/ports/saves/netfishing/` on the
`/mnt/mmc/ports/straywild/conf/` and `/mnt/mmc/ports/saves/straywild/` on the
device. After installation:
1. Confirm the installed executable and PCK hashes match the staged release.
2. Confirm HarbourMaster added its `# PORTMASTER:` installation signature to
the installed launcher, then confirm the launcher starts GPTOKEYB with
`netfishing.gptk` and calls `pm_platform_helper` for the game executable.
`straywild.gptk` and calls `pm_platform_helper` for the game executable.
3. Confirm `conf/` and the external save directory were not replaced or
removed.
4. Launch the installed port through the normal muOS menu.
@ -117,7 +117,7 @@ device. After installation:
Start+Select on most devices.
Installing the public PortMaster catalog entry can still install an older
catalog build until the upstream `netfishing.zip` is updated. A local release
catalog build until the upstream `straywild.zip` is updated. A local release
test must install the generated local archive explicitly.
## Template provenance
@ -130,7 +130,7 @@ f24daae48f543b3a270a5aa46b5e73a31904bf0c7216d4c8a9e15a8dc48a5eed screenshot.png
```
The remaining catalog metadata assets were copied from the installed official
`netfishing.zip` package and are intentionally preserved byte-for-byte:
`straywild.zip` package and are intentionally preserved byte-for-byte:
```text
e2a9d132744684c67865c01eca027a8c9946b4c5a19da57c82f1af0373dc83b7 gameinfo.xml
@ -160,7 +160,7 @@ The device-verified Godot mapping is:
- left-stick click `b9`, left trigger `b10`, right trigger `b11`, right-stick click `b12`
- D-pad `h0`; left and right sticks `a0..a3`
`scripts/portmaster/NETfishing.sh` must replace the incompatible SDL2 entry
`scripts/portmaster/straywild.sh` must replace the incompatible SDL2 entry
with the Godot entry when that SDL2 GUID is selected. Do not append the two
entries with a newline. WestonPack reconstructs the wrapped game command
through a shell, so raw mapping values passed in that command can be split into
@ -169,14 +169,14 @@ this failure with the `GO-Super Gamepad` mapping. The outer Weston environment
also does not reliably preserve the corrected muOS mapping for the game.
Write the exact selected mapping to `conf/cache/controller_mapping.txt` before
starting Weston. Weston must launch `launch-netfishing.sh`, which reads that
starting Weston. Weston must launch `launch-straywild.sh`, which reads that
file, exports `SDL_GAMECONTROLLERCONFIG`, and immediately replaces itself with
the game process. This applies the mapping at the same point as the working
0.10.1 launcher without passing its raw text through WestonPack's command
reconstruction. Do not move the mapping back to either side of
`westonwrap.sh`.
Always pass `netfishing.gptk`, which explicitly unassigns every direct and
Always pass `straywild.gptk`, which explicitly unassigns every direct and
hotkey binding with GPTOKEYB's `\"` value. This keeps GPTOKEYB from injecting
keyboard or mouse events on top of Godot's native controller input and retains
the device-specific kill chord. Supplying the explicit passthrough map also
@ -209,8 +209,8 @@ The light profile passes these Godot options:
- `--max-fps 30`
- `--audio-output-latency 40`
It also passes `NETFISHING_PERFORMANCE_PROFILE=light` and
`NETFISHING_LOW_END=1`. The game renders the 3D world at 37.5% linear
It also passes `straywild_PERFORMANCE_PROFILE=light` and
`straywild_LOW_END=1`. The game renders the 3D world at 37.5% linear
resolution with nearest-neighbor scaling, reducing 3D pixel work by about 86%
while the separately rendered UI retains its canonical resolution. The light
profile also:
@ -244,7 +244,7 @@ omitted ambience or replace the micro textures with desktop-resolution assets.
The normal profile otherwise retains the full visual presentation.
To opt a capable device into the normal profile, create the persistent file
`netfishing/conf/performance_profile` containing exactly:
`straywild/conf/performance_profile` containing exactly:
```text
normal
@ -253,13 +253,13 @@ normal
On a typical muOS installation, the full path is:
```text
/mnt/mmc/ports/netfishing/conf/performance_profile
/mnt/mmc/ports/straywild/conf/performance_profile
```
Set the file to `light`, or remove it, to restore the default. An externally
provided `NETFISHING_PERFORMANCE_PROFILE=normal` or `light` environment value
provided `straywild_PERFORMANCE_PROFILE=normal` or `light` environment value
takes precedence over the persistent file. Invalid values safely fall back to
the light profile and are reported in `netfishing/log.txt`.
the light profile and are reported in `straywild/log.txt`.
Do not use Godot's low processor mode for the light profile. It reduces idle
CPU usage by sleeping between updates and is not a game-performance

View file

@ -1,10 +1,10 @@
NETfishing
straywild
v0.18.1-alpha
Alpha 0.18.1
Thank you for trying this early private playtest.
NETfishing is an early multiplayer fishing game. This alpha includes local
straywild is an early multiplayer fishing game. This alpha includes local
progression, player-hosted and dedicated multiplayer sessions, public room
discovery, and direct UDP connections. Expect rough edges and please keep a
backup of any save or identity data you care about.
@ -12,15 +12,15 @@ backup of any save or identity data you care about.
INSTALLATION
1. Extract the entire ZIP into a new folder.
2. Keep the executable and netfishing.pck together.
3. Launch netfishing.exe on Windows or netfishing on Linux.
2. Keep the executable and straywild.pck together.
3. Launch straywild.exe on Windows or straywild on Linux.
Windows may show a warning for an unsigned application. This private build is
not code signed. Only run a copy received from the playtest organizer.
Linux users may need to allow execution:
chmod +x netfishing
chmod +x straywild
CONTROLS

View file

@ -1,4 +1,4 @@
# NETfishing documentation
# straywild documentation
This directory is the single home for maintained project documentation.
Start here instead of searching feature, asset, world, or script directories
@ -17,10 +17,10 @@ for local README files.
## Related repositories
- [Discovery service API](https://forge.makearmy.io/woofmeow/netfishing-discovery-server/src/branch/main/docs/API.md)
- [Discovery service API](https://forge.makearmy.io/woofmeow/straywild-discovery-server/src/branch/main/docs/API.md)
stays with the service implementation and defines its versioned HTTP
contract.
- [Dedicated-server packaging](https://forge.makearmy.io/woofmeow/netfishing-dedicated-server/src/branch/main/README.md)
- [Dedicated-server packaging](https://forge.makearmy.io/woofmeow/straywild-dedicated-server/src/branch/main/README.md)
stays with its installer and update scripts. It consumes this repository's
attribution and legal notices from the exact pinned game commit instead of
maintaining copies.

View file

@ -9,7 +9,7 @@ custom_features=""
export_filter="all_resources"
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
exclude_filter="builds/*,scripts/*"
export_path="builds/v0.18.1-alpha/windows-x86_64/NETfishing.exe"
export_path="builds/v0.18.1-alpha/windows-x86_64/straywild.exe"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
@ -32,16 +32,16 @@ codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon="res://art/exported/system_icons/netfishing.ico"
application/icon="res://art/exported/system_icons/straywild.ico"
application/console_wrapper_icon=""
application/icon_interpolation=4
application/icon_interpolation=0
application/file_version="0.18.1.0"
application/product_version="0.18.1.0"
application/company_name="Woofmeow"
application/product_name="NETfishing"
application/file_description="NETfishing v0.18.1-alpha"
application/product_name="straywild"
application/file_description="straywild v0.18.1-alpha"
application/copyright="Copyright © 2026 Woofmeow"
application/trademarks="NETfishing and Woofmeow branding is reserved; see TRADEMARKS.md"
application/trademarks="straywild and Woofmeow branding is reserved; see TRADEMARKS.md"
application/export_angle=0
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
@ -62,7 +62,7 @@ custom_features=""
export_filter="all_resources"
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
exclude_filter="builds/*,scripts/*"
export_path="builds/v0.18.1-alpha/linux-arm64/NETfishing.arm64"
export_path="builds/v0.18.1-alpha/linux-arm64/straywild.arm64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
@ -92,7 +92,7 @@ custom_features=""
export_filter="all_resources"
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
exclude_filter="builds/*,scripts/*"
export_path="builds/v0.18.1-alpha/macos/NETfishing.zip"
export_path="builds/v0.18.1-alpha/macos/straywild.zip"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
@ -105,8 +105,8 @@ script_export_mode=2
custom_template/debug=""
custom_template/release=""
application/bundle_identifier="io.woofmeow.netfishing"
application/icon="res://art/exported/system_icons/netfishing_1024.png"
application/bundle_identifier="io.woofmeow.straywild"
application/icon="res://art/exported/system_icons/straywild_1024.png"
application/icon_interpolation=0
application/short_version="0.18.1"
application/version="0.18.1"
@ -125,7 +125,7 @@ custom_features=""
export_filter="all_resources"
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
exclude_filter="builds/*,scripts/*,tests/*"
export_path="builds/v0.18.1-alpha/server-linux-x86_64/NETfishingServer.x86_64"
export_path="builds/v0.18.1-alpha/server-linux-x86_64/straywildServer.x86_64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
@ -155,7 +155,7 @@ custom_features=""
export_filter="all_resources"
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
exclude_filter="builds/*,scripts/*"
export_path="builds/v0.18.1-alpha/android/NETfishing.apk"
export_path="builds/v0.18.1-alpha/android/straywild.apk"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
@ -178,8 +178,8 @@ architectures/x86=false
architectures/x86_64=false
version/code=180100
version/name="v0.18.1-alpha"
package/unique_name="io.woofmeow.netfishing"
package/name="NETfishing"
package/unique_name="io.woofmeow.straywild"
package/name="straywild"
package/signed=true
package/app_category=0
package/retain_data_on_uninstall=false
@ -187,7 +187,7 @@ package/exclude_from_recents=false
package/show_in_android_tv=false
package/show_in_app_library=true
package/show_as_launcher_app=true
launcher_icons/main_192x192="res://art/exported/system_icons/netfishing_256.png"
launcher_icons/main_192x192="res://art/exported/system_icons/straywild_256.png"
graphics/opengl_debug=false
screen/immersive_mode=true
screen/edge_to_edge=false
@ -214,7 +214,7 @@ custom_features=""
export_filter="all_resources"
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
exclude_filter="builds/*,scripts/*"
export_path="builds/v0.18.1-alpha/linux-x86_64/NETfishing.x86_64"
export_path="builds/v0.18.1-alpha/linux-x86_64/straywild.x86_64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""

View file

@ -294,7 +294,7 @@ func _ready() -> void:
_configure_presentation_performance_profile(
_performance_profile.is_light()
)
DisplayServer.window_set_title("NETfishing")
DisplayServer.window_set_title("straywild")
_rain_ambience = RainAmbienceType.new()
_rain_ambience.name = "RainAmbience"
add_child(_rain_ambience)
@ -324,11 +324,12 @@ func _ready() -> void:
func _configure_presentation_performance_profile(light_profile: bool) -> void:
_game_ui.get_title_screen().set_minimal_presentation(light_profile)
_game_ui.set_light_performance_profile(light_profile)
var title_water_material := _title_background.material as ShaderMaterial
if title_water_material != null:
title_water_material.set_shader_parameter(
var title_background_material := (
_title_background.material as ShaderMaterial
)
if title_background_material != null:
title_background_material.set_shader_parameter(
"animation_enabled",
not light_profile,
)
@ -461,7 +462,7 @@ func _print_dedicated_metrics() -> void:
metrics["gatherables"] = _network_world_spawns.call(
"get_network_metrics"
)
print("NETfishing server metrics: %s" % JSON.stringify(metrics))
print("straywild server metrics: %s" % JSON.stringify(metrics))
func _start_dedicated_server() -> void:
@ -556,7 +557,7 @@ func _start_dedicated_server() -> void:
_fail_dedicated_server(_discovery.get_host_status_message())
return
print(
"NETfishing dedicated server ready: %s on %s:%d (%d players, %s, timezone %s)"
"straywild dedicated server ready: %s on %s:%d (%d players, %s, timezone %s)"
% [
config.server_name,
config.bind_address,
@ -1096,7 +1097,7 @@ func _initialize_application(dedicated: bool) -> void:
func _show_data_root_setup() -> void:
if _data_setup_dialog == null:
_data_setup_dialog = ConfirmationDialog.new()
_data_setup_dialog.title = "NETfishing player data"
_data_setup_dialog.title = "straywild player data"
_data_setup_dialog.ok_button_text = "Use This Folder"
_data_setup_dialog.cancel_button_text = "Quit"
_data_setup_dialog.confirmed.connect(_use_default_data_root)
@ -1113,14 +1114,14 @@ func _show_data_root_setup() -> void:
var default_path: String = _data_root.default_visible_path()
var legacy: bool = PortableDataMigration.legacy_files_present()
_data_setup_dialog.dialog_text = (
("Move your existing NETfishing data to an easy-to-find folder."
if legacy else "Choose where NETfishing stores your player data.")
("Move your existing straywild data to an easy-to-find folder."
if legacy else "Choose where straywild stores your player data.")
+ "\n\n%s\n\nYou can choose a Syncthing folder."
% (default_path if not default_path.is_empty() else "Choose a folder")
)
_data_setup_dialog.ok_button_text = (
(
"Move to Documents/NETFISHING"
"Move to Documents/straywild"
if legacy else "Use This Folder"
)
if not default_path.is_empty()
@ -1129,7 +1130,7 @@ func _show_data_root_setup() -> void:
_data_setup_current_button.visible = not default_path.is_empty()
if not _data_root.error_message.is_empty():
_data_setup_dialog.dialog_text = (
"Your NETfishing data folder is unavailable.\n\n%s"
"Your straywild data folder is unavailable.\n\n%s"
% _data_root.error_message
)
_data_setup_dialog.popup_centered(Vector2i(640, 360))
@ -1265,11 +1266,11 @@ func _activate_selected_data_path(path: String, app_data: bool = false) -> void:
func _show_existing_root_choice(path: String) -> void:
_pending_existing_root_path = path
var dialog: ConfirmationDialog = ConfirmationDialog.new()
dialog.title = "Existing NETfishing data"
dialog.title = "Existing straywild data"
dialog.ok_button_text = "Use Data Already in Selected Folder"
dialog.cancel_button_text = "Cancel"
dialog.dialog_text = (
"This folder already contains NETfishing player data.\n\n"
"This folder already contains straywild player data.\n\n"
+ "Choose which complete data set to use. Data is never merged automatically."
)
dialog.add_button(

View file

@ -38,7 +38,7 @@
[ext_resource type="Script" uid="uid://dpiv6wttry0j4" path="res://network/player_data_root.gd" id="37_data_root"]
[ext_resource type="Script" uid="uid://bu5q4a8jfvxkf" path="res://network/identity_backup_service.gd" id="38_identity_backup"]
[ext_resource type="Script" uid="uid://djmxy6jibi5y3" path="res://ui/interface_font_controller.gd" id="39_fonts"]
[ext_resource type="Shader" uid="uid://c8s1g7tn771du" path="res://ui/title_water_background.gdshader" id="40_title_water"]
[ext_resource type="Texture2D" uid="uid://doju2lbj2ghwa" path="res://world/generation/chunks/assets/chunk_0000_grass_lite.png" id="40_title_grass"]
[ext_resource type="Texture2D" uid="uid://f8a0cs0s7ler" path="res://art/patterns/pattern_tealdot.png" id="41_menu_pattern"]
[ext_resource type="Shader" uid="uid://byw3iub66qvog" path="res://ui/player_menu_pattern.gdshader" id="42_menu_pattern"]
[ext_resource type="Texture2D" uid="uid://b6xws1d2dnbnn" path="res://art/patterns/pattern_moneyfish.png" id="43_shop_pattern"]
@ -59,18 +59,12 @@
[ext_resource type="Script" path="res://network/network_world_spawn_service.gd" id="59_world_spawns"]
[ext_resource type="Script" path="res://gathering/gathering_controller.gd" id="60_gathering_controller"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_title_water_native"]
shader = ExtResource("40_title_water")
shader_parameter/surface_color = Color(0.1, 0.45, 0.62, 1)
shader_parameter/middle_color = Color(0.055, 0.285, 0.4, 1)
shader_parameter/depth_color = Color(0.02, 0.16, 0.27, 1)
shader_parameter/virtual_pixel_density = Vector2(320, 180)
shader_parameter/color_step_count = 14.0
shader_parameter/continuous_depth_blend = 0.12
shader_parameter/wave_speed = 0.1
shader_parameter/wave_scale = 2.4
shader_parameter/wave_strength = 0.012
shader_parameter/caustic_strength = 0.018
[sub_resource type="ShaderMaterial" id="ShaderMaterial_title_grass_native"]
shader = ExtResource("42_menu_pattern")
shader_parameter/pattern_texture = ExtResource("40_title_grass")
shader_parameter/source_tile_size = Vector2(128, 128)
shader_parameter/display_scale = 1.0
shader_parameter/scroll_velocity_pixels = Vector2(-7.5, -7.5)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_player_menu_pattern"]
shader = ExtResource("42_menu_pattern")
@ -139,7 +133,7 @@ layer = -1
[node name="TitleBackground" type="ColorRect" parent="TitleBackgroundLayer" unique_id=1768697365]
unique_name_in_owner = true
material = SubResource("ShaderMaterial_title_water_native")
material = SubResource("ShaderMaterial_title_grass_native")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0

View file

@ -2,9 +2,9 @@ class_name RuntimePerformanceProfile
extends RefCounted
const PROFILE_ENVIRONMENT_VARIABLE: String = (
"NETFISHING_PERFORMANCE_PROFILE"
"straywild_PERFORMANCE_PROFILE"
)
const LEGACY_LIGHT_ENVIRONMENT_VARIABLE: String = "NETFISHING_LOW_END"
const LEGACY_LIGHT_ENVIRONMENT_VARIABLE: String = "straywild_LOW_END"
const NORMAL_PROFILE: StringName = &"normal"
const LIGHT_PROFILE: StringName = &"light"
const NORMAL_WORLD_RENDER_SCALE: float = 1.0

View file

@ -1,6 +1,6 @@
extends Node
## Enforces NETfishing's nearest-neighbor-only artwork policy at runtime.
## Enforces straywild's nearest-neighbor-only artwork policy at runtime.
##
## Godot uses separate texture-filter enums for CanvasItem and 3D materials.
## Applying both here prevents imported models, dynamically created controls,

View file

@ -20,12 +20,12 @@ signal friend_invite_received(
signal friend_invite_finished(success: bool, message: String)
const BASE_URL_SETTING: String = "network/discovery/base_url"
const BASE_URL_ENVIRONMENT: String = "NETFISHING_DISCOVERY_URL"
const BASE_URL_ENVIRONMENT: String = "straywild_DISCOVERY_URL"
const SETTINGS_PATH: String = "user://network_discovery.cfg"
const DEFAULT_ROOM_NAME: String = "Player's Server"
const LEGACY_DEFAULT_ROOM_NAME: String = "NETfishing Room"
const LEGACY_DEFAULT_ROOM_NAME: String = "straywild Room"
const LEGACY_DEDICATED_DEFAULT_ROOM_NAME: String = (
"NETfishing Dedicated Server"
"straywild Dedicated Server"
)
const ROOM_NAME_SUFFIX: String = "'s Server"
const MAX_ROOM_NAME_LENGTH: int = 48
@ -33,7 +33,7 @@ const HEARTBEAT_INTERVAL_SECONDS: float = 15.0
const REQUEST_TIMEOUT_SECONDS: float = 8.0
const TRAVERSAL_POLL_INTERVAL_SECONDS: float = 1.0
const JOIN_PROBE_INTERVAL_SECONDS: float = 0.35
const TRAVERSAL_PACKET_PREFIX: String = "NETFISHING_TRAVERSAL_V1 "
const TRAVERSAL_PACKET_PREFIX: String = "straywild_TRAVERSAL_V1 "
const UPNP_MAPPING_DURATION_SECONDS: int = 3600
const UPNP_RENEW_INTERVAL_SECONDS: float = 2700.0
const UPNP_RETRY_INTERVAL_SECONDS: float = 300.0
@ -560,7 +560,7 @@ func _configured_base_url() -> String:
if not value.is_empty() and not (
value.begins_with("https://") or value.begins_with("http://")
):
push_warning("Ignored invalid NETfishing discovery URL.")
push_warning("Ignored invalid straywild discovery URL.")
return ""
return value
@ -809,7 +809,7 @@ func _on_traversal_request_completed(
var port: int = int(endpoint.get("port", 0))
if address.is_empty() or port < 1 or port > 65535:
continue
var punch: PackedByteArray = "NETFISHING_PUNCH_V1".to_utf8_buffer()
var punch: PackedByteArray = "straywild_PUNCH_V1".to_utf8_buffer()
for _attempt: int in 3:
_session.send_traversal_packet(address, port, punch)
@ -895,13 +895,13 @@ func _configure_upnp_mapping(port: int) -> Dictionary:
var mapping_result: int = upnp.add_port_mapping(
port,
port,
"NETfishing",
"straywild",
"UDP",
UPNP_MAPPING_DURATION_SECONDS,
)
if mapping_result == UPNP.UPNP_RESULT_ONLY_PERMANENT_LEASE_SUPPORTED:
mapping_result = upnp.add_port_mapping(
port, port, "NETfishing", "UDP", 0
port, port, "straywild", "UDP", 0
)
return {
"success": mapping_result == UPNP.UPNP_RESULT_SUCCESS,
@ -1374,18 +1374,18 @@ func _discovery_version_mismatch_message(required_version: String) -> String:
match rejection:
NetworkProtocol.RejectionCode.CLIENT_OUTDATED:
return (
"Your NETfishing version is out of date. Update to %s to "
"Your straywild version is out of date. Update to %s to "
+ "enable public discovery. This room will not be listed "
+ "until you update."
) % required_version
NetworkProtocol.RejectionCode.SERVER_OUTDATED:
return (
"Public discovery is still on NETfishing %s. This room "
"Public discovery is still on straywild %s. This room "
+ "will not be listed until discovery is updated for %s."
) % [required_version, local_version]
_:
return (
"Public discovery requires NETfishing %s. This room will "
"Public discovery requires straywild %s. This room will "
+ "not be listed until both versions match."
) % required_version
@ -1577,4 +1577,4 @@ func _save_settings() -> void:
config.set_value("social", "share_presence", _presence_sharing)
var error: Error = config.save(SETTINGS_PATH)
if error != OK:
push_warning("Could not save local NETfishing discovery settings.")
push_warning("Could not save local straywild discovery settings.")

View file

@ -3,7 +3,7 @@ extends Node
signal operation_finished(success: bool, message: String)
const MAGIC := "NETFISHING_IDENTITY_BACKUP"
const MAGIC := "straywild_IDENTITY_BACKUP"
const FORMAT_VERSION := 1
const MAX_BACKUP_BYTES := 256 * 1024
const MIN_PASSPHRASE_LENGTH := 12
@ -189,7 +189,7 @@ func import_backup(
)
_finish(
bool(result.get("ok", false)),
"Identity imported. Restart NETfishing before multiplayer."
"Identity imported. Restart straywild before multiplayer."
if bool(result.get("ok", false))
else "Could not install this identity backup.",
)

View file

@ -5,7 +5,7 @@ const ALGORITHM: String = "RSA-3072-SHA256"
const FINGERPRINT_LENGTH: int = 64
const MAX_PUBLIC_KEY_BYTES: int = 8192
const MAX_SIGNATURE_BYTES: int = 1024
const DOMAIN_PREFIX: String = "NETFISHING"
const DOMAIN_PREFIX: String = "straywild"
const IDENTITY_VERSION: String = "identity_v1"

View file

@ -3,7 +3,7 @@ extends RefCounted
const WorldLayoutType = preload("res://world/world_layout.gd")
const PROTOCOL_VERSION: int = 10
const PROTOCOL_VERSION: int = 11
const GAME_BUILD: String = "prealpha"
const MAX_GAME_VERSION_LENGTH: int = 64
const MAX_DISPLAY_NAME_LENGTH: int = 24
@ -304,7 +304,7 @@ static func make_server_hello(
assigned_peer_id: int,
player_count: int,
max_players: int,
server_display_name: String = "NETfishing",
server_display_name: String = "straywild",
world_seed: int = DEFAULT_WORLD_SEED,
world_layout: StringName = WorldLayoutType.GENERATED,
) -> Dictionary:
@ -372,17 +372,17 @@ static func rejection_text(code: int) -> String:
return "You are not permitted to join this server."
RejectionCode.CLIENT_OUTDATED:
return (
"Your NETfishing version is out of date. "
"Your straywild version is out of date. "
+ "Update the game to join this server."
)
RejectionCode.SERVER_OUTDATED:
return (
"This server is out of date. "
+ "The host needs to update NETfishing."
+ "The host needs to update straywild."
)
RejectionCode.VERSION_MISMATCH:
return (
"This game and server use different NETfishing versions. "
"This game and server use different straywild versions. "
+ "Update both to the latest release."
)
_:

View file

@ -160,7 +160,7 @@ var _local_appearance_snapshot: Dictionary = (
)
var _moderation_disconnect_message := ""
var _host_port: int = 0
var _session_display_name: String = "NETfishing Room"
var _session_display_name: String = "straywild Room"
var _dedicated_host: bool = false
var _configured_operator_fingerprints: Dictionary[String, bool] = {}
var _session_operator_fingerprints: Dictionary[String, bool] = {}
@ -432,7 +432,7 @@ func set_peer_operator(
func set_session_display_name(value: String) -> void:
var cleaned: String = value.strip_edges().left(48)
if cleaned.is_empty():
cleaned = "NETfishing Room"
cleaned = "straywild Room"
if cleaned == _session_display_name:
return
_session_display_name = cleaned
@ -1187,7 +1187,7 @@ func resolve_server_trust(accepted: bool) -> void:
if not _server_trust.trust(
get_current_endpoint(),
str(_pending_server_proof["server_fingerprint"]),
"NETfishing",
"straywild",
):
_fail_identity("The server identity could not be pinned.")
return

View file

@ -879,7 +879,7 @@ func export_canvas_png(canvas_id: String) -> String:
_emit_hud_state("paint something before exporting")
return ""
if _data_root == null or _data_root.root_path.is_empty():
_emit_hud_state("choose a NETfishing data folder before exporting")
_emit_hud_state("choose a straywild data folder before exporting")
return ""
var export_directory: String = _artwork_directory()
if DirAccess.make_dir_recursive_absolute(export_directory) != OK:
@ -990,7 +990,7 @@ func _stamp_entry_is_unlocked(entry: Dictionary) -> bool:
func _next_artwork_export_path(directory: String) -> String:
var date_time: Dictionary = Time.get_datetime_dict_from_system()
var stem: String = "netfishing-artwork-%04d%02d%02d-%02d%02d%02d" % [
var stem: String = "straywild-artwork-%04d%02d%02d-%02d%02d%02d" % [
int(date_time.get("year", 0)),
int(date_time.get("month", 0)),
int(date_time.get("day", 0)),

View file

@ -9,11 +9,11 @@ const BOOTSTRAP_TEMP_PATH := "user://data_root_bootstrap.json.tmp"
const BOOTSTRAP_VERSION := 1
const MANIFEST_VERSION := 1
const LAYOUT_VERSION := 1
const MANIFEST_FILENAME := "netfishing_data.json"
const MANIFEST_FILENAME := "straywild_data.json"
const README_FILENAME := "README.txt"
const ENVIRONMENT_VARIABLE := "NETFISHING_DATA_DIR"
const CREATE_ENVIRONMENT_VARIABLE := "NETFISHING_CREATE_DATA_DIR"
const APPLICATION_ID := "netfishing"
const ENVIRONMENT_VARIABLE := "straywild_DATA_DIR"
const CREATE_ENVIRONMENT_VARIABLE := "straywild_CREATE_DATA_DIR"
const APPLICATION_ID := "straywild"
const APP_DATA_PORTABLE_PATH := "user://portable-data"
const PATH_ALLOWED: StringName = &"allowed"
const PATH_SOURCE_PROJECT: StringName = &"source_project"
@ -48,7 +48,7 @@ func resolve() -> bool:
mode = Mode.ENVIRONMENT_OVERRIDE
var environment_path: String = OS.get_environment(ENVIRONMENT_VARIABLE)
if not environment_path.is_absolute_path():
return _fail("NETFISHING_DATA_DIR must be an absolute path.")
return _fail("straywild_DATA_DIR must be an absolute path.")
if (
OS.get_environment(CREATE_ENVIRONMENT_VARIABLE) == "1"
and not FileAccess.file_exists(
@ -84,7 +84,7 @@ func default_visible_path() -> String:
var documents: String = OS.get_system_dir(OS.SYSTEM_DIR_DOCUMENTS)
if documents.is_empty():
return ""
var candidate: String = _normalize(documents.path_join("NETFISHING"))
var candidate: String = _normalize(documents.path_join("straywild"))
if not candidate.is_absolute_path():
return ""
var classification: StringName = classify_candidate_path(
@ -109,16 +109,16 @@ func select_new_root(path: String, app_data: bool = false) -> bool:
if FileAccess.file_exists(manifest_path):
var manifest: Dictionary = _read_json(manifest_path)
if not _valid_manifest(manifest):
return _fail("The selected folder has a malformed NETfishing manifest.")
return _fail("The selected folder has a malformed straywild manifest.")
root_id = str(manifest["root_id"])
else:
if not _directory_is_empty(normalized) and not app_data:
return _fail(
"Choose an empty folder or an existing NETfishing data folder."
"Choose an empty folder or an existing straywild data folder."
)
root_id = Crypto.new().generate_random_bytes(16).hex_encode()
if not _create_layout(normalized, root_id):
return _fail("The NETfishing data folder could not be created.")
return _fail("The straywild data folder could not be created.")
if not _write_bootstrap(normalized, root_id):
return _fail("The data-folder pointer could not be saved.")
root_path = normalized
@ -238,15 +238,15 @@ func _activate_existing(path: String, expected_id: String, permit_creation: bool
return false
var manifest_path: String = normalized.path_join(MANIFEST_FILENAME)
if not FileAccess.file_exists(manifest_path):
return _fail("The selected folder is not a NETfishing data folder.")
return _fail("The selected folder is not a straywild data folder.")
var manifest: Dictionary = _read_json(manifest_path)
if not _valid_manifest(manifest):
return _fail("The NETfishing data-folder manifest is malformed.")
return _fail("The straywild data-folder manifest is malformed.")
var found_id: String = str(manifest["root_id"])
if not expected_id.is_empty() and expected_id != found_id:
return _fail("The selected data folder does not match this device pointer.")
if not _test_writable(normalized):
return _fail("The NETfishing data folder is unavailable or unwritable.")
return _fail("The straywild data folder is unavailable or unwritable.")
root_path = normalized
root_id = found_id
requires_selection = false
@ -339,7 +339,7 @@ static func _is_same_or_child_path(candidate: String, reference: String) -> bool
func _test_writable(path: String) -> bool:
var probe: String = path.path_join(
".netfishing-write-%s.tmp" % device_id.left(12)
".straywild-write-%s.tmp" % device_id.left(12)
)
var file: FileAccess = FileAccess.open(probe, FileAccess.WRITE)
if file == null:
@ -370,7 +370,7 @@ func _create_layout(path: String, id: String) -> bool:
):
return false
var readme: String = (
"NETfishing player data\n\n"
"straywild player data\n\n"
+ "This folder is safe to synchronize with tools such as Syncthing.\n"
+ "Active private identity keys remain device-local.\n"
+ "Encrypted identity backups require their passphrase.\n"

View file

@ -7,8 +7,8 @@ const FORMAT_VERSION := 2
const MAX_RECORDS := 500
const MAX_FRIENDS := 200
const SOCIAL_TOKEN_LENGTH := 64
const PRESENCE_CHANNEL_DOMAIN := "NETFISHING_PRESENCE_V1:"
const INVITE_INBOX_DOMAIN := "NETFISHING_INVITE_V1:"
const PRESENCE_CHANNEL_DOMAIN := "straywild_PRESENCE_V1:"
const INVITE_INBOX_DOMAIN := "straywild_INVITE_V1:"
var _records: Dictionary = {}
var _loaded := false

View file

@ -33,12 +33,12 @@ static func migrate_legacy_to(
return {
"ok": false,
"requires_existing_root_decision": true,
"message": "The selected folder already contains NETfishing data.",
"message": "The selected folder already contains straywild data.",
}
if not _directory_empty(normalized):
return {
"ok": false,
"message": "Choose an empty folder or create a NETfishing subfolder.",
"message": "Choose an empty folder or create a straywild subfolder.",
}
var staging: String = "%s.migration-%s" % [
normalized, Crypto.new().generate_random_bytes(8).hex_encode()
@ -111,11 +111,11 @@ static func migrate_active_to(
"ok": false,
"requires_existing_root_decision": true,
"message": (
"The selected folder already contains NETfishing data. "
"The selected folder already contains straywild data. "
+ "Choose it through the existing-data recovery flow."
),
}
return {"ok": false, "message": "Choose an empty folder or a NETfishing subfolder."}
return {"ok": false, "message": "Choose an empty folder or a straywild subfolder."}
var staging: String = "%s.migration-%s" % [
normalized, Crypto.new().generate_random_bytes(8).hex_encode()
]
@ -209,7 +209,7 @@ static func replace_existing_with_legacy(
var normalized: String = destination.simplify_path().trim_suffix("/")
var manifest: String = normalized.path_join(PlayerDataRoot.MANIFEST_FILENAME)
if not FileAccess.file_exists(manifest):
return {"ok": false, "message": "The selected folder is not a NETfishing data root."}
return {"ok": false, "message": "The selected folder is not a straywild data root."}
var recovery: String = ProjectSettings.globalize_path(
"user://migration-recovery"
).path_join(
@ -230,7 +230,7 @@ static func replace_existing_with_active(
) -> Dictionary:
var normalized: String = destination.simplify_path().trim_suffix("/")
if not FileAccess.file_exists(normalized.path_join(PlayerDataRoot.MANIFEST_FILENAME)):
return {"ok": false, "message": "The selected folder is not a NETfishing data root."}
return {"ok": false, "message": "The selected folder is not a straywild data root."}
var recovery: String = ProjectSettings.globalize_path(
"user://migration-recovery"
).path_join(

View file

@ -12,7 +12,7 @@
[ext_resource type="Script" path="res://progression/player_cooler_capacity.gd" id="10_capacity"]
[ext_resource type="Script" path="res://player/player_ground_shadow.gd" id="11_ground_shadow"]
[ext_resource type="Material" path="res://player/materials/player_blob_shadow.tres" id="12_blob_shadow"]
[ext_resource type="PackedScene" path="res://art/exported/characters/base/netfishing_base_character.glb" id="13_character"]
[ext_resource type="PackedScene" path="res://art/exported/characters/base/straywild_base_character.glb" id="13_character"]
[ext_resource type="Script" path="res://progression/player_art_unlocks.gd" id="14_art_unlocks"]
[ext_resource type="Script" path="res://progression/player_experience.gd" id="15_experience"]
[ext_resource type="Script" path="res://player/sprint_dust_trail.gd" id="16_sprint_dust"]

View file

@ -3,9 +3,9 @@ extends RefCounted
const PlayerScene: PackedScene = preload("res://player/player.tscn")
const FurPatternShader: Shader = preload("res://player/fur_pattern.gdshader")
const RUNTIME_MATERIAL_META: StringName = &"netfishing_runtime_material"
const RUNTIME_MATERIAL_META: StringName = &"straywild_runtime_material"
const RUNTIME_FUR_PATTERN_MATERIAL_META: StringName = (
&"netfishing_runtime_fur_pattern_material"
&"straywild_runtime_fur_pattern_material"
)
const EAR_MESH_NAMES: Array[String] = [
"ears_antlers_round",

View file

@ -10,11 +10,11 @@ config_version=5
[application]
config/name="NETFISHING"
config/name="straywild"
config/version="0.18.1-alpha"
run/main_scene="res://main/main.tscn"
config/features=PackedStringArray("4.7", "GL Compatibility")
config/icon="res://art/exported/system_icons/netfishing_256.png"
config/icon="res://art/exported/system_icons/straywild_256.png"
[autoload]
@ -26,7 +26,7 @@ window/stretch/aspect="expand"
[editor_plugins]
enabled=PackedStringArray("res://addons/netfishing_shoreline_baker/plugin.cfg")
enabled=PackedStringArray("res://addons/straywild_shoreline_baker/plugin.cfg")
[gui]
@ -260,7 +260,7 @@ alternate_fishing={
[network]
discovery/base_url="https://discovery.netfishing.org"
discovery/base_url="https://discovery.straywild.io"
[physics]

View file

@ -1,7 +1,7 @@
class_name ProgressionSaveCodec
extends RefCounted
const MAGIC := "NETFISHING_PROGRESSION_CONTAINER"
const MAGIC := "straywild_PROGRESSION_CONTAINER"
const FORMAT_VERSION := 1
const LOCAL_KIND := "local_save"
const ARCHIVE_KIND := "portable_archive"
@ -10,7 +10,7 @@ const MAX_CONTAINER_BYTES := 16 * 1024 * 1024
# This key keeps routine progression files opaque to casual editing. Since the
# client is open source, it is intentionally not treated as a security secret.
const CONTAINER_PASSPHRASE := (
"NETfishing progression container v1 / not an identity credential"
"straywild progression container v1 / not an identity credential"
)

View file

@ -4,7 +4,7 @@ set -euo pipefail
readonly SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
readonly PROJECT_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
readonly OUTPUT_PATH="${PROJECT_ROOT}/builds/android/NETfishing-debug.apk"
readonly OUTPUT_PATH="${PROJECT_ROOT}/builds/android/straywild-debug.apk"
readonly GODOT_BIN="${GODOT_BIN:-godot}"
mkdir -p -- "$(dirname -- "${OUTPUT_PATH}")"

View file

@ -9,9 +9,9 @@ readonly WINDOWS_DIR="${BUILD_ROOT}/windows-x86_64"
readonly LINUX_DIR="${BUILD_ROOT}/linux-x86_64"
readonly README_SOURCE="${PROJECT_ROOT}/docs/README-PLAYTEST.txt"
readonly SOURCE_COMMIT="$(git -C "${PROJECT_ROOT}" rev-parse HEAD)"
readonly SOURCE_URL="https://forge.makearmy.io/woofmeow/netfishing"
readonly WINDOWS_ZIP="${BUILD_ROOT}/NETfishing-v0.18.1-alpha-windows-x86_64.zip"
readonly LINUX_ZIP="${BUILD_ROOT}/NETfishing-v0.18.1-alpha-linux-x86_64.zip"
readonly SOURCE_URL="https://forge.makearmy.io/woofmeow/straywild"
readonly WINDOWS_ZIP="${BUILD_ROOT}/straywild-v0.18.1-alpha-windows-x86_64.zip"
readonly LINUX_ZIP="${BUILD_ROOT}/straywild-v0.18.1-alpha-linux-x86_64.zip"
readonly GODOT_BIN="${GODOT_BIN:-godot}"
if [[ ! -f "${PROJECT_ROOT}/project.godot" ]]; then
@ -31,26 +31,26 @@ mkdir -p -- "${WINDOWS_DIR}" "${LINUX_DIR}"
--headless \
--path "${PROJECT_ROOT}" \
--export-release "Windows Desktop" \
"${WINDOWS_DIR}/NETfishing.exe"
"${WINDOWS_DIR}/straywild.exe"
"${GODOT_BIN}" \
--headless \
--path "${PROJECT_ROOT}" \
--export-release "Linux Desktop" \
"${LINUX_DIR}/NETfishing.x86_64"
"${LINUX_DIR}/straywild.x86_64"
for required_file in \
"${WINDOWS_DIR}/NETfishing.exe" \
"${WINDOWS_DIR}/NETfishing.pck" \
"${LINUX_DIR}/NETfishing.x86_64" \
"${LINUX_DIR}/NETfishing.pck"; do
"${WINDOWS_DIR}/straywild.exe" \
"${WINDOWS_DIR}/straywild.pck" \
"${LINUX_DIR}/straywild.x86_64" \
"${LINUX_DIR}/straywild.pck"; do
if [[ ! -s "${required_file}" ]]; then
echo "error: expected export output is missing: ${required_file}" >&2
exit 1
fi
done
chmod +x -- "${LINUX_DIR}/NETfishing.x86_64"
chmod +x -- "${LINUX_DIR}/straywild.x86_64"
cp -- "${README_SOURCE}" "${WINDOWS_DIR}/README-PLAYTEST.txt"
cp -- "${README_SOURCE}" "${LINUX_DIR}/README-PLAYTEST.txt"
@ -60,7 +60,7 @@ stage_licenses() {
install -m 0644 "${PROJECT_ROOT}/LICENSE" \
"${destination}/GPL-3.0-or-later.txt"
install -m 0644 "${PROJECT_ROOT}/ASSET-LICENSE.md" \
"${destination}/NETFISHING-ASSET-LICENSE.md"
"${destination}/straywild-ASSET-LICENSE.md"
install -m 0644 "${PROJECT_ROOT}/docs/ATTRIBUTION.md" \
"${destination}/ATTRIBUTION.md"
install -m 0644 "${PROJECT_ROOT}/TRADEMARKS.md" \
@ -72,7 +72,7 @@ stage_licenses() {
cat >"${destination}/SOURCE-CODE.md" <<EOF
# Corresponding source
NETfishing code is licensed under GPL-3.0-or-later.
straywild code is licensed under GPL-3.0-or-later.
Source repository: ${SOURCE_URL}
Source revision at build time: ${SOURCE_COMMIT}

View file

@ -42,13 +42,13 @@ fi
readonly RELEASE_TAG="v${PROJECT_VERSION}"
readonly RELEASE_ROOT="${PROJECT_ROOT}/builds/${RELEASE_TAG}"
readonly ARM64_ROOT="${RELEASE_ROOT}/linux-arm64"
readonly ARM64_EXECUTABLE="${ARM64_ROOT}/NETfishing.arm64"
readonly ARM64_PCK="${ARM64_ROOT}/NETfishing.pck"
readonly ARM64_EXECUTABLE="${ARM64_ROOT}/straywild.arm64"
readonly ARM64_PCK="${ARM64_ROOT}/straywild.pck"
readonly STAGE_ROOT="${RELEASE_ROOT}/portmaster-stage"
readonly GAME_ROOT="${STAGE_ROOT}/netfishing"
readonly ARCHIVE="${RELEASE_ROOT}/netfishing.zip"
readonly OBSOLETE_VERSIONED_ARCHIVE="${RELEASE_ROOT}/NETfishing-${RELEASE_TAG}-portmaster-arm64.zip"
readonly OBSOLETE_LOWERCASE_ARCHIVE="${RELEASE_ROOT}/netfishing-${RELEASE_TAG}-portmaster-arm64.zip"
readonly GAME_ROOT="${STAGE_ROOT}/straywild"
readonly ARCHIVE="${RELEASE_ROOT}/straywild.zip"
readonly OBSOLETE_VERSIONED_ARCHIVE="${RELEASE_ROOT}/straywild-${RELEASE_TAG}-portmaster-arm64.zip"
readonly OBSOLETE_LOWERCASE_ARCHIVE="${RELEASE_ROOT}/straywild-${RELEASE_TAG}-portmaster-arm64.zip"
readonly HEAD_COMMIT="$(git -C "${PROJECT_ROOT}" rev-parse HEAD)"
readonly TAG_COMMIT="$(git -C "${PROJECT_ROOT}" rev-parse "${RELEASE_TAG}^{commit}")"
@ -74,7 +74,7 @@ elif [[ "${HEAD_COMMIT}" != "${TAG_COMMIT}" ]]; then
echo "HEAD does not match ${RELEASE_TAG}. Refusing to package mutable source." >&2
exit 1
fi
if [[ "${NETFISHING_ALLOW_DIRTY_RELEASE:-0}" != "1" ]]; then
if [[ "${straywild_ALLOW_DIRTY_RELEASE:-0}" != "1" ]]; then
dirty_tree=0
git -C "${PROJECT_ROOT}" diff --quiet || dirty_tree=1
git -C "${PROJECT_ROOT}" diff --cached --quiet || dirty_tree=1
@ -97,7 +97,7 @@ done
mkdir -p -- "${ARM64_ROOT}" "${RELEASE_ROOT}"
if [[ ${PACKAGE_ONLY} -eq 0 ]]; then
readonly EXPORT_PROJECT_ROOT="$(
mktemp -d -t netfishing-portmaster-export.XXXXXX
mktemp -d -t straywild-portmaster-export.XXXXXX
)"
cleanup_export_project() {
rm -rf -- "${EXPORT_PROJECT_ROOT}"
@ -108,9 +108,9 @@ if [[ ${PACKAGE_ONLY} -eq 0 ]]; then
--exclude '/.git/' \
--exclude '/.godot/' \
--exclude '/art/source/' \
--exclude '/art/exported/system_icons/netfishing.ico' \
--exclude '/art/exported/system_icons/netfishing_1024.png' \
--exclude '/art/exported/system_icons/netfishing_1024.png.import' \
--exclude '/art/exported/system_icons/straywild.ico' \
--exclude '/art/exported/system_icons/straywild_1024.png' \
--exclude '/art/exported/system_icons/straywild_1024.png.import' \
--exclude '/audio/ambience/' \
--exclude '/builds/' \
--exclude '/docs/design/' \
@ -141,14 +141,14 @@ rm -f -- \
"${OBSOLETE_LOWERCASE_ARCHIVE}"
mkdir -p -- "${GAME_ROOT}/licenses"
install -m 0755 "${TEMPLATE_ROOT}/NETfishing.sh" "${STAGE_ROOT}/NETfishing.sh"
install -m 0755 "${TEMPLATE_ROOT}/straywild.sh" "${STAGE_ROOT}/straywild.sh"
install -m 0644 "${TEMPLATE_ROOT}/port.json" "${GAME_ROOT}/port.json"
install -m 0644 "${TEMPLATE_ROOT}/netfishing.gptk" \
"${GAME_ROOT}/netfishing.gptk"
install -m 0755 "${TEMPLATE_ROOT}/launch-netfishing.sh" \
"${GAME_ROOT}/launch-netfishing.sh"
install -m 0755 "${ARM64_EXECUTABLE}" "${GAME_ROOT}/NETfishing.aarch64"
install -m 0644 "${ARM64_PCK}" "${GAME_ROOT}/NETfishing.pck"
install -m 0644 "${TEMPLATE_ROOT}/straywild.gptk" \
"${GAME_ROOT}/straywild.gptk"
install -m 0755 "${TEMPLATE_ROOT}/launch-straywild.sh" \
"${GAME_ROOT}/launch-straywild.sh"
install -m 0755 "${ARM64_EXECUTABLE}" "${GAME_ROOT}/straywild.aarch64"
install -m 0644 "${ARM64_PCK}" "${GAME_ROOT}/straywild.pck"
install -m 0644 "${TEMPLATE_ROOT}/gameinfo.xml" "${GAME_ROOT}/gameinfo.xml"
install -m 0644 "${TEMPLATE_ROOT}/screenshot.png" "${GAME_ROOT}/screenshot.png"
install -m 0644 \
@ -159,7 +159,7 @@ install -m 0644 \
"${GAME_ROOT}/licenses/GPL-3.0-or-later.txt"
install -m 0644 \
"${PROJECT_ROOT}/ASSET-LICENSE.md" \
"${GAME_ROOT}/licenses/NETFISHING-ASSET-LICENSE.md"
"${GAME_ROOT}/licenses/straywild-ASSET-LICENSE.md"
install -m 0644 \
"${PROJECT_ROOT}/TRADEMARKS.md" \
"${GAME_ROOT}/licenses/TRADEMARKS.md"
@ -171,7 +171,7 @@ install -m 0644 \
"${GAME_ROOT}/licenses/Seattle-Avenue-LICENSE.txt"
cat >"${GAME_ROOT}/BUILD-INFO.txt" <<EOF
NETfishing PortMaster ARM64 build
straywild PortMaster ARM64 build
Project version: ${PROJECT_VERSION}
Game source commit: ${TAG_COMMIT}
@ -191,105 +191,105 @@ EOF
cat >"${GAME_ROOT}/licenses/SOURCE-CODE.md" <<EOF
# Corresponding source
NETfishing code is licensed under GPL-3.0-or-later.
straywild code is licensed under GPL-3.0-or-later.
Source repository: https://forge.makearmy.io/woofmeow/netfishing
Source repository: https://forge.makearmy.io/woofmeow/straywild
Exact source revision: ${TAG_COMMIT}
Release tag: ${RELEASE_TAG}
PortMaster packaging revision: ${HEAD_COMMIT}
EOF
cat >"${GAME_ROOT}/README.md" <<EOF
# NETfishing for PortMaster
# straywild for PortMaster
This package contains NETfishing \`${RELEASE_TAG}\`, exported from Godot 4.7.1
This package contains straywild \`${RELEASE_TAG}\`, exported from Godot 4.7.1
for 64-bit ARM Linux and wrapped for PortMaster.
## Installation
Install the complete \`netfishing.zip\` archive with PortMaster or HarbourMaster.
Install the complete \`straywild.zip\` archive with PortMaster or HarbourMaster.
The package requires an ARM64 device, two analog sticks, GLIBC 2.28 or newer,
and the \`weston_pkg_0.2\` runtime.
New installations store player data under \`ports/saves/netfishing/\` without
New installations store player data under \`ports/saves/straywild/\` without
opening a folder picker. Existing installations preserve their previously
selected data root. Device-local configuration remains under
\`netfishing/conf/\`.
\`straywild/conf/\`.
PortMaster launches use the light performance profile by default. Put the word
\`normal\` in \`netfishing/conf/performance_profile\` to opt a capable device
\`normal\` in \`straywild/conf/performance_profile\` to opt a capable device
into the normal rendering profile. PortMaster packages retain title and world
music while omitting rain and shoreline ambience in both profiles. See
\`netfishing/licenses/\` for bundled credits and license information.
\`straywild/licenses/\` for bundled credits and license information.
## Controls
NETfishing reads the handheld controller directly. GPTOKEYB's device-specific
straywild reads the handheld controller directly. GPTOKEYB's device-specific
force-quit chord remains available; this is Start+Select on most devices.
EOF
(
cd "${STAGE_ROOT}"
zip -qry "${ARCHIVE}" NETfishing.sh netfishing
zip -qry "${ARCHIVE}" straywild.sh straywild
)
unzip -tq "${ARCHIVE}" >/dev/null
readonly TOP_LEVELS="$(
unzip -Z1 "${ARCHIVE}" | cut -d/ -f1 | sort -u
)"
readonly EXPECTED_TOP_LEVELS="$(printf '%s\n' NETfishing.sh netfishing)"
readonly EXPECTED_TOP_LEVELS="$(printf '%s\n' straywild.sh straywild)"
if [[ "${TOP_LEVELS}" != "${EXPECTED_TOP_LEVELS}" ]]; then
echo "Unexpected PortMaster archive roots:" >&2
printf '%s\n' "${TOP_LEVELS}" >&2
exit 1
fi
grep -q '"version": 4' "${GAME_ROOT}/port.json"
grep -q '"name": "netfishing.zip"' "${GAME_ROOT}/port.json"
grep -q '"name": "straywild.zip"' "${GAME_ROOT}/port.json"
grep -q '"rtr": true' "${GAME_ROOT}/port.json"
if unzip -Z1 "${ARCHIVE}" | grep -qx 'port.json'; then
echo "port.json must be inside netfishing/, not at the archive root." >&2
echo "port.json must be inside straywild/, not at the archive root." >&2
exit 1
fi
if grep -Eq '^[[:space:]]*#[[:space:]]*PORTMASTER:' \
"${STAGE_ROOT}/NETfishing.sh"; then
"${STAGE_ROOT}/straywild.sh"; then
echo "The distributable launcher contains an installed PortMaster signature." >&2
exit 1
fi
grep -Fq 'PROFILE_PATH="$CONFDIR/performance_profile"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq 'NETFISHING_PERFORMANCE_PROFILE=light' \
"${STAGE_ROOT}/NETfishing.sh"
"${STAGE_ROOT}/straywild.sh"
grep -Fq 'straywild_PERFORMANCE_PROFILE=light' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq 'CONTROLLER_MAPPING_FILE="$CONFDIR/cache/controller_mapping.txt"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq 'SAVEDIR="$PORTS_ROOT/saves/netfishing"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq '"NETFISHING_DATA_DIR=$SAVEDIR"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq '"NETFISHING_CREATE_DATA_DIR=1"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq 'printf '\''%s\n'\'' "$netfishing_controllerconfig" > "$CONTROLLER_MAPPING_FILE"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq '"$GAME_LAUNCHER"' "${STAGE_ROOT}/NETfishing.sh"
grep -Fq '"$CONTROLLER_MAPPING_FILE"' "${STAGE_ROOT}/NETfishing.sh"
if grep -Fq 'SDL_GAMECONTROLLERCONFIG="$netfishing_controllerconfig"' \
"${STAGE_ROOT}/NETfishing.sh"; then
"${STAGE_ROOT}/straywild.sh"
grep -Fq 'SAVEDIR="$PORTS_ROOT/saves/straywild"' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq '"straywild_DATA_DIR=$SAVEDIR"' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq '"straywild_CREATE_DATA_DIR=1"' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq 'printf '\''%s\n'\'' "$straywild_controllerconfig" > "$CONTROLLER_MAPPING_FILE"' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq '"$GAME_LAUNCHER"' "${STAGE_ROOT}/straywild.sh"
grep -Fq '"$CONTROLLER_MAPPING_FILE"' "${STAGE_ROOT}/straywild.sh"
if grep -Fq 'SDL_GAMECONTROLLERCONFIG="$straywild_controllerconfig"' \
"${STAGE_ROOT}/straywild.sh"; then
echo "Raw controller mappings must not be passed through westonwrap.sh." >&2
exit 1
fi
grep -Fq 'SDL_GAMECONTROLLERCONFIG="$(<"$CONTROLLER_MAPPING_FILE")"' \
"${GAME_ROOT}/launch-netfishing.sh"
"${GAME_ROOT}/launch-straywild.sh"
grep -Fq 'export SDL_GAMECONTROLLERCONFIG' \
"${GAME_ROOT}/launch-netfishing.sh"
grep -Fq 'exec "$@"' "${GAME_ROOT}/launch-netfishing.sh"
grep -Fq 'GPTOKEYB_CONFIG="$GAMEDIR/netfishing.gptk"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq '$GPTOKEYB "NETfishing.aarch64" -c "$GPTOKEYB_CONFIG" &' \
"${STAGE_ROOT}/NETfishing.sh"
"${GAME_ROOT}/launch-straywild.sh"
grep -Fq 'exec "$@"' "${GAME_ROOT}/launch-straywild.sh"
grep -Fq 'GPTOKEYB_CONFIG="$GAMEDIR/straywild.gptk"' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq '$GPTOKEYB "straywild.aarch64" -c "$GPTOKEYB_CONFIG" &' \
"${STAGE_ROOT}/straywild.sh"
grep -Fq 'pm_platform_helper "$GAME_EXECUTABLE"' \
"${STAGE_ROOT}/NETfishing.sh"
grep -Fq 'pm_finish' "${STAGE_ROOT}/NETfishing.sh"
"${STAGE_ROOT}/straywild.sh"
grep -Fq 'pm_finish' "${STAGE_ROOT}/straywild.sh"
if [[ "$(grep -Ec '^[[:space:]]*\$GPTOKEYB[[:space:]]' \
"${STAGE_ROOT}/NETfishing.sh")" -ne 1 ]]; then
echo "NETfishing must start exactly one GPTOKEYB exit handler." >&2
"${STAGE_ROOT}/straywild.sh")" -ne 1 ]]; then
echo "straywild must start exactly one GPTOKEYB exit handler." >&2
exit 1
fi
readonly GPTOKEYB_NOOP_KEYS=(
@ -303,13 +303,13 @@ readonly GPTOKEYB_NOOP_KEYS=(
for noop_key in "${GPTOKEYB_NOOP_KEYS[@]}"; do
if ! grep -Eq \
"^[[:space:]]*${noop_key}[[:space:]]*=[[:space:]]*\\\\\"[[:space:]]*$" \
"${GAME_ROOT}/netfishing.gptk"; then
"${GAME_ROOT}/straywild.gptk"; then
echo "GPTOKEYB no-op mapping is missing: ${noop_key}" >&2
exit 1
fi
done
if [[ "$(grep -Ec '^[[:space:]]*[a-z0-9_]+[[:space:]]*=' \
"${GAME_ROOT}/netfishing.gptk")" -ne "${#GPTOKEYB_NOOP_KEYS[@]}" ]]; then
"${GAME_ROOT}/straywild.gptk")" -ne "${#GPTOKEYB_NOOP_KEYS[@]}" ]]; then
echo "GPTOKEYB no-op mapping contains an unexpected assignment." >&2
exit 1
fi

View file

@ -35,10 +35,10 @@ if [[ ! "$SAMPLE_SET_DIRECTORY" =~ ^[a-z0-9_-]+$ ]]; then
fi
readonly DESTINATION_DIRECTORY="$PROJECT_ROOT/sound/dialogue/animalese/$SAMPLE_SET_DIRECTORY"
readonly WORK_DIRECTORY="$(mktemp -d -t netfishing-animalese-import.XXXXXX)"
readonly WORK_DIRECTORY="$(mktemp -d -t straywild-animalese-import.XXXXXX)"
cleanup() {
if [[ "$WORK_DIRECTORY" == /tmp/netfishing-animalese-import.* ]]; then
if [[ "$WORK_DIRECTORY" == /tmp/straywild-animalese-import.* ]]; then
find "$WORK_DIRECTORY" -depth -delete
fi
}

View file

@ -13,7 +13,7 @@ fi
readonly ROOT_PATH="$1"
readonly WORK_ROOT="$(mktemp -d -t netfishing-godot-data.XXXXXX)"
readonly WORK_ROOT="$(mktemp -d -t straywild-godot-data.XXXXXX)"
trap 'rm -rf -- "${WORK_ROOT}"' EXIT
cd "${PROJECT_ROOT}"

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<gameList>
<game>
<path>./NETfishing.sh</path>
<name>NETfishing</name>
<path>./straywild.sh</path>
<name>straywild</name>
<desc>A relaxed multiplayer fishing game about exploring a small island, catching and collecting fish, customizing your character, and spending time by the water.</desc>
<releasedate>20260804T000000</releasedate>
<developer>NETfishing project</developer>
<developer>straywild project</developer>
<publisher>Independent</publisher>
<genre>adventure, simulation</genre>
<image>./netfishing/screenshot.png</image>
<image>./straywild/screenshot.png</image>
</game>
</gameList>

View file

@ -1,13 +1,13 @@
{
"version": 4,
"name": "netfishing.zip",
"name": "straywild.zip",
"items": [
"NETfishing.sh",
"netfishing/"
"straywild.sh",
"straywild/"
],
"items_opt": null,
"attr": {
"title": "NETfishing",
"title": "straywild",
"porter": [
"Voyager"
],

View file

@ -1,4 +1,4 @@
# NETfishing reads the controller directly. GPTOKEYB is retained only for its
# straywild reads the controller directly. GPTOKEYB is retained only for its
# device-specific force-quit chord, so every keyboard and mouse binding is
# disabled to prevent duplicate input.

View file

@ -16,35 +16,35 @@ source "$controlfolder/control.txt"
[ -f "${controlfolder}/mod_${CFW_NAME}.txt" ] && source "${controlfolder}/mod_${CFW_NAME}.txt"
get_controls
GAMEDIR="/${directory}/ports/netfishing"
GAMEDIR="/${directory}/ports/straywild"
CONFDIR="$GAMEDIR/conf"
PORTS_ROOT="${GAMEDIR%/netfishing}"
SAVEDIR="$PORTS_ROOT/saves/netfishing"
DATA_BOOTSTRAP_DIR="$CONFDIR/data/godot/app_userdata/NETFISHING"
GAME_EXECUTABLE="$GAMEDIR/NETfishing.aarch64"
GAME_LAUNCHER="$GAMEDIR/launch-netfishing.sh"
GPTOKEYB_CONFIG="$GAMEDIR/netfishing.gptk"
PORTS_ROOT="${GAMEDIR%/straywild}"
SAVEDIR="$PORTS_ROOT/saves/straywild"
DATA_BOOTSTRAP_DIR="$CONFDIR/data/godot/app_userdata/straywild"
GAME_EXECUTABLE="$GAMEDIR/straywild.aarch64"
GAME_LAUNCHER="$GAMEDIR/launch-straywild.sh"
GPTOKEYB_CONFIG="$GAMEDIR/straywild.gptk"
CONTROLLER_MAPPING_FILE="$CONFDIR/cache/controller_mapping.txt"
WESTON_DIR="/tmp/netfishing-weston"
WESTON_DIR="/tmp/straywild-weston"
WESTON_RUNTIME="weston_pkg_0.2"
HARBOURMASTER="$controlfolder/harbourmaster"
mkdir -p "$CONFDIR/data" "$CONFDIR/config" "$CONFDIR/cache" "$WESTON_DIR"
chmod +x "$GAME_EXECUTABLE"
# NETfishing uses a predictable save directory beside the port instead of
# straywild uses a predictable save directory beside the port instead of
# presenting a folder picker on a small screen. Preserve an established
# data-root choice when upgrading an existing installation.
NETFISHING_DATA_ENVIRONMENT=()
if [ -f "$SAVEDIR/netfishing_data.json" ] || {
straywild_DATA_ENVIRONMENT=()
if [ -f "$SAVEDIR/straywild_data.json" ] || {
[ ! -f "$DATA_BOOTSTRAP_DIR/data_root_bootstrap.json" ] &&
[ ! -f "$DATA_BOOTSTRAP_DIR/data_root_bootstrap.json.backup" ]
}; then
mkdir -p "$SAVEDIR"
NETFISHING_DATA_ENVIRONMENT+=(
"NETFISHING_DATA_DIR=$SAVEDIR"
"NETFISHING_CREATE_DATA_DIR=1"
straywild_DATA_ENVIRONMENT+=(
"straywild_DATA_DIR=$SAVEDIR"
"straywild_CREATE_DATA_DIR=1"
)
fi
@ -52,7 +52,7 @@ fi
if [ ! -f "$controlfolder/libs/${WESTON_RUNTIME}.squashfs" ]; then
if [ ! -x "$HARBOURMASTER" ]; then
pm_message "NETfishing requires the latest PortMaster and WestonPack runtime."
pm_message "straywild requires the latest PortMaster and WestonPack runtime."
sleep 5
exit 1
fi
@ -78,17 +78,17 @@ cd "$GAMEDIR" || exit 1
GODOT_MUOS_MAPPING="19004ca6010000000100000000010000,muOS-Keys,a:b0,b:b1,x:b3,y:b2,leftshoulder:b4,rightshoulder:b5,lefttrigger:b10,righttrigger:b11,guide:b8,start:b7,back:b6,dpup:h0.1,dpleft:h0.8,dpright:h0.2,dpdown:h0.4,leftx:a0,lefty:a1,leftstick:b9,rightx:a2,righty:a3,rightstick:b12,platform:Linux,"
MUOS_SDL2_GUID="19000000010000000100000000010000"
if [[ "$sdl_controllerconfig" == "${MUOS_SDL2_GUID},"* ]]; then
netfishing_controllerconfig="$GODOT_MUOS_MAPPING"
straywild_controllerconfig="$GODOT_MUOS_MAPPING"
elif [ -n "$sdl_controllerconfig" ]; then
netfishing_controllerconfig="$sdl_controllerconfig"
straywild_controllerconfig="$sdl_controllerconfig"
else
netfishing_controllerconfig="$GODOT_MUOS_MAPPING"
straywild_controllerconfig="$GODOT_MUOS_MAPPING"
fi
printf '%s\n' "$netfishing_controllerconfig" > "$CONTROLLER_MAPPING_FILE"
printf '%s\n' "$straywild_controllerconfig" > "$CONTROLLER_MAPPING_FILE"
NETFISHING_GODOT_OPTIONS=()
NETFISHING_GAME_ENVIRONMENT=()
PERFORMANCE_PROFILE="${NETFISHING_PERFORMANCE_PROFILE:-}"
straywild_GODOT_OPTIONS=()
straywild_GAME_ENVIRONMENT=()
PERFORMANCE_PROFILE="${straywild_PERFORMANCE_PROFILE:-}"
PROFILE_PATH="$CONFDIR/performance_profile"
if [[ -z "$PERFORMANCE_PROFILE" && -r "$PROFILE_PATH" ]]; then
IFS= read -r PERFORMANCE_PROFILE < "$PROFILE_PATH" || true
@ -96,16 +96,16 @@ if [[ -z "$PERFORMANCE_PROFILE" && -r "$PROFILE_PATH" ]]; then
fi
case "$PERFORMANCE_PROFILE" in
normal)
NETFISHING_GAME_ENVIRONMENT+=(
"NETFISHING_PERFORMANCE_PROFILE=normal"
straywild_GAME_ENVIRONMENT+=(
"straywild_PERFORMANCE_PROFILE=normal"
)
;;
light|"")
NETFISHING_GAME_ENVIRONMENT+=(
"NETFISHING_PERFORMANCE_PROFILE=light"
"NETFISHING_LOW_END=1"
straywild_GAME_ENVIRONMENT+=(
"straywild_PERFORMANCE_PROFILE=light"
"straywild_LOW_END=1"
)
NETFISHING_GODOT_OPTIONS+=(
straywild_GODOT_OPTIONS+=(
--single-window
--disable-vsync
--max-fps 30
@ -114,11 +114,11 @@ case "$PERFORMANCE_PROFILE" in
;;
*)
echo "Unknown performance profile '$PERFORMANCE_PROFILE'; using light." >&2
NETFISHING_GAME_ENVIRONMENT+=(
"NETFISHING_PERFORMANCE_PROFILE=light"
"NETFISHING_LOW_END=1"
straywild_GAME_ENVIRONMENT+=(
"straywild_PERFORMANCE_PROFILE=light"
"straywild_LOW_END=1"
)
NETFISHING_GODOT_OPTIONS+=(
straywild_GODOT_OPTIONS+=(
--single-window
--disable-vsync
--max-fps 30
@ -127,10 +127,10 @@ case "$PERFORMANCE_PROFILE" in
;;
esac
# NETfishing reads gameplay input natively. The explicit no-op map prevents
# straywild reads gameplay input natively. The explicit no-op map prevents
# GPTOKEYB from injecting duplicate keyboard or mouse input while retaining
# its device-specific force-quit chord, including on ROCKNIX.
$GPTOKEYB "NETfishing.aarch64" -c "$GPTOKEYB_CONFIG" &
$GPTOKEYB "straywild.aarch64" -c "$GPTOKEYB_CONFIG" &
pm_platform_helper "$GAME_EXECUTABLE"
$ESUDO env CRUSTY_RESOLUTION="${DISPLAY_WIDTH}x${DISPLAY_HEIGHT}" \
@ -139,12 +139,12 @@ $ESUDO env CRUSTY_RESOLUTION="${DISPLAY_WIDTH}x${DISPLAY_HEIGHT}" \
XDG_CONFIG_HOME="$CONFDIR/config" \
XDG_CACHE_HOME="$CONFDIR/cache" \
GODOT_SILENCE_ROOT_WARNING=1 \
"${NETFISHING_DATA_ENVIRONMENT[@]}" \
"${NETFISHING_GAME_ENVIRONMENT[@]}" \
"${straywild_DATA_ENVIRONMENT[@]}" \
"${straywild_GAME_ENVIRONMENT[@]}" \
"$GAME_LAUNCHER" \
"$CONTROLLER_MAPPING_FILE" \
"$GAME_EXECUTABLE" \
"${NETFISHING_GODOT_OPTIONS[@]}" \
"${straywild_GODOT_OPTIONS[@]}" \
--resolution "${DISPLAY_WIDTH}x${DISPLAY_HEIGHT}" \
--fullscreen \
--rendering-driver opengl3_es \

View file

@ -6,9 +6,9 @@ readonly SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
readonly PROJECT_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
readonly GODOT_BIN="${GODOT_BIN:-godot}"
readonly TEST_TIMEOUT_SECONDS="${TEST_TIMEOUT_SECONDS:-120}"
readonly RUN_ROOT="$(mktemp -d -t netfishing-validations.XXXXXX)"
readonly RUN_ROOT="$(mktemp -d -t straywild-validations.XXXXXX)"
export NETFISHING_ISOLATED_VALIDATION_STORAGE=1
export straywild_ISOLATED_VALIDATION_STORAGE=1
readonly -a QUICK_TESTS=(
"scripts/validate_animalese_samples.gd"

View file

@ -336,8 +336,8 @@ check_editor_settings() {
run_export_hint() {
echo
echo "Example export commands:"
echo " ${GODOT} --headless --path \"$PROJECT_ROOT\" --export-release \"Android\" builds/${PROJECT_VERSION}/android/NETfishing.apk"
echo " ${GODOT} --headless --path \"$PROJECT_ROOT\" --export-debug \"Android\" builds/android/NETfishing-debug.apk"
echo " ${GODOT} --headless --path \"$PROJECT_ROOT\" --export-release \"Android\" builds/${PROJECT_VERSION}/android/straywild.apk"
echo " ${GODOT} --headless --path \"$PROJECT_ROOT\" --export-debug \"Android\" builds/android/straywild-debug.apk"
}
print_status INFO "Starting Android dependency preflight..."

View file

@ -1,36 +1,36 @@
extends SceneTree
const PROJECT_PATH := "/tmp/netfishing"
const INSTALL_PATH := "/opt/NETfishing"
const PROJECT_PATH := "/tmp/straywild"
const INSTALL_PATH := "/opt/straywild"
func _initialize() -> void:
var root_to_create: String = OS.get_environment("NETFISHING_TEST_CREATE_ROOT")
var root_to_create: String = OS.get_environment("straywild_TEST_CREATE_ROOT")
if not root_to_create.is_empty():
_create_validation_root(root_to_create)
return
var failures: PackedStringArray = []
_expect(
"external temporary directory",
"/tmp/NETfishing-test-data",
"/tmp/straywild-test-data",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect(
"external trailing slash",
"/tmp/NETfishing-test-data/",
"/tmp/straywild-test-data/",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect(
"similar project-name sibling",
"/tmp/netfishing-data",
"/tmp/straywild-data",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
_expect(
"documents directory",
"/home/player/Documents/NETfishing",
"/home/player/Documents/straywild",
PlayerDataRoot.PATH_ALLOWED,
failures,
)
@ -55,7 +55,7 @@ func _initialize() -> void:
)
_expect_with_references(
"empty project reference",
"/tmp/NETfishing-test-data",
"/tmp/straywild-test-data",
"",
INSTALL_PATH,
PlayerDataRoot.PATH_ALLOWED,
@ -63,7 +63,7 @@ func _initialize() -> void:
)
_expect_with_references(
"root project reference",
"/tmp/NETfishing-test-data",
"/tmp/straywild-test-data",
"/",
INSTALL_PATH,
PlayerDataRoot.PATH_ALLOWED,
@ -71,9 +71,9 @@ func _initialize() -> void:
)
_expect_with_references(
"Windows component and case normalization",
"C:\\Games\\NETfishing Data",
"C:\\Games\\NETfishing",
"C:\\Program Files\\NETfishing",
"C:\\Games\\straywild Data",
"C:\\Games\\straywild",
"C:\\Program Files\\straywild",
PlayerDataRoot.PATH_ALLOWED,
failures,
true,

View file

@ -1,7 +1,7 @@
class_name DedicatedServerConfig
extends RefCounted
const DEFAULT_NAME: String = "NETfishing Dedicated Server"
const DEFAULT_NAME: String = "straywild Dedicated Server"
const DEFAULT_BIND_ADDRESS: String = "*"
const DEFAULT_PORT: int = 7777
const DEFAULT_MAX_PLAYERS: int = 8
@ -32,7 +32,7 @@ static func from_runtime() -> DedicatedServerConfig:
"network/discovery/base_url", ""
)).strip_edges()
var config_path: String = OS.get_environment(
"NETFISHING_SERVER_CONFIG"
"straywild_SERVER_CONFIG"
).strip_edges()
for argument: String in OS.get_cmdline_user_args():
if argument.begins_with("--config="):
@ -87,36 +87,36 @@ func _load_file(path: String) -> bool:
func _apply_environment() -> void:
server_name = _environment_string(
"NETFISHING_SERVER_NAME", server_name
"straywild_SERVER_NAME", server_name
)
bind_address = _environment_string(
"NETFISHING_SERVER_BIND", bind_address
"straywild_SERVER_BIND", bind_address
)
port = _environment_int("NETFISHING_SERVER_PORT", port)
port = _environment_int("straywild_SERVER_PORT", port)
max_players = _environment_int(
"NETFISHING_SERVER_MAX_PLAYERS", max_players
"straywild_SERVER_MAX_PLAYERS", max_players
)
world_seed = _environment_int(
"NETFISHING_WORLD_SEED", world_seed
"straywild_WORLD_SEED", world_seed
)
public_listing = _environment_bool(
"NETFISHING_SERVER_PUBLIC", public_listing
"straywild_SERVER_PUBLIC", public_listing
)
discovery_url = _environment_string(
"NETFISHING_DISCOVERY_URL", discovery_url
"straywild_DISCOVERY_URL", discovery_url
)
data_directory = _environment_string(
"NETFISHING_DATA_DIR", data_directory
"straywild_DATA_DIR", data_directory
)
chat_logging = _environment_bool(
"NETFISHING_CHAT_LOGGING", chat_logging
"straywild_CHAT_LOGGING", chat_logging
)
chat_log_path = _environment_string(
"NETFISHING_CHAT_LOG_PATH", chat_log_path
"straywild_CHAT_LOG_PATH", chat_log_path
)
if OS.has_environment("NETFISHING_SERVER_OPERATORS"):
if OS.has_environment("straywild_SERVER_OPERATORS"):
operator_fingerprints = _parse_fingerprint_list(
OS.get_environment("NETFISHING_SERVER_OPERATORS")
OS.get_environment("straywild_SERVER_OPERATORS")
)

View file

@ -7,7 +7,7 @@ const TEMP_PATH: String = "user://player_settings.json.tmp"
const BACKUP_PATH: String = "user://player_settings.json.backup"
const SILENT_VOLUME_DB: float = -80.0
const HEADLESS_WRITE_ENVIRONMENT: String = (
"NETFISHING_ISOLATED_VALIDATION_STORAGE"
"straywild_ISOLATED_VALIDATION_STORAGE"
)
signal settings_changed(settings: PlayerSettings)

View file

@ -2,7 +2,7 @@ extends SceneTree
const CHARACTER_SCENE: PackedScene = preload(
"res://art/exported/characters/base/netfishing_base_character.glb"
"res://art/exported/characters/base/straywild_base_character.glb"
)
const EXPECTED_ANIMATIONS: Array[StringName] = [

View file

@ -278,7 +278,7 @@ func _validate_manager(manager: ControllerMappingManagerType) -> String:
func _validate_portmaster_launcher() -> String:
const launcher_path: String = "res://scripts/portmaster/NETfishing.sh"
const launcher_path: String = "res://scripts/portmaster/straywild.sh"
if not FileAccess.file_exists(launcher_path):
return "PortMaster launcher template is missing"
var launcher: String = FileAccess.get_file_as_string(launcher_path)
@ -291,9 +291,9 @@ func _validate_portmaster_launcher() -> String:
"guide:b8,start:b7,back:b6",
"leftstick:b9",
"rightstick:b12",
"netfishing_controllerconfig=\"$GODOT_MUOS_MAPPING\"",
"GPTOKEYB_CONFIG=\"$GAMEDIR/netfishing.gptk\"",
"$GPTOKEYB \"NETfishing.aarch64\" -c \"$GPTOKEYB_CONFIG\" &",
"straywild_controllerconfig=\"$GODOT_MUOS_MAPPING\"",
"GPTOKEYB_CONFIG=\"$GAMEDIR/straywild.gptk\"",
"$GPTOKEYB \"straywild.aarch64\" -c \"$GPTOKEYB_CONFIG\" &",
"pm_platform_helper \"$GAME_EXECUTABLE\"",
"\"$GAME_LAUNCHER\"",
"\"$CONTROLLER_MAPPING_FILE\"",
@ -304,7 +304,7 @@ func _validate_portmaster_launcher() -> String:
if "$'\\n'" in launcher:
return "PortMaster launcher appends mappings across a Weston-unsafe newline"
const game_launcher_path: String = (
"res://scripts/portmaster/launch-netfishing.sh"
"res://scripts/portmaster/launch-straywild.sh"
)
if not FileAccess.file_exists(game_launcher_path):
return "PortMaster game launcher wrapper is missing"

View file

@ -122,8 +122,38 @@ func _validate_primary_menu_navigation() -> void:
_expect(
play_button.icon != null
and play_button.icon.resource_path
== "res://ui/icons/main_menu/continue.png",
"The Play action does not use the original Continue icon.",
== "res://ui/icons/new_menu/play.png"
and play_button.text.is_empty(),
"The Play action is not presented as the large square icon button.",
)
_expect(
is_equal_approx(play_button.size.x, play_button.size.y),
"The Play action is not square.",
)
var online_button := title.get_node("%JoinGameButton") as Button
var settings_button := title.get_node("%SettingsButton") as Button
var credits_button := title.get_node("%CreditsButton") as Button
var close_button := title.get_node("%QuitButton") as Button
for secondary_button: Button in [
online_button,
settings_button,
credits_button,
close_button,
]:
_expect(
is_equal_approx(
secondary_button.size.x,
secondary_button.size.y,
),
"A secondary title action is not square.",
)
_expect(
is_equal_approx(
close_button.position.y + close_button.size.y
- online_button.position.y,
play_button.size.y,
),
"The secondary title-action stack does not match Play's height.",
)
_expect(
not (title.get_node("%NewGameButton") as Control).visible
@ -131,24 +161,29 @@ func _validate_primary_menu_navigation() -> void:
"Legacy New/Delete title bubbles are still visible.",
)
_assert_neighbor(
title.get_node("%JoinGameButton") as Control,
&"focus_neighbor_right",
play_button,
&"focus_neighbor_right",
title.get_node("%JoinGameButton") as Control,
)
_assert_neighbor(
title.get_node("%JoinGameButton") as Control,
&"focus_neighbor_left",
play_button,
)
_assert_neighbor(
title.get_node("%JoinGameButton") as Control,
&"focus_neighbor_bottom",
title.get_node("%SettingsButton") as Control,
)
_assert_neighbor(
title.get_node("%SettingsButton") as Control,
&"focus_neighbor_left",
play_button,
&"focus_neighbor_bottom",
title.get_node("%CreditsButton") as Control,
)
_assert_neighbor(
title.get_node("%CreditsButton") as Control,
&"focus_neighbor_right",
play_button,
)
_assert_neighbor(
&"focus_neighbor_bottom",
title.get_node("%QuitButton") as Control,
&"focus_neighbor_left",
play_button,
)
for title_control: Control in title_controls:
_assert_directionally_reachable(title_control, title_controls)
@ -1196,12 +1231,12 @@ func _validate_profile_voice_navigation() -> void:
kat_down != null and pitch_grid.is_ancestor_of(kat_down),
"Down from the voice-set row does not enter the pitch row.",
)
if OS.has_environment("NETFISHING_PROFILE_VOICE_CAPTURE"):
if OS.has_environment("straywild_PROFILE_VOICE_CAPTURE"):
await RenderingServer.frame_post_draw
var capture := root.get_viewport().get_texture().get_image()
_expect(
capture.save_png(OS.get_environment(
"NETFISHING_PROFILE_VOICE_CAPTURE"
"straywild_PROFILE_VOICE_CAPTURE"
)) == OK,
"The profile voice-page capture could not be saved.",
)

View file

@ -266,22 +266,22 @@ func _validate_four_by_three_centering() -> void:
func _validate_low_end_profile_contract() -> void:
var launcher: String = FileAccess.get_file_as_string(
"res://scripts/portmaster/NETfishing.sh"
"res://scripts/portmaster/straywild.sh"
)
assert(launcher.contains("NETFISHING_PERFORMANCE_PROFILE:-"))
assert(launcher.contains("straywild_PERFORMANCE_PROFILE:-"))
assert(launcher.contains("$CONFDIR/performance_profile"))
assert(launcher.contains("normal)"))
assert(launcher.contains("light|\"\")"))
assert(launcher.contains("NETFISHING_PERFORMANCE_PROFILE=normal"))
assert(launcher.contains("NETFISHING_PERFORMANCE_PROFILE=light"))
assert(launcher.contains("NETFISHING_LOW_END=1"))
assert(launcher.contains("straywild_PERFORMANCE_PROFILE=normal"))
assert(launcher.contains("straywild_PERFORMANCE_PROFILE=light"))
assert(launcher.contains("straywild_LOW_END=1"))
assert(launcher.contains("--max-fps 30"))
assert(launcher.contains("--audio-output-latency 40"))
var builder: String = FileAccess.get_file_as_string(
"res://scripts/build_portmaster.sh"
)
assert(builder.contains("prepare_portmaster_assets.sh"))
assert(builder.contains("netfishing-portmaster-export"))
assert(builder.contains("straywild-portmaster-export"))
var asset_profile: String = FileAccess.get_file_as_string(
"res://scripts/prepare_portmaster_assets.sh"
)

View file

@ -15,7 +15,7 @@ func _initialize() -> void:
func _run() -> void:
var defaults := ConfigType.new()
defaults.set("data_directory", "/tmp/netfishing-server")
defaults.set("data_directory", "/tmp/straywild-server")
defaults.call("_validate")
assert(defaults.is_valid())
assert(not bool(defaults.get("public_listing")))
@ -37,7 +37,7 @@ func _run() -> void:
file.set_value("world", "seed", 928374)
file.set_value("server", "public", true)
file.set_value("server", "data_directory", "/tmp/configured-server")
file.set_value("discovery", "url", "https://discovery.netfishing.org/")
file.set_value("discovery", "url", "https://discovery.straywild.io/")
file.set_value("privacy", "chat_logging", true)
file.set_value(
"privacy",
@ -59,7 +59,7 @@ func _run() -> void:
assert(int(configured.get("max_players")) == 12)
assert(int(configured.get("world_seed")) == 928374)
assert(bool(configured.get("public_listing")))
assert(str(configured.get("discovery_url")) == "https://discovery.netfishing.org")
assert(str(configured.get("discovery_url")) == "https://discovery.straywild.io")
assert(bool(configured.get("chat_logging")))
assert(
str(configured.get("chat_log_path"))

View file

@ -197,7 +197,7 @@ func _run() -> void:
var invalid_state: Dictionary = valid_state.duplicate(true)
invalid_state["display_scale"] = 1000.0
assert(not NetworkFishShowcaseProtocol.validate_state(invalid_state))
assert(NetworkProtocol.PROTOCOL_VERSION == 10)
assert(NetworkProtocol.PROTOCOL_VERSION == 11)
assert(NetworkProtocol.ENET_CHANNEL_COUNT == 17)
assert(
NetworkProtocol.FISH_QUALITY_CAPABILITY

View file

@ -26,7 +26,7 @@ func _run() -> void:
_validate_collection_mastery()
_validate_version_four_migration()
_validate_fishing_protocol_v2()
assert(NetworkProtocol.PROTOCOL_VERSION == 10)
assert(NetworkProtocol.PROTOCOL_VERSION == 11)
assert(NetworkProtocol.ENET_CHANNEL_COUNT == 17)
assert(NetworkProtocol.MOVEMENT_ANIMATION_CHANNEL == 11)
assert(

View file

@ -666,7 +666,7 @@ func _to_screen_rect(
func _capture_inventory_pages(player_menu: PlayerMenu) -> void:
if not OS.has_environment("NETFISHING_NOTEPAD_CAPTURE"):
if not OS.has_environment("straywild_NOTEPAD_CAPTURE"):
return
player_menu.visible = true
var sections: Array[PlayerMenu.Section] = [
@ -700,7 +700,7 @@ func _capture_inventory_pages(player_menu: PlayerMenu) -> void:
func _save_capture(suffix: String) -> void:
var image: Image = root.get_texture().get_image()
var path: String = "%s-%s.png" % [
OS.get_environment("NETFISHING_NOTEPAD_CAPTURE"),
OS.get_environment("straywild_NOTEPAD_CAPTURE"),
suffix,
]
assert(image.save_png(path) == OK)

View file

@ -123,7 +123,6 @@ func _validate_main_profile(main: Node) -> void:
var game_ui := main.get_node("%GameUI") as GameUI
var title_screen := game_ui.get_title_screen()
assert(title_screen != null)
assert(not title_screen.is_decorative_presentation_active())
var player_menu := game_ui.get("_player_menu") as PlayerMenu
assert(player_menu != null)
assert(not player_menu.is_cooler_water_effect_enabled())
@ -159,8 +158,6 @@ func _validate_normal_profile(main: Node) -> void:
var game_ui := main.get_node("%GameUI") as GameUI
var title_screen := game_ui.get_title_screen()
assert(title_screen != null)
assert(title_screen.is_decorative_presentation_active())
assert(title_screen.is_decorative_bubble_scheduler_active())
var player_menu := game_ui.get("_player_menu") as PlayerMenu
assert(player_menu != null)
assert(player_menu.is_cooler_water_effect_enabled())

View file

@ -201,13 +201,13 @@ func _add_test_catch(player: Player, fish: FishData) -> void:
func _capture_if_requested(suffix: String) -> void:
if not OS.has_environment("NETFISHING_LOGBOOK_CAPTURE"):
if not OS.has_environment("straywild_LOGBOOK_CAPTURE"):
return
await process_frame
await process_frame
var image: Image = root.get_texture().get_image()
var path: String = (
OS.get_environment("NETFISHING_LOGBOOK_CAPTURE")
OS.get_environment("straywild_LOGBOOK_CAPTURE")
+ suffix
+ ".png"
)

View file

@ -23,11 +23,11 @@ func _initialize() -> void:
func _run() -> void:
if OS.has_environment("NETFISHING_TEST_CREATE_ROOT"):
if OS.has_environment("straywild_TEST_CREATE_ROOT"):
var data_root := PlayerDataRoot.new()
root.add_child(data_root)
var result: Dictionary = data_root.create_unbound_root(
OS.get_environment("NETFISHING_TEST_CREATE_ROOT")
OS.get_environment("straywild_TEST_CREATE_ROOT")
)
assert(bool(result.get("ok", false)))
data_root.queue_free()

View file

@ -4,7 +4,7 @@
[ext_resource type="Script" path="res://world/generation/terrain_chunk_generator.gd" id="2_generator"]
[ext_resource type="Resource" path="res://world/generation/chunks/terrain_chunk_catalog.tres" id="3_catalog"]
[ext_resource type="PackedScene" path="res://player/player.tscn" id="4_player"]
[ext_resource type="Environment" path="res://world/environment/netfishing_environment.tres" id="5_environment"]
[ext_resource type="Environment" path="res://world/environment/straywild_environment.tres" id="5_environment"]
[node name="TerrainChunkGeneratorTest" type="Node3D"]
script = ExtResource("1_test")

View file

@ -21,6 +21,10 @@ func _run() -> void:
var credits_button := title_screen.get_node(
"%CreditsButton"
) as BubbleButton
var play_button := title_screen.get_node("%PlayButton") as BubbleButton
var continue_stats_drawer := title_screen.get_node(
"%ContinueStatsDrawer"
) as RichTextLabel
var credits_page := title_screen.get_node(
"%CreditsPage"
) as TitleCreditsPageType
@ -34,9 +38,32 @@ func _run() -> void:
await process_frame
_expect(credits_button != null, "title menu exposes a credits button")
_expect(play_button != null, "title menu exposes the play button")
_expect(
continue_stats_drawer != null,
"play button owns a dedicated save-preview drawer",
)
if play_button != null and continue_stats_drawer != null:
_expect(
continue_stats_drawer.get_parent() == play_button,
"save preview extends directly from the play button",
)
_expect(
continue_stats_drawer.position.y < play_button.size.y
and (
continue_stats_drawer.position.y
+ continue_stats_drawer.size.y
) > play_button.size.y,
"save preview overlaps the play edge and extends below it",
)
_expect(
continue_stats_drawer.mouse_filter
== Control.MOUSE_FILTER_IGNORE,
"save preview drawer cannot intercept menu input",
)
_expect(
credits_button.icon != null and credits_button.text.is_empty(),
"credits bubble uses its authored icon",
"credits action uses its icon in the square-button presentation",
)
_expect(credits_page != null, "title screen contains the credits page")
_expect(not credits_page.visible, "credits page starts closed")
@ -44,29 +71,39 @@ func _run() -> void:
Rect2(Vector2.ZERO, bubble_field.size).encloses(
Rect2(credits_button.position, credits_button.size)
),
"credits bubble stays inside the authored title field",
"credits button stays inside the authored title field",
)
_expect(
credits_button.mouse_filter == Control.MOUSE_FILTER_STOP,
"credits bubble accepts pointer input",
"credits button accepts pointer input",
)
if OS.has_environment("NETFISHING_TITLE_MENU_CAPTURE"):
if OS.has_environment("straywild_TITLE_MENU_CAPTURE"):
(title_screen.get_node("%StartPromptCenter") as Control).hide()
title_screen.set_process(true)
await create_timer(0.5).timeout
_expect(
_save_capture(
OS.get_environment("NETFISHING_TITLE_MENU_CAPTURE")
OS.get_environment("straywild_TITLE_MENU_CAPTURE")
) == OK,
"title menu validation capture saves successfully",
)
title_screen.set_process(false)
title_screen.set("_navigation_focus_active", false)
credits_button.call("_set_hovered", true)
credits_button.advance_emphasis(1.0)
_expect(
(credits_button.get_node("HoverDrawer") as Control).visible,
"pointer hover reveals the credits drawer before activation",
)
credits_button.pressed.emit()
await process_frame
_expect(credits_page.visible, "pointer activation opens credits")
_expect(not presentation.visible, "credits replace the primary title menu")
_expect(
not (credits_button.get_node("HoverDrawer") as Control).visible,
"opening a title page collapses its hover drawer",
)
_expect(
root.gui_get_focus_owner() != back_button,
"pointer activation does not pseudo-select back",
@ -80,11 +117,11 @@ func _run() -> void:
back_button.mouse_filter == Control.MOUSE_FILTER_STOP,
"credits back button accepts pointer clicks",
)
if OS.has_environment("NETFISHING_CREDITS_CAPTURE"):
if OS.has_environment("straywild_CREDITS_CAPTURE"):
await process_frame
_expect(
_save_capture(
OS.get_environment("NETFISHING_CREDITS_CAPTURE")
OS.get_environment("straywild_CREDITS_CAPTURE")
) == OK,
"credits validation capture saves successfully",
)
@ -97,6 +134,30 @@ func _run() -> void:
"pointer return leaves the title menu unfocused",
)
var online_button := title_screen.get_node(
"%JoinGameButton"
) as BubbleButton
var join_game_page := title_screen.get_node("%JoinGamePage") as Control
online_button.call("_set_hovered", true)
online_button.advance_emphasis(1.0)
_expect(
(online_button.get_node("HoverDrawer") as Control).visible,
"pointer hover reveals the online drawer before activation",
)
online_button.pressed.emit()
await process_frame
_expect(join_game_page.visible, "online activation opens the join page")
_expect(
not (online_button.get_node("HoverDrawer") as Control).visible,
"opening the join page collapses the online drawer",
)
title_screen.call("_close_join_game")
await process_frame
_expect(
not (online_button.get_node("HoverDrawer") as Control).visible,
"returning from the join page does not restore stale pointer hover",
)
title_screen.set("_navigation_focus_active", true)
credits_button.grab_focus()
credits_button.pressed.emit()
@ -134,7 +195,7 @@ func _run() -> void:
_expect(not credits_page.visible, "ui cancel closes credits")
_expect(
root.gui_get_focus_owner() == credits_button,
"navigation return restores focus to the credits bubble",
"navigation return restores focus to the credits button",
)
var chillnfill_name := credits_page.get_node(

View file

@ -66,12 +66,6 @@ func _run() -> void:
var pause_profile_stage := pause_menu.get_node(
"ResponsivePauseStage"
) as Control
var decorative_fish_layer := title_screen.get_node(
"DecorativeFishLayer"
) as Control
var decorative_bubble_layer := title_screen.get_node(
"DecorativeBubbleLayer"
) as Control
ui_viewport.add_child(game_ui)
presenter.add_child(ui_viewport)
root.add_child(presenter)
@ -165,26 +159,6 @@ func _run() -> void:
assert(pause_profile_stage.position.is_equal_approx(
expected_profile_position
))
assert(decorative_fish_layer.size.is_equal_approx(
expected_visible_size
))
assert(decorative_bubble_layer.size.is_equal_approx(
expected_visible_size
))
var left_to_right_bounds: Vector2 = (
TitleScreen.get_decorative_fish_crossing_bounds(
expected_visible_size.x, 160.0, 1.0
)
)
var right_to_left_bounds: Vector2 = (
TitleScreen.get_decorative_fish_crossing_bounds(
expected_visible_size.x, 160.0, -1.0
)
)
assert(left_to_right_bounds.x < -160.0)
assert(left_to_right_bounds.y > expected_visible_size.x)
assert(right_to_left_bounds.x > expected_visible_size.x)
assert(right_to_left_bounds.y < -160.0)
assert(is_equal_approx(presenter.scale.x, presenter.scale.y))
assert(is_equal_approx(ui_root.scale.x, ui_root.scale.y))
var effective_scale: float = presenter.scale.x * ui_root.scale.x
@ -310,13 +284,13 @@ func _run() -> void:
chat_panel.position.x * effective_scale,
]
)
if OS.has_environment("NETFISHING_UI_SCALE_CAPTURE"):
if OS.has_environment("straywild_UI_SCALE_CAPTURE"):
await process_frame
var capture: Image = root.get_texture().get_image()
var capture_path: String = (
"%s-requested-%dx%d-actual-%dx%d.png"
) % [
OS.get_environment("NETFISHING_UI_SCALE_CAPTURE"),
OS.get_environment("straywild_UI_SCALE_CAPTURE"),
target_size.x,
target_size.y,
actual_size.x,

View file

@ -16,7 +16,7 @@ const CalendarSeasonType = preload("res://world/calendar_season.gd")
func _initialize() -> void:
assert(NetworkProtocol.PROTOCOL_VERSION == 10)
assert(NetworkProtocol.PROTOCOL_VERSION == 11)
assert(
NetworkWorldSpawnProtocol.CAPABILITY
== NetworkProtocol.WORLD_SPAWN_CAPABILITY

View file

@ -304,7 +304,7 @@ func _validate_environment_presentation() -> void:
var sky := Sky.new()
var sky_material := ShaderMaterial.new()
sky_material.shader = preload(
"res://world/environment/netfishing_sky.gdshader"
"res://world/environment/straywild_sky.gdshader"
)
sky.sky_material = sky_material
environment.sky = sky
@ -352,7 +352,7 @@ func _validate_environment_presentation() -> void:
"res://world/materials/stylized_water.gdshader"
)
var sky_shader: Shader = preload(
"res://world/environment/netfishing_sky.gdshader"
"res://world/environment/straywild_sky.gdshader"
)
assert("uniform float fog_horizon_occlusion" in sky_shader.code)
assert("fog_horizon_color.rgb" in sky_shader.code)

View file

@ -283,7 +283,7 @@ func _validate_weather_presentation() -> void:
var sky := Sky.new()
var sky_material := ShaderMaterial.new()
sky_material.shader = preload(
"res://world/environment/netfishing_sky.gdshader"
"res://world/environment/straywild_sky.gdshader"
)
sky.sky_material = sky_material
environment.sky = sky

View file

@ -107,7 +107,7 @@ def _parse_arguments() -> argparse.Namespace:
if "--" in sys.argv:
script_arguments = sys.argv[sys.argv.index("--") + 1 :]
parser = argparse.ArgumentParser(
description="Export NETfishing terrain chunk collections to GLB files."
description="Export straywild terrain chunk collections to GLB files."
)
parser.add_argument(
"--output",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

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