Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/HarbourMasters/Shipwright
Browse files Browse the repository at this point in the history
…into develop
  • Loading branch information
Caladius committed Oct 11, 2024
2 parents 7acd3d5 + 6e02558 commit 32cfdcc
Show file tree
Hide file tree
Showing 491 changed files with 56,101 additions and 41,452 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ tools/asmsplitter/c/*
ctx.c
tools/*dSYM/
graphs/
.netcoredbg_hist

# Assets
*.png
Expand Down
16 changes: 15 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,21 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment ve
project(Ship VERSION 8.0.6 LANGUAGES C CXX)
include(CMake/soh-cvars.cmake)
include(CMake/lus-cvars.cmake)
set(PROJECT_BUILD_NAME "MacReady Golf" CACHE STRING "" FORCE)

set(NATO_PHONETIC_ALPHABET
"Alfa" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" "Golf" "Hotel"
"India" "Juliett" "Kilo" "Lima" "Mike" "November" "Oscar" "Papa"
"Quebec" "Romeo" "Sierra" "Tango" "Uniform" "Victor" "Whiskey"
"Xray" "Yankee" "Zulu"
)

# Get the patch version number from the project version
math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}")

# Use the patch number to select the correct word
list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD)

set(PROJECT_BUILD_NAME "MacReady ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE)
set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "" FORCE)

execute_process(
Expand Down
2 changes: 1 addition & 1 deletion OTRExporter
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,17 @@ Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
| Tab | Toggle Alternate assets |
| Ctrl+R | Reset |

# Project Overview
Ship of Harkinian (SOH) is built atop a custom library dubbed libultraship (LUS). Back in the N64 days, there was an SDK distributed to developers named libultra; LUS is designed to mimic the functionality of libultra on modern hardware. In addition, we are dependant on the source code provided by the OOT decompilation project.

In order for the game to function, you will require a **legally aquired** ROM for Ocarina of Time. Click [here](https://ship.equipment/) to check the compatability of your specific rom. Any copyrighted assets are extracted from the ROM and reformated as a .otr archive file which the code uses.

### Graphics Backends
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (MacOS). You can change which API to use in the `Settings` menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the `shipofharkinian.json` file by finding the line `gfxbackend:""` and changing the value to `sdl` for OpenGL. DirectX 11 is the default on Windows.

# Custom Assets

Custom assets are packed in `.otr` files. To use custom assets, place them in the `mods` folder.
Custom assets are packed in `.otr` archive files. To use custom assets, place them in the `mods` folder.

If you're interested in creating and/or packing your own custom asset `.otr` files, check out the following tools:
* [**retro - OTR generator**](https://github.com/HarbourMasters64/retro)
Expand All @@ -93,6 +98,15 @@ If you want to playtest a continuous integration build, you can find them at the
* [macOS](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-mac.zip)
* [Linux](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-linux.zip)

### Further Reading
More detailed documentation can be found in the 'docs' directory, including the afformentioned [building instructions](docs/BUILDING.md).

*[Credits](docs/CREDITS.md)
*[Custom Music](docs/CUSTOM_MUSIC.md)
*[Controler Maping](docs/GAME_CONTROLLER_DB.md)
*[Modding](docs/MODDING.md)
*[Versioning](docs/VERSIONING.md)

<a href="https://github.com/Kenix3/libultraship/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="./docs/poweredbylus.darkmode.png">
Expand Down
19 changes: 19 additions & 0 deletions soh/assets/custom/objects/object_boss_soul/gGIBossSoulSkullDL
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_boss_soul/mat_gGIBossSoulSkullDL_skull_surface"/>
<CallDisplayList Path="objects/object_boss_soul/gGIBossSoulSkullDL_tri_0"/>
<CallDisplayList Path="objects/object_boss_soul/mat_gGIBossSoulSkullDL_skull_black"/>
<CallDisplayList Path="objects/object_boss_soul/gGIBossSoulSkullDL_tri_1"/>
<CallDisplayList Path="objects/object_boss_soul/mat_gGIBossSoulSkullDL_skull_eyes"/>
<CallDisplayList Path="objects/object_boss_soul/gGIBossSoulSkullDL_tri_2"/>
<CallDisplayList Path="objects/object_boss_soul/mat_gGIBossSoulSkullDL_skull_horns"/>
<CallDisplayList Path="objects/object_boss_soul/gGIBossSoulSkullDL_tri_3"/>
<CallDisplayList Path="objects/object_boss_soul/mat_gGIBossSoulSkullDL_Gem_eyes"/>
<CallDisplayList Path="objects/object_boss_soul/gGIBossSoulSkullDL_tri_4"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

163 changes: 163 additions & 0 deletions soh/assets/custom/objects/object_boss_soul/gGIBossSoulSkullDL_tri_0
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="3" V01="2" V02="4"/>
<Triangle1 V00="2" V01="5" V02="4"/>
<Triangle1 V00="2" V01="6" V02="5"/>
<Triangle1 V00="7" V01="6" V02="2"/>
<Triangle1 V00="2" V01="8" V02="7"/>
<Triangle1 V00="2" V01="9" V02="8"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="11" V02="10"/>
<Triangle1 V00="10" V01="13" V02="12"/>
<Triangle1 V00="10" V01="14" V02="13"/>
<Triangle1 V00="12" V01="13" V02="15"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="3" V02="1"/>
<Triangle1 V00="4" V01="2" V02="1"/>
<Triangle1 V00="2" V01="4" V02="5"/>
<Triangle1 V00="6" V01="5" V02="4"/>
<Triangle1 V00="4" V01="7" V02="6"/>
<Triangle1 V00="4" V01="8" V02="7"/>
<Triangle1 V00="1" V01="8" V02="4"/>
<Triangle1 V00="1" V01="9" V02="8"/>
<Triangle1 V00="9" V01="10" V02="8"/>
<Triangle1 V00="7" V01="8" V02="10"/>
<Triangle1 V00="7" V01="10" V02="11"/>
<Triangle1 V00="11" V01="10" V02="12"/>
<Triangle1 V00="11" V01="12" V02="13"/>
<Triangle1 V00="13" V01="12" V02="14"/>
<Triangle1 V00="15" V01="14" V02="12"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="2" V01="3" V02="0"/>
<Triangle1 V00="4" V01="3" V02="2"/>
<Triangle1 V00="4" V01="5" V02="3"/>
<Triangle1 V00="4" V01="6" V02="5"/>
<Triangle1 V00="4" V01="7" V02="6"/>
<Triangle1 V00="6" V01="7" V02="8"/>
<Triangle1 V00="6" V01="8" V02="9"/>
<Triangle1 V00="10" V01="9" V02="8"/>
<Triangle1 V00="10" V01="8" V02="11"/>
<Triangle1 V00="8" V01="12" V02="11"/>
<Triangle1 V00="13" V01="12" V02="8"/>
<Triangle1 V00="14" V01="13" V02="8"/>
<Triangle1 V00="14" V01="8" V02="15"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="48" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="3" V01="0" V02="2"/>
<Triangle1 V00="2" V01="4" V02="3"/>
<Triangle1 V00="2" V01="5" V02="4"/>
<Triangle1 V00="2" V01="6" V02="5"/>
<Triangle1 V00="6" V01="7" V02="5"/>
<Triangle1 V00="7" V01="6" V02="8"/>
<Triangle1 V00="7" V01="8" V02="9"/>
<Triangle1 V00="5" V01="7" V02="10"/>
<Triangle1 V00="5" V01="10" V02="11"/>
<Triangle1 V00="11" V01="12" V02="5"/>
<Triangle1 V00="13" V01="12" V02="11"/>
<Triangle1 V00="13" V01="11" V02="14"/>
<Triangle1 V00="15" V01="13" V02="14"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="64" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="2" V01="3" V02="0"/>
<Triangle1 V00="4" V01="0" V02="3"/>
<Triangle1 V00="0" V01="4" V02="5"/>
<Triangle1 V00="4" V01="6" V02="5"/>
<Triangle1 V00="6" V01="4" V02="7"/>
<Triangle1 V00="4" V01="8" V02="7"/>
<Triangle1 V00="4" V01="9" V02="8"/>
<Triangle1 V00="10" V01="9" V02="4"/>
<Triangle1 V00="4" V01="11" V02="10"/>
<Triangle1 V00="11" V01="12" V02="10"/>
<Triangle1 V00="11" V01="13" V02="12"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="80" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="0" V02="3"/>
<Triangle1 V00="4" V01="3" V02="5"/>
<Triangle1 V00="6" V01="5" V02="3"/>
<Triangle1 V00="6" V01="3" V02="7"/>
<Triangle1 V00="6" V01="7" V02="8"/>
<Triangle1 V00="6" V01="8" V02="9"/>
<Triangle1 V00="9" V01="10" V02="6"/>
<Triangle1 V00="9" V01="11" V02="10"/>
<Triangle1 V00="11" V01="12" V02="10"/>
<Triangle1 V00="12" V01="11" V02="13"/>
<Triangle1 V00="14" V01="12" V02="13"/>
<Triangle1 V00="14" V01="15" V02="12"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="96" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="0" V01="3" V02="4"/>
<Triangle1 V00="0" V01="4" V02="5"/>
<Triangle1 V00="4" V01="6" V02="5"/>
<Triangle1 V00="6" V01="7" V02="5"/>
<Triangle1 V00="7" V01="8" V02="5"/>
<Triangle1 V00="8" V01="7" V02="9"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="11" V01="5" V02="8"/>
<Triangle1 V00="12" V01="5" V02="11"/>
<Triangle1 V00="13" V01="12" V02="11"/>
<Triangle1 V00="13" V01="11" V02="14"/>
<Triangle1 V00="15" V01="14" V02="11"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="112" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="1" V01="3" V02="2"/>
<Triangle1 V00="0" V01="4" V02="5"/>
<Triangle1 V00="0" V01="6" V02="4"/>
<Triangle1 V00="4" V01="7" V02="5"/>
<Triangle1 V00="4" V01="8" V02="7"/>
<Triangle1 V00="9" V01="7" V02="8"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="8" V01="11" V02="10"/>
<Triangle1 V00="11" V01="12" V02="10"/>
<Triangle1 V00="11" V01="13" V02="12"/>
<Triangle1 V00="14" V01="12" V02="13"/>
<Triangle1 V00="14" V01="15" V02="12"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="128" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="3" V01="4" V02="0"/>
<Triangle1 V00="0" V01="5" V02="1"/>
<Triangle1 V00="0" V01="6" V02="5"/>
<Triangle1 V00="6" V01="7" V02="5"/>
<Triangle1 V00="6" V01="8" V02="7"/>
<Triangle1 V00="5" V01="7" V02="9"/>
<Triangle1 V00="10" V01="9" V02="7"/>
<Triangle1 V00="11" V01="10" V02="7"/>
<Triangle1 V00="12" V01="9" V02="10"/>
<Triangle1 V00="13" V01="9" V02="12"/>
<Triangle1 V00="14" V01="13" V02="12"/>
<Triangle1 V00="14" V01="12" V02="15"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="144" Count="14"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="3" V01="0" V02="2"/>
<Triangle1 V00="3" V01="2" V02="4"/>
<Triangle1 V00="2" V01="5" V02="4"/>
<Triangle1 V00="6" V01="0" V02="3"/>
<Triangle1 V00="7" V01="0" V02="6"/>
<Triangle1 V00="8" V01="7" V02="6"/>
<Triangle1 V00="8" V01="6" V02="9"/>
<Triangle1 V00="7" V01="1" V02="0"/>
<Triangle1 V00="10" V01="11" V02="12"/>
<Triangle1 V00="10" V01="12" V02="13"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_0" VertexBufferIndex="0" VertexOffset="158" Count="13"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="3" V02="1"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="7" V02="5"/>
<Triangle1 V00="7" V01="8" V02="5"/>
<Triangle1 V00="7" V01="9" V02="8"/>
<Triangle1 V00="10" V01="8" V02="9"/>
<Triangle1 V00="10" V01="11" V02="8"/>
<Triangle1 V00="11" V01="12" V02="8"/>
<Triangle1 V00="5" V01="8" V02="12"/>
<EndDisplayList/>
</DisplayList>

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="2" V01="4" V02="3"/>
<Triangle1 V00="3" V01="5" V02="0"/>
<Triangle1 V00="3" V01="6" V02="5"/>
<Triangle1 V00="5" V01="7" V02="0"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="10" V01="12" V02="11"/>
<Triangle1 V00="11" V01="13" V02="8"/>
<Triangle1 V00="11" V01="14" V02="13"/>
<Triangle1 V00="13" V01="15" V02="8"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_1" VertexBufferIndex="0" VertexOffset="16" Count="8"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="3" V01="2" V02="1"/>
<Triangle1 V00="3" V01="4" V02="2"/>
<Triangle1 V00="5" V01="4" V02="3"/>
<Triangle1 V00="5" V01="6" V02="4"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="0" V02="7"/>
<Triangle1 V00="0" V01="2" V02="7"/>
<EndDisplayList/>
</DisplayList>

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="3" V01="2" V02="1"/>
<EndDisplayList/>
</DisplayList>

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_3" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="3" V01="2" V02="4"/>
<Triangle1 V00="3" V01="4" V02="5"/>
<Triangle1 V00="5" V01="4" V02="6"/>
<Triangle1 V00="7" V01="8" V02="9"/>
<Triangle1 V00="7" V01="9" V02="10"/>
<Triangle1 V00="10" V01="9" V02="11"/>
<Triangle1 V00="10" V01="11" V02="12"/>
<Triangle1 V00="12" V01="11" V02="13"/>
<Triangle1 V00="14" V01="10" V02="12"/>
<Triangle1 V00="15" V01="10" V02="14"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_3" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="3" V01="2" V02="4"/>
<Triangle1 V00="2" V01="5" V02="4"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="3" V01="4" V02="7"/>
<Triangle1 V00="7" V01="4" V02="8"/>
<Triangle1 V00="1" V01="9" V02="10"/>
<Triangle1 V00="11" V01="12" V02="13"/>
<Triangle1 V00="11" V01="14" V02="12"/>
<Triangle1 V00="14" V01="15" V02="12"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_3" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="1" V01="3" V02="2"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="7" V02="5"/>
<Triangle1 V00="8" V01="7" V02="4"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="10" V01="9" V02="8"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="11" V01="12" V02="9"/>
<Triangle1 V00="11" V01="13" V02="12"/>
<Triangle1 V00="13" V01="14" V02="12"/>
<Triangle1 V00="9" V01="12" V02="15"/>
<LoadVertices Path="objects/object_boss_soul/gGIBossSoulSkullDL_vtx_3" VertexBufferIndex="0" VertexOffset="48" Count="8"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="3" V01="2" V02="4"/>
<Triangle1 V00="4" V01="2" V02="5"/>
<Triangle1 V00="2" V01="6" V02="5"/>
<Triangle1 V00="4" V01="5" V02="7"/>
<EndDisplayList/>
</DisplayList>

Loading

0 comments on commit 32cfdcc

Please sign in to comment.