summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2024-01-21 05:24:05 +0100
committerGitHub <noreply@github.com>2024-01-20 21:24:05 -0700
commit27e0f763e0b84dcb87071b7bc26109a0e1ee3ecb (patch)
treefd6938a960b64cfe8fb0278601897a41b3e4cd10 /docs
parent639fec14583decbebba6bc069157884bda17f054 (diff)
update docs (#555)
* Update doxygen-gh-pages.yml * reorganise docs folder add ref and a button to switch between dark and light, optimise doxygen
Diffstat (limited to 'docs')
-rw-r--r--docs/actors/actors.md (renamed from docs/basics/actors.md)2
-rw-r--r--docs/actors/items.md1
-rw-r--r--docs/actors/objects.md2
-rw-r--r--docs/actors/vehicles.md (renamed from docs/basics/vehicles.md)2
-rw-r--r--docs/actorsmenu.md (renamed from docs/basics/actorsmenu.md)99
-rw-r--r--docs/basics/BUILD_WINDOWS.md2
-rw-r--r--docs/basics/basicconcepts.md8
-rw-r--r--docs/basics/compiling.md20
-rw-r--r--docs/basics/controlflow.md104
-rw-r--r--docs/basics/items.md1
-rw-r--r--docs/basics/objects.md2
-rw-r--r--docs/basics/terminology.md2
-rw-r--r--docs/basicsmenu.md (renamed from docs/basics/basicsmenu.md)93
-rw-r--r--docs/courses/courses.md (renamed from docs/basics/courses.md)0
-rw-r--r--docs/courses/surfacetypes.md (renamed from docs/basics/surfacetypes.md)6
-rw-r--r--docs/coursesmenu.md41
-rw-r--r--docs/docs.css (renamed from docs/basics/coursesmenu.md)69
-rw-r--r--docs/header.html84
-rw-r--r--docs/images/buttonimage.pngbin0 -> 138482 bytes
-rw-r--r--docs/mainpage.md84
-rw-r--r--docs/tutorials.md50
-rw-r--r--docs/tutorials/audio.md2
-rw-r--r--docs/tutorials/paths.md2
-rw-r--r--docs/tutorials/tutorials.md131
24 files changed, 297 insertions, 510 deletions
diff --git a/docs/basics/actors.md b/docs/actors/actors.md
index e29c39714..31dbd9c71 100644
--- a/docs/basics/actors.md
+++ b/docs/actors/actors.md
@@ -1,4 +1,4 @@
-\page actors How Actors Work
+@page actors How Actors Work
# Actors
If you are familiar with oot or sm64 prepare to be very disappointed. Both games split actors into separate files. In an unorderly fashion, mk64 appears to place all actors in the same file save for the odd exception.
diff --git a/docs/actors/items.md b/docs/actors/items.md
new file mode 100644
index 000000000..c81b7f90e
--- /dev/null
+++ b/docs/actors/items.md
@@ -0,0 +1 @@
+@page items Items
diff --git a/docs/actors/objects.md b/docs/actors/objects.md
new file mode 100644
index 000000000..cdd256596
--- /dev/null
+++ b/docs/actors/objects.md
@@ -0,0 +1,2 @@
+@page objects Objects
+# Objects
diff --git a/docs/basics/vehicles.md b/docs/actors/vehicles.md
index 2f876c782..679dd8198 100644
--- a/docs/basics/vehicles.md
+++ b/docs/actors/vehicles.md
@@ -1,4 +1,4 @@
-\page vehicles Vehicles
+@page vehicles Vehicles
[TOC]
diff --git a/docs/basics/actorsmenu.md b/docs/actorsmenu.md
index 6213121b9..f19c514ff 100644
--- a/docs/basics/actorsmenu.md
+++ b/docs/actorsmenu.md
@@ -1,4 +1,4 @@
-\page actorsmenu Actors
+@page actorsmenu Actors
Actors are dynamic game objects usually subject to game physics such as gravity, force, and collision. They might move around the map, spin, or interactive in some manner. Alternatively, static game objects cannot move and cannot be interacted with. They can use collision but not physics. A course model and Mario Raceway's Pipe are examples of static objects. Any of the items or player karts are examples of dynamic game objects; actors.
@@ -6,100 +6,19 @@ mk64 contains two systems for implementing actors. They have been deemed as acto
The two main variables to concern yourself with are `gActorList` and `gObjectList`; the core containers of the two systems.
-`gActorList` contains:
+@ref gActorList contains:
```
trees, bushes, falling rocks, kiwano-fruit, banana, shells, piranha-plant, train wheels, rail-road crossing, cows, yoshi-valley's egg, spinning signs, palm trees, paddle for the paddle-wheeled boat, wheels for cars/trucks, etc.
```
The actor code has two main parts; the update code and the render code. The update code alters the position/rotation of the object whereas the render code displays the object on the screen.
-`gObjectList` contains:
+@ref gObjectList contains:
```
thwomps, bowser fire-breath, moles, hedgehogs, snowmen, crabs, particles, leaves, etc (also, probably penguins and birds).
```
The object system is much more complex than actors and is not well documented.
-
-\htmlonly
+@htmlonly
<br>
-<style>
-.pagebutton {
- display: inline-block;
- margin-right: 1em;
- margin-bottom: 1em;
-}
-.pagelink {
- display: block;
- background-color: rgb(40, 44, 52);
- width: 320px;
- box-shadow: 0 0 0 0;
- transition: 0.3s ease;
-}
-.pagelink:hover {
- box-shadow: 0 5px 15px 5px rgba(0,0,0,1);
-
-}
-.pagelink:hover img {
- transform: scale3d(1.1,1.1,1.1);
-
-}
-.pageimg {
- display: inline-block;
- width: 100%;
- position: relative;
- overflow: hidden;
-}
-.pageimg img {
- transition: 0.3s ease;
-}
-.content {
- color: white;
- font-size: 1em;
- padding: 0;
- margin: 0;
-}
-.pageheading {
- padding: .5em .5em;
- font-size: 18px;
- color: white;
- font-weight: bold;
- text-decoration: none;
-}
-.pagedescription {
- color: #fff;
- border-color: transparent;
- opacity: 0.75;
- height: 84px;
- text-overflow: ellipsis;
- overflow: hidden;
- margin-top: 10px;
- display: block;
- padding: 10px;
- text-decoration: none;
- line-height: 1.64em;
- font-size: 1em;
- font-weight: normal;
- text-decoration: none;
-}
-.pagea {
- display: inline-block;
-}
-.pagea:link {
- text-decoration: none;
-}
-.pagea:visited {
- text-decoration: none;
-}
-.pagea:hover {
- text-decoration: none;
-}
-.pagea:active {
- text-decoration: none;
-}
-p {
- margin: 0;
- padding: 0;
-}
-</style>
-
<div class="pagebutton">
<a class="pagea" href="actors.html">
<div class="pagelink">
@@ -156,9 +75,9 @@ p {
</a>
</div>
-\endhtmlonly
+@endhtmlonly
-\subpage actors
-\subpage objects
-\subpage vehicles
-\subpage items
+@subpage actors
+@subpage objects
+@subpage vehicles
+@subpage items
diff --git a/docs/basics/BUILD_WINDOWS.md b/docs/basics/BUILD_WINDOWS.md
index 88236bcad..cb7fdafe8 100644
--- a/docs/basics/BUILD_WINDOWS.md
+++ b/docs/basics/BUILD_WINDOWS.md
@@ -1,4 +1,4 @@
-\page buildwindows Compiling for Windows
+@page buildwindows Compiling for Windows
## Compiling mk64 Decomp In Windows
***This method is not recommended nor supported. However, it is the only solution to build in W7/W8. WSL is the path of least resistance, use that not this***
diff --git a/docs/basics/basicconcepts.md b/docs/basics/basicconcepts.md
index 0b9254fa3..f5b2d555b 100644
--- a/docs/basics/basicconcepts.md
+++ b/docs/basics/basicconcepts.md
@@ -14,7 +14,7 @@ Computers use addresses to jump through code. This works similar to a house numb
A typical N64 address: `0x80160158`
In an N64 program, addresses begin at `0x80000000`. As you create code, data, and the like, the compiler will add onto this base number and assign variables to an address.
-```
+```c
s32 a = 2; // 0x80000004
s32 b = 7; // 0x80000008
s32 c = 5; // 0x8000000C
@@ -22,7 +22,7 @@ s32 d = 1; // 0x80000010
s32 e = 3; // 0x80000014
```
Replacing a variable with a hard-coded address grabs the value at that address.
-```
+```c
print(0x80000004); // or
print(a);
```
@@ -40,7 +40,7 @@ Texture a_texture[] = {
};
```
The address of this could extend from `0x80000100` to `0x800000534`. However, you would not see data begin at `0x80000533`. The compiler generally aligns objects to 4, 8, 0xC, or 0x10. With the exception being when you're working with s16 and s8. If you have:
-```
+```c
s16 a = 3; // Value compiled to 0x0003
s32 b = 5; // Value compiled to 0x00000005
```
@@ -52,7 +52,7 @@ The compiler aligned `b` to the nearest 0x4. If there were two s16's then the bl
# How Errors Happen
The maximum value of an s8 (0x00) is 0xFF or 255. `0xFF + 1 = 0x100` imagine this scenario:
-```
+```c
s8 a = 1;
s8 b = 2;
s8 c = 3;
diff --git a/docs/basics/compiling.md b/docs/basics/compiling.md
index c6fa24a7a..59ade96da 100644
--- a/docs/basics/compiling.md
+++ b/docs/basics/compiling.md
@@ -11,13 +11,13 @@ The build system has the following package requirements:
To add submodules run `git submodule update --init --recursive` after cloning.
# Linux
-```
+```bash
sudo apt install build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
```
### Arch
-```
+```bash
sudo pacman -S base-devel capstone python
```
Install the following AUR package:
@@ -34,7 +34,7 @@ Not recommended. Use WSL unless this is your only option.
# macOS
Install [Homebrew](https://brew.sh), then install the following dependencies:
-```
+```bash
brew update
brew install python3 capstone coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils
```
@@ -44,19 +44,19 @@ Build using `gmake` ensuring homebrew `make` is used instead of the old macOS sy
# Docker
Build the Docker image:
-```
+```bash
docker build -t mk64 .
```
When building and using other tools, append the following in front of every command you run:
```bash
-docker run --rm -v ${PWD}:/mk64 mk64
+docker run --rm -v .:/mk64 mk64
```
For example:
```bash
-docker run --rm -v ${PWD}:/mk64 mk64 make -C tools
-docker run --rm -v ${PWD}:/mk64 mk64 make
+docker run --rm -v .:/mk64 mk64 make -C tools
+docker run --rm -v .:/mk64 mk64 make
```
# Building US
@@ -78,16 +78,16 @@ mk64 decomp supports two EU versions
* EU 1.1 `eu-final`
Build using
-```
+```bash
make -j VERSION=eu-1.0
```
or
-```
+```bash
make -j VERSION=eu-final
```
First-diff/diff commands for EU
-```
+```bash
python3 first-diff.py --eu
./diff <function> -eu
``` \ No newline at end of file
diff --git a/docs/basics/controlflow.md b/docs/basics/controlflow.md
index 0d15c7cc8..4fb5247bf 100644
--- a/docs/basics/controlflow.md
+++ b/docs/basics/controlflow.md
@@ -1,4 +1,4 @@
-\page controlflow Codebase Overview
+@page controlflow Codebase Overview
[TOC]
@@ -6,10 +6,11 @@
The developers wrote mk64 using a state-driven paradigm. Gamestate, gamemode, course, actors, structs, and more decide which branches code should follow. As an example, a condition can check the current course to load that courses resources or run logic based on that.
# Threading
-After boot, the game begins by setting up its four threads; idle, video, audio, and the game loop.
-The idle thread allows the cpu to sleep. Without it, if at any time execution of all threads were paused, the cpu would never be able to continue. The idle thread is active if all the other threads are paused.
+After boot, the game begins by setting up its four threads; [idle](@ref thread1_idle), [video](@ref thread3_video), [audio](@ref thread4_audio), and the [game loop](@ref thread5_game_loop).
-As such, the idle thread runs the following loop: `while(TRUE);` (it runs in a perpetual loop of nothing; sleep). In mips assembly it looks like this:
+The [idle thread](@ref thread1_idle) allows the cpu to sleep. Without it, if at any time execution of all threads were paused, the cpu would never be able to continue. The idle thread is active if all the other threads are paused.
+
+As such, the [idle thread](@ref thread1_idle) runs the following loop: `while(TRUE);` (it runs in a perpetual loop of nothing; sleep). In mips assembly it looks like this:
```
.L800005B8:
b .L800005B8
@@ -20,40 +21,42 @@ b stands for branch which acts akin to a goto. In this case, branch to the label
N64 threads are ran based on priority running whichever thread holds the most of it. Threads can also pause and wait for events. Note that the N64 is not multi-threaded by modern standards as the other threads contain specific purposes which slightly differs from the concept of splitting a single program into multiple processes for efficiency.
# Overall Control Flow
-```
-init_threads:
- idle, video, audio, gameloop
-gameloop:
- audio
- jumpTo a specific menu or race based on a gameState flag.
- profiler
- config_gfx_pool
- read_controllers
- game_state_controller
- endDL/vsync
-game_state_controller:
- switch(loc)
- menus -> switch(menu) { // do menu stuff }
- race_logic_loop -> spaghetti
- podium_ceremony
- credits
-video:
+order of initialisation of thread:
+boot:
+* init_threads:<br />
+ * [idle](@ref thread1_idle), [video](@ref thread3_video), [audio](@ref thread4_audio), [game loop](@ref thread5_game_loop)<br />
+* [game loop](@ref thread5_game_loop):<br />
+ * [audio](@ref thread4_audio)<br />
+ * [jumpTo a specific menu or race based on a gameState flag.](@ref update_gamestate)<br />
+ * [profiler](@ref profiler_log_thread5_time)<br />
+ * [config_gfx_pool](@ref config_gfx_pool)<br />
+ * [read_controllers](@ref read_controllers)<br />
+ * [game_state_handler](@ref game_state_handler)<br />
+ * [endDL/vsync](@ref display_and_vsync)<br />
+ * [game_state_handler](@ref game_state_handler):<br />
+ * switch([gGamestate](@ref gGamestate))<br />
+ * [menus](@ref update_menus) -> switch([menu](@ref gMenuSelection)) { // do menu stuff }<br />
+ * [race_logic_loop](@ref race_logic_loop) -> spaghetti<br />
+ * [podium_ceremony](@ref podium_ceremony_loop)<br />
+ * [credits](@ref credits_loop)<br />
+* [video](@ref thread3_video):<br />
handles interaction between video/audio threads.
handles vblanking and some elements pertaining to framebuffer
most of all, handles which step of rendering a frame the cpu is in.
Checks when new to start new sp tasks
-```
+
+
If mk64 is in a menu state it will branch off to the menu code, running relevant bits of code based on more flags such as which particular menu the user is in. This will loop until the state changes to a different one such as race mode. If mk64 is in a race state, then race related code is ran and it spaghetti's off into a wide series of branches. This may include concepts such as `isLinedUp, isRacing, isRaceFinished, gotoNextCourse, isHuman, and isAI`.
This relatively primitive design could be defined as a state machine from an abstract point of view. This would differ from an OOP design that uses objects and hierarchy. You will become very familiar with this design principle as you explore the code-base. During any step of the game loop, a switch can be setup to check a flag then run code relevant to the situation. For instance, a flag can check whether a race is in-progress or complete. If in-progress set the player to human controlled. If complete, set player to AI controlled.
# Segments
-mk64 code is split into three sections
+mk64 code is split into three sections for now.
|Segment|desc|
|---|---|
-|Main|Menus, audio, libultra, rsp|
-|Racing|Memory management, courses, players, actors, skybox, collision, math |
-|Ending|Podium ceremony, credits|
+|Main|[Menus](@ref menus.c), [audio](@ref audio), [libultra](@ref PR), rsp (include in libultra)|
+|Racing|[Memory management](@ref memory.c), [courses](@ref render_courses.c), [players](player_controller.c), [actors](@ref actors.c), [skybox](@ref skybox_and_splitscreen.c), [collision](@ref collision.c), [math](@ref math_util.c) |
+|Ending|[Podium ceremony](@ref ending), [credits](@ref credits.c)|
Racing segment loads after selecting a grand prix. Note that it is always reloaded preventing randomization of cpu's at the start of the first race due to no time for the random seed to actually become random.
@@ -62,32 +65,32 @@ Racing segment loads after selecting a grand prix. Note that it is always reload
## Menus
|file|desc|
|---|---|
-|menus.c | Menu related code |
-|save.c| Save related |
-|data/startup_logo.inc.c|Startup logo|
+|[menus](@ref menus.c)| Menu related code |
+|[save](@ref save.c)| Save related |
+|[startup_logo](@ref data/startup_logo.inc.c)|Startup logo|
## Players
Player related code resides in
|file|desc|
|---|---|
-|player_controller.c| Applies physics to players |
-|camera.c| Player cameras |
+|[player_controller](@ref player_controller.c)| Applies physics to players |
+|[camera](@ref camera.c)| Player cameras |
## Actors
Actor related code resides in
|file|desc|
|---|---|
-|actors.c|Variety of [actors](actorsmenu.html), see link for specifics.|
-|actors_extended.c|Shells and bananas|
-|code_80005FD0.c| Vehicles; trains, cars, trucks, boats |
+|[actors](@ref actors.c)|Variety of [actors](actorsmenu.html), see link for specifics.|
+|[actors_extended](@ref actors_extended.c)|Shells and bananas|
+|[code_80005FD0](@ref code_80005FD0.c)| Vehicles; trains, cars, trucks, boats |
## Objects
Object related code resides in
|file|desc|
|---|---|
-|code_80057C60.c|Objects|
-|code_80071F00.c|Objects|
-|code_80086E70.c|Objects|
+|[code_80057C60](@ref code_80057C60.c)|Objects|
+|[code_80071F00](@ref code_80071F00.c)|Objects|
+|[code_80086E70](@ref code_80086E70.c)|Objects|
Documentation of the specifics still in-progress. See [actors](actorsmenu.html) for more information.
@@ -95,11 +98,12 @@ Documentation of the specifics still in-progress. See [actors](actorsmenu.html)
Course related code resides in
|file|desc|
|---|---|
-|memory.c| Loads and extracts course data|
-|render_courses.c|Renders course content|
-|common_textures.inc.c|Content accessible to every course such as items and portraits|
+|[memory](@ref memory.c)| Loads and extracts course data|
+|[render_courses](@ref render_courses.c)|Renders course content|
+|[common_textures](@ref common_textures.inc.c)|Content accessible to every course such as items and portraits|
### Course Folder
+[course folder link][@ref courses]
|file|desc|
|---|---|
|courses/course_name/course_data.inc.c|Course data|
@@ -110,25 +114,25 @@ Course related code resides in
## UI & Other 2D Screen data
|file|desc|
|---|---|
-|hud_renderer.c|ItemWindows|
+|[hud_renderer](@ref hud_renderer.c)|ItemWindows|
## Engine
|file|desc|
|---|---|
-|collision.c| |
-|code_80005FD0| Pathing code |
+|[collision](@ref collision.c)| |
+|[code_80005FD0](@ref code_80005FD0.c)| Pathing code |
## Math
Math related code resides in
|file|desc|
|---|---|
-|math_util.c| |
-|math_util_2.c| |
+|[math_util](@ref math_util.c)| |
+|[math_util_2](@ref math_util_2.c)| |
## Ending
|file|desc|
|---|---|
-|ceremony_and_credits.c|Camera rails for podium ceremony and credits|
-|podium_ceremony_actors.c|Fireworks and balloons for podium ceremony|
-|ceremony_data.inc.c|Trophies and podium models. Paths.|
-|credits.c|Credits text and UI positions|
+|[ceremony_and_credits](@ref ceremony_and_credits.c)|Camera rails for podium ceremony and credits|
+|[podium_ceremony_actors](@ref podium_ceremony_actors.c)|Fireworks and balloons for podium ceremony|
+|[ceremony_data](@ref ceremony_data.inc.c)|Trophies and podium models. Paths.|
+|[credits](@ref credits.c)|Credits text and UI positions|
diff --git a/docs/basics/items.md b/docs/basics/items.md
deleted file mode 100644
index 346792563..000000000
--- a/docs/basics/items.md
+++ /dev/null
@@ -1 +0,0 @@
-\page items Items
diff --git a/docs/basics/objects.md b/docs/basics/objects.md
deleted file mode 100644
index 58e62b9ab..000000000
--- a/docs/basics/objects.md
+++ /dev/null
@@ -1,2 +0,0 @@
-\page objects
-# Objects
diff --git a/docs/basics/terminology.md b/docs/basics/terminology.md
index 5dab7295b..a4f8e15d2 100644
--- a/docs/basics/terminology.md
+++ b/docs/basics/terminology.md
@@ -1,4 +1,4 @@
-\page terminology Terminology
+@page terminology Terminology
# Technical Definitions
* `Jump/Branch/Function` - Tells the cpu to execute instructions somewhere else and come back here when done.
* `Hexadecimal` - A [numbering system](https://en.wikipedia.org/wiki/Hexadecimal). Similar numbering sytems include decimal (also called base-ten) and roman numerals.
diff --git a/docs/basics/basicsmenu.md b/docs/basicsmenu.md
index 8de0916b5..af397d70b 100644
--- a/docs/basics/basicsmenu.md
+++ b/docs/basicsmenu.md
@@ -1,86 +1,9 @@
-\page basics Understanding the Basics
+@page basics Understanding the Basics
-\htmlonly
+@htmlonly
Essential skills and concepts to help you get started with mk64 decomp.
<br><br>
-<style>
-.pagebutton {
- display: inline-block;
- margin-right: 1em;
- margin-bottom: 1em;
-}
-.pagelink {
- display: block;
- background-color: rgb(40, 44, 52);
- width: 320px;
- box-shadow: 0 0 0 0;
- transition: 0.3s ease;
-}
-.pagelink:hover {
- box-shadow: 0 5px 15px 5px rgba(0,0,0,1);
-}
-.pagelink:hover img {
- transform: scale3d(1.1,1.1,1.1);
-}
-.pageimg {
- display: inline-block;
- width: 100%;
- position: relative;
- overflow: hidden;
-}
-.pageimg img {
- transition: 0.3s ease;
-}
-.content {
- color: white;
- font-size: 1em;
- padding: 0;
- margin: 0;
-}
-.pageheading {
- padding: .5em .5em;
- font-size: 18px;
- color: white;
- font-weight: bold;
- text-decoration: none;
-}
-.pagedescription {
- color: #fff;
- border-color: transparent;
- opacity: 0.75;
- height: 84px;
- text-overflow: ellipsis;
- overflow: hidden;
- margin-top: 10px;
- display: block;
- padding: 10px;
- text-decoration: none;
- line-height: 1.64em;
- font-size: 1em;
- font-weight: normal;
- text-decoration: none;
-}
-.pagea {
- display: inline-block;
-}
-.pagea:link {
- text-decoration: none;
-}
-.pagea:visited {
- text-decoration: none;
-}
-.pagea:hover {
- text-decoration: none;
-}
-.pagea:active {
- text-decoration: none;
-}
-p {
- margin: 0;
- padding: 0;
-}
-</style>
<div class="pagebutton">
<a class="pagea" href="compiling.html">
<div class="pagelink">
@@ -141,10 +64,10 @@ p {
</a>
</div>
-\endhtmlonly
+@endhtmlonly
-\subpage compiling
-\subpage concepts
-\subpage controlflow
-\subpage terminology
-\subpage buildwindows
+@subpage compiling
+@subpage concepts
+@subpage controlflow
+@subpage terminology
+@subpage buildwindows
diff --git a/docs/basics/courses.md b/docs/courses/courses.md
index d34e1af50..d34e1af50 100644
--- a/docs/basics/courses.md
+++ b/docs/courses/courses.md
diff --git a/docs/basics/surfacetypes.md b/docs/courses/surfacetypes.md
index 8cfef23aa..67203e16c 100644
--- a/docs/basics/surfacetypes.md
+++ b/docs/courses/surfacetypes.md
@@ -1,6 +1,8 @@
-\page surfacetypes Surface Types
+@page surfacetypes Surface Types
-Surfaces produce effects, driven on sounds, and other behaviour. Note that surface type is not generally used for out of bounds behaviour. As such, out of bounds areas may use any combination of surface types or flags.
+Surfaces produce effects, driven on sounds, and other behaviour. Note that surface type is not generally used for out of bounds behaviour. As such, out of bounds areas may use any combination of surface types or flags.
+
+extract from [SURFACE_TYPE](@ref SURFACE_TYPE)
| id | Name | Desc | Courses |
|---|---|---|---|
diff --git a/docs/coursesmenu.md b/docs/coursesmenu.md
new file mode 100644
index 000000000..7fc654e9c
--- /dev/null
+++ b/docs/coursesmenu.md
@@ -0,0 +1,41 @@
+@page coursesmenu Courses
+
+@htmlonly
+
+How courses work in mk64
+<br><br>
+
+<div class="pagebutton">
+<a class="pagea" href="courses.html">
+<div class="pagelink">
+ <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
+ <div class="content">
+ <div class="pageheading">Courses</div>
+ <div class="pagedescription">
+ <p>Some course related stuff</p>
+ </div>
+ </div>
+</div>
+</a>
+</div>
+
+
+<div class="pagebutton">
+<a class="pagea" href="surfacetypes.html">
+<div class="pagelink">
+ <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
+ <div class="content">
+ <div class="pageheading">Surface Types</div>
+ <div class="pagedescription">
+ <p>Surface types in mk64</p>
+ </div>
+ </div>
+</div>
+</a>
+</div>
+
+@endhtmlonly
+
+@subpage courses
+@subpage surfacetypes
+
diff --git a/docs/basics/coursesmenu.md b/docs/docs.css
index f6aceca71..f09179e9c 100644
--- a/docs/basics/coursesmenu.md
+++ b/docs/docs.css
@@ -1,53 +1,54 @@
-\page coursesmenu Courses
-
-\htmlonly
-
-How courses work in mk64
-<br><br>
-<style>
.pagebutton {
display: inline-block;
margin-right: 1em;
margin-bottom: 1em;
}
-.pagelink {
+
+html.dark-mode .pagelink {
display: block;
background-color: rgb(40, 44, 52);
width: 320px;
box-shadow: 0 0 0 0;
transition: 0.3s ease;
}
-.pagelink:hover {
+
+html.dark-mode .pagelink:hover {
box-shadow: 0 5px 15px 5px rgba(0,0,0,1);
}
+
.pagelink:hover img {
transform: scale3d(1.1,1.1,1.1);
}
+
.pageimg {
display: inline-block;
width: 100%;
position: relative;
overflow: hidden;
}
+
.pageimg img {
transition: 0.3s ease;
}
-.content {
+
+html.dark-mode .content {
color: white;
font-size: 1em;
padding: 0;
margin: 0;
}
-.pageheading {
+
+html.dark-mode .pageheading {
padding: .5em .5em;
font-size: 18px;
color: white;
font-weight: bold;
text-decoration: none;
}
-.pagedescription {
+
+html.dark-mode .pagedescription {
color: #fff;
border-color: transparent;
opacity: 0.75;
@@ -63,58 +64,32 @@ How courses work in mk64
font-weight: normal;
text-decoration: none;
}
+
.pagea {
display: inline-block;
}
+
.pagea:link {
text-decoration: none;
}
+
.pagea:visited {
text-decoration: none;
}
+
.pagea:hover {
text-decoration: none;
}
+
.pagea:active {
text-decoration: none;
}
+
p {
margin: 0;
padding: 0;
}
-</style>
-
-<div class="pagebutton">
-<a class="pagea" href="courses.html">
-<div class="pagelink">
- <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
- <div class="content">
- <div class="pageheading">Courses</div>
- <div class="pagedescription">
- <p>Some course related stuff</p>
- </div>
- </div>
-</div>
-</a>
-</div>
-
-
-<div class="pagebutton">
-<a class="pagea" href="surfacetypes.html">
-<div class="pagelink">
- <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
- <div class="content">
- <div class="pageheading">Surface Types</div>
- <div class="pagedescription">
- <p>Surface types in mk64</p>
- </div>
- </div>
-</div>
-</a>
-</div>
-
-\endhtmlonly
-
-\subpage courses
-\subpage surfacetypes
+html.dark-mode .clipboard {
+ fill: white;
+}
diff --git a/docs/header.html b/docs/header.html
new file mode 100644
index 000000000..1daffbae6
--- /dev/null
+++ b/docs/header.html
@@ -0,0 +1,84 @@
+<!-- HTML header for doxygen 1.10.0-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<!--BEGIN PROJECT_ICON-->
+<link rel="icon" href="$relpath^$projecticon" type="image/x-icon" />
+<!--END PROJECT_ICON-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<!--BEGIN DISABLE_INDEX-->
+ <!--BEGIN FULL_SIDEBAR-->
+<script type="text/javascript">var page_layout=1;</script>
+ <!--END FULL_SIDEBAR-->
+<!--END DISABLE_INDEX-->
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+<!--BEGIN COPY_CLIPBOARD-->
+<script type="text/javascript" src="$relpath^clipboard.js"></script>
+<!--END COPY_CLIPBOARD-->
+$treeview
+$search
+$mathjax
+$darkmode
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+<script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script>
+<script type="text/javascript">
+ DoxygenAwesomeDarkModeToggle.init()
+</script>
+</head>
+<body>
+<!--BEGIN DISABLE_INDEX-->
+ <!--BEGIN FULL_SIDEBAR-->
+<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
+ <!--END FULL_SIDEBAR-->
+<!--END DISABLE_INDEX-->
+
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <!--BEGIN PROJECT_LOGO-->
+ <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"$logosize/></td>
+ <!--END PROJECT_LOGO-->
+ <!--BEGIN PROJECT_NAME-->
+ <td id="projectalign">
+ <div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$projectnumber</span><!--END PROJECT_NUMBER-->
+ </div>
+ <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+ </td>
+ <!--END PROJECT_NAME-->
+ <!--BEGIN !PROJECT_NAME-->
+ <!--BEGIN PROJECT_BRIEF-->
+ <td>
+ <div id="projectbrief">$projectbrief</div>
+ </td>
+ <!--END PROJECT_BRIEF-->
+ <!--END !PROJECT_NAME-->
+ <!--BEGIN DISABLE_INDEX-->
+ <!--BEGIN SEARCHENGINE-->
+ <!--BEGIN !FULL_SIDEBAR-->
+ <td>$searchbox</td>
+ <!--END !FULL_SIDEBAR-->
+ <!--END SEARCHENGINE-->
+ <!--END DISABLE_INDEX-->
+ </tr>
+ <!--BEGIN SEARCHENGINE-->
+ <!--BEGIN FULL_SIDEBAR-->
+ <tr><td colspan="2">$searchbox</td></tr>
+ <!--END FULL_SIDEBAR-->
+ <!--END SEARCHENGINE-->
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->
diff --git a/docs/images/buttonimage.png b/docs/images/buttonimage.png
new file mode 100644
index 000000000..b93606e1d
--- /dev/null
+++ b/docs/images/buttonimage.png
Binary files differ
diff --git a/docs/mainpage.md b/docs/mainpage.md
index 0428aa869..40e604359 100644
--- a/docs/mainpage.md
+++ b/docs/mainpage.md
@@ -1,86 +1,6 @@
Complete resources for learning about mk64 decomp
-
-\htmlonly
+@htmlonly
<br>
-<style>
-.pagebutton {
- display: inline-block;
- margin-right: 1em;
- margin-bottom: 1em;
-}
-.pagelink {
- display: block;
- background-color: rgb(40, 44, 52);
- width: 320px;
- box-shadow: 0 0 0 0;
- transition: 0.3s ease;
-}
-.pagelink:hover {
- box-shadow: 0 5px 15px 5px rgba(0,0,0,1);
-
-}
-.pagelink:hover img {
- transform: scale3d(1.1,1.1,1.1);
-
-}
-.pageimg {
- display: inline-block;
- width: 100%;
- position: relative;
- overflow: hidden;
-}
-.pageimg img {
- transition: 0.3s ease;
-}
-.content {
- color: white;
- font-size: 1em;
- padding: 0;
- margin: 0;
-}
-.pageheading {
- padding: .5em .5em;
- font-size: 18px;
- color: white;
- font-weight: bold;
- text-decoration: none;
-}
-.pagedescription {
- color: #fff;
- border-color: transparent;
- opacity: 0.75;
- height: 84px;
- text-overflow: ellipsis;
- overflow: hidden;
- margin-top: 10px;
- display: block;
- padding: 10px;
- text-decoration: none;
- line-height: 1.64em;
- font-size: 1em;
- font-weight: normal;
- text-decoration: none;
-}
-.pagea {
- display: inline-block;
-}
-.pagea:link {
- text-decoration: none;
-}
-.pagea:visited {
- text-decoration: none;
-}
-.pagea:hover {
- text-decoration: none;
-}
-.pagea:active {
- text-decoration: none;
-}
-p {
- margin: 0;
- padding: 0;
-}
-</style>
<div class="pagebutton">
<a class="pagea" href="basics.html">
<div class="pagelink">
@@ -137,4 +57,4 @@ p {
</a>
</div>
-\endhtmlonly
+@endhtmlonly
diff --git a/docs/tutorials.md b/docs/tutorials.md
new file mode 100644
index 000000000..69d113d28
--- /dev/null
+++ b/docs/tutorials.md
@@ -0,0 +1,50 @@
+@page tutorials Tutorials
+Topics discussing how to work with certain features.
+
+@htmlonly
+<br>
+<div class="pagebutton">
+<a class="pagea" href="boostramps.html">
+<div class="pagelink">
+ <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
+ <div class="content">
+ <div class="pageheading">Boost Ramps</div>
+ <div class="pagedescription">
+ <p>Steps for creating your own boost ramps</p>
+ </div>
+ </div>
+</div>
+</a>
+</div>
+<div class="pagebutton">
+<a class="pagea" href="paths.html">
+<div class="pagelink">
+ <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
+ <div class="content">
+ <div class="pageheading">Paths</div>
+ <div class="pagedescription">
+ <p>Overview of the many types of pathing</p>
+ </div>
+ </div>
+</div>
+</a>
+</div>
+
+<div class="pagebutton">
+<a class="pagea" href="audio.html">
+<div class="pagelink">
+ <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
+ <div class="content">
+ <div class="pageheading">Audio</div>
+ <div class="pagedescription">
+ <p>Basic ways to work with audio</p>
+ </div>
+ </div>
+</div>
+</a>
+</div>
+@endhtmlonly
+
+@subpage boostramps
+@subpage paths
+@subpage tutorialaudio
diff --git a/docs/tutorials/audio.md b/docs/tutorials/audio.md
index 0d62da0f4..0c36e56f8 100644
--- a/docs/tutorials/audio.md
+++ b/docs/tutorials/audio.md
@@ -1 +1 @@
-\page tutorialaudio Audio
+@page tutorialaudio Audio
diff --git a/docs/tutorials/paths.md b/docs/tutorials/paths.md
index b9594bb7e..d3200a6dd 100644
--- a/docs/tutorials/paths.md
+++ b/docs/tutorials/paths.md
@@ -1,4 +1,4 @@
-\page paths Paths
+@page paths Paths
The game uses multiple types of course paths
# Course Paths
diff --git a/docs/tutorials/tutorials.md b/docs/tutorials/tutorials.md
deleted file mode 100644
index 3636bf1f5..000000000
--- a/docs/tutorials/tutorials.md
+++ /dev/null
@@ -1,131 +0,0 @@
-\page tutorials Tutorials
-Topics discussing how to work with certain features.
-
-\htmlonly
-<br>
-<style>
-.pagebutton {
- display: inline-block;
- margin-right: 1em;
- margin-bottom: 1em;
-}
-.pagelink {
- display: block;
- background-color: rgb(40, 44, 52);
- width: 320px;
- box-shadow: 0 0 0 0;
- transition: 0.3s ease;
-}
-.pagelink:hover {
- box-shadow: 0 5px 15px 5px rgba(0,0,0,1);
-
-}
-.pagelink:hover img {
- transform: scale3d(1.1,1.1,1.1);
-
-}
-.pageimg {
- display: inline-block;
- width: 100%;
- position: relative;
- overflow: hidden;
-}
-.pageimg img {
- transition: 0.3s ease;
-}
-.content {
- color: white;
- font-size: 1em;
- padding: 0;
- margin: 0;
-}
-.pageheading {
- padding: .5em .5em;
- font-size: 18px;
- color: white;
- font-weight: bold;
- text-decoration: none;
-}
-.pagedescription {
- color: #fff;
- border-color: transparent;
- opacity: 0.75;
- height: 84px;
- text-overflow: ellipsis;
- overflow: hidden;
- margin-top: 10px;
- display: block;
- padding: 10px;
- text-decoration: none;
- line-height: 1.64em;
- font-size: 1em;
- font-weight: normal;
- text-decoration: none;
-}
-.pagea {
- display: inline-block;
-}
-.pagea:link {
- text-decoration: none;
-}
-.pagea:visited {
- text-decoration: none;
-}
-.pagea:hover {
- text-decoration: none;
-}
-.pagea:active {
- text-decoration: none;
-}
-p {
- margin: 0;
- padding: 0;
-}
-</style>
-<div class="pagebutton">
-<a class="pagea" href="boostramps.html">
-<div class="pagelink">
- <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
- <div class="content">
- <div class="pageheading">Boost Ramps</div>
- <div class="pagedescription">
- <p>Steps for creating your own boost ramps</p>
- </div>
- </div>
-</div>
-</a>
-</div>
-
-<div class="pagebutton">
-<a class="pagea" href="paths.html">
-<div class="pagelink">
- <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
- <div class="content">
- <div class="pageheading">Paths</div>
- <div class="pagedescription">
- <p>Overview of the many types of pathing</p>
- </div>
- </div>
-</div>
-</a>
-</div>
-
-<div class="pagebutton">
-<a class="pagea" href="audio.html">
-<div class="pagelink">
- <div class="pageimg"><img width=320 src="buttonimage.png" /></div>
- <div class="content">
- <div class="pageheading">Audio</div>
- <div class="pagedescription">
- <p>Basic ways to work with audio</p>
- </div>
- </div>
-</div>
-</a>
-</div>
-
-\endhtmlonly
-
-\subpage boostramps
-\subpage paths
-\subpage tutorialaudio