Compare commits
26 commits
v0.6.7-alp
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f55663c105 | |||
| 63e50e285d | |||
| 65967816f5 | |||
| 5d7c3d7459 | |||
| e54ad1332b | |||
| 2045d8e288 | |||
| 31d459b3a7 | |||
| dbe0a7b313 | |||
| 8bc800de36 | |||
| 552af7a58c | |||
| 405bdaa2d2 | |||
| 3576daba16 | |||
| 0076996d39 | |||
| c06d5714c0 | |||
| 117fdbfdaa | |||
| 7d38bc962b | |||
| c239ca6bd5 | |||
| 5ec62b8465 | |||
| 2159798d1a | |||
| 51fa6535b6 | |||
| db6074ddfa | |||
| 1940ae13e5 | |||
| 9729c278dc | |||
| 40b8fe0278 | |||
| 24b9570463 | |||
| 41192e4ef5 |
135
ASSET-LICENSE.md
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
# NETfishing Asset License 1.0
|
||||
|
||||
Copyright © 2026 Woofmeow. All rights reserved except for the permissions
|
||||
expressly granted below.
|
||||
|
||||
## 1. Scope
|
||||
|
||||
This license applies to original NETfishing artwork, graphics, textures,
|
||||
models, animations, music, sound recordings, narrative content, visual
|
||||
designs, characters, and other creative assets owned by the NETfishing owners,
|
||||
publishing as Woofmeow (the **“NETfishing Assets”**).
|
||||
|
||||
It does not apply to:
|
||||
|
||||
- software source code identified as GPL-3.0-or-later;
|
||||
- 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
|
||||
`TRADEMARKS.md`.
|
||||
|
||||
Repository location alone does not change third-party ownership or licensing.
|
||||
|
||||
## 2. Definitions
|
||||
|
||||
**Official NETfishing 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
|
||||
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
|
||||
of the game or represent a fork, clone, sequel, or separate game.
|
||||
|
||||
## 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
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
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;
|
||||
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.0. This Mod is unofficial and is not endorsed
|
||||
> by Woofmeow.
|
||||
|
||||
4. identify material created by the Mod author separately from NETfishing
|
||||
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
|
||||
Assets in paid products requires separate written permission from both
|
||||
NETfishing owners.
|
||||
|
||||
## 5. Uses not permitted
|
||||
|
||||
Except with separate written permission from both NETfishing owners, you may
|
||||
not use or distribute NETfishing Assets:
|
||||
|
||||
- in a fork, clone, remake, sequel, or standalone game;
|
||||
- with a modified distribution of the GPL-covered NETfishing code that is not
|
||||
Official NETfishing Software;
|
||||
- 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.
|
||||
|
||||
The GPL permits forks and redistribution of the GPL-covered code. This asset
|
||||
license does not permit those forks to carry NETfishing Assets. A code fork
|
||||
must remove or replace the NETfishing Assets and reserved branding unless both
|
||||
owners grant separate written permission.
|
||||
|
||||
## 6. Ownership of Mods
|
||||
|
||||
You retain ownership of your original Mod material. The NETfishing owners
|
||||
retain ownership of the NETfishing Assets and adaptations of those assets to
|
||||
the extent provided by applicable law.
|
||||
|
||||
This license does not require you to assign your original Mod material to the
|
||||
NETfishing owners. It also does not grant you ownership of the underlying
|
||||
NETfishing Assets.
|
||||
|
||||
## 7. 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
|
||||
within sixty days after it has been cured.
|
||||
|
||||
Termination does not limit remedies available for activity outside this
|
||||
license.
|
||||
|
||||
## 8. No warranty
|
||||
|
||||
THE NETFISHING 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.
|
||||
|
||||
## 9. Additional permission
|
||||
|
||||
Uses not granted here require written permission from both NETfishing owners.
|
||||
A permission granted to one person or project does not amend this license for
|
||||
others.
|
||||
|
||||
This is a custom asset license, not an open-source software license or a
|
||||
Creative Commons license.
|
||||
|
|
@ -4,6 +4,12 @@ NETfishing is currently developed through focused changes on the repository's
|
|||
active development branch. Coordinate scope with the project owner before
|
||||
starting substantial work.
|
||||
|
||||
By intentionally submitting material for inclusion, contributors agree to the
|
||||
applicable grants and representations in
|
||||
[`CONTRIBUTOR-TERMS.md`](CONTRIBUTOR-TERMS.md). Maintainers must preserve an
|
||||
affirmative record of that agreement. Contact the owners before submitting if
|
||||
separate written terms are needed.
|
||||
|
||||
## Change discipline
|
||||
|
||||
- Keep a change focused; avoid unrelated cleanup.
|
||||
|
|
@ -15,7 +21,10 @@ starting substantial work.
|
|||
- Keep presentation-only systems out of save files and network messages.
|
||||
- Store runtime assets under repository-owned paths; never reference a
|
||||
workstation sync or temporary directory.
|
||||
- Record the source and license of newly imported assets.
|
||||
- Record the source and license of newly imported assets in
|
||||
[`docs/ATTRIBUTION.md`](docs/ATTRIBUTION.md).
|
||||
- Do not assume the GPL code license applies to project assets; observe
|
||||
[`ASSET-LICENSE.md`](ASSET-LICENSE.md) and third-party terms.
|
||||
- Do not commit `.godot/`, test data, logs, captures, or build outputs.
|
||||
|
||||
## Before requesting review
|
||||
|
|
@ -26,7 +35,8 @@ scripts/run_validations.sh quick
|
|||
git status --short
|
||||
```
|
||||
|
||||
Choose additional focused tests from [`docs/TESTING.md`](docs/TESTING.md).
|
||||
Choose additional focused tests from the validation section of
|
||||
[`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md#validation).
|
||||
Changes involving networking should run the network suite and a real
|
||||
two-process check. Visual changes still require graphical review; headless
|
||||
tests are supporting evidence, not a replacement.
|
||||
|
|
@ -46,3 +56,7 @@ Follow the conventions already present in the surrounding GDScript, scene, and
|
|||
resource files. Prefer typed values, named constants, shared resources, and
|
||||
small domain-specific services. Avoid duplicating protocol definitions or
|
||||
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.
|
||||
|
|
|
|||
94
CONTRIBUTOR-TERMS.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# NETfishing contributor terms
|
||||
|
||||
These terms apply to contributions intentionally submitted for inclusion in
|
||||
NETfishing after these terms are published. They 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
|
||||
Woofmeow and are publicly credited as Voyager and Endeavour. “Project” means
|
||||
the official NETfishing game, its servers, tools, documentation, websites,
|
||||
ports, updates, and promotional materials.
|
||||
|
||||
## 1. Your ownership and authority
|
||||
|
||||
You retain copyright in your original contribution. By submitting it, you
|
||||
represent that:
|
||||
|
||||
- you created it or otherwise have authority to grant these permissions;
|
||||
- its submission does not knowingly violate another party’s copyright,
|
||||
patent, trademark, privacy, contract, or other rights;
|
||||
- you have disclosed relevant third-party material and license terms; and
|
||||
- if an employer or another organization controls the contribution, you have
|
||||
obtained its permission before submitting.
|
||||
|
||||
Do not submit confidential information, unlawfully obtained material, or
|
||||
content whose origin and permitted use cannot be documented.
|
||||
|
||||
## 2. Code contributions
|
||||
|
||||
You license an accepted software-code contribution under the GNU General
|
||||
Public License, version 3 or, at the recipient’s option, any later version
|
||||
(GPL-3.0-or-later).
|
||||
|
||||
You also grant each recipient a perpetual, worldwide, nonexclusive,
|
||||
royalty-free patent license under patent claims you can license that are
|
||||
necessarily infringed by your contribution alone or by its combination with
|
||||
the Project as submitted. This patent license does not cover later
|
||||
combinations that are unrelated to your submitted contribution.
|
||||
|
||||
## 3. Asset, writing, and documentation contributions
|
||||
|
||||
For an accepted contribution consisting of artwork, models, animation, audio,
|
||||
music, writing, level content, branding material, or other non-code creative
|
||||
work, you grant the Owners a perpetual, worldwide, nonexclusive,
|
||||
royalty-free, transferable, and sublicensable license to:
|
||||
|
||||
- use, reproduce, modify, adapt, translate, and create derivative works;
|
||||
- distribute, publicly display, publicly perform, transmit, and make
|
||||
available the contribution;
|
||||
- include it in free and commercial Project releases, ports, updates,
|
||||
merchandise, marketing, and archival materials; and
|
||||
- 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
|
||||
the Owners to sell your contribution as an unrelated standalone asset.
|
||||
|
||||
## 4. Documentation accompanying code
|
||||
|
||||
Documentation submitted as an ordinary part of a code contribution may be
|
||||
distributed under GPL-3.0-or-later with that code. Project credits and
|
||||
provenance records may be reproduced in any medium needed to document the
|
||||
Project and its releases.
|
||||
|
||||
## 5. Attribution
|
||||
|
||||
Provide the name or pseudonym you want used for credit. The Owners will make a
|
||||
reasonable effort to preserve material attribution, subject to formatting,
|
||||
privacy, platform, and practical limitations.
|
||||
|
||||
Attribution does not imply that a contributor endorses every Project change
|
||||
or release.
|
||||
|
||||
## 6. No automatic ownership, employment, or payment
|
||||
|
||||
Submitting a contribution does not provide ownership of NETfishing, 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.
|
||||
|
||||
## 7. Acceptance
|
||||
|
||||
A contribution is not accepted merely because it was posted, uploaded, or
|
||||
discussed. The Owners or their authorized maintainers may accept, modify,
|
||||
decline, or later remove it.
|
||||
|
||||
By intentionally submitting a patch, pull request, asset, or other material
|
||||
for Project inclusion after receiving notice of these terms, you agree to the
|
||||
applicable grants above. Maintainers should record the contributor’s
|
||||
affirmative agreement in the pull request, issue, email, or another durable
|
||||
written record.
|
||||
|
||||
If you cannot agree to these terms, do not submit the contribution; contact
|
||||
the Owners to discuss a separate written arrangement.
|
||||
56
CREDITS.md
|
|
@ -1,56 +0,0 @@
|
|||
# Credits
|
||||
|
||||
## Project direction
|
||||
|
||||
NETfishing is designed, directed, reviewed, and released by its project
|
||||
creator. A public-facing creator or studio credit has not yet been recorded in
|
||||
this repository.
|
||||
|
||||
## Development assistance
|
||||
|
||||
Development has used automated coding assistance for implementation,
|
||||
investigation, testing, documentation, and review. Design choices, supplied
|
||||
artwork, acceptance decisions, repository operations, and releases remain
|
||||
human-controlled.
|
||||
|
||||
This disclosure is intentionally about process. Commit style, code style, or
|
||||
repository metadata cannot reliably prove whether a particular change was
|
||||
written with or without assistance.
|
||||
|
||||
## Fonts
|
||||
|
||||
- Tuffy: Thatcher Ulrich, Karoly Barta, and Michael Evans. The bundled license
|
||||
dedicates the work to the public domain; see `ui/fonts/Tuffy-LICENSE.txt`.
|
||||
- Seattle Avenue: bundled as `ui/fonts/seattle_avenue.otf`. Author and
|
||||
redistribution terms still need to be recorded before public distribution.
|
||||
|
||||
## Music
|
||||
|
||||
- `audio/music/title/as_in_four_wolves.ogg`: original title/ambient music by
|
||||
the project owner.
|
||||
|
||||
## Sound effects
|
||||
|
||||
- “Spinning reel.wav” by tosha73, used as the source for the fishing fight and
|
||||
manual-reeling loops. Freesound sound 509902, Creative Commons Zero (CC0):
|
||||
https://freesound.org/s/509902/
|
||||
- “Gentle Ocean Waves Loop” by kkenny101, used for the saltwater shoreline
|
||||
ambience. Freesound sound 852826, Creative Commons Zero (CC0):
|
||||
https://freesound.org/s/852826/
|
||||
- Rain Loop Ontario by Ayton -- https://freesound.org/s/212799/ -- License:
|
||||
Attribution 3.0
|
||||
- Dog_Bark.wav by ivolipa -- https://freesound.org/s/328729/ -- License:
|
||||
Creative Commons 0
|
||||
- Cat meow.m4a by Christyboy100 -- https://freesound.org/s/495694/ -- License:
|
||||
Attribution 3.0
|
||||
- “Quick Water Droplet” by qubodup, used for the bobber water-impact sound.
|
||||
Freesound sound 792931, Creative Commons Zero (CC0):
|
||||
https://freesound.org/s/792931/
|
||||
|
||||
## Artwork
|
||||
|
||||
- 2D artwork: Rheannon Eisworth, contributor.
|
||||
- 3D models: original work by the project owner.
|
||||
|
||||
Asset categories and release-record requirements are listed in
|
||||
[`docs/ASSET-PROVENANCE.md`](docs/ASSET-PROVENANCE.md).
|
||||
232
LICENSE
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
“This License” refers to version 3 of the GNU General Public License.
|
||||
|
||||
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
|
||||
|
||||
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
|
||||
|
||||
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
|
||||
|
||||
A “covered work” means either the unmodified Program or a work based on the Program.
|
||||
|
||||
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
|
||||
|
||||
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
|
||||
|
||||
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
|
||||
|
||||
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
|
||||
|
||||
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
||||
|
||||
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
||||
|
||||
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
||||
|
||||
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
|
||||
|
||||
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
||||
|
||||
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
33
README.md
|
|
@ -8,6 +8,9 @@ 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
|
||||
co-owners publicly credited as Voyager and Endeavour.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Godot 4.7.x with the GL Compatibility renderer
|
||||
|
|
@ -35,8 +38,8 @@ Run the fast, deterministic suite before submitting a change:
|
|||
scripts/run_validations.sh quick
|
||||
```
|
||||
|
||||
Additional suites and individual commands are documented in
|
||||
[`docs/TESTING.md`](docs/TESTING.md).
|
||||
Additional suites and individual commands are documented in the
|
||||
[`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md#validation) validation section.
|
||||
|
||||
## Building
|
||||
|
||||
|
|
@ -65,6 +68,26 @@ scripts do not create or publish tags.
|
|||
- `tests/`: focused Godot validation scripts
|
||||
- `scripts/`: build, bake, and validation entry points
|
||||
|
||||
See [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) and
|
||||
[`world/README-WORLD-AUTHORING.md`](world/README-WORLD-AUTHORING.md) for more
|
||||
detail.
|
||||
All maintained project guidance starts at the
|
||||
[`docs/` documentation index](docs/README.md). Architecture, content policy,
|
||||
world and UI authoring, and testing are consolidated in
|
||||
[`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md).
|
||||
|
||||
## Licensing
|
||||
|
||||
- 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, but not use in forks, clones, or
|
||||
unrelated products.
|
||||
- The NETfishing 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).
|
||||
- Contributions are accepted under [CONTRIBUTOR-TERMS.md](CONTRIBUTOR-TERMS.md).
|
||||
|
||||
Material boundaries and binary-release requirements are recorded in that same
|
||||
[`docs/ATTRIBUTION.md`](docs/ATTRIBUTION.md) reference.
|
||||
|
||||
Copyright © 2026 Woofmeow.
|
||||
|
|
|
|||
42
TRADEMARKS.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# NETfishing 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.
|
||||
Their presence in a GPL-licensed repository does not grant trademark rights or
|
||||
imply permission to represent another product as official.
|
||||
|
||||
No trademark registration is asserted by this notice. Applicable rights may
|
||||
exist through use and other law.
|
||||
|
||||
## Permitted references
|
||||
|
||||
You may use the names NETfishing and Woofmeow truthfully to:
|
||||
|
||||
- refer to the official game or development team;
|
||||
- state that software interoperates with or is a Mod for NETfishing;
|
||||
- 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
|
||||
name and presentation remain clearly distinct and it displays an unofficial
|
||||
notice.
|
||||
|
||||
## Forks and redistributed code
|
||||
|
||||
The GNU GPL permits forks and redistribution of covered code. A fork or
|
||||
modified distribution must:
|
||||
|
||||
- use a distinct product name;
|
||||
- remove NETfishing 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.
|
||||
|
||||
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.
|
||||
7
addons/netfishing_shoreline_baker/plugin.cfg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[plugin]
|
||||
|
||||
name="NETfishing Shoreline Auto-Baker"
|
||||
description="Rebuilds configured static shoreline ribbons after authored terrain reimports."
|
||||
author="woofmeow"
|
||||
version="1.0.0"
|
||||
script="shoreline_auto_baker.gd"
|
||||
66
addons/netfishing_shoreline_baker/shoreline_auto_baker.gd
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
const TERRAIN_RESOURCE := (
|
||||
"res://art/exported/environment/terrain/starter_island.glb"
|
||||
)
|
||||
const REGION_SCENE := "res://world/regions/starter_island_region.tscn"
|
||||
|
||||
var _bake_pending := false
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
var filesystem := get_editor_interface().get_resource_filesystem()
|
||||
if not filesystem.resources_reimported.is_connected(_on_resources_reimported):
|
||||
filesystem.resources_reimported.connect(_on_resources_reimported)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
var filesystem := get_editor_interface().get_resource_filesystem()
|
||||
if filesystem.resources_reimported.is_connected(_on_resources_reimported):
|
||||
filesystem.resources_reimported.disconnect(_on_resources_reimported)
|
||||
|
||||
|
||||
func _on_resources_reimported(resources: PackedStringArray) -> void:
|
||||
if not resources.has(TERRAIN_RESOURCE) or _bake_pending:
|
||||
return
|
||||
_bake_pending = true
|
||||
call_deferred("_bake_configured_shorelines")
|
||||
|
||||
|
||||
func _bake_configured_shorelines() -> void:
|
||||
_bake_pending = false
|
||||
var packed_region := ResourceLoader.load(
|
||||
REGION_SCENE,
|
||||
"PackedScene",
|
||||
ResourceLoader.CACHE_MODE_REPLACE,
|
||||
) as PackedScene
|
||||
if packed_region == null:
|
||||
push_error("Shoreline auto-bake could not load %s." % REGION_SCENE)
|
||||
return
|
||||
var region := packed_region.instantiate() as Node3D
|
||||
add_child(region)
|
||||
var baker := region.get_node_or_null(
|
||||
"ShorelineRibbonBaker"
|
||||
) as ShorelineRibbonBaker
|
||||
if baker == null:
|
||||
push_error("Shoreline auto-bake found no configured baker.")
|
||||
region.queue_free()
|
||||
return
|
||||
var results := baker.rebuild_all()
|
||||
for result: Dictionary in results:
|
||||
if result.get("skipped", false):
|
||||
continue
|
||||
var output_path: String = result.get("output_path", "")
|
||||
if not output_path.is_empty():
|
||||
ResourceLoader.load(
|
||||
output_path,
|
||||
"ArrayMesh",
|
||||
ResourceLoader.CACHE_MODE_REPLACE,
|
||||
)
|
||||
print(
|
||||
"Shoreline auto-bake: %s, %d loops, %d triangles"
|
||||
% [output_path, result.loop_count, result.triangle_count]
|
||||
)
|
||||
region.queue_free()
|
||||
get_editor_interface().get_resource_filesystem().scan()
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://cbk4xpalei5v3
|
||||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
# Drop-in facial features
|
||||
|
||||
Facial feature textures are discovered when the game starts. Put new PNGs in
|
||||
the matching directory, restart the game, and the option will appear in the
|
||||
Profile customization page.
|
||||
|
||||
```text
|
||||
eyes/<id>.png
|
||||
noses/<id>.png
|
||||
mouth/<id>.png
|
||||
```
|
||||
|
||||
The category directory is authoritative. A category prefix is optional, so
|
||||
both `sleepy.png` and `eyes_sleepy.png` become the option ID `sleepy`.
|
||||
Filenames are normalized to lowercase snake_case. Use stable names because
|
||||
the resulting IDs are stored in appearance snapshots and sent to peers.
|
||||
|
||||
Keep each PNG on the established facial-feature canvas with an RGBA
|
||||
transparent background. Godot imports the PNG automatically in the editor;
|
||||
the runtime registry ignores `.import` files and other non-PNG files.
|
||||
|
||||
The current game bundles its facial assets under `res://`. Adding a file to a
|
||||
development checkout is picked up on the next startup. An exported build must
|
||||
be rebuilt to include newly added `res://` files in its package.
|
||||
BIN
art/exported/characters/patterns/bengal/body_arms_bengal.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cxpiqjwgff0xr"
|
||||
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||
uid="uid://b2e0uxfn187gu"
|
||||
path="res://.godot/imported/body_arms_bengal.png-350ed15f218f0efa6ae7573ad27d3c65.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
|
||||
source_file="res://art/exported/characters/patterns/bengal/body_arms_bengal.png"
|
||||
dest_files=["res://.godot/imported/body_arms_bengal.png-350ed15f218f0efa6ae7573ad27d3c65.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -38,6 +38,3 @@ process/hdr_as_srgb=false
|
|||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
BIN
art/exported/characters/patterns/bengal/body_main_bengal.png
Normal file
|
After Width: | Height: | Size: 151 KiB |
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bm0kkevv62mu0"
|
||||
path="res://.godot/imported/art_kit.svg-d4bd09e1da2e2339f7d505ee23d771f8.ctex"
|
||||
uid="uid://cn71sswmj0tue"
|
||||
path="res://.godot/imported/body_main_bengal.png-59815350b807220c52317e683582847e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://items/icons/placeholder/art_kit.svg"
|
||||
dest_files=["res://.godot/imported/art_kit.svg-d4bd09e1da2e2339f7d505ee23d771f8.ctex"]
|
||||
source_file="res://art/exported/characters/patterns/bengal/body_main_bengal.png"
|
||||
dest_files=["res://.godot/imported/body_main_bengal.png-59815350b807220c52317e683582847e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -38,6 +38,3 @@ process/hdr_as_srgb=false
|
|||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
BIN
art/exported/characters/patterns/bengal/head_round_bengal.png
Normal file
|
After Width: | Height: | Size: 246 KiB |
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://trqvs4dgd4rt"
|
||||
path="res://.godot/imported/fish_coin.svg-9d00b5918d94a555938a84ee65e06386.ctex"
|
||||
uid="uid://rv36ws5wuakb"
|
||||
path="res://.godot/imported/head_round_bengal.png-dfa502a4514c1605f5c8aff839dd8765.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://items/icons/placeholder/fish_coin.svg"
|
||||
dest_files=["res://.godot/imported/fish_coin.svg-9d00b5918d94a555938a84ee65e06386.ctex"]
|
||||
source_file="res://art/exported/characters/patterns/bengal/head_round_bengal.png"
|
||||
dest_files=["res://.godot/imported/head_round_bengal.png-dfa502a4514c1605f5c8aff839dd8765.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -38,6 +38,3 @@ process/hdr_as_srgb=false
|
|||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
BIN
art/exported/characters/patterns/fox/body_arms_fox.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d115jiqughf40"
|
||||
path="res://.godot/imported/cooler_expansion.svg-a3d63bc21ba230007f1039372b518c8f.ctex"
|
||||
uid="uid://p5cg2bwrxf7v"
|
||||
path="res://.godot/imported/body_arms_fox.png-91ab21ce544fdc29b8a0ebf3e54ef7cd.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://items/icons/placeholder/cooler_expansion.svg"
|
||||
dest_files=["res://.godot/imported/cooler_expansion.svg-a3d63bc21ba230007f1039372b518c8f.ctex"]
|
||||
source_file="res://art/exported/characters/patterns/fox/body_arms_fox.png"
|
||||
dest_files=["res://.godot/imported/body_arms_fox.png-91ab21ce544fdc29b8a0ebf3e54ef7cd.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -38,6 +38,3 @@ process/hdr_as_srgb=false
|
|||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
BIN
art/exported/characters/patterns/fox/body_main_fox.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://wcsadkjjpaei"
|
||||
path="res://.godot/imported/body_main_fox.png-25e4fa03a48053f6b37b3bbadb1f01ba.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://art/exported/characters/patterns/fox/body_main_fox.png"
|
||||
dest_files=["res://.godot/imported/body_main_fox.png-25e4fa03a48053f6b37b3bbadb1f01ba.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
art/exported/characters/patterns/fox/head_pointy_fox.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c4vlbrp7qevvo"
|
||||
path="res://.godot/imported/head_pointy_fox.png-ef3535a6c05a49aae36fe5514844a3df.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://art/exported/characters/patterns/fox/head_pointy_fox.png"
|
||||
dest_files=["res://.godot/imported/head_pointy_fox.png-ef3535a6c05a49aae36fe5514844a3df.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
art/exported/characters/patterns/fox/head_round_fox.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bwiwt76kyyevw"
|
||||
path="res://.godot/imported/head_round_fox.png-27dc2125a4e5b85a622291762225a303.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://art/exported/characters/patterns/fox/head_round_fox.png"
|
||||
dest_files=["res://.godot/imported/head_round_fox.png-27dc2125a4e5b85a622291762225a303.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
art/exported/characters/patterns/fox/tails_fox_fox.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cyr0wcavb1cmi"
|
||||
path="res://.godot/imported/tails_fox_fox.png-061a224c36e90f10b33d37e616ff7e94.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://art/exported/characters/patterns/fox/tails_fox_fox.png"
|
||||
dest_files=["res://.godot/imported/tails_fox_fox.png-061a224c36e90f10b33d37e616ff7e94.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ compress/rdo_quality_loss=0.0
|
|||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
|
|||
|
|
@ -1,80 +0,0 @@
|
|||
# Architecture
|
||||
|
||||
## Composition
|
||||
|
||||
`main/main.tscn` is the application composition root. It owns long-lived
|
||||
services, the active world, player container, save/settings managers, and the
|
||||
pixelated UI viewport. Services are scene-owned rather than global autoloads,
|
||||
which makes their dependencies visible in the main scene and allows focused
|
||||
tests to instantiate the same composition.
|
||||
|
||||
The main script coordinates title, session, world, and UI lifecycle. Domain
|
||||
logic remains in typed resources and services rather than being stored solely
|
||||
in controls.
|
||||
|
||||
## Domain boundaries
|
||||
|
||||
- `fish/` defines species, availability, catches, pools, quality, and selection.
|
||||
- `fishing/` owns cast/chase state and resolves authoritative fishing surfaces.
|
||||
- `inventory/`, `items/`, `economy/`, `progression/`, and `jobs/` own persistent
|
||||
player-facing game state.
|
||||
- `world/` owns authored map composition and presentation. Water type is a
|
||||
shared typed definition used by water bodies, fish habitat, fishing
|
||||
validation, Logbook classification, and saltwater shoreline presentation.
|
||||
- `ui/` observes and invokes domain services. It does not define stable item or
|
||||
fish identity.
|
||||
|
||||
Resource files (`.tres`) are authored data. Stable IDs, not display names or
|
||||
node names, connect persistent and networked state to that data.
|
||||
|
||||
## Networking
|
||||
|
||||
`NetworkSession` owns ENet session lifecycle and peer registration. Dedicated
|
||||
network services validate and replicate bounded domains such as fishing,
|
||||
sales, shops, item use, profiles, jobs, mail, chat, drawings, time, and weather.
|
||||
|
||||
`DiscoveryClient` is an optional directory layer beside `NetworkSession`. An
|
||||
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
|
||||
development/deployment override.
|
||||
|
||||
The host is authoritative. Clients submit requests or evidence; the host
|
||||
derives trusted context from registered peers, authoritative regions, and
|
||||
server-owned state before mutating inventory, wallet, progression, or shared
|
||||
world state. See [`decisions/0001-host-authority.md`](decisions/0001-host-authority.md).
|
||||
|
||||
Protocol compatibility is defined in `network/network_protocol.gd`. A visible
|
||||
release version is not a reason to change the protocol number.
|
||||
|
||||
## Persistence
|
||||
|
||||
`PlayerDataRoot` selects and validates a portable data root. Stores receive
|
||||
paths from that owner rather than inventing unrelated locations. Progression is
|
||||
written by `PlayerSaveManager`; device settings and social/identity stores have
|
||||
separate formats and lifecycles.
|
||||
|
||||
Save migrations are sequential and explicit. Existing catches and ownership
|
||||
are keyed by stable IDs so authored metadata can evolve without rewriting
|
||||
historical records. Current source constants—not documentation—are
|
||||
authoritative for format versions.
|
||||
|
||||
## Presentation
|
||||
|
||||
Gameplay is rendered in 3D with the GL Compatibility renderer. The main UI is
|
||||
presented through a uniformly scaled SubViewport. Shared UI components and
|
||||
palette resources prevent page-specific geometry and style drift.
|
||||
|
||||
World presentation systems (time/weather visuals, procedural sky and water,
|
||||
shoreline ribbons, player blob shadows) do not own gameplay collision or
|
||||
network authority. Generated shoreline meshes are deterministic presentation
|
||||
resources baked from explicitly configured static terrain.
|
||||
|
||||
## Validation
|
||||
|
||||
Tests are executable Godot `SceneTree` scripts. Some are pure content/domain
|
||||
checks, some instantiate the main scene, and multiplayer checks run paired host
|
||||
and client processes on loopback. The repository runner provides isolation and
|
||||
consistent entry points; see [`TESTING.md`](TESTING.md).
|
||||
|
|
@ -1,145 +0,0 @@
|
|||
# Asset provenance
|
||||
|
||||
This document records where runtime assets came from and what must be verified
|
||||
before redistribution. A Git commit proves when bytes entered this repository;
|
||||
it does not by itself prove authorship or licensing.
|
||||
|
||||
## Intake policy
|
||||
|
||||
For every new external or supplied asset, record:
|
||||
|
||||
- creator or supplying party;
|
||||
- original source location or delivery channel;
|
||||
- source filename and repository destination;
|
||||
- source and destination SHA-256 when copied without modification;
|
||||
- license or explicit permission;
|
||||
- any permitted transformations;
|
||||
- the importing commit or release.
|
||||
|
||||
Runtime resources must use `res://` paths. Workstation Sync folders are intake
|
||||
locations only and must never appear in scenes or resources.
|
||||
|
||||
## Current inventory
|
||||
|
||||
| Asset family | Repository location | Recorded provenance |
|
||||
| --- | --- | --- |
|
||||
| Fish art and portraits | `fish/species/`, `art/exported/fish/` | 2D artwork by contributor Rheannon Eisworth. |
|
||||
| Item icons | `items/icons/` | 2D artwork by contributor Rheannon Eisworth. |
|
||||
| Inventory notepad | `art/ui/ui_notepad.png` | 2D artwork by contributor Rheannon Eisworth; integrated without a runtime external path. |
|
||||
| Environment textures | `art/exported/environment/textures/` | 2D artwork by contributor Rheannon Eisworth. |
|
||||
| UI patterns | `art/patterns/` | 2D artwork by contributor Rheannon Eisworth. |
|
||||
| Character and world models | `art/exported/` | Original 3D models by the project owner. Any embedded 2D artwork is by Rheannon Eisworth. |
|
||||
| Tuffy font | `ui/fonts/Tuffy_Bold.otf` | Public-domain dedication in `ui/fonts/Tuffy-LICENSE.txt`. |
|
||||
| Seattle Avenue font | `ui/fonts/seattle_avenue.otf` | License and attribution not present; resolve before public distribution. |
|
||||
| Title music | `audio/music/title/as_in_four_wolves.ogg` | Original music composed and owned by the project owner. |
|
||||
| Fishing fight loop | `audio/sfx/fishing/fighting.wav` | Edited from “Spinning reel.wav” by Freesound user tosha73, sound 509902, CC0. |
|
||||
| Manual-reeling loop | `audio/sfx/fishing/reeling.wav` | Edited from the same CC0 “Spinning reel.wav” source. |
|
||||
| Saltwater wave ambience | `audio/ambience/waves.wav` | “Gentle Ocean Waves Loop” by Freesound user kkenny101, sound 852826, CC0. |
|
||||
| Bobber water impact | `audio/sfx/fishing/bobber.wav` | “Quick Water Droplet” by Freesound user qubodup, sound 792931, CC0. |
|
||||
| Character bark call | `sound/dialogue/calls/bark.wav` | Edited from `Dog_Bark.wav` by Freesound user ivolipa, sound 328729, CC0. |
|
||||
| Character meow call | `sound/dialogue/calls/meow.wav` | Edited from `Cat meow.m4a` by Freesound user Christyboy100, sound 495694, Attribution 3.0. |
|
||||
|
||||
### Fishing fight loop source record
|
||||
|
||||
- Source page: https://freesound.org/s/509902/
|
||||
- Creator: tosha73
|
||||
- Source title: `Spinning reel.wav`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename: `509902__tosha73__spinning-reel.wav`
|
||||
- Downloaded source SHA-256:
|
||||
`9741afdb1ec9c73f5e039f0e5ac174998cb0a1f737b626531e63919d4d232fad`
|
||||
- Audacity working project: `fighting.aup3`
|
||||
- Audacity project SHA-256:
|
||||
`9928f077ecf48d01416f8d05700707e1b07d0f731846db80e27116f5b82dbbf5`
|
||||
- Runtime edit source/destination SHA-256:
|
||||
`b6f3f2f94bfaf9254ac04dd96b1fd28c15e1011a1db44bb3e70eeaa95de3c212`
|
||||
- Runtime format: 48 kHz, 16-bit, stereo PCM WAV; 2.593479 seconds;
|
||||
configured as a forward loop by the fishing presentation.
|
||||
- Manual-reeling Audacity project: `reeling.aup3`
|
||||
- Manual-reeling Audacity project SHA-256:
|
||||
`20ad52f6bdd16ae6561f06f8355fe309e95023e815053fd5dfbd5a5ce3c1f9f9`
|
||||
- Manual-reeling runtime source/destination SHA-256:
|
||||
`e403d5b7c8af1da4b28599cc0f51de3eda70d9e9296db27852fe7dc95617a29d`
|
||||
- Manual-reeling runtime format: 48 kHz, 16-bit, stereo PCM WAV;
|
||||
2.388083 seconds; configured as a forward loop.
|
||||
- The downloaded source and Audacity projects remain in the project owner's
|
||||
source-work archive; only the finished runtime edits ship in the game.
|
||||
|
||||
### Saltwater wave ambience source record
|
||||
|
||||
- Source page: https://freesound.org/s/852826/
|
||||
- Creator: kkenny101
|
||||
- Source title: `Gentle Ocean Waves Loop`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename:
|
||||
`852826__kkenny101__gentle-ocean-waves-loop.wav`
|
||||
- Downloaded source and runtime source/destination SHA-256:
|
||||
`f93e9890583f072ac52cf197b8b5942397d3d5e889fbdb9112a0776142f50229`
|
||||
- Runtime format: 48 kHz, 24-bit, mono PCM WAV; 21.769917 seconds;
|
||||
configured as a forward loop.
|
||||
- The downloaded source remains in the project owner's source-work archive;
|
||||
only the finished runtime loop ships in the game.
|
||||
|
||||
### Bobber water-impact source record
|
||||
|
||||
- Source page: https://freesound.org/s/792931/
|
||||
- Creator: qubodup
|
||||
- Source title: `Quick Water Droplet`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename: `792931__qubodup__quick-water-droplet.wav`
|
||||
- Downloaded source and runtime source/destination SHA-256:
|
||||
`aef0d16384efed4a7b071c4d80c21597617f882f4e0c1d5295ac194d315eafb7`
|
||||
- Runtime format: 48 kHz, 16-bit, mono PCM WAV; 0.197146 seconds; one-shot.
|
||||
- The downloaded source remains in the project owner's source-work archive;
|
||||
only the finished runtime sound ships in the game.
|
||||
|
||||
### Character-call source records
|
||||
|
||||
#### Bark
|
||||
|
||||
- Source page: https://freesound.org/s/328729/
|
||||
- Creator: ivolipa
|
||||
- Source title: `Dog_Bark.wav`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename: `328729__ivolipa__dog_bark.wav`
|
||||
- Downloaded source SHA-256:
|
||||
`c3d542dee7bfcc1901428e0c1408c0bd522d778d8e5e1dbca156cab008f3d712`
|
||||
- Runtime edit source/destination SHA-256:
|
||||
`5ac2f32f33724a2fc232d725c5c37d4cfe3e93b3c1f19aa4177d2c8e3009ec78`
|
||||
- Runtime format: 44.1 kHz, 16-bit, stereo PCM WAV; 0.446780 seconds;
|
||||
one-shot.
|
||||
|
||||
#### Meow
|
||||
|
||||
- Source page: https://freesound.org/s/495694/
|
||||
- Creator: Christyboy100
|
||||
- Source title: `Cat meow.m4a`
|
||||
- License: Attribution 3.0
|
||||
- Downloaded source filename: `495694__christyboy100__cat-meow.m4a`
|
||||
- Downloaded source SHA-256:
|
||||
`afa3f6ef7afa2f7fee1e634d5505d2101cbba4421f8d8ff9adf562939c7a18f8`
|
||||
- Converted working WAV SHA-256:
|
||||
`a505e6e230e7d9d76b65c46270d97a35a1acc510b43aa5e7343d7b04f424cade`
|
||||
- Runtime edit source/destination SHA-256:
|
||||
`cce22ce1fbbc9325126a153aedc4526fde1aacf78780574fb432197dd44eb6b3`
|
||||
- Runtime format: 44.1 kHz, 16-bit, stereo PCM WAV; 0.605420 seconds;
|
||||
one-shot.
|
||||
- The downloaded sources and working edits remain in the project owner's
|
||||
source-work archive; only the finished runtime sounds ship in the game.
|
||||
|
||||
## Generated resources
|
||||
|
||||
Godot `.import` sidecars and deterministic shoreline `.tres` meshes are derived
|
||||
repository resources, not original artwork. `.godot/imported/`, editor caches,
|
||||
captures, exports, and temporary test data are not tracked.
|
||||
|
||||
## Release gate
|
||||
|
||||
Before a public binary or source release:
|
||||
|
||||
1. Resolve the Seattle Avenue font license and attribution gap above.
|
||||
2. Record the public owner/studio credit and the contributor's redistribution
|
||||
permission in the chosen project license or release records.
|
||||
3. Confirm the project-wide source/content license selected by the owner.
|
||||
4. Search exported resources for external filesystem paths.
|
||||
5. Preserve required third-party notices with the package.
|
||||
327
docs/ATTRIBUTION.md
Normal file
|
|
@ -0,0 +1,327 @@
|
|||
# Attribution, licensing, and asset provenance
|
||||
|
||||
This is the authoritative project record for ownership, credits, license
|
||||
boundaries, third-party notices, asset provenance, and redistribution checks.
|
||||
A Git commit proves when bytes entered the repository; it does not by itself
|
||||
prove authorship or licensing.
|
||||
|
||||
## Ownership and credits
|
||||
|
||||
NETfishing is jointly owned, developed, and published by its creators,
|
||||
publicly credited as Voyager and Endeavour and operating collectively as the
|
||||
independent team Woofmeow.
|
||||
|
||||
- Voyager: co-owner, developer, project director, creator of the game's 3D
|
||||
art, and composer of the original title/ambient track
|
||||
`audio/music/title/as_in_four_wolves.ogg`, world track
|
||||
`audio/music/world/craft.mp3`, and animalese placeholder tones.
|
||||
- Endeavour: co-owner, developer, and creator of the game's 2D art, including
|
||||
the original fish, environment, UI, and other artwork.
|
||||
- chillnfill: contributor of original 3D models for the character bodies and
|
||||
arms, ears and tails, and multiple world props and decorative assets,
|
||||
including trees and bridges. The contributor requested to be credited as
|
||||
`chillnfill`.
|
||||
- Tekgator: creator of the cooler-capacity, reel-speed, and barrier-power shop
|
||||
icons.
|
||||
|
||||
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.
|
||||
|
||||
## License map
|
||||
|
||||
Do not describe the complete repository as covered only by the GPL.
|
||||
|
||||
| Material | Governing terms |
|
||||
| --- | --- |
|
||||
| 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` |
|
||||
| Third-party engines, fonts, sounds, and other external material | Their original terms, recorded below and in adjacent license texts where applicable |
|
||||
| New outside contributions | Source-root `CONTRIBUTOR-TERMS.md` plus any separately signed agreement |
|
||||
|
||||
Generated Godot import metadata and deterministic generated resources follow
|
||||
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; it does not permit those assets to
|
||||
accompany code forks, clones, standalone games, unrelated products, or
|
||||
general-purpose asset packs. A GPL fork must replace NETfishing 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
|
||||
ownership agreement.
|
||||
|
||||
## Godot Engine notice
|
||||
|
||||
NETfishing uses Godot Engine under the MIT License:
|
||||
|
||||
> Copyright (c) 2014-present Godot Engine contributors.
|
||||
> Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.
|
||||
>
|
||||
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
> of this software and associated documentation files (the “Software”), to deal
|
||||
> in the Software without restriction, including without limitation the rights
|
||||
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
> copies of the Software, and to permit persons to whom the Software is
|
||||
> furnished to do so, subject to the following conditions:
|
||||
>
|
||||
> The above copyright notice and this permission notice shall be included in
|
||||
> all copies or substantial portions of the Software.
|
||||
>
|
||||
> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
> SOFTWARE.
|
||||
|
||||
Godot licensing and bundled third-party-component notices are available at
|
||||
https://godotengine.org/license/ and
|
||||
https://github.com/godotengine/godot/blob/master/COPYRIGHT.txt. Godot uses
|
||||
FreeType for font rendering; portions are copyright The FreeType Project
|
||||
(https://www.freetype.org) under its applicable license.
|
||||
|
||||
## Font notices
|
||||
|
||||
- **Tuffy Bold** — Thatcher Ulrich, Karoly Barta, and Michael Evans; dedicated
|
||||
to the public domain. Runtime file: `ui/fonts/Tuffy_Bold.otf`; original notice:
|
||||
`ui/fonts/Tuffy-LICENSE.txt`.
|
||||
- **Seattle Avenue** — JLH Fonts; dedicated to the public domain by the creator.
|
||||
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.
|
||||
|
||||
## Intake policy
|
||||
|
||||
For every new external or supplied asset, record:
|
||||
|
||||
- creator or supplying party;
|
||||
- original source location or delivery channel;
|
||||
- source filename and repository destination;
|
||||
- source and destination SHA-256 when copied without modification;
|
||||
- license or explicit permission;
|
||||
- any permitted transformations;
|
||||
- the importing commit or release.
|
||||
|
||||
Maintainers must also obtain affirmative agreement to the source-root
|
||||
`CONTRIBUTOR-TERMS.md` before accepting an outside contribution and retain
|
||||
that agreement in a durable pull request, issue, email, or signed document.
|
||||
|
||||
Runtime resources must use `res://` paths. Workstation Sync folders are intake
|
||||
locations only and must never appear in scenes or resources.
|
||||
|
||||
## Asset inventory and provenance
|
||||
|
||||
| Asset family | Repository location | Recorded provenance |
|
||||
| --- | --- | --- |
|
||||
| Fish art and portraits | `fish/species/`, `art/exported/fish/` | Original 2D artwork by co-owner Endeavour. |
|
||||
| Item icons | `items/icons/` | Original 2D artwork by co-owner Endeavour except where separately credited below. |
|
||||
| Cooler-capacity shop icon | `items/icons/equipment/64_cooler_plus.png` | Original artwork by Tekgator. Repository SHA-256: `b63705be5b78915753c068170323781a90e22b555b57a5b2ca9466e2726539f7`. |
|
||||
| Reel-speed shop icon | `items/icons/shop/64_speed_plus.png` | Original artwork by Tekgator. Repository SHA-256: `938452798f2be505e06ce3fbef178f52459331fd3bced8763fbc2a80157125ca`. |
|
||||
| Barrier-power shop icon | `items/icons/shop/64_power_plus.png` | Original artwork by Tekgator. Repository SHA-256: `164d34ce152aa6d75de79b69f0be2d9074f7891057de9636678889028ff98ae7`. |
|
||||
| Inventory notepad | `art/ui/ui_notepad.png` | Original 2D artwork by co-owner Endeavour; integrated without a runtime external path. |
|
||||
| Environment textures | `art/exported/environment/textures/` | Original 2D artwork by co-owner Endeavour. |
|
||||
| UI patterns | `art/patterns/` | Original 2D artwork by co-owner Endeavour. |
|
||||
| Fur customization channel maps | `art/exported/characters/patterns/` | Original 2D channel-map artwork by co-owner Endeavour. Exact file hashes are recorded below. |
|
||||
| Character base meshes and appendages | `art/source/characters/base/`, `art/exported/characters/base/`, and derived character resources | Original body and arm models and original ear and tail models by chillnfill. Any embedded original 2D artwork is by Endeavour. |
|
||||
| World and decorative prop models | `art/source/environment/`, `art/exported/environment/`, and derived world resources | Original prop and decorative models by chillnfill, including trees and bridges. Any embedded original 2D artwork is by Endeavour. |
|
||||
| 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; source record and hash in `ui/fonts/Seattle-Avenue-LICENSE.txt`. |
|
||||
| Title music | `audio/music/title/as_in_four_wolves.ogg` | Original music composed and owned by co-owner Voyager. |
|
||||
| Dusk music | `audio/music/world/craft.mp3` | Original music composed and owned by co-owner Voyager. |
|
||||
| Fishing fight loop | `audio/sfx/fishing/fighting.wav` | Edited from “Spinning reel.wav” by Freesound user tosha73, sound 509902, CC0. |
|
||||
| Manual-reeling loop | `audio/sfx/fishing/reeling.wav` | Edited from the same CC0 “Spinning reel.wav” source. |
|
||||
| Saltwater wave ambience | `audio/ambience/waves.wav` | “Gentle Ocean Waves Loop” by Freesound user kkenny101, sound 852826, CC0. |
|
||||
| Bobber water impact | `audio/sfx/fishing/bobber.wav` | “Quick Water Droplet” by Freesound user qubodup, sound 792931, CC0. |
|
||||
| Rain ambience | `audio/ambience/rain_loop_ontario.ogg` | Converted from “Rain Loop Ontario” by Freesound user Ayton, sound 212799, CC BY 3.0. |
|
||||
| Character bark call | `sound/dialogue/calls/bark.wav` | Edited from `Dog_Bark.wav` by Freesound user ivolipa, sound 328729, CC0. |
|
||||
| Character meow call | `sound/dialogue/calls/meow.wav` | Edited from `Cat meow.m4a` by Freesound user Christyboy100, sound 495694, Attribution 3.0. |
|
||||
| Animalese placeholder tones | `sound/dialogue/animalese/placeholder/` | Original tones composed and owned by co-owner Voyager without third-party samples. |
|
||||
|
||||
Creative Commons Zero information:
|
||||
https://creativecommons.org/publicdomain/zero/1.0/. Creative Commons
|
||||
Attribution 3.0 legal text:
|
||||
https://creativecommons.org/licenses/by/3.0/legalcode.
|
||||
|
||||
### chillnfill 3D model contribution record
|
||||
|
||||
- Requested credit: `chillnfill`.
|
||||
- Original contribution families: character bodies and arms; character ears
|
||||
and tails; and multiple world props and decorative assets, including trees
|
||||
and bridges.
|
||||
- Repository mapping: character contributions are incorporated into the
|
||||
character source/export families identified above. Prop contributions may
|
||||
be incorporated into combined environment source and export files rather
|
||||
than retained as one file per originally supplied model.
|
||||
- Permission record: because these historical contributions predate the
|
||||
current `CONTRIBUTOR-TERMS.md`, retain the original permission record or a
|
||||
later written confirmation covering Project use, modification,
|
||||
distribution, commercial release, and applicable sublicensing.
|
||||
|
||||
### Fur customization channel-map record
|
||||
|
||||
Original channel-map artwork by Endeavour. Repository paths preserve the
|
||||
authored `mesh_style.png` filenames.
|
||||
|
||||
| Style and mesh | Source filename | Repository file | SHA-256 |
|
||||
| --- | --- | --- | --- |
|
||||
| Bengal spots, body and arms | `body_arms_bengal.png` | `art/exported/characters/patterns/bengal/body_arms_bengal.png` | `fa90bd4e74b0b770ce97bf69d069676f5d4bd1f5d649f89e09638a66b61a8470` |
|
||||
| Bengal spots, main body | `body_main_bengal.png` | `art/exported/characters/patterns/bengal/body_main_bengal.png` | `8662fa198220cfdbe0aa83bdeeef7b855e20124d74f8481467f750d32b67ee8b` |
|
||||
| Bengal spots, round head | `head_round_bengal.png` | `art/exported/characters/patterns/bengal/head_round_bengal.png` | `f397ed8d152e3fda8181757a2bbd01925b7b8c2c4362f515d91c7f0fbf3ddfb6` |
|
||||
| Fox, body and arms | `body_arms_fox.png` | `art/exported/characters/patterns/fox/body_arms_fox.png` | `9930808718f31d84b415902f1ba55ac2a508bb2ac127300e793d73a8a013022d` |
|
||||
| Fox, main body | `body_main_fox.png` | `art/exported/characters/patterns/fox/body_main_fox.png` | `c65e4390173b8c31c9396edd053f940f0f809e47e01d18042cd7babc712dde9d` |
|
||||
| Fox, pointy head | `head_pointy_fox.png` | `art/exported/characters/patterns/fox/head_pointy_fox.png` | `71a9d2383e62884dbd3981460fcd985b18805fa907f61ffb16dce08ff9418ddf` |
|
||||
| Fox, round head | `head_round_fox.png` | `art/exported/characters/patterns/fox/head_round_fox.png` | `86dd7af8a2346faf67359ad668a117a74e2408676137d6b0626403cfcf2aba73` |
|
||||
| Fox tail | `tails_fox_fox.png` | `art/exported/characters/patterns/fox/tails_fox_fox.png` | `72da9673f038e2c3bb8aca19ed99932085fa3b162cab95366901c4e97153dd3e` |
|
||||
|
||||
### Tekgator shop icon contribution record
|
||||
|
||||
- Requested credit: `Tekgator`.
|
||||
- Original contributions: cooler-capacity, reel-speed, and barrier-power shop
|
||||
icons.
|
||||
- Repository files and SHA-256:
|
||||
- `items/icons/equipment/64_cooler_plus.png`:
|
||||
`b63705be5b78915753c068170323781a90e22b555b57a5b2ca9466e2726539f7`
|
||||
- `items/icons/shop/64_speed_plus.png`:
|
||||
`938452798f2be505e06ce3fbef178f52459331fd3bced8763fbc2a80157125ca`
|
||||
- `items/icons/shop/64_power_plus.png`:
|
||||
`164d34ce152aa6d75de79b69f0be2d9074f7891057de9636678889028ff98ae7`
|
||||
- Permission record: retain the original permission record or a later written
|
||||
confirmation covering Project use, modification, distribution, commercial
|
||||
release, and applicable sublicensing.
|
||||
|
||||
### Fishing fight loop source record
|
||||
|
||||
- Source page: https://freesound.org/s/509902/
|
||||
- Creator: tosha73
|
||||
- Source title: `Spinning reel.wav`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename: `509902__tosha73__spinning-reel.wav`
|
||||
- Downloaded source SHA-256:
|
||||
`9741afdb1ec9c73f5e039f0e5ac174998cb0a1f737b626531e63919d4d232fad`
|
||||
- Audacity working project: `fighting.aup3`
|
||||
- Audacity project SHA-256:
|
||||
`9928f077ecf48d01416f8d05700707e1b07d0f731846db80e27116f5b82dbbf5`
|
||||
- Runtime edit source/destination SHA-256:
|
||||
`b6f3f2f94bfaf9254ac04dd96b1fd28c15e1011a1db44bb3e70eeaa95de3c212`
|
||||
- Runtime format: 48 kHz, 16-bit, stereo PCM WAV; 2.593479 seconds;
|
||||
configured as a forward loop by the fishing presentation.
|
||||
- Manual-reeling Audacity project: `reeling.aup3`
|
||||
- Manual-reeling Audacity project SHA-256:
|
||||
`20ad52f6bdd16ae6561f06f8355fe309e95023e815053fd5dfbd5a5ce3c1f9f9`
|
||||
- Manual-reeling runtime source/destination SHA-256:
|
||||
`e403d5b7c8af1da4b28599cc0f51de3eda70d9e9296db27852fe7dc95617a29d`
|
||||
- Manual-reeling runtime format: 48 kHz, 16-bit, stereo PCM WAV;
|
||||
2.388083 seconds; configured as a forward loop.
|
||||
- The downloaded source and Audacity projects remain in the project owner's
|
||||
source-work archive; only the finished runtime edits ship in the game.
|
||||
|
||||
### Saltwater wave ambience source record
|
||||
|
||||
- Source page: https://freesound.org/s/852826/
|
||||
- Creator: kkenny101
|
||||
- Source title: `Gentle Ocean Waves Loop`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename:
|
||||
`852826__kkenny101__gentle-ocean-waves-loop.wav`
|
||||
- Downloaded source and runtime source/destination SHA-256:
|
||||
`f93e9890583f072ac52cf197b8b5942397d3d5e889fbdb9112a0776142f50229`
|
||||
- Runtime format: 48 kHz, 24-bit, mono PCM WAV; 21.769917 seconds;
|
||||
configured as a forward loop.
|
||||
- The downloaded source remains in the project owner's source-work archive;
|
||||
only the finished runtime loop ships in the game.
|
||||
|
||||
### Bobber water-impact source record
|
||||
|
||||
- Source page: https://freesound.org/s/792931/
|
||||
- Creator: qubodup
|
||||
- Source title: `Quick Water Droplet`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename: `792931__qubodup__quick-water-droplet.wav`
|
||||
- Downloaded source and runtime source/destination SHA-256:
|
||||
`aef0d16384efed4a7b071c4d80c21597617f882f4e0c1d5295ac194d315eafb7`
|
||||
- Runtime format: 48 kHz, 16-bit, mono PCM WAV; 0.197146 seconds; one-shot.
|
||||
- The downloaded source remains in the project owner's source-work archive;
|
||||
only the finished runtime sound ships in the game.
|
||||
|
||||
### Character-call source records
|
||||
|
||||
#### Bark
|
||||
|
||||
- Source page: https://freesound.org/s/328729/
|
||||
- Creator: ivolipa
|
||||
- Source title: `Dog_Bark.wav`
|
||||
- License: Creative Commons Zero (CC0)
|
||||
- Downloaded source filename: `328729__ivolipa__dog_bark.wav`
|
||||
- Downloaded source SHA-256:
|
||||
`c3d542dee7bfcc1901428e0c1408c0bd522d778d8e5e1dbca156cab008f3d712`
|
||||
- Runtime edit source/destination SHA-256:
|
||||
`5ac2f32f33724a2fc232d725c5c37d4cfe3e93b3c1f19aa4177d2c8e3009ec78`
|
||||
- Runtime format: 44.1 kHz, 16-bit, stereo PCM WAV; 0.446780 seconds;
|
||||
one-shot.
|
||||
|
||||
#### Meow
|
||||
|
||||
- Source page: https://freesound.org/s/495694/
|
||||
- Creator: Christyboy100
|
||||
- Source title: `Cat meow.m4a`
|
||||
- License: Attribution 3.0
|
||||
- Downloaded source filename: `495694__christyboy100__cat-meow.m4a`
|
||||
- Downloaded source SHA-256:
|
||||
`afa3f6ef7afa2f7fee1e634d5505d2101cbba4421f8d8ff9adf562939c7a18f8`
|
||||
- Converted working WAV SHA-256:
|
||||
`a505e6e230e7d9d76b65c46270d97a35a1acc510b43aa5e7343d7b04f424cade`
|
||||
- Runtime edit source/destination SHA-256:
|
||||
`cce22ce1fbbc9325126a153aedc4526fde1aacf78780574fb432197dd44eb6b3`
|
||||
- Runtime format: 44.1 kHz, 16-bit, stereo PCM WAV; 0.605420 seconds;
|
||||
one-shot.
|
||||
- The downloaded sources and working edits remain in the project owner's
|
||||
source-work archive; only the finished runtime sounds ship in the game.
|
||||
|
||||
### Rain ambience source record
|
||||
|
||||
- Source page: https://freesound.org/s/212799/
|
||||
- Creator: Ayton
|
||||
- Source title: `Rain Loop Ontario`
|
||||
- License: Creative Commons Attribution 3.0
|
||||
- Downloaded source filename: `212799__ayton__rain-loop-ontario.aiff`
|
||||
- Downloaded source SHA-256:
|
||||
`b491fc036b78a274d9ac7f6acbd014af1b5d24f5cba9bd7e3fdc05c5432ee66f`
|
||||
- Runtime edit SHA-256:
|
||||
`b1979609b20fe34ed6f8902f3de65ae787a09abd71429e8aab850e87b74a4fa2`
|
||||
- Changes: converted from AIFF to Ogg Vorbis and configured as looping
|
||||
weather ambience.
|
||||
|
||||
## Generated resources
|
||||
|
||||
Godot `.import` sidecars and deterministic shoreline `.tres` meshes are derived
|
||||
repository resources, not original artwork. `.godot/imported/`, editor caches,
|
||||
captures, exports, and temporary test data are not tracked.
|
||||
|
||||
## Release gate
|
||||
|
||||
Before a public binary or source release:
|
||||
|
||||
1. Search exported resources for external filesystem paths.
|
||||
2. Include or make readily accessible the complete GPL text and identify the
|
||||
exact corresponding source tag or commit.
|
||||
3. Include `ASSET-LICENSE.md`, `TRADEMARKS.md`, this attribution/provenance
|
||||
record, both font notices, and every applicable third-party license.
|
||||
4. Retain the complete Godot Engine MIT notice above.
|
||||
5. Preserve third-party terms without adding incompatible restrictions.
|
||||
6. Avoid referring to a dirty or unavailable source revision.
|
||||
7. Publish or offer equivalent access to exact corresponding GPL source for
|
||||
every distributed binary release.
|
||||
|
||||
Desktop and PortMaster build scripts stage these authoritative files as
|
||||
sidecars. Godot export presets include them in exported resource packs for
|
||||
platforms where sidecar documents are not normally visible. Store and release
|
||||
pages should link to the exact source revision and public notices.
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
# Balance and content notes
|
||||
|
||||
Balance is authored data and should change deliberately. This document records
|
||||
the policy; exact current values remain authoritative in `.tres` resources and
|
||||
typed scripts.
|
||||
|
||||
## Fish
|
||||
|
||||
- Stable fish IDs and catalog numbers must not be changed for display cleanup.
|
||||
- Species availability may constrain water type, time, weather, bait, and other
|
||||
authored context.
|
||||
- Location pools control selection weight; the global catalog remains
|
||||
comprehensive.
|
||||
- Freshwater/saltwater habitat is validated by the host in addition to pool
|
||||
membership.
|
||||
- Value, rarity, quality, and weight ranges should be reviewed together because
|
||||
they affect economy and catch difficulty.
|
||||
|
||||
## Economy and progression
|
||||
|
||||
- Sales and purchases are host-authoritative and must mutate inventory and
|
||||
wallet exactly once.
|
||||
- Reserved assets are rejected atomically; mixed valid/reserved batches must
|
||||
not partially succeed.
|
||||
- Item effects, shop prices, cooler capacity, fishing upgrades, jobs, and
|
||||
experience are separate balance axes. Avoid changing several in an unrelated
|
||||
presentation pass.
|
||||
|
||||
## Recording a balance change
|
||||
|
||||
Include in the change description:
|
||||
|
||||
1. affected stable IDs and resource paths;
|
||||
2. old and new values;
|
||||
3. intended player-facing outcome;
|
||||
4. interactions with quality, availability, and economy;
|
||||
5. deterministic validation performed;
|
||||
6. whether existing saves remain semantically valid.
|
||||
|
||||
Do not bump the save schema or network protocol simply because an authored
|
||||
number changed. Bump a format only when its serialized contract changes.
|
||||
352
docs/DEVELOPMENT.md
Normal file
|
|
@ -0,0 +1,352 @@
|
|||
# Development reference
|
||||
|
||||
This is the authoritative reference for NETfishing architecture, engineering
|
||||
decisions, content policy, authoring, and validation.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Composition
|
||||
|
||||
`main/main.tscn` is the application composition root. It owns long-lived
|
||||
services, the active world, player container, save/settings managers, and the
|
||||
pixelated UI viewport. Services are scene-owned rather than global autoloads,
|
||||
which makes their dependencies visible in the main scene and allows focused
|
||||
tests to instantiate the same composition.
|
||||
|
||||
The main script coordinates title, session, world, and UI lifecycle. Domain
|
||||
logic remains in typed resources and services rather than being stored solely
|
||||
in controls.
|
||||
|
||||
### Domain boundaries
|
||||
|
||||
- `fish/` defines species, availability, catches, pools, quality, and selection.
|
||||
- `fishing/` owns cast/chase state and resolves authoritative fishing surfaces.
|
||||
- `inventory/`, `items/`, `economy/`, `progression/`, and `jobs/` own persistent
|
||||
player-facing game state.
|
||||
- `world/` owns authored map composition and presentation. Water type is a
|
||||
shared typed definition used by water bodies, fish habitat, fishing
|
||||
validation, Logbook classification, and saltwater shoreline presentation.
|
||||
- `ui/` observes and invokes domain services. It does not define stable item or
|
||||
fish identity.
|
||||
|
||||
Resource files (`.tres`) are authored data. Stable IDs, not display names or
|
||||
node names, connect persistent and networked state to that data.
|
||||
|
||||
### Networking and authority
|
||||
|
||||
`NetworkSession` owns ENet session lifecycle and peer registration. Dedicated
|
||||
network services validate and replicate bounded domains such as fishing,
|
||||
sales, shops, item use, profiles, jobs, mail, chat, drawings, time, and weather.
|
||||
|
||||
`DiscoveryClient` is an optional directory layer beside `NetworkSession`. An
|
||||
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
|
||||
development/deployment override.
|
||||
|
||||
The host is authoritative. Clients submit requests or evidence; the host
|
||||
derives trusted context from registered peers, authoritative regions, and
|
||||
server-owned state before mutating inventory, wallet, progression, or shared
|
||||
world state. Private single-player uses the same host path. Client evidence is
|
||||
bounded and reconstructed where possible; UI activation is never proof that a
|
||||
server-side mutation succeeded.
|
||||
|
||||
Moderation follows the same boundary. Player hosts may grant session-scoped
|
||||
operator status to an authenticated identity. Dedicated servers derive
|
||||
operators from their configured fingerprint allowlist. Operator status is
|
||||
replicated for presentation, but kick, ban, unban, and artwork-reset requests
|
||||
are always reauthorized against the authenticated sender by the host. Only a
|
||||
player host can grant or revoke operators; operators cannot moderate the host
|
||||
or another operator.
|
||||
|
||||
Protocol compatibility is defined in `network/network_protocol.gd`. A visible
|
||||
release version is not a reason to change the protocol number.
|
||||
|
||||
### Persistence and stable identifiers
|
||||
|
||||
`PlayerDataRoot` selects and validates a portable data root. Stores receive
|
||||
paths from that owner rather than inventing unrelated locations. Progression is
|
||||
written by `PlayerSaveManager`; device settings and social/identity stores have
|
||||
separate formats and lifecycles.
|
||||
|
||||
Save migrations are sequential and explicit. Existing catches and ownership
|
||||
are keyed by stable IDs so authored metadata can evolve without rewriting
|
||||
historical records. Current source constants—not documentation—are
|
||||
authoritative for format versions.
|
||||
|
||||
Repository-owned resources are authoritative authored data. Persistent and
|
||||
networked records refer to stable IDs; display names, filenames, node names,
|
||||
coordinates, and pool names are not compatibility identifiers. Cross-domain
|
||||
concepts such as water type use one typed definition. Removing or changing a
|
||||
stable ID requires an explicit compatibility plan.
|
||||
|
||||
### Presentation
|
||||
|
||||
Gameplay is rendered in 3D with the GL Compatibility renderer. The main UI is
|
||||
presented through a uniformly scaled SubViewport. Shared UI components and
|
||||
palette resources prevent page-specific geometry and style drift.
|
||||
|
||||
World presentation systems (time/weather visuals, procedural sky and water,
|
||||
shoreline ribbons, player blob shadows) do not own gameplay collision or
|
||||
network authority. Generated shoreline meshes are deterministic presentation
|
||||
resources baked from explicitly configured static terrain.
|
||||
|
||||
### Engineering consequences
|
||||
|
||||
- Shared mutations must behave consistently for private hosts, open hosts,
|
||||
dedicated servers, and joined clients.
|
||||
- Networking changes require local-host and paired host/client validation.
|
||||
- Protocol payloads and rejection cleanup are explicit and bounded.
|
||||
- Renaming visible UI does not require a save migration.
|
||||
- Content validation covers stable-ID uniqueness, catalog completeness, pool
|
||||
membership, and typed habitat compatibility.
|
||||
- New authored assets require provenance records as well as resource
|
||||
references.
|
||||
|
||||
## Content and balance
|
||||
|
||||
Balance is authored data and should change deliberately. Exact current values
|
||||
remain authoritative in `.tres` resources and typed scripts.
|
||||
|
||||
### Fish
|
||||
|
||||
- Stable fish IDs and catalog numbers must not be changed for display cleanup.
|
||||
- Species availability may constrain water type, time, weather, bait, and
|
||||
other authored context.
|
||||
- Location pools control selection weight; the global catalog remains
|
||||
comprehensive.
|
||||
- Freshwater and saltwater habitat is validated by the host in addition to
|
||||
pool membership.
|
||||
- Value, rarity, quality, weight ranges, and authored barrier-health bands
|
||||
should be reviewed together because they affect economy and catch
|
||||
difficulty.
|
||||
|
||||
### Economy and progression
|
||||
|
||||
- Sales and purchases are host-authoritative and must mutate inventory and
|
||||
wallet exactly once.
|
||||
- Reserved assets are rejected atomically; mixed valid and reserved batches
|
||||
must not partially succeed.
|
||||
- Item effects, shop prices, cooler capacity, fishing upgrades, jobs, and
|
||||
experience are separate balance axes. Avoid changing several in an
|
||||
unrelated presentation pass.
|
||||
|
||||
Record affected stable IDs and resource paths, old and new values, intended
|
||||
player-facing outcome, interactions with quality/availability/economy,
|
||||
deterministic validation, and save-compatibility impact with each balance
|
||||
change. Do not bump a save schema or network protocol merely because an
|
||||
authored number changed.
|
||||
|
||||
## Authoring
|
||||
|
||||
### World composition
|
||||
|
||||
The active test world uses the canonical starter island through
|
||||
`world/regions/starter_island_region.tscn`.
|
||||
|
||||
`world/test_world.tscn` owns the gameplay-wide environment, sun, world bounds,
|
||||
and below-world failsafe. `StarterIslandRegion` owns the placed island content:
|
||||
|
||||
```text
|
||||
StarterIslandRegion
|
||||
├── Terrain
|
||||
│ ├── Visual
|
||||
│ └── Collision
|
||||
├── WaterBodies
|
||||
│ ├── Pond
|
||||
│ │ ├── VisualWater
|
||||
│ │ ├── FishingRegion
|
||||
│ │ └── RecoveryRegion
|
||||
│ └── Ocean
|
||||
│ ├── VisualWater
|
||||
│ ├── FishingRegions
|
||||
│ └── RecoveryRegions
|
||||
├── PlayerSpawn
|
||||
├── SafeRespawns
|
||||
└── Interactables
|
||||
├── FishingShopWorld
|
||||
└── PelicanCoolerPerch
|
||||
```
|
||||
|
||||
Move a meaningful feature root rather than one of its implementation children.
|
||||
Child transforms are local offsets owned by that feature.
|
||||
|
||||
Every fishable region authors its `water_type` explicitly. The starter pond is
|
||||
`FRESH_WATER`; the starter coast is `SALT_WATER`. Fish species use the same
|
||||
central type through an allowed-water-type bitmask. Do not infer habitat from
|
||||
node names, pool filenames, coordinates, or water height.
|
||||
|
||||
Select `WaterBodies/Pond` to move or resize the pond. Its transform is the
|
||||
authoritative surface position; surface size and fishing/recovery coverage are
|
||||
owned together. Select `WaterBodies/Ocean` to move the surrounding water as one
|
||||
feature. Its explicit visual, fishing, and recovery lobes remain local to that
|
||||
root.
|
||||
|
||||
Placed-feature ownership:
|
||||
|
||||
- `PlayerSpawn` defines the initial player transform and facing.
|
||||
- `SafeRespawns` contains authoritative recovery destinations. Recovery
|
||||
preserves current facing.
|
||||
- `Interactables/FishingShopWorld` owns the shop visual, collision, interaction
|
||||
area, prompt, and entrance marker.
|
||||
- `Interactables/PelicanCoolerPerch` owns the Pelican landmark visual; selling
|
||||
remains a Cooler action.
|
||||
- `Terrain` owns imported visuals and generated collision.
|
||||
- `BelowWorldFailsafe/Coverage` owns below-world recovery coverage.
|
||||
|
||||
The starter-island GLB hierarchy is the terrain-collision authority. The
|
||||
region rebuilds one concave collision shape from every imported
|
||||
`MeshInstance3D` when it loads, so newly exported terrain and props participate
|
||||
without a separate stale collision bake. Keep purely decorative meshes out of
|
||||
that hierarchy if they should not block players.
|
||||
|
||||
The active `Environment`, `Sun`, and starter-island grass material remain
|
||||
Inspector-authored and are not recreated by runtime scripts.
|
||||
|
||||
### Reusable world props
|
||||
|
||||
Use one placed `WorldProp` root for a complete landmark:
|
||||
|
||||
```text
|
||||
WorldProp
|
||||
├── Visual
|
||||
└── Collision
|
||||
└── CollisionShape3D
|
||||
```
|
||||
|
||||
Put optional interaction areas, labels, and markers beneath the same root.
|
||||
Instance imported GLB content under `Visual` and keep gameplay collision under
|
||||
`Collision`. Author reusable assets at scale `(1, 1, 1)`. Uniform provisional
|
||||
root scaling is acceptable when visual and collision scale together; avoid
|
||||
non-uniform root scaling. Make mutable per-instance shapes, meshes, and
|
||||
materials local to the scene.
|
||||
|
||||
### Shoreline tide ribbons
|
||||
|
||||
Maps using generated tide ribbons own a `ShorelineRibbonBaker` and one
|
||||
`ShorelineRibbonConfig` per water body. Each configuration selects only its
|
||||
static terrain source, water height, generation bounds, water-facing reference,
|
||||
smoothing overrides, and generated `.tres` path. Props, players, bobbers, and
|
||||
gameplay areas are not scanned unless selected explicitly. Only `SALT_WATER`
|
||||
bodies generate ribbons.
|
||||
|
||||
The editor automatically rebuilds configured shoreline resources when an
|
||||
authored terrain GLB is reimported. Select the baker and press **Rebuild
|
||||
Shoreline Ribbons** only when intentionally forcing a rebuild without a terrain
|
||||
reimport. The equivalent headless fallback and validation command is:
|
||||
|
||||
```sh
|
||||
godot --headless --path . --script scripts/bake_shoreline_ribbons.gd
|
||||
```
|
||||
|
||||
Use `debug_path_stage` only while comparing extraction stages and leave it Off
|
||||
in committed scenes. A rebuild is required when saltwater terrain at the
|
||||
waterline, water height, or generation bounds change; terrain reimports handle
|
||||
the usual case automatically. Normal gameplay loads committed generated meshes
|
||||
and never runs extraction.
|
||||
|
||||
### Facial-feature textures
|
||||
|
||||
Put new PNGs under the matching directory in
|
||||
`art/exported/characters/faces/`:
|
||||
|
||||
```text
|
||||
eyes/<id>.png
|
||||
noses/<id>.png
|
||||
mouth/<id>.png
|
||||
```
|
||||
|
||||
The category directory is authoritative. A category prefix is optional, so
|
||||
both `sleepy.png` and `eyes_sleepy.png` produce the stable option ID `sleepy`.
|
||||
Filenames normalize to lowercase snake_case and are stored in appearance
|
||||
snapshots, so do not casually rename them. Preserve the established RGBA
|
||||
transparent canvas. Restart a development build after adding an image; rebuild
|
||||
exports to package new `res://` files.
|
||||
|
||||
### Texture sampling
|
||||
|
||||
NETfishing artwork always uses nearest-neighbor sampling. Do not enable linear,
|
||||
bilinear, trilinear, or anisotropic texture filtering, and do not generate
|
||||
mipmaps. Shader samplers must declare `filter_nearest`. The
|
||||
`TextureSamplingPolicy` autoload applies nearest sampling to 2D canvas items,
|
||||
Sprite3D presentations, imported 3D materials, and dynamically constructed
|
||||
mesh materials at runtime.
|
||||
|
||||
After importing new artwork, normalize its tracked import metadata where
|
||||
needed and run the focused policy check:
|
||||
|
||||
```sh
|
||||
godot --headless --path . --script scripts/normalize_texture_imports.gd \
|
||||
-- --apply --root res://path/to/new/artwork
|
||||
godot --headless --path . --script tests/texture_sampling_validation.gd
|
||||
```
|
||||
|
||||
### Bubble menus
|
||||
|
||||
Instance `ui/components/bubble_menu/bubble_button.tscn` for each action, or
|
||||
attach `bubble_button.gd` to an existing button. Author neutral size, desktop
|
||||
and compact anchors, font-size limits, and deterministic motion in the
|
||||
Inspector. A label child may be assigned with `label_control_path`.
|
||||
|
||||
Place buttons under a Control using `bubble_cluster.gd`, pass ordered button
|
||||
references to `configure()`, and call `apply_layout()` when available size or
|
||||
responsive layout changes. Order defines keyboard/controller focus neighbors.
|
||||
The shared profile owns palette, styles, proportional-font ratio, hover
|
||||
response, and contact tuning. Parent menus own labels, actions, anchors,
|
||||
availability, and confirmation behavior.
|
||||
|
||||
`motion_scale = 0.0` disables idle drift/deformation while preserving hover and
|
||||
focus feedback. Contact correction is deterministic and bounded; do not replace
|
||||
it with physics that destabilizes layout, focus order, or hit targets.
|
||||
|
||||
## Validation
|
||||
|
||||
Tests are executable Godot `SceneTree` scripts. Some are pure content/domain
|
||||
checks, some instantiate the main scene, and multiplayer checks run paired host
|
||||
and client processes on loopback. The repository runner provides isolation and
|
||||
consistent entry points.
|
||||
|
||||
### Consolidated runner
|
||||
|
||||
```sh
|
||||
scripts/run_validations.sh quick
|
||||
scripts/run_validations.sh full
|
||||
scripts/run_validations.sh host
|
||||
scripts/run_validations.sh network
|
||||
scripts/run_validations.sh all
|
||||
scripts/run_validations.sh --list
|
||||
```
|
||||
|
||||
- `quick` runs deterministic content and domain checks.
|
||||
- `full` adds socket-free scene/runtime checks.
|
||||
- `host` runs single-process authority checks that bind local UDP.
|
||||
- `network` runs loopback host/client pairs.
|
||||
- `all` runs `full`, `host`, and `network`.
|
||||
|
||||
Set `GODOT_BIN` to select an executable and `TEST_TIMEOUT_SECONDS` to change
|
||||
the per-process timeout. The runner isolates and removes XDG roots.
|
||||
|
||||
For one focused test:
|
||||
|
||||
```sh
|
||||
test_root="$(mktemp -d)"
|
||||
XDG_DATA_HOME="$test_root/data" \
|
||||
XDG_CONFIG_HOME="$test_root/config" \
|
||||
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
|
||||
explicit portable-data override and must identify a valid data root.
|
||||
|
||||
Headless tests cannot prove visual alignment, mouse routing, shader appearance,
|
||||
controller feel, or resize behavior. Presentation changes require graphical
|
||||
review at the canonical 1280×720 layout and relevant low/high and ultrawide
|
||||
resolutions.
|
||||
|
||||
Network tests require free loopback UDP ports and local-socket permission. A
|
||||
release audit additionally requires clean Git/tag verification, editor import,
|
||||
platform exports, executable smoke tests, archive inspection, and SHA-256
|
||||
verification; those checks are intentionally outside the development runner.
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
# PortMaster performance profile
|
||||
|
||||
The PortMaster launcher keeps the normal game profile on unknown and stronger
|
||||
hardware. It enables the low-end profile only when the Linux device tree
|
||||
reports one of the identifiers used by the Allwinner H616/H700 XX handhelds:
|
||||
|
||||
- `allwinner,h616`
|
||||
- `sun50iw9p1`
|
||||
- `allwinner,sun50i-h700`
|
||||
|
||||
The low-end launch profile passes these options to Godot:
|
||||
|
||||
- `--single-window`
|
||||
- `--disable-vsync`
|
||||
- `--max-fps 30`
|
||||
- `--audio-output-latency 40`
|
||||
|
||||
It also passes `NETFISHING_LOW_END=1`. The game responds by rendering the 3D
|
||||
world at 75 percent linear resolution with nearest-neighbor scaling. This
|
||||
reduces 3D pixel work by about 44 percent while the separately rendered UI
|
||||
retains its canonical resolution.
|
||||
|
||||
Do not use Godot's low processor mode for this profile. It reduces idle CPU
|
||||
usage by sleeping between updates and is not a game-performance optimization.
|
||||
|
||||
When adding another device family, record its exact NUL-separated device-tree
|
||||
`compatible` value from the hardware before extending the launcher match. Do
|
||||
not infer detection from a retail product name alone.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# PortMaster release builds
|
||||
# PortMaster reference
|
||||
|
||||
NETfishing's PortMaster release is a canonical PortMaster package, not a
|
||||
version-named generic ZIP. The installer-facing archive must be named
|
||||
|
|
@ -93,10 +93,14 @@ The remaining catalog metadata assets were copied from the installed official
|
|||
|
||||
```text
|
||||
e2a9d132744684c67865c01eca027a8c9946b4c5a19da57c82f1af0373dc83b7 gameinfo.xml
|
||||
ff08aacc52bbdc95616320800da3eaee0c0ba5fafdd962bf04f9655859409764 licenses/CREDITS.md
|
||||
b84fdd2c3da5db56385cdbb639795e90aa3e035c53bc3591135f18df3331451f licenses/Tuffy-LICENSE.txt
|
||||
```
|
||||
|
||||
The package’s `licenses/` directory is assembled from the authoritative root
|
||||
licenses and trademarks, the consolidated `docs/ATTRIBUTION.md`, and the font
|
||||
notices at build time. It also records the exact release tag and corresponding
|
||||
GPL source commit. Do not restore stale duplicated notice templates beneath
|
||||
`scripts/portmaster/`.
|
||||
|
||||
The original catalog porter credit, `Voyager`, remains in `port.json`.
|
||||
|
||||
## muOS H700 controller mapping
|
||||
|
|
@ -135,3 +139,31 @@ following in the installed game:
|
|||
- Both sticks, both bumpers, both triggers, Select, Start, L3, and R3 register.
|
||||
- A single button never cancels auto-map.
|
||||
- Holding both bumpers together for 1.25 seconds cancels auto-map.
|
||||
|
||||
## Low-end performance profile
|
||||
|
||||
The launcher keeps the normal game profile on unknown and stronger hardware.
|
||||
It enables the low-end profile only when the Linux device tree reports one of
|
||||
the identifiers used by Allwinner H616/H700 XX handhelds:
|
||||
|
||||
- `allwinner,h616`
|
||||
- `sun50iw9p1`
|
||||
- `allwinner,sun50i-h700`
|
||||
|
||||
The low-end profile passes these Godot options:
|
||||
|
||||
- `--single-window`
|
||||
- `--disable-vsync`
|
||||
- `--max-fps 30`
|
||||
- `--audio-output-latency 40`
|
||||
|
||||
It also passes `NETFISHING_LOW_END=1`. The game renders the 3D world at 75%
|
||||
linear resolution with nearest-neighbor scaling, reducing 3D pixel work by
|
||||
about 44% while the separately rendered UI retains its canonical resolution.
|
||||
|
||||
Do not use Godot's low processor mode for this profile. It reduces idle CPU
|
||||
usage by sleeping between updates and is not a game-performance optimization.
|
||||
|
||||
Before adding a device family, record its exact NUL-separated device-tree
|
||||
`compatible` value from hardware. Do not infer detection from a retail product
|
||||
name alone.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
NETfishing
|
||||
v0.6.7-alpha
|
||||
Alpha 0.6.7
|
||||
v0.7.1-alpha
|
||||
Alpha 0.7.1
|
||||
|
||||
Thank you for trying this early private playtest.
|
||||
|
||||
60
docs/README.md
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
# NETfishing documentation
|
||||
|
||||
This directory is the single home for maintained project documentation.
|
||||
Start here instead of searching feature, asset, world, or script directories
|
||||
for local README files.
|
||||
|
||||
## Authoritative references
|
||||
|
||||
- [`DEVELOPMENT.md`](DEVELOPMENT.md): architecture, engineering decisions,
|
||||
content and balance policy, authoring guidance, and validation.
|
||||
- [`ATTRIBUTION.md`](ATTRIBUTION.md): ownership, credits, licensing map,
|
||||
third-party notices, asset provenance, and redistribution requirements.
|
||||
- [`PORTMASTER.md`](PORTMASTER.md): PortMaster packaging, installation,
|
||||
controller mapping, performance behavior, and hardware release checks.
|
||||
- [`README-PLAYTEST.txt`](README-PLAYTEST.txt): the player-facing README staged
|
||||
into desktop playtest packages.
|
||||
|
||||
## Related repositories
|
||||
|
||||
- [Discovery service API](https://forge.makearmy.io/woofmeow/netfishing-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)
|
||||
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.
|
||||
|
||||
Those code-coupled references remain in their own repositories. Game-wide
|
||||
architecture, authoring, licensing, credits, and provenance are not duplicated
|
||||
there.
|
||||
|
||||
Exact runtime values and behavior remain authoritative in source code, scenes,
|
||||
and resources. These documents describe boundaries, policy, and maintenance
|
||||
procedures; they should not duplicate changing constants or inventories that
|
||||
can be derived reliably from the project.
|
||||
|
||||
## Files intentionally kept at the repository root
|
||||
|
||||
The following are entry points or governing legal documents rather than
|
||||
general project documentation, so they remain at conventional root paths:
|
||||
|
||||
- `README.md`
|
||||
- `CONTRIBUTING.md`
|
||||
- `LICENSE`
|
||||
- `ASSET-LICENSE.md`
|
||||
- `TRADEMARKS.md`
|
||||
- `CONTRIBUTOR-TERMS.md`
|
||||
|
||||
Third-party font license texts stay beside their font files under `ui/fonts/`
|
||||
so the licensed files and their original notices cannot drift apart. Build
|
||||
scripts collect those legal files and the authoritative attribution record
|
||||
when assembling releases.
|
||||
|
||||
## Maintenance rule
|
||||
|
||||
Do not add feature-specific README files elsewhere in the repository. Add or
|
||||
update the appropriate reference above and link to its heading when source
|
||||
comments need more context. Player-facing package instructions belong only in
|
||||
`README-PLAYTEST.txt`; source and scripts remain authoritative for command-line
|
||||
usage.
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
# Testing
|
||||
|
||||
NETfishing validations are Godot `SceneTree` scripts. They use assertions and
|
||||
exit nonzero on failure. Run them with isolated user data so development checks
|
||||
cannot touch real saves, identity, trust, relationships, or settings.
|
||||
|
||||
## Consolidated runner
|
||||
|
||||
```sh
|
||||
scripts/run_validations.sh quick
|
||||
scripts/run_validations.sh full
|
||||
scripts/run_validations.sh host
|
||||
scripts/run_validations.sh network
|
||||
scripts/run_validations.sh all
|
||||
scripts/run_validations.sh --list
|
||||
```
|
||||
|
||||
- `quick` runs deterministic content and domain validations.
|
||||
- `full` adds socket-free scene/runtime checks suitable for headless execution.
|
||||
- `host` runs single-process authoritative-host checks that bind a local UDP
|
||||
port.
|
||||
- `network` runs the loopback host/client validations in pairs.
|
||||
- `all` runs `full`, `host`, and then `network`.
|
||||
|
||||
Set `GODOT_BIN` to select another executable. Set `TEST_TIMEOUT_SECONDS` to
|
||||
change the per-process timeout. The runner creates one temporary XDG root per
|
||||
process and removes it on exit.
|
||||
|
||||
## One focused test
|
||||
|
||||
```sh
|
||||
test_root="$(mktemp -d)"
|
||||
XDG_DATA_HOME="$test_root/data" \
|
||||
XDG_CONFIG_HOME="$test_root/config" \
|
||||
godot --headless --path . --script tests/fish_catalog_content_validation.gd
|
||||
rm -rf -- "$test_root"
|
||||
```
|
||||
|
||||
Do not set `NETFISHING_DATA_DIR` to an arbitrary empty folder: that variable is
|
||||
an explicit portable-data override and must point at a valid NETfishing data
|
||||
root. Isolating XDG paths is sufficient for the validation scripts.
|
||||
|
||||
## Graphical checks
|
||||
|
||||
Headless tests cannot prove visual alignment, actual mouse routing, shader
|
||||
appearance, controller feel, or window-resize behavior. Presentation changes
|
||||
need a real graphical startup with isolated XDG roots and inspection at the
|
||||
canonical 1280×720 layout plus relevant low/high and ultrawide resolutions.
|
||||
|
||||
## Network checks
|
||||
|
||||
Host and paired tests bind loopback UDP ports defined in their scripts. Ensure
|
||||
no old Godot validation process is holding those ports and that the execution
|
||||
environment permits local sockets. The runner starts paired hosts before their
|
||||
clients and requires both processes to exit successfully. Network tests do not
|
||||
contact external servers.
|
||||
|
||||
## Release checks
|
||||
|
||||
A release audit additionally includes clean Git/tag verification, editor import,
|
||||
export-template checks, platform exports, executable smoke tests, archive
|
||||
inspection, and SHA-256 verification. Those checks are intentionally not hidden
|
||||
inside the development runner.
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
# ADR 0001: Host-authoritative shared state
|
||||
|
||||
Status: accepted
|
||||
|
||||
## Context
|
||||
|
||||
NETfishing supports private hosts, open hosts, and joined clients. Catches,
|
||||
currency, owned items, jobs, mail, drawings, profiles, and moderation affect
|
||||
state that cannot safely trust a client's local presentation.
|
||||
|
||||
## Decision
|
||||
|
||||
The host validates requests against registered peers and host-owned context,
|
||||
then performs the authoritative mutation. Clients receive results and replicated
|
||||
presentation state. Client evidence is bounded and reconstructed where
|
||||
possible; it is not treated as authority.
|
||||
|
||||
Private single-player uses the same host path. Presentation-only state does not
|
||||
add RPCs or persistence.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Shared behavior is consistent across private, open-host, and joined-client
|
||||
modes.
|
||||
- Tests must cover local-host and paired host/client paths.
|
||||
- Stable protocol payloads and rejection cleanup require explicit handling.
|
||||
- UI activation cannot be used as proof that a server-side mutation succeeded.
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
# ADR 0002: Authored resources and stable identifiers
|
||||
|
||||
Status: accepted
|
||||
|
||||
## Context
|
||||
|
||||
Fish, items, pools, availability, shop stock, and other game content evolve
|
||||
independently from saved catches and network messages. Display labels and scene
|
||||
node names are expected to change during development.
|
||||
|
||||
## Decision
|
||||
|
||||
Repository-owned resources are the authoritative authored data. Persistent and
|
||||
networked records refer to stable IDs. Display names, filenames, node names,
|
||||
coordinates, and pool names are not compatibility identifiers.
|
||||
|
||||
Cross-domain concepts such as water type use one typed definition rather than
|
||||
duplicated strings. Comprehensive catalogs remain separate from location-
|
||||
specific selection pools.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Renaming visible UI does not require save migration.
|
||||
- Removing or changing a stable ID requires an explicit compatibility plan.
|
||||
- Content validation checks uniqueness, catalog completeness, pool membership,
|
||||
and typed habitat compatibility.
|
||||
- New authored assets need provenance records as well as resource references.
|
||||
1
docs/design/.gdignore
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
314
docs/design/fish_catalog_proposal.csv
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
catalog_number,display_name,collection_group,water_type,spawn_area,day_rule,rain_rule,fog_rule,rarity,base_catch_weight,weight_min_lb,weight_max_lb,sell_value_min,sell_value_max,sell_value_curve,required_bait_tags,required_event_tags,forbidden_event_tags,logbook_fact,active_status
|
||||
101,bowfin,Ancient freshwater fish,Fresh Water,pond,Night,Any,Required,Rare,0.28,1,20,13,30,0.85,,,,bowfin can gulp air at the surface when warm backwaters run low on oxygen. a long dorsal fin ripples as they stalk prey.,inactive
|
||||
102,lake sturgeon,Ancient freshwater fish,Fresh Water,lake,Night,Any,Any,Epic,0.09,10,180,36,82,0.8,,,,lake sturgeon sweep the bottom with four sensitive barbels before extending a tube-like mouth to feed. they can live for decades.,inactive
|
||||
103,longnose gar,Ancient freshwater fish,Fresh Water,river,Day,Any,Any,Rare,0.24,2,35,14,34,0.85,,,,longnose gar wait near the surface before snapping sideways at passing fish. their narrow jaws carry rows of fine needle-like teeth.,inactive
|
||||
104,paddlefish,Ancient freshwater fish,Fresh Water,river,Day,Required,Any,Epic,0.1,10,120,34,76,0.82,,,,"paddlefish cruise open rivers with their mouths wide, filtering tiny plankton from the water. the broad snout senses faint electrical signals.",inactive
|
||||
105,shovelnose sturgeon,Ancient freshwater fish,Fresh Water,river,Night,Any,Any,Rare,0.22,1,8,12,25,0.9,,,,shovelnose sturgeon hug flowing river bottoms and probe for insect larvae. a flattened snout helps them hold position in strong current.,inactive
|
||||
106,spotted gar,Ancient freshwater fish,Fresh Water,pond,Day,Any,Required,Rare,0.2,1,15,13,29,0.88,,,,spotted gar linger among vegetation where their mottled bodies break up their outline. they rise to gulp air as well as breathing through gills.,inactive
|
||||
107,West African lungfish,Ancient freshwater fish,Fresh Water,pond,Night,Required,Any,Rare,0.3,1,10,12,28,0.86,,,,"west african lungfish breathe air with paired lungs. when floodplains dry, they seal themselves in a mud cocoon until water returns.",inactive
|
||||
201,atlantic mudskipper,Brackish oddities,Salt Water,ocean,Day,Required,Any,Uncommon,1,0.03,0.5,5,11,0.95,,,,atlantic mudskippers use sturdy fins to hop and crawl across exposed mud. moist skin and mouth linings let them breathe out of water.,inactive
|
||||
202,largescale foureyes,Brackish oddities,Fresh Water | Salt Water,river,Day,Any,Any,Rare,0.32,0.05,1,10,23,0.95,,,,largescale foureyes cruise with each eye divided across the waterline. one half watches above while the other scans below.,inactive
|
||||
301,red mullet,Coastal bottom fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.9,0.1,3,5,11,0.92,,,,red mullet comb sandy bottoms with two chin barbels that taste hidden prey. their foraging leaves winding trails in the sediment.,inactive
|
||||
401,European plaice,Coastal flatfish,Salt Water,ocean,Day,Any,Any,Common,1.8,0.2,10,4,10,0.9,,,,european plaice lie flat on the seafloor with both eyes on the same side. orange spots help distinguish them from neighboring flatfish.,inactive
|
||||
402,summer flounder,Coastal flatfish,Salt Water,ocean,Day,Any,Any,Uncommon,0.9,0.3,15,6,16,0.88,,,,summer flounder bury themselves in sand with only their eyes exposed. a sudden burst carries them upward to seize passing prey.,inactive
|
||||
403,winter flounder,Coastal flatfish,Salt Water,ocean,Day,Forbidden,Any,Common,1.8,0.2,8,4,9,0.9,,,,winter flounder favor cool bays and estuaries where they rest on muddy bottoms. their eyes sit on the right side of the body.,inactive
|
||||
501,dugong,Coastal marine mammals,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.011,500,1100,72,165,0.77,,,,"dugongs graze seagrass meadows with a downturned, bristled snout. they are the only fully marine members of the sirenian family.",inactive
|
||||
502,harbor seal,Coastal marine mammals,Salt Water,ocean,Day,Any,Required,Legendary,0.018,120,370,60,140,0.79,,,,harbor seals rest on rocky shores and sandbars between hunting trips. sensitive whiskers can trace the water trails left by moving fish.,inactive
|
||||
503,sea otter,Coastal marine mammals,Salt Water,ocean,Day,Any,Any,Legendary,0.02,30,100,55,125,0.84,,,,sea otters float on their backs while opening shellfish with stones. dense fur traps insulating air because they lack a thick blubber layer.,inactive
|
||||
504,walrus,Coastal marine mammals,Salt Water,ocean,Day,Any,Required,Legendary,0.012,800,3700,74,170,0.76,,,,walruses sweep the seafloor for clams and other soft-bodied prey. long tusks help them haul onto ice and settle disputes.,inactive
|
||||
505,West Indian manatee,Coastal marine mammals,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.012,440,1300,70,160,0.77,,,,west indian manatees graze aquatic plants in warm coastal water and rivers. they surface regularly to breathe through nostrils atop the snout.,inactive
|
||||
601,bay pipefish,Coastal oddities,Salt Water,ocean,Day,Any,Any,Uncommon,0.9,0.005,0.04,4,9,1,,,,"bay pipefish hide upright among seagrass, matching the blades with their slender bodies. males carry developing eggs in a brood pouch.",inactive
|
||||
602,lined seahorse,Coastal oddities,Salt Water,ocean,Day,Forbidden,Any,Rare,0.28,0.005,0.05,9,20,1,,,,lined seahorses anchor to grass and coral with curling tails. the male broods eggs in a pouch and releases fully formed young.,inactive
|
||||
603,monkfish,Coastal oddities,Salt Water,ocean,Night,Any,Required,Rare,0.25,2,55,14,35,0.84,,,,monkfish hide against the bottom and wave a fleshy lure above a cavernous mouth. a sudden gulp draws fish and crustaceans inward.,inactive
|
||||
604,tripletail,Coastal oddities,Salt Water,ocean,Day,Any,Required,Rare,0.28,1,30,13,31,0.85,,,,"tripletail often drift sideways near floating debris, resembling a loose leaf. rounded rear fins create the three-tailed silhouette.",inactive
|
||||
701,atlantic mackerel,Coastal pelagic fish,Salt Water,ocean,Any,Any,Any,Common,0.5,0.5,5,4,9,0.9,,,,atlantic mackerel travel in fast schools across the north atlantic and feed on plankton and small schooling fish.,active
|
||||
702,bluefish,Coastal pelagic fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.85,0.5,25,7,19,0.85,,,,bluefish race in coordinated schools while pursuing smaller fish. sharp teeth and powerful jaws make their feeding bursts especially fierce.,inactive
|
||||
703,cero mackerel,Coastal pelagic fish,Salt Water,ocean,Any,Any,Any,Uncommon,0.35,1,15,7,15,0.9,,,,cero mackerel are streamlined coastal hunters. sharp teeth help them slash through schools of smaller fish.,active
|
||||
704,chub mackerel,Coastal pelagic fish,Salt Water,ocean,Any,Any,Any,Common,0.5,0.5,4,4,9,0.9,,,,chub mackerel school near the surface and follow plankton blooms. their dark wavy bars help identify them at a glance.,active
|
||||
705,crevalle jack,Coastal pelagic fish,Salt Water,ocean,Day,Required,Any,Uncommon,0.8,1,35,7,20,0.84,,,,"crevalle jacks patrol warm coasts in fast-moving schools. their deep bodies and forked tails deliver long, powerful runs.",inactive
|
||||
706,king mackerel,Coastal pelagic fish,Salt Water,ocean,Any,Any,Any,Uncommon,0.3,3,40,10,24,0.9,,,,king mackerel are swift coastal predators. their pointed teeth and long body are built for sudden bursts of speed.,active
|
||||
707,spanish mackerel,Coastal pelagic fish,Salt Water,ocean,Any,Any,Any,Uncommon,0.35,1,15,8,18,0.9,,,,spanish mackerel hunt in warm coastal waters and often travel in loose schools while chasing baitfish.,active
|
||||
708,talang queenfish,Coastal pelagic fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.8,0.5,20,7,18,0.86,,,,talang queenfish chase schooling prey near warm coasts and estuaries. hooked teeth and a deeply forked tail suit their rapid attacks.,inactive
|
||||
801,American sand lance,Coastal schooling fish,Salt Water,ocean,Day,Any,Any,Common,3,0.02,0.4,1,3,1,,,,american sand lance dive headfirst into loose sand when danger approaches. immense schools carry energy from plankton to larger predators.,inactive
|
||||
802,atlantic menhaden,Coastal schooling fish,Salt Water,ocean,Day,Any,Any,Common,3,0.1,1.5,2,5,0.98,,,,"atlantic menhaden strain plankton from coastal water with fine gill rakers. dense schools feed whales, seabirds, and predatory fish.",inactive
|
||||
803,black pomfret,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Uncommon,0.3,1,15,8,18,0.9,,,,"black pomfret have a deep, laterally compressed body that lets them maneuver neatly through open water.",active
|
||||
804,chinese pomfret,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Uncommon,0.3,1,20,9,20,0.9,,,,"chinese pomfret are silvery schooling fish with a tall, flattened body and long sickle-shaped fins.",active
|
||||
805,european anchovy,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Common,0.5,0.05,0.25,2,4,0.9,,,,european anchovies form dense schools and feed by filtering tiny plankton from coastal water.,active
|
||||
806,European pilchard,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Common,3.5,0.05,0.6,2,4,1,,,,european pilchards form shimmering schools along atlantic and mediterranean coasts. they feed mainly on plankton near the surface.,inactive
|
||||
807,golden pomfret,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Rare,0.18,2,25,14,30,0.9,,,,golden pomfret are warm-water swimmers whose golden sheen is most noticeable along the fins and flanks.,active
|
||||
808,northern anchovy,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Common,0.5,0.05,0.35,2,4,0.9,,,,northern anchovies gather in huge schools along the pacific coast and filter plankton with their fine gill rakers.,active
|
||||
809,Pacific sardine,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Common,3.5,0.05,0.5,2,4,1,,,,"pacific sardines follow cool, productive water in enormous schools. their movements shift as currents and plankton supplies change.",inactive
|
||||
810,white pomfret,Coastal schooling fish,Salt Water,ocean,Any,Any,Any,Common,0.45,0.5,10,5,12,0.9,,,,"white pomfret gather over coastal grounds and use their compact, deep bodies to turn quickly while feeding.",active
|
||||
901,blacktip shark,Coastal sharks,Salt Water,ocean,Day,Required,Any,Epic,0.1,15,150,32,75,0.8,,,,blacktip sharks are named for the dark markings on their fins. they hunt schooling fish in warm shallows and sometimes leap clear of the water.,inactive
|
||||
902,great hammerhead shark,Coastal sharks,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.035,50,1000,62,145,0.78,,,,great hammerheads sweep their wide heads over the bottom while searching for rays. widely spaced senses help pinpoint hidden prey.,inactive
|
||||
903,great white shark,Coastal sharks,Salt Water,ocean,Day,Any,Any,Legendary,0.025,100,1000,70,150,0.76,,,,great white sharks conserve heat in their swimming muscles while crossing cool seas. rows of serrated teeth are replaced throughout life.,inactive
|
||||
904,tiger shark,Coastal sharks,Salt Water,ocean,Night,Required,Any,Epic,0.06,50,1000,50,120,0.8,,,,tiger sharks carry dark vertical bars that fade as they mature. broad jaws let them investigate an unusually varied range of prey.,inactive
|
||||
905,whale shark,Coastal sharks,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.025,500,45000,70,160,0.76,,,,whale sharks are enormous filter feeders covered in unique spot patterns. they cruise with open mouths to collect plankton and tiny fish.,inactive
|
||||
1001,burbot,Cold freshwater fish,Fresh Water,lake,Night,Any,Required,Rare,0.24,0.5,18,12,28,0.86,,,,burbot are the only freshwater members of the cod family. they become most active in cold darkness and may spawn beneath winter ice.,inactive
|
||||
1002,cisco,Cold freshwater fish,Fresh Water,lake,Day,Any,Any,Common,2.2,0.1,3,3,7,0.95,,,,cisco school in the cool open water of northern lakes. these slim relatives of salmon feed on plankton and become prey for larger fish.,inactive
|
||||
1003,lake whitefish,Cold freshwater fish,Fresh Water,lake,Any,Any,Any,Common,1.5,0.5,12,4,11,0.9,,,,"lake whitefish browse deep, cold bottoms with small downward-pointing mouths. large schools move toward shallows to spawn in autumn.",inactive
|
||||
1101,arctic char,Cold freshwater salmonids,Fresh Water | Salt Water,lake,Any,Forbidden,Any,Rare,0.3,1,25,14,32,0.86,,,,arctic char thrive farther north than any other freshwater fish. some remain in lakes while others migrate between rivers and the sea.,inactive
|
||||
1102,arctic grayling,Cold freshwater salmonids,Fresh Water,river,Day,Any,Forbidden,Uncommon,0.75,0.3,6,6,14,0.9,,,,"arctic grayling carry a tall, colorful dorsal fin like a sail. they feed on drifting insects in cold, clear rivers and lakes.",inactive
|
||||
1103,brown trout,Cold freshwater salmonids,Fresh Water,river,Night,Any,Any,Uncommon,0.8,0.5,25,7,20,0.86,,,,"brown trout often shelter by day and hunt more freely after dark. adaptable populations occupy streams, lakes, and even coastal water.",inactive
|
||||
1104,cutthroat trout,Cold freshwater salmonids,Fresh Water,river,Any,Any,Any,Uncommon,0.4,0.25,10,5,12,0.9,,,,"cutthroat trout take their name from the red slash beneath the jaw. many populations rely on cold, well-oxygenated streams.",active
|
||||
1105,golden trout,Cold freshwater salmonids,Fresh Water,lake,Any,Any,Any,Rare,0.2,0.2,3,8,16,0.9,,,,"golden trout evolved in clear, high-elevation california streams. their bright flanks stand out against rocky alpine water.",active
|
||||
1106,rainbow trout,Cold freshwater salmonids,Fresh Water,river,Any,Any,Any,Uncommon,0.45,0.5,20,5,11,0.9,,,,rainbow trout are adaptable stream hunters. the pink lateral stripe is especially vivid when the fish is in breeding condition.,active
|
||||
1201,atlantic wolffish,Cold reef fish,Salt Water,ocean,Any,Forbidden,Any,Rare,0.25,2,40,14,34,0.84,,,,atlantic wolffish use heavy jaws and blunt teeth to crush shellfish and urchins. natural antifreeze proteins help them endure icy water.,inactive
|
||||
1202,cusk,Cold reef fish,Salt Water,ocean,Night,Any,Any,Uncommon,0.75,0.5,30,7,19,0.85,,,,"cusk move slowly across cold rocky bottoms, sheltering in cracks and caves. a single long fin runs around much of the rear body.",inactive
|
||||
1203,spotted wolffish,Cold reef fish,Salt Water,ocean,Any,Any,Required,Epic,0.11,3,50,26,60,0.84,,,,spotted wolffish crush hard-shelled prey with broad molar-like teeth. their pale spots stand out against a dark cold-water body.,inactive
|
||||
1301,atlantic herring,Cold schooling fish,Salt Water,ocean,Any,Any,Any,Common,3,0.1,1.5,2,5,0.98,,,,atlantic herring gather in immense schools that move between feeding and spawning grounds. they filter plankton with fine gill rakers.,inactive
|
||||
1302,capelin,Cold schooling fish,Salt Water,ocean,Any,Any,Required,Uncommon,1,0.03,0.2,4,8,1,,,,"capelin are small polar fish that feed whales, seabirds, and larger fish. many schools roll onto beaches or shallows to release their eggs.",inactive
|
||||
1303,European sprat,Cold schooling fish,Salt Water,ocean,Any,Any,Any,Common,3.2,0.03,0.3,1,3,1,,,,european sprat form compact schools in northern coastal seas. these tiny herring relatives feed on plankton near the surface.,inactive
|
||||
1304,pacific herring,Cold schooling fish,Salt Water,ocean,Any,Required,Any,Common,2.8,0.1,1.5,2,5,0.98,,,,pacific herring return to coastal shallows to coat plants and rocks with eggs. their oily schools support entire marine food webs.,inactive
|
||||
1401,Alaska pollock,Cold shelf fish,Salt Water,ocean,Any,Any,Any,Common,2.5,0.3,8,3,8,0.92,,,,alaska pollock form vast schools over cold northern shelves. they feed on plankton and fish while supporting many larger predators.,inactive
|
||||
1402,atlantic cod,Cold shelf fish,Salt Water,ocean,Any,Any,Any,Common,1.8,1,55,5,18,0.85,,,,"atlantic cod carry a pale lateral line and one chin barbel. they search cold seafloors for crustaceans, mollusks, and smaller fish.",inactive
|
||||
1403,Atlantic pollock,Cold shelf fish,Salt Water,ocean,Day,Any,Forbidden,Uncommon,0.9,1,35,7,18,0.86,,,,atlantic pollock are swift relatives of cod with dark backs and pale lateral lines. adults gather around rocky banks and wrecks.,inactive
|
||||
1404,Dover sole,Cold shelf fish,Salt Water,ocean,Night,Any,Any,Uncommon,0.8,0.2,8,6,14,0.9,,,,dover sole glide over deep muddy bottoms of the eastern pacific. both eyes migrate to the right side as the young fish becomes flat.,inactive
|
||||
1405,haddock,Cold shelf fish,Salt Water,ocean,Day,Any,Any,Common,2,0.5,20,4,11,0.9,,,,haddock are recognized by a dark shoulder mark and black lateral line. schools forage over cold seafloors for small bottom animals.,inactive
|
||||
1406,pacific cod,Cold shelf fish,Salt Water,ocean,Any,Any,Any,Common,1.8,1,45,5,17,0.85,,,,pacific cod use a chin barbel to investigate cold shelf bottoms. seasonal schools follow prey between deeper water and coastal spawning grounds.,inactive
|
||||
1407,pacific hake,Cold shelf fish,Salt Water,ocean,Night,Any,Any,Common,1.7,0.3,8,3,9,0.92,,,,pacific hake rise from deep water at night to feed on krill and fish. large schools migrate along the west coast with changing seasons.,inactive
|
||||
1408,silver hake,Cold shelf fish,Salt Water,ocean,Night,Any,Any,Common,1.7,0.2,5,3,8,0.92,,,,silver hake hunt fish and crustaceans over sandy atlantic shelves. they move upward after dark and return toward the bottom by day.,inactive
|
||||
1501,chambered nautilus,Cuttlefish and nautiluses,Salt Water,ocean,Night,Any,Required,Legendary,0.05,0.5,3,34,76,0.92,,,,chambered nautiluses regulate buoyancy with gas-filled shell chambers. dozens of small tentacles feel for food in dark reef slopes.,inactive
|
||||
1502,common cuttlefish,Cuttlefish and nautiluses,Salt Water,ocean,Day,Any,Any,Uncommon,0.55,0.2,12,7,17,0.9,,,,common cuttlefish flash changing colors and patterns through specialized skin cells. an internal cuttlebone controls buoyancy.,inactive
|
||||
1503,flamboyant cuttlefish,Cuttlefish and nautiluses,Salt Water,ocean,Day,Required,Any,Epic,0.1,0.05,0.4,26,58,0.96,,,,flamboyant cuttlefish walk along the seafloor on their arms and fins. vivid displays warn predators of potent toxins.,inactive
|
||||
1601,blueline tilefish,Deep shelf fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.7,1,20,7,18,0.86,,,,blueline tilefish shelter in burrows and rocky openings along deep shelves. a narrow blue stripe traces the edge of the dorsal fin.,inactive
|
||||
1602,golden tilefish,Deep shelf fish,Salt Water,ocean,Day,Any,Any,Rare,0.22,2,50,15,37,0.84,,,,golden tilefish excavate burrows in soft clay along deep ocean slopes. their bright yellow spots contrast with blue-green backs.,inactive
|
||||
1603,Pacific ocean perch,Deep shelf fish,Salt Water,ocean,Any,Any,Any,Uncommon,0.8,0.3,12,7,17,0.88,,,,pacific ocean perch hover around deep rocky reefs in the north pacific. these slow-growing fish give birth to live young.,inactive
|
||||
1604,Patagonian toothfish,Deep shelf fish,Salt Water,ocean,Night,Any,Any,Epic,0.09,10,220,32,78,0.8,,,,"patagonian toothfish patrol cold, deep southern water with large canine teeth. natural antifreeze proteins protect their blood from freezing.",inactive
|
||||
1605,sablefish,Deep shelf fish,Salt Water,ocean,Night,Any,Any,Rare,0.22,2,40,15,36,0.84,,,,"sablefish roam deep north pacific slopes and can live for many decades. soft dark bodies conceal rich, oil-filled flesh.",inactive
|
||||
1606,wreckfish,Deep shelf fish,Salt Water,ocean,Any,Any,Required,Epic,0.1,10,180,31,76,0.8,,,,"wreckfish gather around caves, ledges, and shipwrecks in deep water. powerful jaws let them ambush fish and large crustaceans.",inactive
|
||||
1701,giant oarfish,Deep-sea legends,Salt Water,ocean,Night,Any,Required,Legendary,0.035,20,600,60,140,0.78,,,,"giant oarfish drift vertically through deep open water, rowing with a crimson dorsal fin. their ribbon-like bodies can reach remarkable lengths.",inactive
|
||||
1702,West Indian Ocean coelacanth,Deep-sea legends,Salt Water,ocean,Night,Any,Required,Legendary,0.03,20,200,65,145,0.8,,,,"west indian ocean coelacanths shelter in deep volcanic caves by day. fleshy lobed fins move in an alternating, limb-like rhythm.",inactive
|
||||
1801,black seadevil,Deep-sea oddities,Salt Water,ocean,Night,Any,Any,Legendary,0.05,0.1,2,48,105,0.92,,,,black seadevils lure prey with a glowing organ suspended above the mouth. tiny males permanently attach to much larger females.,inactive
|
||||
1802,common fangtooth,Deep-sea oddities,Salt Water,ocean,Night,Any,Any,Epic,0.1,0.05,0.5,25,56,0.96,,,,common fangtooths carry outsized teeth that fit into pockets in the roof of the mouth. they migrate upward from deep water after dark.,inactive
|
||||
1803,gulper eel,Deep-sea oddities,Salt Water,ocean,Night,Any,Required,Legendary,0.04,0.5,18,44,92,0.86,,,,gulper eels unfold enormous mouths to engulf prey in the deep sea. a whip-like tail ends in a small light-producing organ.,inactive
|
||||
1804,Pacific barreleye,Deep-sea oddities,Salt Water,ocean,Night,Any,Required,Legendary,0.045,0.2,2.5,42,88,0.9,,,,pacific barreleyes peer upward through transparent shields covering the head. tubular eyes rotate forward when the fish turns to feed.,inactive
|
||||
1805,smooth-head blobfish,Deep-sea oddities,Salt Water,ocean,Night,Any,Required,Legendary,0.04,0.5,5,42,90,0.86,,,,smooth-head blobfish rest on deep slopes where pressure supports their soft bodies. they conserve energy by waiting for edible matter nearby.,inactive
|
||||
1806,spotted lanternfish,Deep-sea oddities,Salt Water,ocean,Night,Any,Any,Rare,0.24,0.05,0.5,14,30,0.95,,,,spotted lanternfish carry rows of light-producing organs along their bodies. immense schools rise toward the surface each night.,inactive
|
||||
1901,crown-of-thorns sea star,Echinoderms,Salt Water,ocean,Night,Required,Any,Epic,0.1,0.5,7,23,52,0.91,,,,crown-of-thorns sea stars crawl over reefs and digest coral tissue outside the body. venomous spines discourage many predators.,inactive
|
||||
1902,giant California sea cucumber,Echinoderms,Salt Water,ocean,Night,Any,Required,Rare,0.24,0.5,5,13,29,0.93,,,,giant california sea cucumbers sweep organic particles from the seafloor with branching tentacles. soft tube feet anchor their long bodies.,inactive
|
||||
1903,purple sea urchin,Echinoderms,Salt Water,ocean,Day,Any,Any,Uncommon,0.75,0.05,1,5,12,0.96,,,,purple sea urchins scrape algae from rocks with a five-toothed feeding structure. dense groups can clear kelp from entire reefs.,inactive
|
||||
1904,sand dollar,Echinoderms,Salt Water,ocean,Day,Any,Forbidden,Uncommon,0.8,0.01,0.2,4,10,0.98,,,,sand dollars burrow just beneath sandy seafloors and filter tiny food particles. the familiar star pattern marks their five-part body plan.,inactive
|
||||
1905,sunflower sea star,Echinoderms,Salt Water,ocean,Day,Any,Required,Rare,0.25,0.5,13,14,32,0.89,,,,"sunflower sea stars move quickly on thousands of tube feet and may carry many arms. they hunt urchins, clams, and other bottom animals.",inactive
|
||||
2001,axolotl,Freshwater amphibians,Fresh Water,lake,Night,Any,Required,Legendary,0.04,0.1,0.7,36,78,0.96,,,,axolotls remain aquatic and keep feathery external gills throughout adulthood. lost limbs and parts of several organs can regenerate.,inactive
|
||||
2002,hellbender,Freshwater amphibians,Fresh Water,river,Night,Required,Any,Epic,0.1,0.5,5.5,24,54,0.91,,,,"hellbenders hide beneath large rocks in cool, clean rivers. folds of loose skin absorb oxygen while the flattened body grips the current.",inactive
|
||||
2101,guppy,Freshwater aquarium fish,Fresh Water,pond,Day,Any,Any,Common,1.5,0.01,0.15,2,5,0.98,,,,"guppies are livebearers whose young arrive ready to swim. males display bright colors while females often favor larger, less flashy bodies.",inactive
|
||||
2102,neon tetra,Freshwater aquarium fish,Fresh Water,pond,Night,Any,Any,Uncommon,0.9,0.01,0.08,4,8,0.98,,,,"neon tetras school through shaded forest streams. an iridescent blue stripe remains visible in the dim, tannin-stained water.",inactive
|
||||
2103,zebrafish,Freshwater aquarium fish,Fresh Water,pond,Day,Any,Any,Common,1.35,0.01,0.12,2,5,0.98,,,,"zebrafish carry horizontal blue stripes from gill to tail. hardy schools thrive in shallow streams, flooded fields, and quiet pools.",inactive
|
||||
2201,largemouth bass,Freshwater bass,Fresh Water,pond,Any,Any,Any,Common,2.5,0.5,18,4,12,0.9,,,,largemouth bass wait among weeds and timber before lunging at prey. the upper jaw extends beyond the eye when the mouth is closed.,inactive
|
||||
2202,smallmouth bass,Freshwater bass,Fresh Water,river,Day,Any,Any,Uncommon,1.2,0.5,12,6,15,0.9,,,,smallmouth bass favor clear water with rock and moving current. bronze flanks and dark vertical bars distinguish them from largemouth bass.,inactive
|
||||
2301,bigmouth buffalo,Freshwater bottom fish,Fresh Water,river,Any,Any,Required,Epic,0.12,8,80,28,63,0.82,,,,bigmouth buffalo filter plankton with fine gill rakers instead of rooting for prey. some individuals survive for more than a century.,inactive
|
||||
2302,golden redhorse,Freshwater bottom fish,Fresh Water,river,Day,Any,Any,Uncommon,0.9,0.5,8,6,14,0.9,,,,"golden redhorses probe flowing river bottoms with fleshy, downward-facing mouths. coppery scales and reddish fins give them a warm glow.",inactive
|
||||
2303,quillback,Freshwater bottom fish,Fresh Water,river,Day,Any,Any,Uncommon,0.8,0.5,15,6,16,0.88,,,,quillbacks carry a long first dorsal ray that rises like a quill. small mouths gather insect larvae and other food from river and lake bottoms.,inactive
|
||||
2304,smallmouth buffalo,Freshwater bottom fish,Fresh Water,river,Any,Any,Any,Rare,0.3,3,45,14,34,0.84,,,,"smallmouth buffalo use thick lips to graze bottom-dwelling food in warm rivers. their deep, heavy bodies form a pronounced arch behind the head.",inactive
|
||||
2305,white sucker,Freshwater bottom fish,Fresh Water,river,Any,Any,Any,Common,2,0.3,8,3,8,0.9,,,,white suckers vacuum insects and organic matter from cool freshwater bottoms. spring runs carry large groups into shallow streams.,inactive
|
||||
2401,black bullhead,Freshwater catfish,Fresh Water,pond,Night,Any,Any,Uncommon,1,0.3,6,5,11,0.92,,,,"black bullheads tolerate warm, cloudy water with little oxygen. stout spines protect the dorsal and pectoral fins from predators.",inactive
|
||||
2402,blue catfish,Freshwater catfish,Fresh Water,river,Night,Any,Any,Uncommon,1.25,3,12,6,9,0.9,,,,a deep fork in the tail inspired the blue catfish's scientific name. it rests deep by daylight and becomes more active after dark.,active
|
||||
2403,brown bullhead,Freshwater catfish,Fresh Water,pond,Night,Any,Any,Common,2.3,0.2,4,3,7,0.95,,,,brown bullheads search muddy bottoms with eight sensitive barbels. males guard nests and herd newly hatched young in a dark moving ball.,inactive
|
||||
2404,channel catfish,Freshwater catfish,Fresh Water,pond,Night,Any,Any,Common,2,1.5,7,4,7,1,,,,"a channel catfish can taste through skin all over its body, especially near its gills and whiskers. the male watches the eggs.",active
|
||||
2405,flathead catfish,Freshwater catfish,Fresh Water,river,Night,Any,Any,Uncommon,1,3,14,7,10,0.9,,,,"flatheads favor hideouts made by logs, rocks, ledges, and other underwater structure. as they grow, fish dominate their menu.",active
|
||||
2406,tadpole madtom,Freshwater catfish,Fresh Water,river,Night,Any,Any,Rare,0.35,0.02,0.15,8,16,0.95,,,,tadpole madtoms are tiny nocturnal catfish that shelter beneath vegetation and debris. venomous fin spines discourage larger predators.,inactive
|
||||
2407,white catfish,Freshwater catfish,Fresh Water,pond,Night,Any,Any,Common,2,1,5,4,6,1,,,,white catfish began along the atlantic coast between new york and florida. people later carried them far beyond that home range.,active
|
||||
2408,yellow bullhead,Freshwater catfish,Fresh Water,pond,Night,Required,Any,Common,2,0.2,3.5,3,7,0.95,,,,yellow bullheads use pale chin barbels to distinguish food in murky shallows. both parents may guard the nest and schooling young.,inactive
|
||||
2501,common barbel,Freshwater coarse fish,Fresh Water,river,Night,Required,Any,Rare,0.28,1,25,13,31,0.85,,,,common barbels hold close to fast river bottoms with streamlined bodies and broad fins. four mouth barbels locate food among stones.,inactive
|
||||
2502,common bream,Freshwater coarse fish,Fresh Water,lake,Any,Any,Any,Common,1.8,0.3,15,4,12,0.88,,,,"common bream gather in slow rivers and lakes with silvery, deep-sided bodies. protruding mouths sift insect larvae from soft bottoms.",inactive
|
||||
2503,common carp,Freshwater coarse fish,Fresh Water,pond,Any,Any,Any,Rare,1.5,3,18,10,10,0.85,,,,whisker-like barbels help a common carp investigate the bottom. nosing through sediment can cloud the water and loosen plants.,active
|
||||
2504,common roach,Freshwater coarse fish,Fresh Water,pond,Any,Any,Any,Common,2.8,0.1,4,2,6,0.95,,,,"common roach thrive in many lakes and rivers, often schooling near vegetation. red fins and a red-orange eye brighten their silver bodies.",inactive
|
||||
2505,european chub,Freshwater coarse fish,Fresh Water,river,Any,Any,Any,Common,0.55,0.2,6,2,4,0.9,,,,"european chub are adaptable river fish. adults often patrol shallows and feed on insects, small fish, and fruit.",active
|
||||
2506,fallfish,Freshwater coarse fish,Fresh Water,river,Day,Required,Any,Uncommon,0.9,0.2,3.5,5,10,0.92,,,,fallfish are large minnows that build broad stone nests in flowing water. other stream fish often reuse the gravel mounds for spawning.,inactive
|
||||
2507,ide,Freshwater coarse fish,Fresh Water,river,Day,Any,Any,Uncommon,0.8,0.3,9,6,14,0.9,,,,"ide move between rivers, lakes, and brackish coastal water in loose schools. adults eat insects, crustaceans, plants, and small fish.",inactive
|
||||
2508,rudd,Freshwater coarse fish,Fresh Water,pond,Day,Any,Any,Common,2.4,0.1,4.5,3,7,0.95,,,,"rudd feed near the surface with an upturned mouth and red fins. golden-green bodies disappear easily among warm, weedy shallows.",inactive
|
||||
2509,tench,Freshwater coarse fish,Fresh Water,pond,Night,Any,Required,Uncommon,0.75,0.5,12,7,17,0.88,,,,"tench browse quiet, muddy bottoms with two small mouth barbels. a thick coat of slime protects their olive-green scales.",inactive
|
||||
2601,red swamp crayfish,Freshwater crustaceans,Fresh Water,pond,Night,Required,Any,Common,1.1,0.03,0.25,3,7,0.98,,,,"red swamp crayfish burrow into wet ground when water recedes. adaptable populations feed on plants, carrion, and small aquatic animals.",inactive
|
||||
2701,alligator gar,Freshwater giants,Fresh Water,river,Night,Any,Any,Legendary,0.055,20,300,55,125,0.8,,,,alligator gar combine a broad tooth-filled snout with heavy armor-like scales. a vascular swim bladder lets them breathe air at the surface.,inactive
|
||||
2702,arapaima,Freshwater giants,Fresh Water,river,Day,Any,Any,Legendary,0.04,40,400,60,140,0.78,,,,arapaima must surface frequently to gulp air through a specialized swim bladder. large armored scales protect their long river-going bodies.,inactive
|
||||
2703,goliath tigerfish,Freshwater giants,Fresh Water,river,Day,Any,Any,Legendary,0.035,20,150,58,132,0.8,,,,goliath tigerfish patrol powerful african rivers with interlocking dagger-like teeth. a muscular forked tail drives sudden attacks.,inactive
|
||||
2704,muskellunge,Freshwater giants,Fresh Water,lake,Day,Any,Required,Epic,0.11,8,60,32,72,0.82,,,,muskellunge wait motionless among weeds before exploding toward prey. pale bodies carry bars or spots that fade into broken underwater light.,inactive
|
||||
2801,common shiner,Freshwater minnows,Fresh Water,river,Day,Any,Any,Common,4,0.03,0.3,1,3,1,,,,common shiners flash silver in clear streams and small rivers. breeding males develop rosy fins and a blue-violet sheen.,inactive
|
||||
2802,creek chub,Freshwater minnows,Fresh Water,river,Day,Any,Any,Common,3.2,0.05,0.8,2,4,1,,,,creek chubs gather around pools and undercut banks in small streams. males build gravel ridges where several fish may spawn.,inactive
|
||||
2803,emerald shiner,Freshwater minnows,Fresh Water,lake,Any,Any,Any,Common,3.5,0.03,0.25,1,3,1,,,,emerald shiners form bright surface schools in large lakes and rivers. slender bodies feed on plankton and drifting insects.,inactive
|
||||
2804,fathead minnow,Freshwater minnows,Fresh Water,pond,Day,Any,Any,Common,4.5,0.02,0.2,1,2,1,,,,"fathead minnows tolerate warm, muddy ponds where many fish struggle. males guard eggs laid beneath rocks, logs, and other cover.",inactive
|
||||
2805,flame chub,Freshwater minnows,Fresh Water,river,Any,Any,Any,Uncommon,0.4,0.05,0.15,3,6,0.9,,,,"flame chubs prefer cool, clear streams. their bright breeding colors make a small fish easy to spot in spring water.",active
|
||||
2806,golden shiner,Freshwater minnows,Fresh Water,pond,Day,Any,Any,Common,3.8,0.05,1,2,4,1,,,,golden shiners school around dense vegetation in warm water. an upturned mouth takes insects and plankton from near the surface.,inactive
|
||||
2807,lake chub,Freshwater minnows,Fresh Water,lake,Any,Any,Any,Common,0.55,0.05,0.5,2,4,0.9,,,,lake chubs school in cold northern water and use their small mouths to pick insects and other tiny prey from the current.,active
|
||||
2901,electric eel,Freshwater oddities,Fresh Water,river,Night,Required,Any,Epic,0.1,1,44,25,60,0.82,,,,electric eels navigate and hunt with electrical pulses produced along most of the body. they must surface regularly to breathe air.,inactive
|
||||
2902,freshwater drum,Freshwater oddities,Fresh Water,river,Night,Required,Any,Uncommon,0.7,1,35,7,20,0.85,,,,freshwater drum crush snails and mussels with powerful throat teeth. muscles vibrating against the swim bladder produce a low drumming sound.,inactive
|
||||
2903,goldeye,Freshwater oddities,Fresh Water,river,Night,Any,Required,Rare,0.3,0.3,6,12,25,0.9,,,,goldeye patrol turbid rivers with large light-sensitive eyes and a toothed tongue. they rise toward the surface to hunt insects and small fish.,inactive
|
||||
2904,mooneye,Freshwater oddities,Fresh Water,river,Night,Any,Any,Uncommon,0.85,0.2,4,5,11,0.92,,,,mooneyes flash silver in clear rivers and lakes while feeding near the surface. their large eyes suit evening hunts for insects and small fish.,inactive
|
||||
2905,weather loach,Freshwater oddities,Fresh Water,pond,Any,Required,Any,Uncommon,0.85,0.05,0.7,5,11,0.95,,,,weather loaches gulp air and pass it through the intestine when oxygen runs low. restless activity often increases as air pressure falls.,inactive
|
||||
3001,bubble-eye goldfish,Freshwater ornamental,Fresh Water,pond,Any,Any,Any,Uncommon,0.35,0.1,0.35,3,7,0.9,,,,"bubble-eye goldfish have delicate fluid-filled sacs beneath their eyes, making careful handling especially important.",active
|
||||
3002,goldfish,Freshwater ornamental,Fresh Water,pond,Any,Any,Any,Common,0.5,0.1,4,1,3,0.9,,,,"goldfish can tolerate a surprisingly wide range of conditions. their wild relatives often live in slow, weedy water.",active
|
||||
3003,koi,Freshwater ornamental,Fresh Water,pond,Day,Any,Forbidden,Rare,0.28,0.5,35,14,34,0.87,,,,koi are colorful domesticated forms of common carp selected over many generations. each fish carries a distinctive arrangement of patches and scales.,inactive
|
||||
3101,black crappie,Freshwater panfish,Fresh Water,pond,Any,Any,Required,Uncommon,1,0.2,4,5,11,0.9,,,,black crappie gather around submerged wood and vegetation in clear water. irregular dark speckles scatter across their deep silver bodies.,inactive
|
||||
3102,bluegill,Freshwater panfish,Fresh Water,pond,Day,Any,Any,Common,10,0.3,2,3,3,1,,,,"bluegill fathers sweep shallow bowls into the bottom for nests, then stand guard. whole neighborhoods of nests can crowd together.",active
|
||||
3103,green sunfish,Freshwater panfish,Fresh Water,pond,Day,Any,Any,Common,3.2,0.1,1.5,2,5,1,,,,"green sunfish tolerate small, warm, cloudy pools better than many relatives. a large mouth lets them tackle insects, crayfish, and fish.",inactive
|
||||
3104,pumpkinseed,Freshwater panfish,Fresh Water,pond,Day,Any,Any,Common,3,0.1,1.3,2,5,1,,,,pumpkinseeds use compact teeth to crush snails and other hard prey. blue facial lines and an orange gill spot brighten their round bodies.,inactive
|
||||
3105,redear sunfish,Freshwater panfish,Fresh Water,pond,Day,Any,Any,Uncommon,1.1,0.2,3,4,9,0.95,,,,"redear sunfish specialize in snails, crushing shells with strong throat teeth. a red or orange margin marks the dark flap behind the gill.",inactive
|
||||
3106,warmouth,Freshwater panfish,Fresh Water,pond,Night,Required,Any,Uncommon,0.8,0.2,2,5,10,0.95,,,,"warmouth hide in weeds, roots, and murky backwaters before ambushing prey. red eyes and dark cheek stripes frame a notably large mouth.",inactive
|
||||
3107,white crappie,Freshwater panfish,Fresh Water,lake,Night,Any,Any,Common,1.7,0.2,4.5,4,9,0.9,,,,"white crappie favor warm, cloudy water and gather around structure. vertical bars cross their silver sides instead of scattered speckles.",inactive
|
||||
3201,yellow perch,Freshwater perch,Fresh Water,lake,Day,Any,Any,Common,2.2,0.2,4,3,8,0.9,,,,yellow perch travel in schools through cool lakes and slow rivers. dark vertical bars and orange lower fins make them easy to recognize.,inactive
|
||||
3301,chain pickerel,Freshwater predators,Fresh Water,pond,Day,Required,Any,Uncommon,0.8,0.5,9,6,15,0.9,,,,chain pickerel hover among vegetation before darting at fish and frogs. a chain-like pattern breaks up their green flanks.,inactive
|
||||
3302,grass pickerel,Freshwater predators,Fresh Water,pond,Day,Any,Any,Common,2.1,0.1,1.5,2,6,0.95,,,,"grass pickerel remain small enough to hunt in narrow, weedy creeks and marshes. dark bars camouflage their slim bodies among stems.",inactive
|
||||
3303,northern pike,Freshwater predators,Fresh Water,lake,Day,Any,Any,Uncommon,0.75,1,30,8,24,0.85,,,,northern pike are solitary ambush hunters built for sudden acceleration. pale bean-shaped spots cover their long green bodies.,inactive
|
||||
3304,sauger,Freshwater predators,Fresh Water,river,Any,Any,Any,Uncommon,0.35,0.5,8,6,12,0.9,,,,"sauger favor turbid rivers and reservoirs. their mottled backs blend into the dim, shifting light near the bottom.",active
|
||||
3305,saugeye,Freshwater predators,Fresh Water,lake,Any,Any,Any,Rare,0.2,0.5,12,9,18,0.9,,,,saugeye are a fertile hybrid of sauger and walleye. they combine traits from both parent species and often grow quickly.,active
|
||||
3306,walleye,Freshwater predators,Fresh Water,lake,Any,Any,Any,Uncommon,0.4,0.5,15,7,15,0.9,,,,walleye have light-sensitive eyes that help them hunt in murky water and around dusk. their reflective layer gives the eyes a pale glow.,active
|
||||
3401,round goby,Freshwater small fish,Fresh Water,lake,Any,Any,Any,Common,8,0.1,0.6,2,3,1,,,,round gobies use fused pelvic fins like a suction cup to hold onto rocks. they are small fish with a famously large appetite.,active
|
||||
3501,crystal jelly,Jellies,Salt Water,ocean,Night,Any,Forbidden,Rare,0.24,0.05,4,15,34,0.93,,,,crystal jellies are nearly transparent except for glowing points around the bell. their green fluorescent protein transformed biological research.,inactive
|
||||
3502,lion's mane jelly,Jellies,Salt Water,ocean,Night,Any,Required,Epic,0.11,1,200,24,58,0.82,,,,lion's mane jellies trail dense curtains of tentacles through cold seas. the bell darkens from yellow to deep red as the animal grows.,inactive
|
||||
3503,moon jelly,Jellies,Salt Water,ocean,Night,Any,Any,Uncommon,0.7,0.05,5,6,14,0.94,,,,moon jellies pulse gently with four horseshoe-shaped organs visible through the bell. short tentacles sweep plankton toward the mouth.,inactive
|
||||
3504,Pacific sea nettle,Jellies,Salt Water,ocean,Day,Any,Forbidden,Rare,0.28,0.2,12,14,32,0.9,,,,pacific sea nettles carry rust-colored stripes across pale bells. long tentacles and frilled mouth arms capture plankton and small fish.,inactive
|
||||
3505,sea wasp,Jellies,Salt Water,ocean,Day,Required,Any,Legendary,0.035,0.2,6,42,90,0.9,,,,sea wasps have box-shaped bells and clusters of eyes along the lower edge. their long tentacles deliver exceptionally potent venom.,inactive
|
||||
3601,African pompano,Large coastal predators,Salt Water,ocean,Any,Any,Any,Rare,0.26,2,50,14,35,0.84,,,,african pompano develop long streaming fin rays while young. adults become deep-bodied silver hunters around reefs and offshore structure.,inactive
|
||||
3602,cobia,Large coastal predators,Salt Water,ocean,Day,Any,Any,Rare,0.24,5,80,15,40,0.82,,,,"cobia often follow sharks, rays, and floating structures in warm seas. a broad dark stripe runs along their long, powerful bodies.",inactive
|
||||
3603,giant trevally,Large coastal predators,Salt Water,ocean,Day,Any,Any,Epic,0.1,10,150,32,78,0.8,,,,giant trevally hunt reef edges with bursts of speed and force. large individuals sometimes charge prey from surf and shallow lagoons.,inactive
|
||||
3604,greater amberjack,Large coastal predators,Salt Water,ocean,Any,Any,Any,Rare,0.25,5,90,15,42,0.82,,,,"greater amberjacks circle reefs, wrecks, and offshore platforms. a dark stripe crosses the eye of their sturdy torpedo-shaped bodies.",inactive
|
||||
3605,lesser amberjack,Large coastal predators,Salt Water,ocean,Any,Any,Any,Uncommon,0.75,1,20,7,18,0.86,,,,lesser amberjacks school around deep reefs and floating objects. an enlarged eye suits their preference for dimmer water.,inactive
|
||||
3701,atlantic halibut,Large flatfish,Salt Water,ocean,Any,Any,Any,Epic,0.1,10,300,32,82,0.8,,,,atlantic halibut are immense right-eyed flatfish of cold northern seas. adults ambush fish and squid from deep rocky or sandy bottoms.,inactive
|
||||
3702,pacific halibut,Large flatfish,Salt Water,ocean,Any,Any,Any,Epic,0.1,10,350,34,86,0.8,,,,pacific halibut lie camouflaged on cold continental shelves. powerful flat bodies can travel long distances between feeding and spawning grounds.,inactive
|
||||
3703,turbot,Large flatfish,Salt Water,ocean,Any,Any,Required,Rare,0.24,1,35,14,34,0.85,,,,"turbot have broad, nearly circular bodies covered with bony bumps instead of scales. they bury into sand before ambushing fish and crustaceans.",inactive
|
||||
3801,American lobster,Lobsters and shrimp,Salt Water,ocean,Night,Any,Required,Rare,0.28,0.5,44,16,42,0.86,,,,american lobsters shelter in rocky crevices and emerge to forage along the bottom. one claw crushes while the other cuts and grips.,inactive
|
||||
3802,Antarctic krill,Lobsters and shrimp,Salt Water,ocean,Night,Any,Any,Rare,0.3,0.001,0.01,10,22,0.99,,,,"antarctic krill form enormous swarms beneath southern seas and ice. these small crustaceans feed whales, seals, penguins, and fish.",inactive
|
||||
3803,Caribbean spiny lobster,Lobsters and shrimp,Salt Water,ocean,Night,Any,Forbidden,Rare,0.25,0.5,26,15,38,0.87,,,,caribbean spiny lobsters rely on long antennae and a thorny shell instead of large claws. groups march together across the seafloor.,inactive
|
||||
3804,peacock mantis shrimp,Lobsters and shrimp,Salt Water,ocean,Day,Required,Any,Epic,0.1,0.05,0.4,22,50,0.96,,,,peacock mantis shrimp strike hard-shelled prey with club-like limbs. complex eyes move independently and detect colors beyond human vision.,inactive
|
||||
3805,skunk cleaner shrimp,Lobsters and shrimp,Salt Water,ocean,Day,Any,Forbidden,Uncommon,0.75,0.01,0.15,5,11,0.98,,,,skunk cleaner shrimp advertise at reef cleaning stations with bright white antennae. visiting fish pause while parasites are picked away.,inactive
|
||||
3901,Atlantic ghost crab,Marine crabs,Salt Water,ocean,Night,Any,Forbidden,Rare,0.28,0.02,0.5,11,24,0.97,,,,atlantic ghost crabs dash across beaches on long pale legs and retreat into deep burrows. raised eyes scan nearly every direction.,inactive
|
||||
3902,blue crab,Marine crabs,Salt Water,ocean,Day,Any,Any,Common,1.15,0.1,1.1,3,8,0.95,,,,"blue crabs swim with flattened rear legs shaped like paddles. bright blue claws and an olive shell conceal a quick, defensive temperament.",inactive
|
||||
3903,Dungeness crab,Marine crabs,Salt Water,ocean,Day,Any,Required,Uncommon,0.65,0.5,3,6,14,0.92,,,,dungeness crabs bury beneath sand with only their eyes and antennae exposed. broad toothed shells protect them along cool pacific coasts.,inactive
|
||||
3904,Japanese spider crab,Marine crabs,Salt Water,ocean,Night,Any,Any,Legendary,0.045,5,44,38,88,0.84,,,,japanese spider crabs carry the longest leg span of any living arthropod. adults roam deep seafloors around japan.,inactive
|
||||
3905,red king crab,Marine crabs,Salt Water,ocean,Night,Any,Required,Epic,0.11,2,24,24,58,0.85,,,,"red king crabs stride over cold northern bottoms on long armored legs. despite the name, they are closer to hermit crabs than true crabs.",inactive
|
||||
4001,american eel,Migratory eels,Fresh Water | Salt Water,river,Night,Required,Any,Rare,0.25,0.3,8,12,27,0.88,,,,american eels hatch far out in the sargasso sea before entering freshwater rivers. adults later reverse the journey to spawn once.,inactive
|
||||
4002,european eel,Migratory eels,Fresh Water | Salt Water,river,Night,Any,Required,Rare,0.2,0.3,10,13,30,0.88,,,,european eels cross the atlantic as transparent larvae before entering rivers and lakes. mature silver eels return to sea to reproduce.,inactive
|
||||
4101,rainbow smelt,Migratory forage fish,Fresh Water | Salt Water,lake,Night,Any,Any,Common,2.5,0.05,0.8,2,5,1,,,,"rainbow smelt move between coastal water and rivers, though some remain landlocked. cucumber-like aromas cling to freshly caught fish.",inactive
|
||||
4201,eulachon,Ocean-run forage fish,Fresh Water | Salt Water,river,Night,Required,Any,Uncommon,0.9,0.05,0.5,4,9,0.98,,,,eulachon return from the pacific to spawn in coastal rivers. their oil-rich bodies once served as candles when dried and fitted with wicks.,inactive
|
||||
4301,white sturgeon,Ocean-run giants,Fresh Water | Salt Water,river,Night,Any,Any,Legendary,0.045,20,500,58,135,0.78,,,,white sturgeon are the largest freshwater fish in north america. armored plates line bodies built for long lives in rivers and estuaries.,inactive
|
||||
4401,atlantic salmon,Ocean-run salmon,Salt Water,ocean,Any,Any,Any,Epic,0.65,8,40,20,42,0.85,,,,"atlantic salmon can return from the ocean to the river where they hatched. unlike many salmon, some survive to make the trip again.",active
|
||||
4402,chum salmon,Ocean-run salmon,Salt Water,ocean,Any,Any,Any,Uncommon,2.5,6,25,10,22,0.9,,,,chum salmon travel immense distances and develop striking bars when they return to fresh water to spawn.,active
|
||||
4403,coho salmon,Ocean-run salmon,Salt Water,ocean,Any,Any,Any,Rare,1.4,5,30,14,28,0.88,,,,coho salmon are agile hunters known for powerful leaps. young coho may spend more than a year growing in streams.,active
|
||||
4404,pink salmon,Ocean-run salmon,Salt Water,ocean,Any,Any,Any,Uncommon,3,3,12,8,15,0.92,,,,pink salmon usually follow a strict two-year life cycle. spawning males develop the hump that inspired their nickname.,active
|
||||
4405,sockeye salmon,Ocean-run salmon,Salt Water,ocean,Any,Any,Any,Rare,1.6,4,15,12,24,0.9,,,,sockeye salmon feed heavily on plankton at sea. adults turn vivid red as they return inland to spawn.,active
|
||||
4501,steelhead trout,Ocean-run salmonids,Fresh Water,river,Any,Any,Any,Rare,0.2,2,35,10,20,0.9,,,,steelhead are the ocean-going form of rainbow trout. adults can leave fresh water and later return to spawn.,active
|
||||
4601,black marlin,Oceanic billfish,Salt Water,ocean,Any,Any,Any,Epic,0.08,80,700,45,90,0.9,,,,black marlin are powerful billfish that spend much of their lives in warm open ocean and can make blistering runs.,active
|
||||
4602,blue marlin,Oceanic billfish,Salt Water,ocean,Any,Any,Any,Legendary,0.05,100,1000,60,120,0.9,,,,blue marlin are highly migratory open-ocean hunters. their long bill helps them stun prey before turning back to feed.,active
|
||||
4603,sailfish,Oceanic billfish,Salt Water,ocean,Any,Any,Any,Epic,0.1,30,200,38,78,0.9,,,,sailfish raise their enormous dorsal fin while herding baitfish. they are among the fastest fish in the sea.,active
|
||||
4604,swordfish,Oceanic billfish,Salt Water,ocean,Any,Any,Any,Legendary,0.06,50,1000,55,110,0.9,,,,"swordfish are fast, wide-ranging predators with a flattened bill. they can cross deep water and warm surface layers in one day.",active
|
||||
4605,white marlin,Oceanic billfish,Salt Water,ocean,Any,Any,Any,Epic,0.1,30,180,35,70,0.9,,,,white marlin favor warm offshore water and use their rounded dorsal fin and bill to weave through schools of prey.,active
|
||||
4701,mahi-mahi,Oceanic pelagic fish,Salt Water,ocean,Day,Any,Forbidden,Rare,0.28,2,50,15,38,0.84,,,,"mahi-mahi flash brilliant blue, green, and gold while chasing prey near the surface. they grow quickly and gather around floating objects.",inactive
|
||||
4702,opah,Oceanic pelagic fish,Salt Water,ocean,Day,Any,Forbidden,Epic,0.09,20,600,36,88,0.8,,,,"opah circulate warm blood through much of the body, an unusual trait among fish. round silver flanks glow with red fins and pale spots.",inactive
|
||||
4703,wahoo,Oceanic pelagic fish,Salt Water,ocean,Day,Any,Any,Epic,0.11,10,100,30,70,0.82,,,,wahoo are streamlined open-ocean hunters with rows of sharp teeth. blue vertical bars flicker across their sides during fast pursuits.,inactive
|
||||
4801,albacore tuna,Oceanic tuna,Salt Water,ocean,Any,Any,Any,Rare,1.5,10,45,12,24,0.85,,,,albacore have unusually long pectoral fins. their warm muscles help them cruise across wide stretches of open ocean.,active
|
||||
4802,bigeye tuna,Oceanic tuna,Salt Water,ocean,Any,Any,Any,Epic,0.55,20,120,22,48,0.8,,,,"bigeye tuna make daily trips between deep, cool water and warmer surface layers. their large eyes suit those dim depths.",active
|
||||
4803,bluefin tuna,Oceanic tuna,Salt Water,ocean,Any,Any,Any,Legendary,0.18,30,250,35,90,0.78,,,,bluefin tuna are powerful ocean travelers. heat retained in their swimming muscles lets them thrive in surprisingly cold seas.,active
|
||||
4804,skipjack tuna,Oceanic tuna,Salt Water,ocean,Any,Any,Any,Uncommon,3,5,25,8,16,0.9,,,,skipjack travel in fast-moving schools and have dark stripes along their lower sides. they rarely stop swimming.,active
|
||||
4805,yellowfin tuna,Oceanic tuna,Salt Water,ocean,Any,Any,Any,Rare,1,15,80,16,36,0.82,,,,yellowfin are named for their bright yellow fins and finlets. large schools often gather with other open-ocean hunters.,active
|
||||
4901,common octopus,Octopuses,Salt Water,ocean,Night,Any,Any,Uncommon,0.65,0.2,22,7,18,0.87,,,,common octopuses squeeze through narrow cracks and solve problems while hunting reefs. skin cells rapidly change color and texture.,inactive
|
||||
4902,day octopus,Octopuses,Salt Water,ocean,Day,Any,Forbidden,Rare,0.24,0.2,15,15,36,0.88,,,,"day octopuses forage across tropical reefs while the sun is high. shifting bars and spots communicate alarm, camouflage, and threat.",inactive
|
||||
4903,giant Pacific octopus,Octopuses,Salt Water,ocean,Night,Any,Required,Epic,0.1,5,200,28,70,0.81,,,,giant pacific octopuses explore cold rocky dens with thousands of arm suckers. females guard their eggs without feeding until they hatch.,inactive
|
||||
4904,greater blue-ringed octopus,Octopuses,Salt Water,ocean,Day,Required,Any,Legendary,0.04,0.05,0.3,38,82,0.96,,,,greater blue-ringed octopuses reveal vivid rings when threatened. a tiny beak can deliver venom strong enough to stop breathing.,inactive
|
||||
5001,sunfish,Open-ocean giants,Salt Water,ocean,Day,Any,Any,Common,7,0.4,2.5,3,3,1,,,,ocean sunfish are built more like enormous swimming heads than ordinary fish. they visit the surface and turn sideways to warm up.,active
|
||||
5101,barndoor skate,Rays and skates,Salt Water,ocean,Any,Any,Required,Epic,0.1,5,150,28,68,0.8,,,,barndoor skates glide over cold atlantic bottoms with broad wing-like fins. rows of thorny spines protect the back and tail.,inactive
|
||||
5102,giant manta ray,Rays and skates,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.025,100,1000,65,150,0.76,,,,giant manta rays funnel plankton into wide mouths with two flexible head fins. each belly carries a unique pattern of dark spots.,inactive
|
||||
5103,largetooth sawfish,Rays and skates,Salt Water,ocean,Night,Required,Any,Legendary,0.035,25,1300,58,135,0.78,,,,largetooth sawfish detect hidden prey with a long sensory rostrum. a swift sideways sweep stuns fish and exposes animals buried in mud.,inactive
|
||||
5104,ocellate river stingray,Rays and skates,Fresh Water,river,Day,Required,Any,Epic,0.09,2,35,28,65,0.82,,,,ocellate river stingrays carry bright eye-like spots across a round disc. they hide beneath sand in south american rivers.,inactive
|
||||
5105,southern stingray,Rays and skates,Salt Water,ocean,Day,Any,Any,Rare,0.23,2,80,15,40,0.82,,,,southern stingrays bury in warm sand with only their eyes and spiracles visible. crushing plates break open clams and crustaceans.,inactive
|
||||
5201,red lionfish,Reef ambush fish,Salt Water,ocean,Night,Any,Any,Rare,0.3,0.2,3,11,25,0.92,,,,red lionfish spread ornate venomous spines when threatened. broad fins herd smaller fish into corners before a rapid gulp.,inactive
|
||||
5202,red scorpionfish,Reef ambush fish,Salt Water,ocean,Night,Any,Any,Rare,0.3,0.2,7,11,25,0.9,,,,red scorpionfish vanish against rocky reefs through mottled color and skin flaps. venomous dorsal spines punish careless predators.,inactive
|
||||
5301,green moray,Reef eels,Salt Water,ocean,Night,Any,Any,Rare,0.28,1,30,13,32,0.86,,,,green morays appear green because yellow mucus coats blue-gray skin. a second set of jaws pulls captured prey deeper into the throat.,inactive
|
||||
5401,peacock flounder,Reef flatfish,Salt Water,ocean,Day,Any,Any,Rare,0.3,0.2,5,11,24,0.9,,,,peacock flounders change their spots and colors to match tropical sand. both eyes scan above while the flat body remains concealed.,inactive
|
||||
5501,blue tang,Reef grazers,Salt Water,ocean,Day,Any,Any,Uncommon,0.9,0.05,1.5,5,11,0.95,,,,blue tangs graze algae from coral reefs with small close-set teeth. sharp folding spines near the tail give surgeonfish their name.,inactive
|
||||
5502,rainbow parrotfish,Reef grazers,Salt Water,ocean,Day,Any,Any,Epic,0.12,2,40,25,58,0.84,,,,rainbow parrotfish scrape algae from reefs with fused beak-like teeth. crushed coral passes through them and returns to the reef as sand.,inactive
|
||||
5503,stoplight parrotfish,Reef grazers,Salt Water,ocean,Day,Any,Any,Rare,0.28,0.5,15,12,29,0.88,,,,stoplight parrotfish change color dramatically as they mature. powerful dental plates bite algae from hard reef surfaces.,inactive
|
||||
5504,yellow tang,Reef grazers,Salt Water,ocean,Day,Forbidden,Any,Rare,0.35,0.05,0.8,9,20,0.96,,,,yellow tangs browse algae across hawaiian reefs during daylight. at night their bright bodies darken and show a pale horizontal stripe.,inactive
|
||||
5601,atlantic trumpetfish,Reef oddities,Salt Water,ocean,Day,Any,Any,Rare,0.3,0.1,2,10,24,0.94,,,,atlantic trumpetfish hover head-down among corals and sea fans. long tubular snouts expand suddenly to draw in small fish.,inactive
|
||||
5602,gray triggerfish,Reef oddities,Salt Water,ocean,Day,Any,Any,Uncommon,0.8,0.3,12,7,17,0.88,,,,"gray triggerfish lock a stout dorsal spine upright when wedged into shelter. strong teeth crack barnacles, crabs, and shellfish.",inactive
|
||||
5603,guineafowl puffer,Reef oddities,Salt Water,ocean,Day,Any,Any,Rare,0.3,0.2,5,11,26,0.9,,,,guineafowl puffers swallow water to inflate when threatened. adults may shift from a spotted dark pattern to a vivid yellow form.,inactive
|
||||
5604,longhorn cowfish,Reef oddities,Salt Water,ocean,Day,Any,Required,Epic,0.13,0.1,2,23,52,0.94,,,,longhorn cowfish wear a rigid box of fused scales with horns above the eyes. small fins steer the angular body with surprising precision.,inactive
|
||||
5605,queen triggerfish,Reef oddities,Salt Water,ocean,Day,Any,Forbidden,Rare,0.25,0.5,15,14,32,0.88,,,,queen triggerfish blow jets of water to uncover buried prey and flip sea urchins. vivid blue lines radiate across the face.,inactive
|
||||
5606,red cornetfish,Reef oddities,Salt Water,ocean,Day,Any,Required,Epic,0.11,0.2,4,24,55,0.92,,,,red cornetfish stalk reefs with extremely long bodies and tubular snouts. a trailing filament extends from the center of the tail.,inactive
|
||||
5607,spotted porcupinefish,Reef oddities,Salt Water,ocean,Night,Any,Required,Epic,0.12,0.5,7,24,54,0.9,,,,spotted porcupinefish inflate until long spines stand outward. fused teeth form a strong beak for crushing shelled prey.,inactive
|
||||
5608,yellow boxfish,Reef oddities,Salt Water,ocean,Day,Any,Any,Rare,0.32,0.03,0.8,10,22,0.96,,,,yellow boxfish juveniles are bright cubes covered in black spots. rigid body armor leaves small fins to provide careful steering.,inactive
|
||||
5701,copperband butterflyfish,Reef ornamentals,Salt Water,ocean,Day,Any,Forbidden,Rare,0.32,0.03,0.4,9,21,0.98,,,,copperband butterflyfish probe reef cracks with long narrow snouts. bold orange bands and a false eyespot confuse predators.,inactive
|
||||
5702,ocellaris clownfish,Reef ornamentals,Salt Water,ocean,Day,Any,Any,Uncommon,1,0.01,0.15,5,10,1,,,,ocellaris clownfish shelter safely among stinging anemone tentacles. each group is led by a female that develops from the largest male.,inactive
|
||||
5703,queen angelfish,Reef ornamentals,Salt Water,ocean,Day,Any,Any,Rare,0.3,0.1,2,11,25,0.94,,,,queen angelfish graze sponges from warm atlantic reefs. a blue-ringed spot on the forehead resembles a tiny crown.,inactive
|
||||
5801,Atlantic goliath grouper,Reef predators,Salt Water,ocean,Any,Any,Required,Legendary,0.05,20,800,50,125,0.78,,,,"atlantic goliath groupers occupy reefs, wrecks, and mangrove roots. enormous mouths pull prey inward with a sudden pressure drop.",inactive
|
||||
5802,bluefin trevally,Reef predators,Salt Water,ocean,Day,Any,Forbidden,Rare,0.3,1,25,14,32,0.86,,,,bluefin trevally hunt reef fish in coordinated groups. electric blue fins and scattered blue spots contrast with a golden body.,inactive
|
||||
5803,giant grouper,Reef predators,Salt Water,ocean,Any,Any,Required,Legendary,0.045,20,880,52,128,0.78,,,,giant groupers become massive ambush predators around indo-pacific reefs. juveniles carry bold black-and-yellow markings.,inactive
|
||||
5804,great barracuda,Reef predators,Salt Water,ocean,Day,Any,Required,Epic,0.12,5,80,28,65,0.82,,,,great barracudas hover motionless before accelerating toward prey. long jaws carry two distinct rows of sharp teeth.,inactive
|
||||
5805,gulf grouper,Reef predators,Salt Water,ocean,Any,Any,Any,Uncommon,0.3,2,40,10,24,0.9,,,,gulf grouper are ambush predators that use a sudden gulp to pull prey into their cavernous mouths.,active
|
||||
5806,Nassau grouper,Reef predators,Salt Water,ocean,Any,Any,Forbidden,Epic,0.12,2,55,25,62,0.82,,,,nassau groupers shift their bars and colors with mood and surroundings. adults gather at traditional reef sites to spawn.,inactive
|
||||
5807,red grouper,Reef predators,Salt Water,ocean,Any,Any,Any,Rare,0.2,2,30,16,36,0.9,,,,red grouper excavate shelters in reef rubble. the hollows they make can become hiding places for many smaller animals.,active
|
||||
5901,blue-green chromis,Reef schooling fish,Salt Water,ocean,Day,Any,Any,Common,2.8,0.01,0.25,2,4,1,,,,blue-green chromis form loose clouds above branching coral. the school dives into narrow shelter whenever a predator approaches.,inactive
|
||||
5902,bluestriped grunt,Reef schooling fish,Salt Water,ocean,Day,Any,Any,Common,2,0.1,3,3,7,0.94,,,,bluestriped grunts shelter on reefs by day and spread over seagrass to feed at night. grinding throat teeth produce audible grunts.,inactive
|
||||
5903,French grunt,Reef schooling fish,Salt Water,ocean,Day,Any,Any,Common,2,0.1,3.5,3,7,0.94,,,,french grunts gather in yellow-striped schools around reefs and wrecks. they travel into nearby sand and grass beds after dark.,inactive
|
||||
5904,sergeant major,Reef schooling fish,Salt Water,ocean,Day,Any,Any,Common,2.5,0.02,0.5,2,5,0.98,,,,sergeant majors guard purple egg patches on hard reef surfaces. five dark bars cross their yellow and silver bodies.,inactive
|
||||
6001,lane snapper,Reef snapper,Salt Water,ocean,Any,Any,Any,Common,0.45,0.5,5,5,11,0.9,,,,lane snapper use reef structure for cover and hunt small crustaceans and fish when the light begins to fade.,active
|
||||
6002,mangrove snapper,Reef snapper,Salt Water,ocean,Any,Any,Any,Uncommon,0.35,0.5,12,7,16,0.9,,,,"mangrove snapper shelter among roots and docks when young, then move toward reefs as they grow.",active
|
||||
6003,mutton snapper,Reef snapper,Salt Water,ocean,Any,Any,Any,Rare,0.2,2,30,12,28,0.9,,,,"mutton snapper have canine teeth that help them pick crabs, shrimp, and other hard-shelled prey from the reef.",active
|
||||
6004,red snapper,Reef snapper,Salt Water,ocean,Any,Any,Any,Uncommon,0.35,1,25,8,19,0.9,,,,"red snapper gather around reefs, wrecks, and ledges. their diet includes small fish, shrimp, and squid.",active
|
||||
6101,ballan wrasse,Reef wrasses,Salt Water,ocean,Day,Any,Any,Uncommon,0.8,0.2,10,6,15,0.9,,,,ballan wrasse crush shellfish and sea urchins with strong throat teeth. thick lips and mottled colors suit rocky european reefs.,inactive
|
||||
6102,cleaner wrasse,Reef wrasses,Salt Water,ocean,Day,Any,Forbidden,Rare,0.35,0.01,0.2,9,20,1,,,,cleaner wrasses advertise with a bright stripe and dance at reef stations. larger fish wait while parasites are picked from skin and gills.,inactive
|
||||
6103,hogfish,Reef wrasses,Salt Water,ocean,Day,Any,Any,Rare,0.3,0.5,20,12,30,0.86,,,,hogfish root through sand with long pig-like snouts in search of shellfish. adults can change from female to male as social groups shift.,inactive
|
||||
6201,green sea turtle,Sea turtles,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.018,65,500,62,145,0.78,,,,green sea turtles graze seagrass meadows with finely serrated jaws. adults migrate long distances between feeding and nesting grounds.,inactive
|
||||
6202,hawksbill sea turtle,Sea turtles,Salt Water,ocean,Day,Required,Any,Legendary,0.014,75,250,66,150,0.8,,,,hawksbill sea turtles reach into reef crevices with narrow hooked beaks. a diet rich in sponges helps shape coral communities.,inactive
|
||||
6203,leatherback sea turtle,Sea turtles,Salt Water,ocean,Night,Any,Required,Legendary,0.012,500,2000,75,175,0.76,,,,leatherback sea turtles cross entire oceans while hunting jellies. a flexible ridged shell and internal heat help them enter cold water.,inactive
|
||||
6204,loggerhead sea turtle,Sea turtles,Salt Water,ocean,Day,Any,Any,Legendary,0.016,150,1200,68,155,0.77,,,,loggerhead sea turtles crush crabs and mollusks with massive jaws. females often return near their birth beaches to nest.,inactive
|
||||
6301,leafy seadragon,Seahorses and seadragons,Salt Water,ocean,Day,Any,Forbidden,Epic,0.1,0.1,0.5,24,55,0.94,,,,leafy seadragons drift among seaweed with elaborate skin lobes that resemble leaves. males carry eggs beneath the tail.,inactive
|
||||
6302,weedy seadragon,Seahorses and seadragons,Salt Water,ocean,Day,Any,Required,Rare,0.22,0.1,0.6,16,38,0.93,,,,weedy seadragons rely on slender bodies and small leaf-like lobes for camouflage. males brood rows of eggs on the underside of the tail.,inactive
|
||||
6401,black-lip pearl oyster,Shellfish,Salt Water,ocean,Day,Any,Any,Rare,0.22,0.1,5,14,40,0.91,,,,black-lip pearl oysters line their shells with dark-edged nacre. a trapped irritant can become coated in the same pearly material.,inactive
|
||||
6402,giant clam,Shellfish,Salt Water,ocean,Day,Any,Forbidden,Epic,0.1,5,500,28,72,0.8,,,,giant clams host photosynthetic algae inside brightly colored mantles. heavy shells remain anchored to one reef spot throughout adulthood.,inactive
|
||||
6403,Pacific geoduck,Shellfish,Salt Water,ocean,Day,Any,Required,Rare,0.25,0.5,15,14,34,0.88,,,,pacific geoducks bury their shells deep while a long siphon reaches the seafloor. these clams can survive for well over a century.,inactive
|
||||
6404,queen conch,Shellfish,Salt Water,ocean,Day,Any,Forbidden,Rare,0.24,1,5,15,36,0.91,,,,queen conchs graze algae with a long flexible snout. adults develop a broad flared shell lip and move by vaulting on one muscular foot.,inactive
|
||||
6405,red abalone,Shellfish,Salt Water,ocean,Day,Any,Required,Epic,0.09,0.2,12,24,56,0.88,,,,red abalones cling to pacific rocks with broad muscular feet. rows of shell holes release water that has passed over the gills.,inactive
|
||||
6501,bigfin reef squid,Squid,Salt Water,ocean,Day,Any,Forbidden,Rare,0.3,0.2,5,13,30,0.91,,,,bigfin reef squid hover in coordinated groups around warm reefs. shifting colors and body patterns signal to nearby squid.,inactive
|
||||
6502,colossal squid,Squid,Salt Water,ocean,Night,Required,Any,Legendary,0.015,400,1100,82,190,0.76,,,,colossal squid carry swiveling hooks on their arms and tentacles. enormous eyes gather faint light in the deep southern ocean.,inactive
|
||||
6503,giant squid,Squid,Salt Water,ocean,Night,Any,Required,Legendary,0.02,100,600,70,165,0.77,,,,giant squid hunt deep ocean prey with two long feeding tentacles. the largest eyes in the animal world watch for movement in darkness.,inactive
|
||||
6504,Humboldt squid,Squid,Salt Water,ocean,Night,Any,Any,Epic,0.09,5,110,26,64,0.82,,,,humboldt squid flash red and white while hunting in large groups. powerful beaks and grasping suckers handle fish and other squid.,inactive
|
||||
6601,ballyhoo,Surface ocean fish,Salt Water,ocean,Day,Any,Any,Common,2.5,0.05,1,2,5,0.98,,,,ballyhoo skim warm ocean surfaces with an extended lower jaw. tight schools scatter into quick leaps when predators strike.,inactive
|
||||
6602,houndfish,Surface ocean fish,Salt Water,ocean,Day,Any,Any,Rare,0.3,0.5,10,11,25,0.88,,,,houndfish hunt near the surface with long jaws filled with fine teeth. powerful leaps can carry their narrow bodies far above the water.,inactive
|
||||
6603,tropical flyingfish,Surface ocean fish,Salt Water,ocean,Day,Forbidden,Any,Rare,0.35,0.05,1.5,10,22,0.94,,,,tropical flyingfish accelerate underwater before spreading enlarged fins above the surface. glides help them escape pursuing predators.,inactive
|
||||
6701,striped bass,Temperate coastal,Salt Water,ocean,Any,Any,Any,Uncommon,4,1.5,8,7,7,0.9,,,,"striped bass split their lives between salt and fresh water, returning upriver to spawn. a long-lived striper may see three decades.",active
|
||||
6801,atlantic croaker,Temperate estuary,Salt Water,ocean,Night,Required,Any,Common,2.1,0.1,5,3,8,0.92,,,,atlantic croakers vibrate muscles against the swim bladder to make a croaking sound. chin barbels locate worms in sandy bays.,inactive
|
||||
6802,black drum,Temperate estuary,Salt Water,ocean,Night,Any,Any,Uncommon,0.7,1,70,8,27,0.82,,,,black drum crush oysters and crabs with rounded throat teeth. large adults develop dark vertical bars that fade with age.,inactive
|
||||
6803,red drum,Temperate estuary,Salt Water,ocean,Any,Required,Any,Uncommon,0.75,1,45,8,23,0.84,,,,red drum use powerful tails to patrol surf and estuaries. one or more black spots near the tail may confuse predators about which end is the head.,inactive
|
||||
6804,striped mullet,Temperate estuary,Fresh Water | Salt Water,ocean,Day,Any,Any,Common,2.5,0.3,8,3,8,0.92,,,,striped mullet leap clear of the water and travel in coastal schools. they graze algae and detritus with specialized digestive systems.,inactive
|
||||
6805,weakfish,Temperate estuary,Salt Water,ocean,Night,Any,Required,Rare,0.32,0.5,18,12,29,0.86,,,,weakfish are named for delicate mouth tissue that tears easily around a hook. iridescent spots scatter across their bronze backs.,inactive
|
||||
6806,white perch,Temperate estuary,Fresh Water | Salt Water,river,Any,Any,Any,Uncommon,1.1,0.2,3.5,5,11,0.9,,,,white perch tolerate fresh and brackish water along the atlantic coast. deep silver bodies gather in schools around river mouths.,inactive
|
||||
6807,yellowfin croaker,Temperate estuary,Salt Water,ocean,Any,Any,Any,Common,2,0.1,4,3,8,0.92,,,,yellowfin croakers search sandy surf zones with a small chin barbel. internal muscles produce croaks and drumming calls.,inactive
|
||||
6901,black rockfish,Temperate reef fish,Salt Water,ocean,Any,Any,Any,Common,1.7,0.3,10,4,11,0.9,,,,"black rockfish gather above reefs and kelp along the north pacific coast. like other rockfish, they give birth to live young.",inactive
|
||||
6902,black sea bass,Temperate reef fish,Salt Water,ocean,Day,Any,Any,Common,1.7,0.3,8,4,10,0.9,,,,"black sea bass shelter around reefs, piers, and wrecks. many begin life as female and later become male.",inactive
|
||||
6903,canary rockfish,Temperate reef fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.7,0.5,12,7,17,0.88,,,,canary rockfish glow orange-yellow over deep pacific reefs. these long-lived fish mature slowly and give birth to live young.,inactive
|
||||
6904,scup,Temperate reef fish,Salt Water,ocean,Day,Any,Any,Common,2.2,0.1,5,3,8,0.92,,,,"scup use small strong teeth to crush shellfish and other bottom prey. deep silver bodies gather around piers, reefs, and eelgrass.",inactive
|
||||
6905,sheepshead,Temperate reef fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.75,0.5,20,7,18,0.86,,,,sheepshead carry flat human-like front teeth for biting barnacles and crabs. dark bars cross their high silver bodies.,inactive
|
||||
6906,tautog,Temperate reef fish,Salt Water,ocean,Day,Any,Any,Uncommon,0.8,0.5,20,7,18,0.86,,,,tautog pry mussels and crabs from rocky structure with thick lips and strong teeth. adults return to familiar shelters year after year.,inactive
|
||||
6907,yelloweye rockfish,Temperate reef fish,Salt Water,ocean,Any,Any,Required,Epic,0.09,2,35,28,64,0.84,,,,yelloweye rockfish can live for more than a century on deep pacific reefs. bright golden eyes stand out against orange-red bodies.,inactive
|
||||
7001,lingcod,Temperate reef predators,Salt Water,ocean,Any,Any,Any,Rare,0.25,2,60,14,38,0.83,,,,"lingcod guard rocky dens and ambush fish with a huge tooth-lined mouth. despite the name, they are greenling relatives rather than cod.",inactive
|
||||
7101,milkfish,Tropical coastal fish,Salt Water,ocean,Day,Any,Any,Common,1.8,0.5,25,4,12,0.88,,,,milkfish graze algae and tiny organisms in warm coastal shallows. deeply forked tails drive large schools through lagoons and estuaries.,inactive
|
||||
7201,roosterfish,Tropical coastal predators,Salt Water,ocean,Day,Any,Any,Epic,0.11,5,100,30,70,0.82,,,,roosterfish raise seven long dorsal spines while chasing prey through tropical surf. dark bands cross their sleek silver bodies.,inactive
|
||||
7301,atlantic tarpon,Tropical estuary,Fresh Water | Salt Water,ocean,Any,Required,Any,Epic,0.09,10,180,34,82,0.8,,,,atlantic tarpon gulp air with a lung-like swim bladder when coastal water runs low on oxygen. giant silver scales flash during leaps.,inactive
|
||||
7302,barramundi,Tropical estuary,Fresh Water | Salt Water,river,Night,Required,Any,Rare,0.24,2,45,15,38,0.84,,,,barramundi move between rivers and coasts and can breathe in low-oxygen water. many mature first as males and later become females.,inactive
|
||||
7303,common snook,Tropical estuary,Salt Water,ocean,Night,Required,Any,Rare,0.3,1,30,13,32,0.85,,,,common snook wait around mangrove roots and current seams to ambush prey. a bold black lateral line divides their silver flanks.,inactive
|
||||
7401,bonefish,Tropical flats fish,Salt Water,ocean,Day,Any,Forbidden,Rare,0.25,0.5,15,13,31,0.86,,,,bonefish sweep tropical flats in silvery schools and root for buried prey. their speed and pale bodies make them difficult to follow in shallow water.,inactive
|
||||
7402,Florida pompano,Tropical flats fish,Salt Water,ocean,Day,Any,Forbidden,Uncommon,0.85,0.5,9,7,16,0.88,,,,"florida pompano search warm surf for crabs, clams, and sand fleas. short blunt snouts lead into deep, silvery bodies.",inactive
|
||||
7403,ladyfish,Tropical flats fish,Salt Water,ocean,Day,Required,Any,Common,1.7,0.2,8,4,10,0.9,,,,ladyfish race through warm shallows after schooling prey and often leap when pursued. a deeply forked tail powers their slender bodies.,inactive
|
||||
7404,permit,Tropical flats fish,Salt Water,ocean,Day,Forbidden,Any,Epic,0.11,3,50,27,62,0.84,,,,permit browse tropical flats for crabs and shellfish with rubbery mouths. tall silver bodies carry long sickle-shaped dorsal and anal fins.,inactive
|
||||
7501,clown knifefish,Tropical freshwater fish,Fresh Water,river,Night,Any,Required,Rare,0.25,1,25,16,38,0.86,,,,clown knifefish undulate one long belly fin to glide forward or backward. dark eye-like spots line their silver nocturnal bodies.,inactive
|
||||
7502,clown loach,Tropical freshwater fish,Fresh Water,river,Day,Required,Any,Rare,0.32,0.1,2,10,22,0.9,,,,clown loaches rest in groups and make clicking sounds while feeding. orange bodies carry three broad black bands and small eye spines.,inactive
|
||||
7503,discus,Tropical freshwater fish,Fresh Water,river,Day,Any,Required,Epic,0.12,0.1,1,24,52,0.92,,,,"discus move through quiet amazon backwaters with round, flattened bodies. parents feed newly hatched young with nutrient-rich skin mucus.",inactive
|
||||
7504,freshwater angelfish,Tropical freshwater fish,Fresh Water,river,Day,Any,Any,Rare,0.3,0.05,0.5,10,22,0.95,,,,freshwater angelfish slip between tall plants on narrow triangular bodies. long fins and vertical bars resemble stems and shadows.,inactive
|
||||
7505,giant gourami,Tropical freshwater fish,Fresh Water,lake,Day,Any,Any,Rare,0.25,2,20,13,31,0.86,,,,giant gouramis breathe surface air through a specialized labyrinth organ. adults graze plants but also investigate insects and small animals.,inactive
|
||||
7506,Nile tilapia,Tropical freshwater fish,Fresh Water,lake,Day,Any,Any,Common,2.2,0.3,8,3,9,0.9,,,,nile tilapia thrive in warm lakes and rivers on a varied diet. females protect eggs and young inside their mouths.,inactive
|
||||
7507,oscar,Tropical freshwater fish,Fresh Water,river,Day,Any,Any,Uncommon,0.8,0.3,4,6,14,0.9,,,,oscars are large south american cichlids that recognize routines and defend territories. a tail eyespot may redirect attacks away from the head.,inactive
|
||||
7508,Siamese fighting fish,Tropical freshwater fish,Fresh Water,pond,Day,Required,Any,Uncommon,1,0.01,0.15,5,10,1,,,,siamese fighting fish breathe surface air with a labyrinth organ. males build bubble nests and guard the eggs beneath them.,inactive
|
||||
7509,tambaqui,Tropical freshwater fish,Fresh Water,river,Day,Required,Any,Epic,0.1,8,80,30,68,0.82,,,,tambaqui follow seasonal floods into forests to feed on fruit and seeds. strong square teeth crack tough plant material.,inactive
|
||||
7510,walking catfish,Tropical freshwater fish,Fresh Water,pond,Night,Required,Any,Rare,0.3,0.5,5,11,24,0.9,,,,walking catfish wriggle across wet ground using stiff pectoral spines for support. an air-breathing organ helps them survive the journey.,inactive
|
||||
7601,giant snakehead,Tropical freshwater predators,Fresh Water,river,Night,Any,Required,Epic,0.1,3,45,28,64,0.84,,,,giant snakeheads breathe air and guard schools of young near the surface. long bodies launch sudden attacks from flooded vegetation.,inactive
|
||||
7602,golden dorado,Tropical freshwater predators,Fresh Water,river,Day,Required,Any,Epic,0.1,5,55,29,66,0.82,,,,"golden dorado chase fish through powerful south american rivers. muscular tails, heavy jaws, and golden scales suit life in fast current.",inactive
|
||||
7603,golden mahseer,Tropical freshwater predators,Fresh Water,river,Day,Required,Any,Epic,0.09,8,90,32,72,0.82,,,,golden mahseer migrate through swift mountain rivers to reach spawning grounds. large scales shine bronze beneath reddish fins.,inactive
|
||||
7604,peacock bass,Tropical freshwater predators,Fresh Water,river,Day,Any,Any,Rare,0.25,1,25,15,36,0.84,,,,peacock bass are aggressive south american cichlids rather than true bass. adults guard nests and hunt fish in warm clear water.,inactive
|
||||
7605,red-bellied piranha,Tropical freshwater predators,Fresh Water,river,Any,Required,Any,Rare,0.3,0.2,4,12,27,0.9,,,,"red-bellied piranhas communicate with barks and drum-like sounds. schools provide protection as they search for fish, insects, and carrion.",inactive
|
||||
7606,silver arowana,Tropical freshwater predators,Fresh Water,river,Day,Any,Required,Epic,0.11,1,15,25,56,0.86,,,,silver arowanas patrol the surface with upturned mouths and long bodies. powerful jumps capture insects and small animals above the water.,inactive
|
||||
7701,blue whale,Whales and dolphins,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.005,100000,330000,120,300,0.72,,,,blue whales are the largest animals known to have lived. pleated throats expand around vast mouthfuls of water that baleen filters for krill.,inactive
|
||||
7702,common bottlenose dolphin,Whales and dolphins,Salt Water,ocean,Day,Any,Forbidden,Legendary,0.012,330,1400,75,180,0.76,,,,"common bottlenose dolphins coordinate with whistles, clicks, and body signals. echolocation reveals prey hidden in dark or cloudy water.",inactive
|
||||
7703,humpback whale,Whales and dolphins,Salt Water,ocean,Day,Any,Required,Legendary,0.008,40000,90000,105,260,0.73,,,,humpback whales use long pectoral fins while turning and feeding. males produce layered songs that change across breeding seasons.,inactive
|
||||
7704,killer whale,Whales and dolphins,Salt Water,ocean,Day,Required,Any,Legendary,0.008,3000,12000,95,230,0.74,,,,killer whales live in close family groups with distinct calls and hunting traditions. different populations specialize in different prey.,inactive
|
||||
7705,sperm whale,Whales and dolphins,Salt Water,ocean,Night,Any,Required,Legendary,0.006,15000,125000,115,280,0.72,,,,sperm whales make deep dives to hunt squid with powerful echolocation clicks. their enormous square heads contain a waxy spermaceti organ.,inactive
|
||||
|
314
docs/design/fish_catalog_proposal_final.csv
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
catalog_number,id,implementation_status,active_status,art_status,fish_resource_path,display_texture_path,catch_profile_id
|
||||
101,bowfin,implemented,inactive,missing icon,res://fish/species/bowfin/bowfin.tres,,common
|
||||
102,sturgeon_lake,implemented,inactive,missing icon,res://fish/species/sturgeon_lake/sturgeon_lake.tres,,common
|
||||
103,gar_longnose,implemented,inactive,missing icon,res://fish/species/gar_longnose/gar_longnose.tres,,common
|
||||
104,paddlefish,implemented,inactive,missing icon,res://fish/species/paddlefish/paddlefish.tres,,common
|
||||
105,sturgeon_shovelnose,implemented,inactive,missing icon,res://fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres,,common
|
||||
106,gar_spotted,implemented,inactive,missing icon,res://fish/species/gar_spotted/gar_spotted.tres,,common
|
||||
107,lungfish_west_african,implemented,inactive,missing icon,res://fish/species/lungfish_west_african/lungfish_west_african.tres,,common
|
||||
201,mudskipper_atlantic,implemented,inactive,missing icon,res://fish/species/mudskipper_atlantic/mudskipper_atlantic.tres,,common
|
||||
202,foureyes_largescale,implemented,inactive,missing icon,res://fish/species/foureyes_largescale/foureyes_largescale.tres,,common
|
||||
301,mullet_red,implemented,inactive,missing icon,res://fish/species/mullet_red/mullet_red.tres,,common
|
||||
401,plaice_european,implemented,inactive,missing icon,res://fish/species/plaice_european/plaice_european.tres,,common
|
||||
402,flounder_summer,implemented,inactive,missing icon,res://fish/species/flounder_summer/flounder_summer.tres,,common
|
||||
403,flounder_winter,implemented,inactive,missing icon,res://fish/species/flounder_winter/flounder_winter.tres,,common
|
||||
501,dugong,implemented,inactive,missing icon,res://fish/species/dugong/dugong.tres,,common
|
||||
502,seal_harbor,implemented,inactive,missing icon,res://fish/species/seal_harbor/seal_harbor.tres,,common
|
||||
503,sea_otter,implemented,inactive,missing icon,res://fish/species/sea_otter/sea_otter.tres,,common
|
||||
504,walrus,implemented,inactive,missing icon,res://fish/species/walrus/walrus.tres,,common
|
||||
505,manatee_west_indian,implemented,inactive,missing icon,res://fish/species/manatee_west_indian/manatee_west_indian.tres,,common
|
||||
601,pipefish_bay,implemented,inactive,missing icon,res://fish/species/pipefish_bay/pipefish_bay.tres,,common
|
||||
602,seahorse_lined,implemented,inactive,missing icon,res://fish/species/seahorse_lined/seahorse_lined.tres,,common
|
||||
603,monkfish,implemented,inactive,missing icon,res://fish/species/monkfish/monkfish.tres,,common
|
||||
604,tripletail,implemented,inactive,missing icon,res://fish/species/tripletail/tripletail.tres,,common
|
||||
701,mackerel_atlantic,implemented,active,complete,res://fish/species/mackerel_atlantic/mackerel_atlantic.tres,res://fish/species/mackerel_atlantic/fish_mackerel_atlantic.png,common
|
||||
702,bluefish,implemented,inactive,missing icon,res://fish/species/bluefish/bluefish.tres,,common
|
||||
703,mackerel_cero,implemented,active,complete,res://fish/species/mackerel_cero/mackerel_cero.tres,res://fish/species/mackerel_cero/fish_mackerel_cero.png,common
|
||||
704,mackerel_chub,implemented,active,complete,res://fish/species/mackerel_chub/mackerel_chub.tres,res://fish/species/mackerel_chub/fish_mackerel_chub.png,common
|
||||
705,jack_crevalle,implemented,inactive,missing icon,res://fish/species/jack_crevalle/jack_crevalle.tres,,common
|
||||
706,mackerel_king,implemented,active,complete,res://fish/species/mackerel_king/mackerel_king.tres,res://fish/species/mackerel_king/fish_mackerel_king.png,common
|
||||
707,mackerel_spanish,implemented,active,complete,res://fish/species/mackerel_spanish/mackerel_spanish.tres,res://fish/species/mackerel_spanish/fish_mackerel_spanish.png,common
|
||||
708,queenfish_talang,implemented,inactive,missing icon,res://fish/species/queenfish_talang/queenfish_talang.tres,,common
|
||||
801,sand_lance_american,implemented,inactive,missing icon,res://fish/species/sand_lance_american/sand_lance_american.tres,,common
|
||||
802,menhaden_atlantic,implemented,inactive,missing icon,res://fish/species/menhaden_atlantic/menhaden_atlantic.tres,,common
|
||||
803,pomfret_black,implemented,active,complete,res://fish/species/pomfret_black/pomfret_black.tres,res://fish/species/pomfret_black/fish_pomfret_black.png,common
|
||||
804,pomfret_chinese,implemented,active,complete,res://fish/species/pomfret_chinese/pomfret_chinese.tres,res://fish/species/pomfret_chinese/fish_pomfret_chinese.png,common
|
||||
805,anchovy_european,implemented,active,complete,res://fish/species/anchovy_european/anchovy_european.tres,res://fish/species/anchovy_european/fish_anchovy_european.png,common
|
||||
806,sardine_european,implemented,inactive,missing icon,res://fish/species/sardine_european/sardine_european.tres,,common
|
||||
807,pomfret_golden,implemented,active,complete,res://fish/species/pomfret_golden/pomfret_golden.tres,res://fish/species/pomfret_golden/fish_pomfret_golden.png,common
|
||||
808,anchovy_northern,implemented,active,complete,res://fish/species/anchovy_northern/anchovy_northern.tres,res://fish/species/anchovy_northern/fish_anchovy_northern.png,common
|
||||
809,sardine_pacific,implemented,inactive,missing icon,res://fish/species/sardine_pacific/sardine_pacific.tres,,common
|
||||
810,pomfret_white,implemented,active,complete,res://fish/species/pomfret_white/pomfret_white.tres,res://fish/species/pomfret_white/fish_pomfret_white.png,common
|
||||
901,shark_blacktip,implemented,inactive,missing icon,res://fish/species/shark_blacktip/shark_blacktip.tres,,common
|
||||
902,shark_great_hammerhead,implemented,inactive,missing icon,res://fish/species/shark_great_hammerhead/shark_great_hammerhead.tres,,common
|
||||
903,shark_great_white,implemented,inactive,missing icon,res://fish/species/shark_great_white/shark_great_white.tres,,common
|
||||
904,shark_tiger,implemented,inactive,missing icon,res://fish/species/shark_tiger/shark_tiger.tres,,common
|
||||
905,shark_whale,implemented,inactive,missing icon,res://fish/species/shark_whale/shark_whale.tres,,common
|
||||
1001,burbot,implemented,inactive,missing icon,res://fish/species/burbot/burbot.tres,,common
|
||||
1002,cisco,implemented,inactive,missing icon,res://fish/species/cisco/cisco.tres,,common
|
||||
1003,whitefish_lake,implemented,inactive,missing icon,res://fish/species/whitefish_lake/whitefish_lake.tres,,common
|
||||
1101,char_arctic,implemented,inactive,missing icon,res://fish/species/char_arctic/char_arctic.tres,,common
|
||||
1102,grayling_arctic,implemented,inactive,missing icon,res://fish/species/grayling_arctic/grayling_arctic.tres,,common
|
||||
1103,trout_brown,implemented,inactive,missing icon,res://fish/species/trout_brown/trout_brown.tres,,common
|
||||
1104,trout_cutthroat,implemented,active,complete,res://fish/species/trout_cutthroat/trout_cutthroat.tres,res://fish/species/trout_cutthroat/fish_trout_cutthroat.png,common
|
||||
1105,trout_golden,implemented,active,complete,res://fish/species/trout_golden/trout_golden.tres,res://fish/species/trout_golden/fish_trout_golden.png,common
|
||||
1106,trout_rainbow,implemented,active,complete,res://fish/species/trout_rainbow/trout_rainbow.tres,res://fish/species/trout_rainbow/fish_trout_rainbow.png,common
|
||||
1201,wolffish_atlantic,implemented,inactive,missing icon,res://fish/species/wolffish_atlantic/wolffish_atlantic.tres,,common
|
||||
1202,cusk,implemented,inactive,missing icon,res://fish/species/cusk/cusk.tres,,common
|
||||
1203,wolffish_spotted,implemented,inactive,missing icon,res://fish/species/wolffish_spotted/wolffish_spotted.tres,,common
|
||||
1301,herring_atlantic,implemented,inactive,missing icon,res://fish/species/herring_atlantic/herring_atlantic.tres,,common
|
||||
1302,capelin,implemented,inactive,missing icon,res://fish/species/capelin/capelin.tres,,common
|
||||
1303,sprat_european,implemented,inactive,missing icon,res://fish/species/sprat_european/sprat_european.tres,,common
|
||||
1304,herring_pacific,implemented,inactive,missing icon,res://fish/species/herring_pacific/herring_pacific.tres,,common
|
||||
1401,pollock_alaska,implemented,inactive,missing icon,res://fish/species/pollock_alaska/pollock_alaska.tres,,common
|
||||
1402,cod_atlantic,implemented,inactive,missing icon,res://fish/species/cod_atlantic/cod_atlantic.tres,,common
|
||||
1403,pollock_atlantic,implemented,inactive,missing icon,res://fish/species/pollock_atlantic/pollock_atlantic.tres,,common
|
||||
1404,sole_dover,implemented,inactive,missing icon,res://fish/species/sole_dover/sole_dover.tres,,common
|
||||
1405,haddock,implemented,inactive,missing icon,res://fish/species/haddock/haddock.tres,,common
|
||||
1406,cod_pacific,implemented,inactive,missing icon,res://fish/species/cod_pacific/cod_pacific.tres,,common
|
||||
1407,hake_pacific,implemented,inactive,missing icon,res://fish/species/hake_pacific/hake_pacific.tres,,common
|
||||
1408,hake_silver,implemented,inactive,missing icon,res://fish/species/hake_silver/hake_silver.tres,,common
|
||||
1501,nautilus_chambered,implemented,inactive,missing icon,res://fish/species/nautilus_chambered/nautilus_chambered.tres,,common
|
||||
1502,cuttlefish_common,implemented,inactive,missing icon,res://fish/species/cuttlefish_common/cuttlefish_common.tres,,common
|
||||
1503,cuttlefish_flamboyant,implemented,inactive,missing icon,res://fish/species/cuttlefish_flamboyant/cuttlefish_flamboyant.tres,,common
|
||||
1601,tilefish_blueline,implemented,inactive,missing icon,res://fish/species/tilefish_blueline/tilefish_blueline.tres,,common
|
||||
1602,tilefish_golden,implemented,inactive,missing icon,res://fish/species/tilefish_golden/tilefish_golden.tres,,common
|
||||
1603,ocean_perch_pacific,implemented,inactive,missing icon,res://fish/species/ocean_perch_pacific/ocean_perch_pacific.tres,,common
|
||||
1604,sea_bass_chilean,implemented,inactive,missing icon,res://fish/species/sea_bass_chilean/sea_bass_chilean.tres,,common
|
||||
1605,sablefish,implemented,inactive,missing icon,res://fish/species/sablefish/sablefish.tres,,common
|
||||
1606,wreckfish,implemented,inactive,missing icon,res://fish/species/wreckfish/wreckfish.tres,,common
|
||||
1701,oarfish_giant,implemented,inactive,missing icon,res://fish/species/oarfish_giant/oarfish_giant.tres,,common
|
||||
1702,coelacanth_west_indian,implemented,inactive,missing icon,res://fish/species/coelacanth_west_indian/coelacanth_west_indian.tres,,common
|
||||
1801,anglerfish_black_seadevil,implemented,inactive,missing icon,res://fish/species/anglerfish_black_seadevil/anglerfish_black_seadevil.tres,,common
|
||||
1802,fangtooth_common,implemented,inactive,missing icon,res://fish/species/fangtooth_common/fangtooth_common.tres,,common
|
||||
1803,gulper_eel,implemented,inactive,missing icon,res://fish/species/gulper_eel/gulper_eel.tres,,common
|
||||
1804,barreleye_pacific,implemented,inactive,missing icon,res://fish/species/barreleye_pacific/barreleye_pacific.tres,,common
|
||||
1805,blobfish_smooth_head,implemented,inactive,missing icon,res://fish/species/blobfish_smooth_head/blobfish_smooth_head.tres,,common
|
||||
1806,lanternfish_spotted,implemented,inactive,missing icon,res://fish/species/lanternfish_spotted/lanternfish_spotted.tres,,common
|
||||
1901,sea_star_crown_of_thorns,implemented,inactive,missing icon,res://fish/species/sea_star_crown_of_thorns/sea_star_crown_of_thorns.tres,,common
|
||||
1902,sea_cucumber_giant_california,implemented,inactive,missing icon,res://fish/species/sea_cucumber_giant_california/sea_cucumber_giant_california.tres,,common
|
||||
1903,urchin_purple,implemented,inactive,missing icon,res://fish/species/urchin_purple/urchin_purple.tres,,common
|
||||
1904,sand_dollar,implemented,inactive,missing icon,res://fish/species/sand_dollar/sand_dollar.tres,,common
|
||||
1905,sea_star_sunflower,implemented,inactive,missing icon,res://fish/species/sea_star_sunflower/sea_star_sunflower.tres,,common
|
||||
2001,axolotl,implemented,inactive,missing icon,res://fish/species/axolotl/axolotl.tres,,common
|
||||
2002,hellbender,implemented,inactive,missing icon,res://fish/species/hellbender/hellbender.tres,,common
|
||||
2101,guppy,implemented,inactive,missing icon,res://fish/species/guppy/guppy.tres,,common
|
||||
2102,tetra_neon,implemented,inactive,missing icon,res://fish/species/tetra_neon/tetra_neon.tres,,common
|
||||
2103,danio_zebra,implemented,inactive,missing icon,res://fish/species/danio_zebra/danio_zebra.tres,,common
|
||||
2201,largemouth_bass,implemented,inactive,missing icon,res://fish/species/largemouth_bass/largemouth_bass.tres,,common
|
||||
2202,smallmouth_bass,implemented,inactive,missing icon,res://fish/species/smallmouth_bass/smallmouth_bass.tres,,common
|
||||
2301,buffalo_bigmouth,implemented,inactive,missing icon,res://fish/species/buffalo_bigmouth/buffalo_bigmouth.tres,,common
|
||||
2302,redhorse_golden,implemented,inactive,missing icon,res://fish/species/redhorse_golden/redhorse_golden.tres,,common
|
||||
2303,quillback,implemented,inactive,missing icon,res://fish/species/quillback/quillback.tres,,common
|
||||
2304,buffalo_smallmouth,implemented,inactive,missing icon,res://fish/species/buffalo_smallmouth/buffalo_smallmouth.tres,,common
|
||||
2305,sucker_white,implemented,inactive,missing icon,res://fish/species/sucker_white/sucker_white.tres,,common
|
||||
2401,bullhead_black,implemented,inactive,missing icon,res://fish/species/bullhead_black/bullhead_black.tres,,common
|
||||
2402,catfish_blue,implemented,active,complete,res://fish/species/catfish_blue/catfish_blue.tres,res://fish/species/catfish_blue/fish_catfish_blue.png,bass
|
||||
2403,bullhead_brown,implemented,inactive,missing icon,res://fish/species/bullhead_brown/bullhead_brown.tres,,common
|
||||
2404,catfish_channel,implemented,active,complete,res://fish/species/catfish_channel/catfish_channel.tres,res://fish/species/catfish_channel/fish_catfish_channel.png,common
|
||||
2405,catfish_flathead,implemented,active,complete,res://fish/species/catfish_flathead/catfish_flathead.tres,res://fish/species/catfish_flathead/fish_catfish_flathead.png,bass
|
||||
2406,madtom_tadpole,implemented,inactive,missing icon,res://fish/species/madtom_tadpole/madtom_tadpole.tres,,common
|
||||
2407,catfish_white,implemented,active,complete,res://fish/species/catfish_white/catfish_white.tres,res://fish/species/catfish_white/fish_catfish_white.png,common
|
||||
2408,bullhead_yellow,implemented,inactive,missing icon,res://fish/species/bullhead_yellow/bullhead_yellow.tres,,common
|
||||
2501,barbel_common,implemented,inactive,missing icon,res://fish/species/barbel_common/barbel_common.tres,,common
|
||||
2502,bream_common,implemented,inactive,missing icon,res://fish/species/bream_common/bream_common.tres,,common
|
||||
2503,carp,implemented,active,complete,res://fish/species/carp/carp.tres,res://fish/species/carp/fish_carp_common.png,carp
|
||||
2504,roach_common,implemented,inactive,missing icon,res://fish/species/roach_common/roach_common.tres,,common
|
||||
2505,chub_european,implemented,active,complete,res://fish/species/chub_european/chub_european.tres,res://fish/species/chub_european/fish_chub_european.png,common
|
||||
2506,fallfish,implemented,inactive,missing icon,res://fish/species/fallfish/fallfish.tres,,common
|
||||
2507,ide,implemented,inactive,missing icon,res://fish/species/ide/ide.tres,,common
|
||||
2508,rudd,implemented,inactive,missing icon,res://fish/species/rudd/rudd.tres,,common
|
||||
2509,tench,implemented,inactive,missing icon,res://fish/species/tench/tench.tres,,common
|
||||
2601,crayfish_red_swamp,implemented,inactive,missing icon,res://fish/species/crayfish_red_swamp/crayfish_red_swamp.tres,,common
|
||||
2701,gar_alligator,implemented,inactive,missing icon,res://fish/species/gar_alligator/gar_alligator.tres,,common
|
||||
2702,arapaima,implemented,inactive,missing icon,res://fish/species/arapaima/arapaima.tres,,common
|
||||
2703,tigerfish_goliath,implemented,inactive,missing icon,res://fish/species/tigerfish_goliath/tigerfish_goliath.tres,,common
|
||||
2704,muskellunge,implemented,inactive,missing icon,res://fish/species/muskellunge/muskellunge.tres,,common
|
||||
2801,shiner_common,implemented,inactive,missing icon,res://fish/species/shiner_common/shiner_common.tres,,common
|
||||
2802,chub_creek,implemented,inactive,missing icon,res://fish/species/chub_creek/chub_creek.tres,,common
|
||||
2803,shiner_emerald,implemented,inactive,missing icon,res://fish/species/shiner_emerald/shiner_emerald.tres,,common
|
||||
2804,minnow_fathead,implemented,inactive,missing icon,res://fish/species/minnow_fathead/minnow_fathead.tres,,common
|
||||
2805,chub_flame,implemented,active,complete,res://fish/species/chub_flame/chub_flame.tres,res://fish/species/chub_flame/fish_chub_flame.png,common
|
||||
2806,shiner_golden,implemented,inactive,missing icon,res://fish/species/shiner_golden/shiner_golden.tres,,common
|
||||
2807,chub_lake,implemented,active,complete,res://fish/species/chub_lake/chub_lake.tres,res://fish/species/chub_lake/fish_chub_lake.png,common
|
||||
2901,electric_eel,implemented,inactive,missing icon,res://fish/species/electric_eel/electric_eel.tres,,common
|
||||
2902,freshwater_drum,implemented,inactive,missing icon,res://fish/species/freshwater_drum/freshwater_drum.tres,,common
|
||||
2903,goldeye,implemented,inactive,missing icon,res://fish/species/goldeye/goldeye.tres,,common
|
||||
2904,mooneye,implemented,inactive,missing icon,res://fish/species/mooneye/mooneye.tres,,common
|
||||
2905,loach_weather,implemented,inactive,missing icon,res://fish/species/loach_weather/loach_weather.tres,,common
|
||||
3001,goldfish_bubbleeye,implemented,active,complete,res://fish/species/goldfish_bubbleeye/goldfish_bubbleeye.tres,res://fish/species/goldfish_bubbleeye/fish_goldfish_bubbleeye.png,common
|
||||
3002,goldfish,implemented,active,complete,res://fish/species/goldfish/goldfish.tres,res://fish/species/goldfish/fish_goldfish.png,common
|
||||
3003,koi,implemented,inactive,missing icon,res://fish/species/koi/koi.tres,,common
|
||||
3101,crappie_black,implemented,inactive,missing icon,res://fish/species/crappie_black/crappie_black.tres,,common
|
||||
3102,bluegill,implemented,active,complete,res://fish/species/bluegill/bluegill.tres,res://fish/species/bluegill/fish_bluegill.png,common
|
||||
3103,green_sunfish,implemented,inactive,missing icon,res://fish/species/green_sunfish/green_sunfish.tres,,common
|
||||
3104,pumpkinseed,implemented,inactive,missing icon,res://fish/species/pumpkinseed/pumpkinseed.tres,,common
|
||||
3105,redear_sunfish,implemented,inactive,missing icon,res://fish/species/redear_sunfish/redear_sunfish.tres,,common
|
||||
3106,warmouth,implemented,inactive,missing icon,res://fish/species/warmouth/warmouth.tres,,common
|
||||
3107,crappie_white,implemented,inactive,missing icon,res://fish/species/crappie_white/crappie_white.tres,,common
|
||||
3201,yellow_perch,implemented,inactive,missing icon,res://fish/species/yellow_perch/yellow_perch.tres,,common
|
||||
3301,pickerel_chain,implemented,inactive,missing icon,res://fish/species/pickerel_chain/pickerel_chain.tres,,common
|
||||
3302,pickerel_grass,implemented,inactive,missing icon,res://fish/species/pickerel_grass/pickerel_grass.tres,,common
|
||||
3303,pike_northern,implemented,inactive,missing icon,res://fish/species/pike_northern/pike_northern.tres,,common
|
||||
3304,sauger,implemented,active,complete,res://fish/species/sauger/sauger.tres,res://fish/species/sauger/fish_sauger.png,common
|
||||
3305,saugeye,implemented,active,complete,res://fish/species/saugeye/saugeye.tres,res://fish/species/saugeye/fish_saugeye.png,common
|
||||
3306,walleye,implemented,active,complete,res://fish/species/walleye/walleye.tres,res://fish/species/walleye/fish_walleye.png,common
|
||||
3401,goby_round,implemented,active,complete,res://fish/species/goby_round/goby_round.tres,res://fish/species/goby_round/fish_goby_round.png,common
|
||||
3501,jelly_crystal,implemented,inactive,missing icon,res://fish/species/jelly_crystal/jelly_crystal.tres,,common
|
||||
3502,jelly_lions_mane,implemented,inactive,missing icon,res://fish/species/jelly_lions_mane/jelly_lions_mane.tres,,common
|
||||
3503,jelly_moon,implemented,inactive,missing icon,res://fish/species/jelly_moon/jelly_moon.tres,,common
|
||||
3504,jelly_pacific_sea_nettle,implemented,inactive,missing icon,res://fish/species/jelly_pacific_sea_nettle/jelly_pacific_sea_nettle.tres,,common
|
||||
3505,jelly_sea_wasp,implemented,inactive,missing icon,res://fish/species/jelly_sea_wasp/jelly_sea_wasp.tres,,common
|
||||
3601,pompano_african,implemented,inactive,missing icon,res://fish/species/pompano_african/pompano_african.tres,,common
|
||||
3602,cobia,implemented,inactive,missing icon,res://fish/species/cobia/cobia.tres,,common
|
||||
3603,trevally_giant,implemented,inactive,missing icon,res://fish/species/trevally_giant/trevally_giant.tres,,common
|
||||
3604,amberjack_greater,implemented,inactive,missing icon,res://fish/species/amberjack_greater/amberjack_greater.tres,,common
|
||||
3605,amberjack_lesser,implemented,inactive,missing icon,res://fish/species/amberjack_lesser/amberjack_lesser.tres,,common
|
||||
3701,halibut_atlantic,implemented,inactive,missing icon,res://fish/species/halibut_atlantic/halibut_atlantic.tres,,common
|
||||
3702,halibut_pacific,implemented,inactive,missing icon,res://fish/species/halibut_pacific/halibut_pacific.tres,,common
|
||||
3703,turbot,implemented,inactive,missing icon,res://fish/species/turbot/turbot.tres,,common
|
||||
3801,lobster_american,implemented,inactive,missing icon,res://fish/species/lobster_american/lobster_american.tres,,common
|
||||
3802,krill_antarctic,implemented,inactive,missing icon,res://fish/species/krill_antarctic/krill_antarctic.tres,,common
|
||||
3803,lobster_caribbean_spiny,implemented,inactive,missing icon,res://fish/species/lobster_caribbean_spiny/lobster_caribbean_spiny.tres,,common
|
||||
3804,shrimp_peacock_mantis,implemented,inactive,missing icon,res://fish/species/shrimp_peacock_mantis/shrimp_peacock_mantis.tres,,common
|
||||
3805,shrimp_skunk_cleaner,implemented,inactive,missing icon,res://fish/species/shrimp_skunk_cleaner/shrimp_skunk_cleaner.tres,,common
|
||||
3901,crab_ghost,implemented,inactive,missing icon,res://fish/species/crab_ghost/crab_ghost.tres,,common
|
||||
3902,crab_blue,implemented,inactive,missing icon,res://fish/species/crab_blue/crab_blue.tres,,common
|
||||
3903,crab_dungeness,implemented,inactive,missing icon,res://fish/species/crab_dungeness/crab_dungeness.tres,,common
|
||||
3904,crab_japanese_spider,implemented,inactive,missing icon,res://fish/species/crab_japanese_spider/crab_japanese_spider.tres,,common
|
||||
3905,crab_red_king,implemented,inactive,missing icon,res://fish/species/crab_red_king/crab_red_king.tres,,common
|
||||
4001,eel_american,implemented,inactive,missing icon,res://fish/species/eel_american/eel_american.tres,,common
|
||||
4002,eel_european,implemented,inactive,missing icon,res://fish/species/eel_european/eel_european.tres,,common
|
||||
4101,smelt_rainbow,implemented,inactive,missing icon,res://fish/species/smelt_rainbow/smelt_rainbow.tres,,common
|
||||
4201,smelt_eulachon,implemented,inactive,missing icon,res://fish/species/smelt_eulachon/smelt_eulachon.tres,,common
|
||||
4301,sturgeon_white,implemented,inactive,missing icon,res://fish/species/sturgeon_white/sturgeon_white.tres,,common
|
||||
4401,salmon_atlantic,implemented,active,complete,res://fish/species/salmon_atlantic/salmon_atlantic.tres,res://fish/species/salmon_atlantic/fish_salmon_atlantic.png,bass
|
||||
4402,salmon_chum,implemented,active,complete,res://fish/species/salmon_chum/salmon_chum.tres,res://fish/species/salmon_chum/fish_salmon_chum.png,bass
|
||||
4403,salmon_coho,implemented,active,complete,res://fish/species/salmon_coho/salmon_coho.tres,res://fish/species/salmon_coho/fish_salmon_coho.png,bass
|
||||
4404,salmon_pink,implemented,active,complete,res://fish/species/salmon_pink/salmon_pink.tres,res://fish/species/salmon_pink/fish_salmon_pink.png,bass
|
||||
4405,salmon_sockeye,implemented,active,complete,res://fish/species/salmon_sockeye/salmon_sockeye.tres,res://fish/species/salmon_sockeye/fish_salmon_sockeye.png,bass
|
||||
4501,trout_steelhead,implemented,active,complete,res://fish/species/trout_steelhead/trout_steelhead.tres,res://fish/species/trout_steelhead/fish_trout_steelhead.png,common
|
||||
4601,marlin_black,implemented,active,complete,res://fish/species/marlin_black/marlin_black.tres,res://fish/species/marlin_black/fish_marlin_black.png,common
|
||||
4602,marlin_blue,implemented,active,complete,res://fish/species/marlin_blue/marlin_blue.tres,res://fish/species/marlin_blue/fish_marlin_blue.png,common
|
||||
4603,sailfish,implemented,active,complete,res://fish/species/sailfish/sailfish.tres,res://fish/species/sailfish/fish_sailfish.png,common
|
||||
4604,swordfish,implemented,active,complete,res://fish/species/swordfish/swordfish.tres,res://fish/species/swordfish/fish_swordfish.png,common
|
||||
4605,marlin_white,implemented,active,complete,res://fish/species/marlin_white/marlin_white.tres,res://fish/species/marlin_white/fish_marlin_white.png,common
|
||||
4701,mahi_mahi,implemented,inactive,missing icon,res://fish/species/mahi_mahi/mahi_mahi.tres,,common
|
||||
4702,opah,implemented,inactive,missing icon,res://fish/species/opah/opah.tres,,common
|
||||
4703,wahoo,implemented,inactive,missing icon,res://fish/species/wahoo/wahoo.tres,,common
|
||||
4801,tuna_albacore,implemented,active,complete,res://fish/species/tuna_albacore/tuna_albacore.tres,res://fish/species/tuna_albacore/fish_tuna_albacore.png,bass
|
||||
4802,tuna_bigeye,implemented,active,complete,res://fish/species/tuna_bigeye/tuna_bigeye.tres,res://fish/species/tuna_bigeye/fish_tuna_bigeye.png,bass
|
||||
4803,tuna_bluefin,implemented,active,complete,res://fish/species/tuna_bluefin/tuna_bluefin.tres,res://fish/species/tuna_bluefin/fish_tuna_bluefin.png,bass
|
||||
4804,tuna_skipjack,implemented,active,complete,res://fish/species/tuna_skipjack/tuna_skipjack.tres,res://fish/species/tuna_skipjack/fish_tuna_skipjack.png,bass
|
||||
4805,tuna_yellowfin,implemented,active,complete,res://fish/species/tuna_yellowfin/tuna_yellowfin.tres,res://fish/species/tuna_yellowfin/fish_tuna_yellowfin.png,bass
|
||||
4901,octopus_common,implemented,inactive,missing icon,res://fish/species/octopus_common/octopus_common.tres,,common
|
||||
4902,octopus_day,implemented,inactive,missing icon,res://fish/species/octopus_day/octopus_day.tres,,common
|
||||
4903,octopus_giant_pacific,implemented,inactive,missing icon,res://fish/species/octopus_giant_pacific/octopus_giant_pacific.tres,,common
|
||||
4904,octopus_greater_blue_ringed,implemented,inactive,missing icon,res://fish/species/octopus_greater_blue_ringed/octopus_greater_blue_ringed.tres,,common
|
||||
5001,sunfish,implemented,active,complete,res://fish/species/sunfish/sunfish.tres,res://fish/species/sunfish/fish_sunfish.png,common
|
||||
5101,skate_barndoor,implemented,inactive,missing icon,res://fish/species/skate_barndoor/skate_barndoor.tres,,common
|
||||
5102,manta_ray_giant,implemented,inactive,missing icon,res://fish/species/manta_ray_giant/manta_ray_giant.tres,,common
|
||||
5103,sawfish_largetooth,implemented,inactive,missing icon,res://fish/species/sawfish_largetooth/sawfish_largetooth.tres,,common
|
||||
5104,stingray_ocellate_river,implemented,inactive,missing icon,res://fish/species/stingray_ocellate_river/stingray_ocellate_river.tres,,common
|
||||
5105,stingray_southern,implemented,inactive,missing icon,res://fish/species/stingray_southern/stingray_southern.tres,,common
|
||||
5201,lionfish_red,implemented,inactive,missing icon,res://fish/species/lionfish_red/lionfish_red.tres,,common
|
||||
5202,scorpionfish_red,implemented,inactive,missing icon,res://fish/species/scorpionfish_red/scorpionfish_red.tres,,common
|
||||
5301,moray_green,implemented,inactive,missing icon,res://fish/species/moray_green/moray_green.tres,,common
|
||||
5401,flounder_peacock,implemented,inactive,missing icon,res://fish/species/flounder_peacock/flounder_peacock.tres,,common
|
||||
5501,surgeonfish_blue,implemented,inactive,missing icon,res://fish/species/surgeonfish_blue/surgeonfish_blue.tres,,common
|
||||
5502,parrotfish_rainbow,implemented,inactive,missing icon,res://fish/species/parrotfish_rainbow/parrotfish_rainbow.tres,,common
|
||||
5503,parrotfish_stoplight,implemented,inactive,missing icon,res://fish/species/parrotfish_stoplight/parrotfish_stoplight.tres,,common
|
||||
5504,tang_yellow,implemented,inactive,missing icon,res://fish/species/tang_yellow/tang_yellow.tres,,common
|
||||
5601,trumpetfish_atlantic,implemented,inactive,missing icon,res://fish/species/trumpetfish_atlantic/trumpetfish_atlantic.tres,,common
|
||||
5602,triggerfish_gray,implemented,inactive,missing icon,res://fish/species/triggerfish_gray/triggerfish_gray.tres,,common
|
||||
5603,pufferfish_guineafowl,implemented,inactive,missing icon,res://fish/species/pufferfish_guineafowl/pufferfish_guineafowl.tres,,common
|
||||
5604,cowfish_longhorn,implemented,inactive,missing icon,res://fish/species/cowfish_longhorn/cowfish_longhorn.tres,,common
|
||||
5605,triggerfish_queen,implemented,inactive,missing icon,res://fish/species/triggerfish_queen/triggerfish_queen.tres,,common
|
||||
5606,cornetfish_red,implemented,inactive,missing icon,res://fish/species/cornetfish_red/cornetfish_red.tres,,common
|
||||
5607,porcupinefish_spotted,implemented,inactive,missing icon,res://fish/species/porcupinefish_spotted/porcupinefish_spotted.tres,,common
|
||||
5608,boxfish_yellow,implemented,inactive,missing icon,res://fish/species/boxfish_yellow/boxfish_yellow.tres,,common
|
||||
5701,butterflyfish_copperband,implemented,inactive,missing icon,res://fish/species/butterflyfish_copperband/butterflyfish_copperband.tres,,common
|
||||
5702,clownfish_ocellaris,implemented,inactive,missing icon,res://fish/species/clownfish_ocellaris/clownfish_ocellaris.tres,,common
|
||||
5703,angelfish_queen,implemented,inactive,missing icon,res://fish/species/angelfish_queen/angelfish_queen.tres,,common
|
||||
5801,grouper_atlantic_goliath,implemented,inactive,missing icon,res://fish/species/grouper_atlantic_goliath/grouper_atlantic_goliath.tres,,common
|
||||
5802,trevally_bluefin,implemented,inactive,missing icon,res://fish/species/trevally_bluefin/trevally_bluefin.tres,,common
|
||||
5803,grouper_giant,implemented,inactive,missing icon,res://fish/species/grouper_giant/grouper_giant.tres,,common
|
||||
5804,barracuda_great,implemented,inactive,missing icon,res://fish/species/barracuda_great/barracuda_great.tres,,common
|
||||
5805,grouper_gulf,implemented,active,complete,res://fish/species/grouper_gulf/grouper_gulf.tres,res://fish/species/grouper_gulf/fish_grouper_gulf.png,common
|
||||
5806,grouper_nassau,implemented,inactive,missing icon,res://fish/species/grouper_nassau/grouper_nassau.tres,,common
|
||||
5807,grouper_red,implemented,active,complete,res://fish/species/grouper_red/grouper_red.tres,res://fish/species/grouper_red/fish_grouper_red.png,common
|
||||
5901,chromis_blue_green,implemented,inactive,missing icon,res://fish/species/chromis_blue_green/chromis_blue_green.tres,,common
|
||||
5902,grunt_bluestriped,implemented,inactive,missing icon,res://fish/species/grunt_bluestriped/grunt_bluestriped.tres,,common
|
||||
5903,grunt_french,implemented,inactive,missing icon,res://fish/species/grunt_french/grunt_french.tres,,common
|
||||
5904,damselfish_sergeant_major,implemented,inactive,missing icon,res://fish/species/damselfish_sergeant_major/damselfish_sergeant_major.tres,,common
|
||||
6001,snapper_lane,implemented,active,complete,res://fish/species/snapper_lane/snapper_lane.tres,res://fish/species/snapper_lane/fish_snapper_lane.png,common
|
||||
6002,snapper_mangrove,implemented,active,complete,res://fish/species/snapper_mangrove/snapper_mangrove.tres,res://fish/species/snapper_mangrove/fish_snapper_mangrove.png,common
|
||||
6003,snapper_mutton,implemented,active,complete,res://fish/species/snapper_mutton/snapper_mutton.tres,res://fish/species/snapper_mutton/fish_snapper_mutton.png,common
|
||||
6004,snapper_red,implemented,active,complete,res://fish/species/snapper_red/snapper_red.tres,res://fish/species/snapper_red/fish_snapper_red.png,common
|
||||
6101,wrasse_ballan,implemented,inactive,missing icon,res://fish/species/wrasse_ballan/wrasse_ballan.tres,,common
|
||||
6102,wrasse_cleaner,implemented,inactive,missing icon,res://fish/species/wrasse_cleaner/wrasse_cleaner.tres,,common
|
||||
6103,hogfish,implemented,inactive,missing icon,res://fish/species/hogfish/hogfish.tres,,common
|
||||
6201,turtle_green,implemented,inactive,missing icon,res://fish/species/turtle_green/turtle_green.tres,,common
|
||||
6202,turtle_hawksbill,implemented,inactive,missing icon,res://fish/species/turtle_hawksbill/turtle_hawksbill.tres,,common
|
||||
6203,turtle_leatherback,implemented,inactive,missing icon,res://fish/species/turtle_leatherback/turtle_leatherback.tres,,common
|
||||
6204,turtle_loggerhead,implemented,inactive,missing icon,res://fish/species/turtle_loggerhead/turtle_loggerhead.tres,,common
|
||||
6301,seadragon_leafy,implemented,inactive,missing icon,res://fish/species/seadragon_leafy/seadragon_leafy.tres,,common
|
||||
6302,seadragon_weedy,implemented,inactive,missing icon,res://fish/species/seadragon_weedy/seadragon_weedy.tres,,common
|
||||
6401,oyster_black_lip_pearl,implemented,inactive,missing icon,res://fish/species/oyster_black_lip_pearl/oyster_black_lip_pearl.tres,,common
|
||||
6402,clam_giant,implemented,inactive,missing icon,res://fish/species/clam_giant/clam_giant.tres,,common
|
||||
6403,clam_geoduck,implemented,inactive,missing icon,res://fish/species/clam_geoduck/clam_geoduck.tres,,common
|
||||
6404,conch_queen,implemented,inactive,missing icon,res://fish/species/conch_queen/conch_queen.tres,,common
|
||||
6405,abalone_red,implemented,inactive,missing icon,res://fish/species/abalone_red/abalone_red.tres,,common
|
||||
6501,squid_bigfin_reef,implemented,inactive,missing icon,res://fish/species/squid_bigfin_reef/squid_bigfin_reef.tres,,common
|
||||
6502,squid_colossal,implemented,inactive,missing icon,res://fish/species/squid_colossal/squid_colossal.tres,,common
|
||||
6503,squid_giant,implemented,inactive,missing icon,res://fish/species/squid_giant/squid_giant.tres,,common
|
||||
6504,squid_humboldt,implemented,inactive,missing icon,res://fish/species/squid_humboldt/squid_humboldt.tres,,common
|
||||
6601,halfbeak_ballyhoo,implemented,inactive,missing icon,res://fish/species/halfbeak_ballyhoo/halfbeak_ballyhoo.tres,,common
|
||||
6602,needlefish_hound,implemented,inactive,missing icon,res://fish/species/needlefish_hound/needlefish_hound.tres,,common
|
||||
6603,flyingfish_tropical,implemented,inactive,missing icon,res://fish/species/flyingfish_tropical/flyingfish_tropical.tres,,common
|
||||
6701,bass,implemented,active,complete,res://fish/species/bass/bass.tres,res://fish/species/bass/fish_bass_striped.png,bass
|
||||
6801,croaker_atlantic,implemented,inactive,missing icon,res://fish/species/croaker_atlantic/croaker_atlantic.tres,,common
|
||||
6802,black_drum,implemented,inactive,missing icon,res://fish/species/black_drum/black_drum.tres,,common
|
||||
6803,red_drum,implemented,inactive,missing icon,res://fish/species/red_drum/red_drum.tres,,common
|
||||
6804,mullet_striped,implemented,inactive,missing icon,res://fish/species/mullet_striped/mullet_striped.tres,,common
|
||||
6805,weakfish,implemented,inactive,missing icon,res://fish/species/weakfish/weakfish.tres,,common
|
||||
6806,white_perch,implemented,inactive,missing icon,res://fish/species/white_perch/white_perch.tres,,common
|
||||
6807,croaker_yellowfin,implemented,inactive,missing icon,res://fish/species/croaker_yellowfin/croaker_yellowfin.tres,,common
|
||||
6901,rockfish_black,implemented,inactive,missing icon,res://fish/species/rockfish_black/rockfish_black.tres,,common
|
||||
6902,sea_bass_black,implemented,inactive,missing icon,res://fish/species/sea_bass_black/sea_bass_black.tres,,common
|
||||
6903,rockfish_canary,implemented,inactive,missing icon,res://fish/species/rockfish_canary/rockfish_canary.tres,,common
|
||||
6904,porgy_scup,implemented,inactive,missing icon,res://fish/species/porgy_scup/porgy_scup.tres,,common
|
||||
6905,sheepshead,implemented,inactive,missing icon,res://fish/species/sheepshead/sheepshead.tres,,common
|
||||
6906,tautog,implemented,inactive,missing icon,res://fish/species/tautog/tautog.tres,,common
|
||||
6907,rockfish_yelloweye,implemented,inactive,missing icon,res://fish/species/rockfish_yelloweye/rockfish_yelloweye.tres,,common
|
||||
7001,lingcod,implemented,inactive,missing icon,res://fish/species/lingcod/lingcod.tres,,common
|
||||
7101,milkfish,implemented,inactive,missing icon,res://fish/species/milkfish/milkfish.tres,,common
|
||||
7201,roosterfish,implemented,inactive,missing icon,res://fish/species/roosterfish/roosterfish.tres,,common
|
||||
7301,tarpon_atlantic,implemented,inactive,missing icon,res://fish/species/tarpon_atlantic/tarpon_atlantic.tres,,common
|
||||
7302,barramundi,implemented,inactive,missing icon,res://fish/species/barramundi/barramundi.tres,,common
|
||||
7303,snook_common,implemented,inactive,missing icon,res://fish/species/snook_common/snook_common.tres,,common
|
||||
7401,bonefish,implemented,inactive,missing icon,res://fish/species/bonefish/bonefish.tres,,common
|
||||
7402,pompano_florida,implemented,inactive,missing icon,res://fish/species/pompano_florida/pompano_florida.tres,,common
|
||||
7403,ladyfish,implemented,inactive,missing icon,res://fish/species/ladyfish/ladyfish.tres,,common
|
||||
7404,permit,implemented,inactive,missing icon,res://fish/species/permit/permit.tres,,common
|
||||
7501,knifefish_clown,implemented,inactive,missing icon,res://fish/species/knifefish_clown/knifefish_clown.tres,,common
|
||||
7502,loach_clown,implemented,inactive,missing icon,res://fish/species/loach_clown/loach_clown.tres,,common
|
||||
7503,discus,implemented,inactive,missing icon,res://fish/species/discus/discus.tres,,common
|
||||
7504,angelfish_freshwater,implemented,inactive,missing icon,res://fish/species/angelfish_freshwater/angelfish_freshwater.tres,,common
|
||||
7505,gourami_giant,implemented,inactive,missing icon,res://fish/species/gourami_giant/gourami_giant.tres,,common
|
||||
7506,tilapia_nile,implemented,inactive,missing icon,res://fish/species/tilapia_nile/tilapia_nile.tres,,common
|
||||
7507,oscar,implemented,inactive,missing icon,res://fish/species/oscar/oscar.tres,,common
|
||||
7508,betta_siamese,implemented,inactive,missing icon,res://fish/species/betta_siamese/betta_siamese.tres,,common
|
||||
7509,tambaqui,implemented,inactive,missing icon,res://fish/species/tambaqui/tambaqui.tres,,common
|
||||
7510,catfish_walking,implemented,inactive,missing icon,res://fish/species/catfish_walking/catfish_walking.tres,,common
|
||||
7601,snakehead_giant,implemented,inactive,missing icon,res://fish/species/snakehead_giant/snakehead_giant.tres,,common
|
||||
7602,dorado_golden,implemented,inactive,missing icon,res://fish/species/dorado_golden/dorado_golden.tres,,common
|
||||
7603,mahseer_golden,implemented,inactive,missing icon,res://fish/species/mahseer_golden/mahseer_golden.tres,,common
|
||||
7604,peacock_bass,implemented,inactive,missing icon,res://fish/species/peacock_bass/peacock_bass.tres,,common
|
||||
7605,piranha_red_bellied,implemented,inactive,missing icon,res://fish/species/piranha_red_bellied/piranha_red_bellied.tres,,common
|
||||
7606,arowana_silver,implemented,inactive,missing icon,res://fish/species/arowana_silver/arowana_silver.tres,,common
|
||||
7701,whale_blue,implemented,inactive,missing icon,res://fish/species/whale_blue/whale_blue.tres,,common
|
||||
7702,dolphin_bottlenose,implemented,inactive,missing icon,res://fish/species/dolphin_bottlenose/dolphin_bottlenose.tres,,common
|
||||
7703,whale_humpback,implemented,inactive,missing icon,res://fish/species/whale_humpback/whale_humpback.tres,,common
|
||||
7704,whale_killer,implemented,inactive,missing icon,res://fish/species/whale_killer/whale_killer.tres,,common
|
||||
7705,whale_sperm,implemented,inactive,missing icon,res://fish/species/whale_sperm/whale_sperm.tres,,common
|
||||
|
|
|
@ -49,7 +49,7 @@ static func get_display_name(product_id: StringName) -> String:
|
|||
|
||||
static func get_description(product_id: StringName) -> String:
|
||||
if product_id == ART_KIT_ITEM_ID:
|
||||
return "Press P in the game world to paint!"
|
||||
return "Select the Art Kit in the Hotbar to paint."
|
||||
var color_id: StringName = PlayerArtUnlocks.color_id_for_product(product_id)
|
||||
if not color_id.is_empty():
|
||||
return "Unlocks this marker color in the Paint UI."
|
||||
|
|
|
|||
|
|
@ -9,4 +9,4 @@ display_name = "pelicans"
|
|||
animal_name_singular = "pelican"
|
||||
animal_name_plural = "pelicans"
|
||||
payout_multiplier = 0.25
|
||||
sale_message_template = "You sold your {fish} to the pelicans for ${payout}."
|
||||
sale_message_template = "You sold your {fish} to the pelicans."
|
||||
|
|
|
|||
|
|
@ -53,8 +53,7 @@ func get_sale_message(
|
|||
var buyer_name: String = animal_name_plural
|
||||
if buyer_name.is_empty():
|
||||
buyer_name = display_name
|
||||
return "you sold your %s to the %s for $%d." % [
|
||||
return "you sold your %s to the %s." % [
|
||||
fish_name,
|
||||
buyer_name,
|
||||
payout,
|
||||
]
|
||||
|
|
|
|||
|
|
@ -165,9 +165,10 @@ func _validate_batch(
|
|||
result.payout
|
||||
)
|
||||
else:
|
||||
result.sale_message = "you sold %d fish to the %s for $%d." % [
|
||||
result.sale_message = (
|
||||
"you sold %d fish to the %s." % [
|
||||
result.fish_count,
|
||||
result.buyer_animal_name,
|
||||
result.payout,
|
||||
]
|
||||
)
|
||||
return result
|
||||
|
|
|
|||
|
|
@ -3,10 +3,12 @@ extends RefCounted
|
|||
|
||||
const ItemCatalogType = preload("res://items/item_catalog.gd")
|
||||
const ItemDataType = preload("res://items/item_data.gd")
|
||||
const FishingRodDataType = preload("res://items/fishing_rod_data.gd")
|
||||
const PlayerBagType = preload("res://inventory/player_bag.gd")
|
||||
const PlayerWalletType = preload("res://economy/player_wallet.gd")
|
||||
const WORM_MAX_STACK: int = 10
|
||||
const FISH_FINDER_ID: StringName = &"fish_finder"
|
||||
const MAGNET_ID: StringName = &"magnet"
|
||||
const BATTERIES_ID: StringName = &"batteries"
|
||||
|
||||
const ITEM_PRICES: Dictionary[StringName, int] = {
|
||||
|
|
@ -22,6 +24,7 @@ const ITEM_PRICES: Dictionary[StringName, int] = {
|
|||
&"energy_drink": 35,
|
||||
&"snack": 30,
|
||||
FISH_FINDER_ID: 500,
|
||||
MAGNET_ID: 250,
|
||||
BATTERIES_ID: 15,
|
||||
}
|
||||
const BAIT_UNLOCK_PRICES: Dictionary[StringName, int] = {
|
||||
|
|
@ -42,6 +45,7 @@ const ITEM_ORDER: Array[StringName] = [
|
|||
&"luminous_roe",
|
||||
&"the_standby",
|
||||
FISH_FINDER_ID,
|
||||
MAGNET_ID,
|
||||
&"coffee",
|
||||
&"energy_drink",
|
||||
&"snack",
|
||||
|
|
@ -57,6 +61,25 @@ static func get_stock_item_ids() -> Array[StringName]:
|
|||
return ITEM_ORDER.duplicate()
|
||||
|
||||
|
||||
static func get_rod_stock(
|
||||
catalog: ItemCatalogType,
|
||||
) -> Array[FishingRodDataType]:
|
||||
var rods: Array[FishingRodDataType] = []
|
||||
if catalog == null:
|
||||
return rods
|
||||
for item: ItemDataType in catalog.get_available_items():
|
||||
var rod := item as FishingRodDataType
|
||||
if rod != null and rod.is_shop_available():
|
||||
rods.append(rod)
|
||||
rods.sort_custom(
|
||||
func(left: FishingRodDataType, right: FishingRodDataType) -> bool:
|
||||
if left.shop_order == right.shop_order:
|
||||
return str(left.item_id) < str(right.item_id)
|
||||
return left.shop_order < right.shop_order
|
||||
)
|
||||
return rods
|
||||
|
||||
|
||||
static func get_unlock_price(item_id: StringName) -> int:
|
||||
return BAIT_UNLOCK_PRICES.get(item_id, -1)
|
||||
|
||||
|
|
@ -81,7 +104,12 @@ static func is_permanent_unlock(
|
|||
) -> bool:
|
||||
return (
|
||||
item != null
|
||||
and (item.is_lure() or item_id == FISH_FINDER_ID)
|
||||
and (
|
||||
item.is_lure()
|
||||
or item_id == FISH_FINDER_ID
|
||||
or item_id == MAGNET_ID
|
||||
or item is FishingRodDataType
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -111,6 +139,8 @@ static func purchase_one(
|
|||
if wallet == null or bag == null or catalog == null:
|
||||
return false
|
||||
var item: ItemDataType = catalog.get_item_by_id(item_id)
|
||||
if item == null or not item.is_available():
|
||||
return false
|
||||
var bait_topoff: bool = is_bait_topoff(item_id)
|
||||
var permanent_unlock: bool = is_permanent_unlock(item_id, item)
|
||||
var quantity: int = get_purchase_quantity(
|
||||
|
|
@ -118,15 +148,20 @@ static func purchase_one(
|
|||
bag.get_quantity(item_id),
|
||||
item.max_stack if item != null else WORM_MAX_STACK,
|
||||
)
|
||||
var price: int = get_purchase_cost(
|
||||
var rod := item as FishingRodDataType
|
||||
var price: int = (
|
||||
rod.shop_price
|
||||
if rod != null
|
||||
else get_purchase_cost(
|
||||
item_id,
|
||||
quantity,
|
||||
bag.is_bait_unlocked(item_id),
|
||||
)
|
||||
)
|
||||
if (
|
||||
price < 0
|
||||
or item == null
|
||||
or not item.is_valid()
|
||||
or not item.is_available()
|
||||
or (rod != null and not rod.is_shop_available())
|
||||
or (
|
||||
item.category != ItemDataType.Category.CONSUMABLE
|
||||
and not bait_topoff
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ advanced_options=false
|
|||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter="builds/*,playtest/*,scripts/*"
|
||||
export_path="builds/v0.6.7-alpha/windows-x86_64/NETfishing.exe"
|
||||
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
|
||||
exclude_filter="builds/*,scripts/*"
|
||||
export_path="builds/v0.7.1-alpha/windows-x86_64/NETfishing.exe"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
|
|
@ -35,13 +35,13 @@ application/modify_resources=true
|
|||
application/icon="res://art/exported/system_icons/netfishing.ico"
|
||||
application/console_wrapper_icon=""
|
||||
application/icon_interpolation=4
|
||||
application/file_version="0.6.7.0"
|
||||
application/product_version="0.6.7.0"
|
||||
application/company_name=""
|
||||
application/file_version="0.7.1.0"
|
||||
application/product_version="0.7.1.0"
|
||||
application/company_name="Woofmeow"
|
||||
application/product_name="NETfishing"
|
||||
application/file_description="NETfishing v0.6.7-alpha"
|
||||
application/copyright=""
|
||||
application/trademarks=""
|
||||
application/file_description="NETfishing v0.7.1-alpha"
|
||||
application/copyright="Copyright © 2026 Woofmeow"
|
||||
application/trademarks="NETfishing and Woofmeow branding is reserved; see TRADEMARKS.md"
|
||||
application/export_angle=0
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
|
|
@ -60,9 +60,9 @@ advanced_options=false
|
|||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter="builds/*,playtest/*,scripts/*"
|
||||
export_path="builds/v0.6.7-alpha/linux-arm64/NETfishing.arm64"
|
||||
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
|
||||
exclude_filter="builds/*,scripts/*"
|
||||
export_path="builds/v0.7.1-alpha/linux-arm64/NETfishing.arm64"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
|
|
@ -90,9 +90,9 @@ advanced_options=false
|
|||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter="builds/*,playtest/*,scripts/*"
|
||||
export_path="builds/v0.6.7-alpha/macos/NETfishing.zip"
|
||||
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
|
||||
exclude_filter="builds/*,scripts/*"
|
||||
export_path="builds/v0.7.1-alpha/macos/NETfishing.zip"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
|
|
@ -108,8 +108,8 @@ custom_template/release=""
|
|||
application/bundle_identifier="io.woofmeow.netfishing"
|
||||
application/icon="res://art/exported/system_icons/netfishing_1024.png"
|
||||
application/icon_interpolation=0
|
||||
application/short_version="0.6.7"
|
||||
application/version="0.6.7"
|
||||
application/short_version="0.7.1"
|
||||
application/version="0.7.1"
|
||||
application/architecture="universal"
|
||||
codesign/enable=false
|
||||
notarization/enable=false
|
||||
|
|
@ -123,9 +123,9 @@ advanced_options=false
|
|||
dedicated_server=true
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter="builds/*,playtest/*,scripts/*,tests/*"
|
||||
export_path="builds/v0.6.7-alpha/server-linux-x86_64/NETfishingServer.x86_64"
|
||||
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
|
||||
exclude_filter="builds/*,scripts/*,tests/*"
|
||||
export_path="builds/v0.7.1-alpha/server-linux-x86_64/NETfishingServer.x86_64"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
|
|
@ -153,9 +153,9 @@ advanced_options=false
|
|||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter="builds/*,playtest/*,scripts/*"
|
||||
export_path="builds/v0.6.7-alpha/android/NETfishing.apk"
|
||||
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
|
||||
exclude_filter="builds/*,scripts/*"
|
||||
export_path="builds/v0.7.1-alpha/android/NETfishing.apk"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
|
|
@ -176,8 +176,8 @@ architectures/armeabi-v7a=false
|
|||
architectures/arm64-v8a=true
|
||||
architectures/x86=false
|
||||
architectures/x86_64=false
|
||||
version/code=60700
|
||||
version/name="v0.6.7-alpha"
|
||||
version/code=70100
|
||||
version/name="v0.7.1-alpha"
|
||||
package/unique_name="io.woofmeow.netfishing"
|
||||
package/name="NETfishing"
|
||||
package/signed=true
|
||||
|
|
@ -212,9 +212,9 @@ advanced_options=false
|
|||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter="builds/*,playtest/*,scripts/*"
|
||||
export_path="builds/v0.6.7-alpha/linux-x86_64/NETfishing.x86_64"
|
||||
include_filter="LICENSE,ASSET-LICENSE.md,TRADEMARKS.md,docs/ATTRIBUTION.md,ui/fonts/*LICENSE.txt"
|
||||
exclude_filter="builds/*,scripts/*"
|
||||
export_path="builds/v0.7.1-alpha/linux-x86_64/NETfishing.x86_64"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
|
|
|
|||
|
|
@ -26,14 +26,21 @@ enum Rarity {
|
|||
|
||||
@export var id: StringName
|
||||
@export var display_name: String
|
||||
@export_category("Developer Catalog")
|
||||
## Disabled species remain resolvable for saves but cannot be newly selected.
|
||||
@export var active: bool = true
|
||||
@export_range(1, 999999, 1) var catalog_number: int = 1
|
||||
@export var collection_group: StringName
|
||||
@export_multiline var logbook_fact: String
|
||||
@export_category("Fishing")
|
||||
@export_flags("Fresh Water", "Salt Water")
|
||||
var allowed_water_types: int = WaterType.ALL_FISHABLE_MASK
|
||||
@export var rarity: Rarity = Rarity.COMMON
|
||||
@export_range(0.0, 1000.0, 0.01) var base_catch_weight: float = 1.0
|
||||
@export var catch_profile: CatchDifficultyProfileType
|
||||
@export var availability: FishAvailabilityType
|
||||
@export_range(0.01, 1000.0, 0.01) var weight_min_lb: float = 0.5
|
||||
@export_range(0.01, 1000.0, 0.01) var weight_max_lb: float = 1.0
|
||||
@export_range(0.001, 500000.0, 0.001) var weight_min_lb: float = 0.5
|
||||
@export_range(0.001, 500000.0, 0.001) var weight_max_lb: float = 1.0
|
||||
# Retained in resource files for compatibility with existing authored data;
|
||||
# runtime presentation is derived from absolute weight below.
|
||||
@export_range(0.01, 20.0, 0.01) var display_scale_min: float = 0.8
|
||||
|
|
@ -47,7 +54,8 @@ var allowed_water_types: int = WaterType.ALL_FISHABLE_MASK
|
|||
|
||||
func is_selectable() -> bool:
|
||||
return (
|
||||
not id.is_empty()
|
||||
active
|
||||
and not id.is_empty()
|
||||
and base_catch_weight > 0.0
|
||||
and catch_profile != null
|
||||
and weight_min_lb > 0.0
|
||||
|
|
@ -74,7 +82,7 @@ func get_primary_water_type() -> WaterType.Type:
|
|||
|
||||
|
||||
func get_minimum_weight() -> float:
|
||||
return maxf(weight_min_lb, 0.01)
|
||||
return maxf(weight_min_lb, 0.001)
|
||||
|
||||
|
||||
func get_maximum_weight() -> float:
|
||||
|
|
|
|||
|
|
@ -23,16 +23,11 @@ const MINNOW_ROLL_WEIGHTS: Array[float] = [34.0, 27.0, 20.0, 13.0, 6.0]
|
|||
const SARDINE_ROLL_WEIGHTS: Array[float] = [25.0, 28.0, 23.0, 16.0, 8.0]
|
||||
const LUMINOUS_ROE_ROLL_WEIGHTS: Array[float] = [16.0, 26.0, 26.0, 20.0, 12.0]
|
||||
const SALE_MULTIPLIERS: Array[float] = [1.0, 1.1, 1.25, 1.5, 2.0]
|
||||
# Legacy profile multiplier retained for serialized/profile compatibility.
|
||||
# New encounters use the weighted quality/rarity/weight bands below.
|
||||
# Legacy multiplier helpers remain available for compatibility. New encounters
|
||||
# roll directly within the authored quality bands below.
|
||||
const BARRIER_HEALTH_MULTIPLIERS: Array[float] = [1.0, 1.25, 1.6, 2.2, 3.25]
|
||||
# Barrier health is weighted 70% by quality, 20% by rarity, and 10% by the
|
||||
# catch's position in its authored weight range. The upper bounds define the
|
||||
# intended per-barrier challenge bands; a small seeded variance keeps barriers
|
||||
# from feeling identical without crossing those bands.
|
||||
const BARRIER_QUALITY_WEIGHT: float = 0.70
|
||||
const BARRIER_RARITY_WEIGHT: float = 0.20
|
||||
const BARRIER_WEIGHT_WEIGHT: float = 0.10
|
||||
# Inclusive per-barrier health bands authored for each quality tier. Encounter
|
||||
# generation rolls uniformly across the selected tier's complete band.
|
||||
const BARRIER_HEALTH_MINIMUMS: Array[int] = [1, 10, 50, 100, 200]
|
||||
const BARRIER_HEALTH_MAXIMUMS: Array[int] = [9, 50, 100, 200, 400]
|
||||
const DISPLAY_NAMES: PackedStringArray = [
|
||||
|
|
@ -89,32 +84,26 @@ static func apply_barrier_health(base_health: int, quality: int) -> int:
|
|||
)
|
||||
|
||||
|
||||
static func barrier_health_for_catch(
|
||||
quality: int,
|
||||
rarity: int,
|
||||
weight_percentile: float,
|
||||
variance: float = 1.0,
|
||||
) -> int:
|
||||
static func barrier_health_range(quality: int) -> Vector2i:
|
||||
var safe_quality: int = (
|
||||
quality if is_valid(quality) else Tier.BORING
|
||||
)
|
||||
var safe_rarity: float = clampf(float(rarity) / 4.0, 0.0, 1.0)
|
||||
var safe_weight: float = clampf(weight_percentile, 0.0, 1.0)
|
||||
var weighted_health: float = float(BARRIER_HEALTH_MAXIMUMS[safe_quality]) * (
|
||||
BARRIER_QUALITY_WEIGHT
|
||||
+ BARRIER_RARITY_WEIGHT * safe_rarity
|
||||
+ BARRIER_WEIGHT_WEIGHT * safe_weight
|
||||
)
|
||||
var varied_health: int = roundi(
|
||||
weighted_health * clampf(variance, 0.8, 1.2)
|
||||
)
|
||||
return clampi(
|
||||
varied_health,
|
||||
return Vector2i(
|
||||
BARRIER_HEALTH_MINIMUMS[safe_quality],
|
||||
BARRIER_HEALTH_MAXIMUMS[safe_quality],
|
||||
)
|
||||
|
||||
|
||||
static func roll_barrier_health(
|
||||
rng: RandomNumberGenerator,
|
||||
quality: int,
|
||||
) -> int:
|
||||
var health_range: Vector2i = barrier_health_range(quality)
|
||||
if rng == null:
|
||||
return health_range.x
|
||||
return rng.randi_range(health_range.x, health_range.y)
|
||||
|
||||
|
||||
static func roll(
|
||||
rng: RandomNumberGenerator,
|
||||
weight_multipliers: Array[float] = [],
|
||||
|
|
|
|||
|
|
@ -7,10 +7,12 @@ const FishDataType = preload("res://fish/fish_data.gd")
|
|||
const FishPoolType = preload("res://fish/fish_pool.gd")
|
||||
const FishQualityType = preload("res://fish/fish_quality.gd")
|
||||
const FishingContextType = preload("res://fishing/fishing_context.gd")
|
||||
const FishingRodDataType = preload("res://items/fishing_rod_data.gd")
|
||||
|
||||
var undiscovered_weight_multiplier: float = 1.5
|
||||
var rarity_weight_multipliers: Array[float] = []
|
||||
var quality_weight_multipliers: Array[float] = []
|
||||
var active_rod: FishingRodDataType
|
||||
var use_deterministic_test_seed: bool = false
|
||||
var deterministic_test_seed: int = 24680
|
||||
var selection_seed: int = 0
|
||||
|
|
@ -55,8 +57,16 @@ func select_fish(
|
|||
# quality and rarity bands globally; required tags remain authoritative.
|
||||
if not collection_log.has_discovered(fish.id):
|
||||
final_weight *= maxf(undiscovered_weight_multiplier, 0.0)
|
||||
if active_rod != null:
|
||||
final_weight *= maxf(
|
||||
active_rod.undiscovered_weight_multiplier,
|
||||
0.0,
|
||||
)
|
||||
if fish.rarity >= 0 and fish.rarity < rarity_weight_multipliers.size():
|
||||
final_weight *= maxf(rarity_weight_multipliers[fish.rarity], 0.0)
|
||||
if active_rod != null:
|
||||
final_weight *= active_rod.get_rarity_multiplier(fish.rarity)
|
||||
final_weight *= active_rod.get_affinity_multiplier(fish, context)
|
||||
if final_weight <= 0.0:
|
||||
continue
|
||||
all_fish.append(fish)
|
||||
|
|
@ -87,6 +97,8 @@ func _roll_rarity(context: FishingContextType) -> int:
|
|||
for index: int in range(weights.size()):
|
||||
if index < rarity_weight_multipliers.size():
|
||||
weights[index] *= maxf(rarity_weight_multipliers[index], 0.0)
|
||||
if active_rod != null:
|
||||
weights[index] *= active_rod.get_rarity_multiplier(index)
|
||||
var total: float = 0.0
|
||||
for weight: float in weights:
|
||||
total += weight
|
||||
|
|
@ -107,9 +119,13 @@ func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> Fish
|
|||
caught_fish.fish = fish
|
||||
caught_fish.fish_id = fish.id
|
||||
caught_fish.ensure_identity()
|
||||
caught_fish.weight_lb = _rng.randf_range(
|
||||
var weight_roll: float = _biased_unit_roll(
|
||||
active_rod.weight_roll_bias if active_rod != null else 0.0
|
||||
)
|
||||
caught_fish.weight_lb = lerpf(
|
||||
fish.get_minimum_weight(),
|
||||
fish.get_maximum_weight()
|
||||
fish.get_maximum_weight(),
|
||||
weight_roll,
|
||||
)
|
||||
caught_fish.display_scale = fish.get_display_scale_for_weight(
|
||||
caught_fish.weight_lb
|
||||
|
|
@ -118,6 +134,11 @@ func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> Fish
|
|||
var quality_multipliers: Array[float] = FishQualityType.roll_weights_for_bait(effective_bait)
|
||||
for quality: int in range(mini(quality_multipliers.size(), quality_weight_multipliers.size())):
|
||||
quality_multipliers[quality] *= maxf(quality_weight_multipliers[quality], 0.0)
|
||||
for quality: int in range(quality_multipliers.size()):
|
||||
if active_rod != null:
|
||||
quality_multipliers[quality] *= active_rod.get_quality_multiplier(
|
||||
quality
|
||||
)
|
||||
caught_fish.quality = FishQualityType.roll(
|
||||
_rng,
|
||||
quality_multipliers,
|
||||
|
|
@ -127,3 +148,14 @@ func create_catch(fish: FishDataType, bait_tags: Array[StringName] = []) -> Fish
|
|||
caught_fish.quality,
|
||||
)
|
||||
return caught_fish
|
||||
|
||||
|
||||
func _biased_unit_roll(bias: float) -> float:
|
||||
var roll: float = _rng.randf()
|
||||
var safe_bias: float = clampf(bias, -0.5, 0.5)
|
||||
if is_zero_approx(safe_bias):
|
||||
return roll
|
||||
var exponent: float = 1.0 / (1.0 + absf(safe_bias) * 2.0)
|
||||
if safe_bias > 0.0:
|
||||
return pow(roll, exponent)
|
||||
return 1.0 - pow(1.0 - roll, exponent)
|
||||
|
|
|
|||
29
fish/species/abalone_red/abalone_red.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"abalone_red"
|
||||
display_name = "red abalone"
|
||||
active = false
|
||||
catalog_number = 6405
|
||||
collection_group = &"Shellfish"
|
||||
logbook_fact = "red abalones cling to pacific rocks with broad muscular feet. rows of shell holes release water that has passed over the gills."
|
||||
allowed_water_types = 2
|
||||
rarity = 3
|
||||
base_catch_weight = 0.09
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.2
|
||||
weight_max_lb = 12.0
|
||||
sell_value_min = 24
|
||||
sell_value_max = 56
|
||||
sell_value_curve = 0.88
|
||||
27
fish/species/amberjack_greater/amberjack_greater.tres
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"amberjack_greater"
|
||||
display_name = "greater amberjack"
|
||||
active = false
|
||||
catalog_number = 3604
|
||||
collection_group = &"Large coastal predators"
|
||||
logbook_fact = "greater amberjacks circle reefs, wrecks, and offshore platforms. a dark stripe crosses the eye of their sturdy torpedo-shaped bodies."
|
||||
allowed_water_types = 2
|
||||
rarity = 2
|
||||
base_catch_weight = 0.25
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 5.0
|
||||
weight_max_lb = 90.0
|
||||
sell_value_min = 15
|
||||
sell_value_max = 42
|
||||
sell_value_curve = 0.82
|
||||
27
fish/species/amberjack_lesser/amberjack_lesser.tres
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"amberjack_lesser"
|
||||
display_name = "lesser amberjack"
|
||||
active = false
|
||||
catalog_number = 3605
|
||||
collection_group = &"Large coastal predators"
|
||||
logbook_fact = "lesser amberjacks school around deep reefs and floating objects. an enlarged eye suits their preference for dimmer water."
|
||||
allowed_water_types = 2
|
||||
rarity = 1
|
||||
base_catch_weight = 0.75
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 1.0
|
||||
weight_max_lb = 20.0
|
||||
sell_value_min = 7
|
||||
sell_value_max = 18
|
||||
sell_value_curve = 0.86
|
||||
|
|
@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"])
|
|||
script = ExtResource("1_fish_data")
|
||||
id = &"anchovy_european"
|
||||
display_name = "european anchovy"
|
||||
active = true
|
||||
catalog_number = 805
|
||||
collection_group = &"Coastal schooling fish"
|
||||
logbook_fact = "european anchovies form dense schools and feed by filtering tiny plankton from coastal water."
|
||||
allowed_water_types = 2
|
||||
base_catch_weight = 0.5
|
||||
catch_profile = ExtResource("2_profile")
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ allowed_location_tags = Array[StringName]([&"ocean"])
|
|||
script = ExtResource("1_fish_data")
|
||||
id = &"anchovy_northern"
|
||||
display_name = "northern anchovy"
|
||||
active = true
|
||||
catalog_number = 808
|
||||
collection_group = &"Coastal schooling fish"
|
||||
logbook_fact = "northern anchovies gather in huge schools along the pacific coast and filter plankton with their fine gill rakers."
|
||||
allowed_water_types = 2
|
||||
base_catch_weight = 0.5
|
||||
catch_profile = ExtResource("2_profile")
|
||||
|
|
|
|||
28
fish/species/angelfish_freshwater/angelfish_freshwater.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"angelfish_freshwater"
|
||||
display_name = "freshwater angelfish"
|
||||
active = false
|
||||
catalog_number = 7504
|
||||
collection_group = &"Tropical freshwater fish"
|
||||
logbook_fact = "freshwater angelfish slip between tall plants on narrow triangular bodies. long fins and vertical bars resemble stems and shadows."
|
||||
allowed_water_types = 1
|
||||
rarity = 2
|
||||
base_catch_weight = 0.3
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.05
|
||||
weight_max_lb = 0.5
|
||||
sell_value_min = 10
|
||||
sell_value_max = 22
|
||||
sell_value_curve = 0.95
|
||||
28
fish/species/angelfish_queen/angelfish_queen.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"angelfish_queen"
|
||||
display_name = "queen angelfish"
|
||||
active = false
|
||||
catalog_number = 5703
|
||||
collection_group = &"Reef ornamentals"
|
||||
logbook_fact = "queen angelfish graze sponges from warm atlantic reefs. a blue-ringed spot on the forehead resembles a tiny crown."
|
||||
allowed_water_types = 2
|
||||
rarity = 2
|
||||
base_catch_weight = 0.3
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.1
|
||||
weight_max_lb = 2.0
|
||||
sell_value_min = 11
|
||||
sell_value_max = 25
|
||||
sell_value_curve = 0.94
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"anglerfish_black_seadevil"
|
||||
display_name = "black seadevil"
|
||||
active = false
|
||||
catalog_number = 1801
|
||||
collection_group = &"Deep-sea oddities"
|
||||
logbook_fact = "black seadevils lure prey with a glowing organ suspended above the mouth. tiny males permanently attach to much larger females."
|
||||
allowed_water_types = 2
|
||||
rarity = 4
|
||||
base_catch_weight = 0.05
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.1
|
||||
weight_max_lb = 2.0
|
||||
sell_value_min = 48
|
||||
sell_value_max = 105
|
||||
sell_value_curve = 0.92
|
||||
28
fish/species/arapaima/arapaima.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"arapaima"
|
||||
display_name = "arapaima"
|
||||
active = false
|
||||
catalog_number = 2702
|
||||
collection_group = &"Freshwater giants"
|
||||
logbook_fact = "arapaima must surface frequently to gulp air through a specialized swim bladder. large armored scales protect their long river-going bodies."
|
||||
allowed_water_types = 1
|
||||
rarity = 4
|
||||
base_catch_weight = 0.04
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 40.0
|
||||
weight_max_lb = 400.0
|
||||
sell_value_min = 60
|
||||
sell_value_max = 140
|
||||
sell_value_curve = 0.78
|
||||
29
fish/species/arowana_silver/arowana_silver.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"arowana_silver"
|
||||
display_name = "silver arowana"
|
||||
active = false
|
||||
catalog_number = 7606
|
||||
collection_group = &"Tropical freshwater predators"
|
||||
logbook_fact = "silver arowanas patrol the surface with upturned mouths and long bodies. powerful jumps capture insects and small animals above the water."
|
||||
allowed_water_types = 1
|
||||
rarity = 3
|
||||
base_catch_weight = 0.11
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 1.0
|
||||
weight_max_lb = 15.0
|
||||
sell_value_min = 25
|
||||
sell_value_max = 56
|
||||
sell_value_curve = 0.86
|
||||
29
fish/species/axolotl/axolotl.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"axolotl"
|
||||
display_name = "axolotl"
|
||||
active = false
|
||||
catalog_number = 2001
|
||||
collection_group = &"Freshwater amphibians"
|
||||
logbook_fact = "axolotls remain aquatic and keep feathery external gills throughout adulthood. lost limbs and parts of several organs can regenerate."
|
||||
allowed_water_types = 1
|
||||
rarity = 4
|
||||
base_catch_weight = 0.04
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.1
|
||||
weight_max_lb = 0.7
|
||||
sell_value_min = 36
|
||||
sell_value_max = 78
|
||||
sell_value_curve = 0.96
|
||||
29
fish/species/barbel_common/barbel_common.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_rain = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"barbel_common"
|
||||
display_name = "common barbel"
|
||||
active = false
|
||||
catalog_number = 2501
|
||||
collection_group = &"Freshwater coarse fish"
|
||||
logbook_fact = "common barbels hold close to fast river bottoms with streamlined bodies and broad fins. four mouth barbels locate food among stones."
|
||||
allowed_water_types = 1
|
||||
rarity = 2
|
||||
base_catch_weight = 0.28
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 1.0
|
||||
weight_max_lb = 25.0
|
||||
sell_value_min = 13
|
||||
sell_value_max = 31
|
||||
sell_value_curve = 0.85
|
||||
29
fish/species/barracuda_great/barracuda_great.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"barracuda_great"
|
||||
display_name = "great barracuda"
|
||||
active = false
|
||||
catalog_number = 5804
|
||||
collection_group = &"Reef predators"
|
||||
logbook_fact = "great barracudas hover motionless before accelerating toward prey. long jaws carry two distinct rows of sharp teeth."
|
||||
allowed_water_types = 2
|
||||
rarity = 3
|
||||
base_catch_weight = 0.12
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 5.0
|
||||
weight_max_lb = 80.0
|
||||
sell_value_min = 28
|
||||
sell_value_max = 65
|
||||
sell_value_curve = 0.82
|
||||
29
fish/species/barramundi/barramundi.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_rain = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"barramundi"
|
||||
display_name = "barramundi"
|
||||
active = false
|
||||
catalog_number = 7302
|
||||
collection_group = &"Tropical estuary"
|
||||
logbook_fact = "barramundi move between rivers and coasts and can breathe in low-oxygen water. many mature first as males and later become females."
|
||||
allowed_water_types = 3
|
||||
rarity = 2
|
||||
base_catch_weight = 0.24
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 2.0
|
||||
weight_max_lb = 45.0
|
||||
sell_value_min = 15
|
||||
sell_value_max = 38
|
||||
sell_value_curve = 0.84
|
||||
29
fish/species/barreleye_pacific/barreleye_pacific.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"barreleye_pacific"
|
||||
display_name = "Pacific barreleye"
|
||||
active = false
|
||||
catalog_number = 1804
|
||||
collection_group = &"Deep-sea oddities"
|
||||
logbook_fact = "pacific barreleyes peer upward through transparent shields covering the head. tubular eyes rotate forward when the fish turns to feed."
|
||||
allowed_water_types = 2
|
||||
rarity = 4
|
||||
base_catch_weight = 0.045
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.2
|
||||
weight_max_lb = 2.5
|
||||
sell_value_min = 42
|
||||
sell_value_max = 88
|
||||
sell_value_curve = 0.9
|
||||
|
|
@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.4
|
|||
script = ExtResource("1_fish_data")
|
||||
id = &"bass"
|
||||
display_name = "striped bass"
|
||||
active = true
|
||||
catalog_number = 6701
|
||||
collection_group = &"Temperate coastal"
|
||||
logbook_fact = "striped bass split their lives between salt and fresh water, returning upriver to spawn. a long-lived striper may see three decades."
|
||||
allowed_water_types = 2
|
||||
rarity = 1
|
||||
base_catch_weight = 4.0
|
||||
|
|
|
|||
29
fish/species/betta_siamese/betta_siamese.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
require_rain = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"betta_siamese"
|
||||
display_name = "Siamese fighting fish"
|
||||
active = false
|
||||
catalog_number = 7508
|
||||
collection_group = &"Tropical freshwater fish"
|
||||
logbook_fact = "siamese fighting fish breathe surface air with a labyrinth organ. males build bubble nests and guard the eggs beneath them."
|
||||
allowed_water_types = 1
|
||||
rarity = 1
|
||||
base_catch_weight = 1.0
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.01
|
||||
weight_max_lb = 0.15
|
||||
sell_value_min = 5
|
||||
sell_value_max = 10
|
||||
sell_value_curve = 1.0
|
||||
28
fish/species/black_drum/black_drum.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"black_drum"
|
||||
display_name = "black drum"
|
||||
active = false
|
||||
catalog_number = 6802
|
||||
collection_group = &"Temperate estuary"
|
||||
logbook_fact = "black drum crush oysters and crabs with rounded throat teeth. large adults develop dark vertical bars that fade with age."
|
||||
allowed_water_types = 2
|
||||
rarity = 1
|
||||
base_catch_weight = 0.7
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 1.0
|
||||
weight_max_lb = 70.0
|
||||
sell_value_min = 8
|
||||
sell_value_max = 27
|
||||
sell_value_curve = 0.82
|
||||
29
fish/species/blobfish_smooth_head/blobfish_smooth_head.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"blobfish_smooth_head"
|
||||
display_name = "smooth-head blobfish"
|
||||
active = false
|
||||
catalog_number = 1805
|
||||
collection_group = &"Deep-sea oddities"
|
||||
logbook_fact = "smooth-head blobfish rest on deep slopes where pressure supports their soft bodies. they conserve energy by waiting for edible matter nearby."
|
||||
allowed_water_types = 2
|
||||
rarity = 4
|
||||
base_catch_weight = 0.04
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.5
|
||||
weight_max_lb = 5.0
|
||||
sell_value_min = 42
|
||||
sell_value_max = 90
|
||||
sell_value_curve = 0.86
|
||||
28
fish/species/bluefish/bluefish.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bluefish"
|
||||
display_name = "bluefish"
|
||||
active = false
|
||||
catalog_number = 702
|
||||
collection_group = &"Coastal pelagic fish"
|
||||
logbook_fact = "bluefish race in coordinated schools while pursuing smaller fish. sharp teeth and powerful jaws make their feeding bursts especially fierce."
|
||||
allowed_water_types = 2
|
||||
rarity = 1
|
||||
base_catch_weight = 0.85
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.5
|
||||
weight_max_lb = 25.0
|
||||
sell_value_min = 7
|
||||
sell_value_max = 19
|
||||
sell_value_curve = 0.85
|
||||
|
|
@ -9,6 +9,10 @@
|
|||
script = ExtResource("1_fish_data")
|
||||
id = &"bluegill"
|
||||
display_name = "bluegill"
|
||||
active = true
|
||||
catalog_number = 3102
|
||||
collection_group = &"Freshwater panfish"
|
||||
logbook_fact = "bluegill fathers sweep shallow bowls into the bottom for nests, then stand guard. whole neighborhoods of nests can crowd together."
|
||||
allowed_water_types = 1
|
||||
rarity = 0
|
||||
base_catch_weight = 10.0
|
||||
|
|
|
|||
29
fish/species/bonefish/bonefish.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
forbid_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bonefish"
|
||||
display_name = "bonefish"
|
||||
active = false
|
||||
catalog_number = 7401
|
||||
collection_group = &"Tropical flats fish"
|
||||
logbook_fact = "bonefish sweep tropical flats in silvery schools and root for buried prey. their speed and pale bodies make them difficult to follow in shallow water."
|
||||
allowed_water_types = 2
|
||||
rarity = 2
|
||||
base_catch_weight = 0.25
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.5
|
||||
weight_max_lb = 15.0
|
||||
sell_value_min = 13
|
||||
sell_value_max = 31
|
||||
sell_value_curve = 0.86
|
||||
29
fish/species/bowfin/bowfin.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bowfin"
|
||||
display_name = "bowfin"
|
||||
active = false
|
||||
catalog_number = 101
|
||||
collection_group = &"Ancient freshwater fish"
|
||||
logbook_fact = "bowfin can gulp air at the surface when warm backwaters run low on oxygen. a long dorsal fin ripples as they stalk prey."
|
||||
allowed_water_types = 1
|
||||
rarity = 2
|
||||
base_catch_weight = 0.28
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 1.0
|
||||
weight_max_lb = 20.0
|
||||
sell_value_min = 13
|
||||
sell_value_max = 30
|
||||
sell_value_curve = 0.85
|
||||
28
fish/species/boxfish_yellow/boxfish_yellow.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"boxfish_yellow"
|
||||
display_name = "yellow boxfish"
|
||||
active = false
|
||||
catalog_number = 5608
|
||||
collection_group = &"Reef oddities"
|
||||
logbook_fact = "yellow boxfish juveniles are bright cubes covered in black spots. rigid body armor leaves small fins to provide careful steering."
|
||||
allowed_water_types = 2
|
||||
rarity = 2
|
||||
base_catch_weight = 0.32
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.03
|
||||
weight_max_lb = 0.8
|
||||
sell_value_min = 10
|
||||
sell_value_max = 22
|
||||
sell_value_curve = 0.96
|
||||
27
fish/species/bream_common/bream_common.tres
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bream_common"
|
||||
display_name = "common bream"
|
||||
active = false
|
||||
catalog_number = 2502
|
||||
collection_group = &"Freshwater coarse fish"
|
||||
logbook_fact = "common bream gather in slow rivers and lakes with silvery, deep-sided bodies. protruding mouths sift insect larvae from soft bottoms."
|
||||
allowed_water_types = 1
|
||||
rarity = 0
|
||||
base_catch_weight = 1.8
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.3
|
||||
weight_max_lb = 15.0
|
||||
sell_value_min = 4
|
||||
sell_value_max = 12
|
||||
sell_value_curve = 0.88
|
||||
28
fish/species/buffalo_bigmouth/buffalo_bigmouth.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"buffalo_bigmouth"
|
||||
display_name = "bigmouth buffalo"
|
||||
active = false
|
||||
catalog_number = 2301
|
||||
collection_group = &"Freshwater bottom fish"
|
||||
logbook_fact = "bigmouth buffalo filter plankton with fine gill rakers instead of rooting for prey. some individuals survive for more than a century."
|
||||
allowed_water_types = 1
|
||||
rarity = 3
|
||||
base_catch_weight = 0.12
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 8.0
|
||||
weight_max_lb = 80.0
|
||||
sell_value_min = 28
|
||||
sell_value_max = 63
|
||||
sell_value_curve = 0.82
|
||||
27
fish/species/buffalo_smallmouth/buffalo_smallmouth.tres
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"buffalo_smallmouth"
|
||||
display_name = "smallmouth buffalo"
|
||||
active = false
|
||||
catalog_number = 2304
|
||||
collection_group = &"Freshwater bottom fish"
|
||||
logbook_fact = "smallmouth buffalo use thick lips to graze bottom-dwelling food in warm rivers. their deep, heavy bodies form a pronounced arch behind the head."
|
||||
allowed_water_types = 1
|
||||
rarity = 2
|
||||
base_catch_weight = 0.3
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 3.0
|
||||
weight_max_lb = 45.0
|
||||
sell_value_min = 14
|
||||
sell_value_max = 34
|
||||
sell_value_curve = 0.84
|
||||
28
fish/species/bullhead_black/bullhead_black.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bullhead_black"
|
||||
display_name = "black bullhead"
|
||||
active = false
|
||||
catalog_number = 2401
|
||||
collection_group = &"Freshwater catfish"
|
||||
logbook_fact = "black bullheads tolerate warm, cloudy water with little oxygen. stout spines protect the dorsal and pectoral fins from predators."
|
||||
allowed_water_types = 1
|
||||
rarity = 1
|
||||
base_catch_weight = 1.0
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.3
|
||||
weight_max_lb = 6.0
|
||||
sell_value_min = 5
|
||||
sell_value_max = 11
|
||||
sell_value_curve = 0.92
|
||||
28
fish/species/bullhead_brown/bullhead_brown.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bullhead_brown"
|
||||
display_name = "brown bullhead"
|
||||
active = false
|
||||
catalog_number = 2403
|
||||
collection_group = &"Freshwater catfish"
|
||||
logbook_fact = "brown bullheads search muddy bottoms with eight sensitive barbels. males guard nests and herd newly hatched young in a dark moving ball."
|
||||
allowed_water_types = 1
|
||||
rarity = 0
|
||||
base_catch_weight = 2.3
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.2
|
||||
weight_max_lb = 4.0
|
||||
sell_value_min = 3
|
||||
sell_value_max = 7
|
||||
sell_value_curve = 0.95
|
||||
29
fish/species/bullhead_yellow/bullhead_yellow.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_rain = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"bullhead_yellow"
|
||||
display_name = "yellow bullhead"
|
||||
active = false
|
||||
catalog_number = 2408
|
||||
collection_group = &"Freshwater catfish"
|
||||
logbook_fact = "yellow bullheads use pale chin barbels to distinguish food in murky shallows. both parents may guard the nest and schooling young."
|
||||
allowed_water_types = 1
|
||||
rarity = 0
|
||||
base_catch_weight = 2.0
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.2
|
||||
weight_max_lb = 3.5
|
||||
sell_value_min = 3
|
||||
sell_value_max = 7
|
||||
sell_value_curve = 0.95
|
||||
29
fish/species/burbot/burbot.tres
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_day = false
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"burbot"
|
||||
display_name = "burbot"
|
||||
active = false
|
||||
catalog_number = 1001
|
||||
collection_group = &"Cold freshwater fish"
|
||||
logbook_fact = "burbot are the only freshwater members of the cod family. they become most active in cold darkness and may spawn beneath winter ice."
|
||||
allowed_water_types = 1
|
||||
rarity = 2
|
||||
base_catch_weight = 0.24
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.5
|
||||
weight_max_lb = 18.0
|
||||
sell_value_min = 12
|
||||
sell_value_max = 28
|
||||
sell_value_curve = 0.86
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
allow_night = false
|
||||
forbid_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"butterflyfish_copperband"
|
||||
display_name = "copperband butterflyfish"
|
||||
active = false
|
||||
catalog_number = 5701
|
||||
collection_group = &"Reef ornamentals"
|
||||
logbook_fact = "copperband butterflyfish probe reef cracks with long narrow snouts. bold orange bands and a false eyespot confuse predators."
|
||||
allowed_water_types = 2
|
||||
rarity = 2
|
||||
base_catch_weight = 0.32
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.03
|
||||
weight_max_lb = 0.4
|
||||
sell_value_min = 9
|
||||
sell_value_max = 21
|
||||
sell_value_curve = 0.98
|
||||
28
fish/species/capelin/capelin.tres
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
[gd_resource type="Resource" script_class="FishData" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"]
|
||||
[ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"]
|
||||
[ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"]
|
||||
|
||||
[sub_resource type="Resource" id="Availability"]
|
||||
script = ExtResource("3_availability")
|
||||
require_fog = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_fish_data")
|
||||
id = &"capelin"
|
||||
display_name = "capelin"
|
||||
active = false
|
||||
catalog_number = 1302
|
||||
collection_group = &"Cold schooling fish"
|
||||
logbook_fact = "capelin are small polar fish that feed whales, seabirds, and larger fish. many schools roll onto beaches or shallows to release their eggs."
|
||||
allowed_water_types = 2
|
||||
rarity = 1
|
||||
base_catch_weight = 1.0
|
||||
catch_profile = ExtResource("2_profile")
|
||||
availability = SubResource("Availability")
|
||||
weight_min_lb = 0.03
|
||||
weight_max_lb = 0.2
|
||||
sell_value_min = 4
|
||||
sell_value_max = 8
|
||||
sell_value_curve = 1.0
|
||||
|
|
@ -14,6 +14,10 @@ preferred_bait_weight_multiplier = 1.5
|
|||
script = ExtResource("1_fish_data")
|
||||
id = &"carp"
|
||||
display_name = "common carp"
|
||||
active = true
|
||||
catalog_number = 2503
|
||||
collection_group = &"Freshwater coarse fish"
|
||||
logbook_fact = "whisker-like barbels help a common carp investigate the bottom. nosing through sediment can cloud the water and loosen plants."
|
||||
allowed_water_types = 1
|
||||
rarity = 2
|
||||
base_catch_weight = 1.5
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@ preferred_bait_weight_multiplier = 1.35
|
|||
script = ExtResource("1_fish_data")
|
||||
id = &"catfish_blue"
|
||||
display_name = "blue catfish"
|
||||
active = true
|
||||
catalog_number = 2402
|
||||
collection_group = &"Freshwater catfish"
|
||||
logbook_fact = "a deep fork in the tail inspired the blue catfish's scientific name. it rests deep by daylight and becomes more active after dark."
|
||||
allowed_water_types = 1
|
||||
rarity = 1
|
||||
base_catch_weight = 1.25
|
||||
|
|
|
|||