diff --git a/Makefile b/Makefile
index 7cdb1e35ec..a645ae3109 100644
--- a/Makefile
+++ b/Makefile
@@ -64,13 +64,13 @@ N_THREADS ?= $(shell nproc)
#### Tools ####
ifneq ($(shell type $(MIPS_BINUTILS_PREFIX)ld >/dev/null 2>/dev/null; echo $$?), 0)
- $(error Please install or build $(MIPS_BINUTILS_PREFIX))
+ $(error Unable to find $(MIPS_BINUTILS_PREFIX)ld. Please install or build MIPS binutils, commonly mips-linux-gnu. (or set MIPS_BINUTILS_PREFIX if your MIPS binutils install uses another prefix))
endif
# Detect compiler and set variables appropriately.
ifeq ($(COMPILER),gcc)
CC := $(MIPS_BINUTILS_PREFIX)gcc
-else
+else
ifeq ($(COMPILER),ido)
CC := tools/ido_recomp/$(DETECTED_OS)/7.1/cc
CC_OLD := tools/ido_recomp/$(DETECTED_OS)/5.3/cc
@@ -121,7 +121,7 @@ ASFLAGS := -march=vr4300 -32 -no-pad-sections -Iinclude
ifeq ($(COMPILER),gcc)
CFLAGS += -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-zero-initialized-in-bss -fno-toplevel-reorder -ffreestanding -fno-common -fno-merge-constants -mno-explicit-relocs -mno-split-addresses $(CHECK_WARNINGS) -funsigned-char
MIPS_VERSION := -mips3
-else
+else
# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Surpress the warnings with -woff.
CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(INC) -Wab,-r4300_mul -woff 516,649,838,712
MIPS_VERSION := -mips2
@@ -281,7 +281,7 @@ $(ROM): $(ELF)
$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) $(OVL_RELOC_FILES) build/ldscript.txt build/undefined_syms.txt
$(LD) -T build/undefined_syms.txt -T build/ldscript.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map build/z64.map -o $@
-## Order-only prerequisites
+## Order-only prerequisites
# These ensure e.g. the O_FILES are built before the OVL_RELOC_FILES.
# The intermediate phony targets avoid quadratically-many dependencies between the targets and prerequisites.
diff --git a/assets/xml/objects/object_mori_tex.xml b/assets/xml/objects/object_mori_tex.xml
index 89fb06d354..79f1f0b4c0 100644
--- a/assets/xml/objects/object_mori_tex.xml
+++ b/assets/xml/objects/object_mori_tex.xml
@@ -11,10 +11,8 @@
-
-
-
-
+
+
diff --git a/assets/xml/objects/object_rs.xml b/assets/xml/objects/object_rs.xml
index 6081d6f371..a5f7536590 100644
--- a/assets/xml/objects/object_rs.xml
+++ b/assets/xml/objects/object_rs.xml
@@ -21,7 +21,7 @@
-
+
diff --git a/docs/vscode.md b/docs/vscode.md
index 45ad9097d0..efd8e8b605 100644
--- a/docs/vscode.md
+++ b/docs/vscode.md
@@ -1,6 +1,6 @@
# VSCode
-A lot of people on this project use VSCode as their coding environment.
+A lot of people on this project use VSCode as their coding environment.
## Extensions
@@ -23,7 +23,7 @@ There are a number of useful extensions available to make work more efficient:
- Ctrl + P offers a box to use to search for and open files.
- Ctrl + Shift + P offers a box for commands like editing settings or reloading the window.
-- Make use of VSCode's search/search-and-replace features.
+- Make use of VSCode's search/search-and-replace features.
- Ctrl + Click goes to a definition.
- Ctrl + F for search in current file
- Ctrl + H for replace in current file
diff --git a/extract_assets.py b/extract_assets.py
index 5c9658d228..47e65ca23e 100755
--- a/extract_assets.py
+++ b/extract_assets.py
@@ -6,6 +6,7 @@ import os
import signal
import time
import multiprocessing
+from pathlib import Path
EXTRACTED_ASSETS_NAMEFILE = ".extracted-assets.json"
@@ -21,7 +22,13 @@ def ExtractFile(xmlPath, outputPath, outputSourcePath):
# Don't extract if another file wasn't extracted properly.
return
- execStr = f"tools/ZAPD/ZAPD.out e -eh -i {xmlPath} -b baserom/ -o {outputPath} -osf {outputSourcePath} -gsf 1 -rconf tools/ZAPDConfigs/MqDbg/Config.xml {ZAPDArgs}"
+ zapdPath = Path("tools") / "ZAPD" / "ZAPD.out"
+ configPath = Path("tools") / "ZAPDConfigs" / "MqDbg" / "Config.xml"
+
+ Path(outputPath).mkdir(parents=True, exist_ok=True)
+ Path(outputSourcePath).mkdir(parents=True, exist_ok=True)
+
+ execStr = f"{zapdPath} e -eh -i {xmlPath} -b baserom -o {outputPath} -osf {outputSourcePath} -gsf 1 -rconf {configPath} {ZAPDArgs}"
if "overlays" in xmlPath:
execStr += " --static"
@@ -143,14 +150,21 @@ def main():
if file.endswith(".xml"):
xmlFiles.append(fullPath)
+ class CannotMultiprocessError(Exception):
+ pass
+
try:
numCores = int(args.jobs or 0)
if numCores <= 0:
numCores = 1
print("Extracting assets with " + str(numCores) + " CPU core" + ("s" if numCores > 1 else "") + ".")
- with multiprocessing.get_context("fork").Pool(numCores, initializer=initializeWorker, initargs=(mainAbort, args.unaccounted, extractedAssetsTracker, manager)) as p:
+ try:
+ mp_context = multiprocessing.get_context("fork")
+ except ValueError as e:
+ raise CannotMultiprocessError() from e
+ with mp_context.Pool(numCores, initializer=initializeWorker, initargs=(mainAbort, args.unaccounted, extractedAssetsTracker, manager)) as p:
p.map(ExtractFunc, xmlFiles)
- except (multiprocessing.ProcessError, TypeError):
+ except (multiprocessing.ProcessError, TypeError, CannotMultiprocessError):
print("Warning: Multiprocessing exception ocurred.", file=os.sys.stderr)
print("Disabling mutliprocessing.", file=os.sys.stderr)
diff --git a/include/functions.h b/include/functions.h
index c55b947330..6cd5ee978e 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -1741,11 +1741,11 @@ Gfx* GfxPrint_Close(GfxPrint* this);
s32 GfxPrint_Printf(GfxPrint* this, const char* fmt, ...);
void RcpUtils_PrintRegisterStatus(void);
void RcpUtils_Reset(void);
-void* Overlay_AllocateAndLoad(uintptr_t vRomStart, uintptr_t vRomEnd, void* vRamStart, void* vRamEnd);
+void* Overlay_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd);
void MtxConv_F2L(Mtx* m1, MtxF* m2);
void MtxConv_L2F(MtxF* m1, Mtx* m2);
-void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* overlayInfo, void* vRamStart);
-s32 Overlay_Load(uintptr_t vRomStart, uintptr_t vRomEnd, void* vRamStart, void* vRamEnd, void* allocatedVRamAddr);
+void Overlay_Relocate(void* allocatedRamAddress, OverlayRelocationSection* ovlRelocs, void* vramStart);
+s32 Overlay_Load(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd, void* allocatedRamAddr);
// ? func_800FC800(?);
// ? func_800FC83C(?);
// ? func_800FCAB4(?);
diff --git a/include/z64.h b/include/z64.h
index 3896b5f764..066d6af7b2 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -1165,24 +1165,34 @@ typedef struct ArenaNode {
/* 0x28 */ u8 unk_28[0x30-0x28]; // probably padding
} ArenaNode; // size = 0x30
-#define RELOC_SECTION(reloc) ((reloc) >> 30)
-#define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF)
+/* Relocation entry field getters */
+#define RELOC_SECTION(reloc) ((reloc) >> 30)
+#define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF)
#define RELOC_TYPE_MASK(reloc) ((reloc) & 0x3F000000)
#define RELOC_TYPE_SHIFT 24
-/* MIPS Relocation Types */
-#define R_MIPS_32 2
-#define R_MIPS_26 4
+/* MIPS Relocation Types, matches the MIPS ELF spec */
+#define R_MIPS_32 2
+#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6
+/* Reloc section id, must fit in 2 bits otherwise the relocation format must be modified */
+typedef enum {
+ /* 0 */ RELOC_SECTION_NULL,
+ /* 1 */ RELOC_SECTION_TEXT,
+ /* 2 */ RELOC_SECTION_DATA,
+ /* 3 */ RELOC_SECTION_RODATA,
+ /* 4 */ RELOC_SECTION_MAX
+} RelocSectionId;
+
typedef struct OverlayRelocationSection {
/* 0x00 */ u32 textSize;
/* 0x04 */ u32 dataSize;
/* 0x08 */ u32 rodataSize;
/* 0x0C */ u32 bssSize;
/* 0x10 */ u32 nRelocations;
- /* 0x14 */ u32 relocations[1];
+ /* 0x14 */ u32 relocations[1]; // size is nRelocations
} OverlayRelocationSection; // size >= 0x18
typedef struct {
diff --git a/include/z64audio.h b/include/z64audio.h
index fe63f75702..d2f3d6360f 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -857,9 +857,9 @@ typedef struct {
/* 0x1E38 */ OSMesg externalLoadMsgBuf[16];
/* 0x1E78 */ OSMesgQueue preloadSampleQueue;
/* 0x1E90 */ OSMesg preloadSampleMsgBuf[16];
- /* 0x1ED0 */ OSMesgQueue currAudioFrameDmaQueue;
- /* 0x1EE8 */ OSMesg currAudioFrameDmaMsgBuf[64];
- /* 0x1FE8 */ OSIoMesg currAudioFrameDmaIoMsgBuf[64];
+ /* 0x1ED0 */ OSMesgQueue curAudioFrameDmaQueue;
+ /* 0x1EE8 */ OSMesg curAudioFrameDmaMsgBuf[64];
+ /* 0x1FE8 */ OSIoMesg curAudioFrameDmaIoMsgBuf[64];
/* 0x25E8 */ OSMesgQueue syncDmaQueue;
/* 0x2600 */ OSMesg syncDmaMesg;
/* 0x2604 */ OSIoMesg syncDmaIoMesg;
diff --git a/include/z64camera.h b/include/z64camera.h
index c85500cf49..48d4f1cc7c 100644
--- a/include/z64camera.h
+++ b/include/z64camera.h
@@ -42,7 +42,7 @@
#define CAM_LETTERBOX_MEDIUM CAM_LETTERBOX(2)
#define CAM_LETTERBOX_LARGE CAM_LETTERBOX(3)
-#define CAM_LETTERBOX_INSTANT CAM_LETTERBOX(8) // Bit to determine whether to set the current value directly (on), or to set the size target (off)
+#define CAM_LETTERBOX_INSTANT CAM_LETTERBOX(8) // Bit to determine whether to set the current value directly (on), or to set the size target (off)
#define CAM_LETTERBOX_IGNORE CAM_LETTERBOX(0xF) // No change in letterbox size, keep the previous size
// Camera-unique hud visibility mode macros
@@ -121,7 +121,7 @@
#define CAM_VIEW_FOV (1 << 5) // camera->fov
#define CAM_VIEW_ROLL (1 << 6) // camera->roll
-// All scenes using `SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT` or `SCENE_CAM_TYPE_FIXED_TOGGLE_VIEWPOINT` are expected
+// All scenes using `SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT` or `SCENE_CAM_TYPE_FIXED_TOGGLE_VIEWPOINT` are expected
// to have their first two bgCamInfo entries be the following:
#define BGCAM_INDEX_TOGGLE_LOCKED 0
#define BGCAM_INDEX_TOGGLE_PIVOT 1
@@ -170,7 +170,7 @@ typedef enum {
/* 0x20 */ CAM_SET_START1, // Scene/room door transitions that snap the camera to a fixed location (example: ganon's towers doors climbing up)
/* 0x21 */ CAM_SET_FREE0, // Full manual control is given over the camera
/* 0x22 */ CAM_SET_FREE2, // Various OnePoint Cutscenes, 10 total (example: falling chest)
- /* 0x23 */ CAM_SET_PIVOT_CORNER, // Inside the carpenter jail cells from theives hideout "CIRCLE4"
+ /* 0x23 */ CAM_SET_PIVOT_CORNER, // Inside the carpenter jail cells from thieves hideout "CIRCLE4"
/* 0x24 */ CAM_SET_PIVOT_WATER_SURFACE, // Player diving from the surface of the water to underwater "CIRCLE5"
/* 0x25 */ CAM_SET_CS_0, // Various cutscenes "DEMO0"
/* 0x26 */ CAM_SET_CS_TWISTED_HALLWAY, // Never set to, but checked in twisting hallway (Forest Temple) "DEMO1"
diff --git a/include/z64cutscene.h b/include/z64cutscene.h
index e509138d22..24ca4ffc9a 100644
--- a/include/z64cutscene.h
+++ b/include/z64cutscene.h
@@ -212,7 +212,7 @@ typedef enum {
} CutsceneTextType;
typedef enum {
- /* 0x03 */ CS_FADE_OUT_FANFARE = 3,
+ /* 0x03 */ CS_FADE_OUT_FANFARE = 3,
/* 0x04 */ CS_FADE_OUT_BGM_MAIN
} CutsceneFadeOutSeqPlayer;
diff --git a/include/z64cutscene_commands.h b/include/z64cutscene_commands.h
index 89ef7ef2df..f467fc32c4 100644
--- a/include/z64cutscene_commands.h
+++ b/include/z64cutscene_commands.h
@@ -137,7 +137,7 @@
CMD_W(cmdType), CMD_W(entries)
/**
- * Defines a cue that an actor can listen for.
+ * Defines a cue that an actor can listen for.
* The actor can choose whether or not to use the position and rotation data supplied to it.
* The cue `id` is a number that has an actor-specific meaning.
*/
@@ -154,7 +154,7 @@
CS_CMD_PLAYER_CUE, CMD_W(entries)
/**
- * A player cue is the same as `CS_ACTOR_CUE` but is specifically for player.
+ * A player cue is the same as `CS_ACTOR_CUE` but is specifically for player.
*/
#define CS_PLAYER_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, unused0, unused1, unused2) \
CS_ACTOR_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, unused0, unused1, unused2)
@@ -166,7 +166,7 @@
CS_CMD_TEXT, CMD_W(entries)
/**
- * Starts a textbox at the specified time.
+ * Starts a textbox at the specified time.
* For `CS_TEXT_OCARINA_ACTION`, `textId` is used as an ocarina action.
* For a choice textbox, `altTextId1` is the top text id to branch to and `altTextId2` is the bottom.
*/
@@ -246,11 +246,11 @@
CMD_HH(unused0, startFrame), CMD_HBB(endFrame, hour, min), CMD_W(0)
/**
- * Sends the player to a new destination.
+ * Sends the player to a new destination.
* `destination` maps to a custom block of code that must implement the scene transition on its own.
* This custom code can also do other tasks like changing age, setting flags, or any other setup that is needed
* before going to the next destination.
- *
+ *
* @see `CutsceneDestination`
* @note `endFrame` is not used in the implementation of the command, so its value does not matter
*/
diff --git a/include/z64environment.h b/include/z64environment.h
index e15641517e..0269c443d4 100644
--- a/include/z64environment.h
+++ b/include/z64environment.h
@@ -51,7 +51,7 @@ typedef enum {
typedef enum {
/* 0 */ LIGHTNING_OFF, // no lightning
- /* 1 */ LIGHTNING_ON, // request ligtning strikes at random intervals
+ /* 1 */ LIGHTNING_ON, // request lightning strikes at random intervals
/* 2 */ LIGHTNING_LAST // request one lightning strike before turning off
} LightningState;
@@ -148,8 +148,8 @@ typedef struct {
// `EnvLightSettings` is very similar to `CurrentEnvLightSettings` with one key difference.
// The light settings data in the scene packs blend rate information with the fog near value.
-// The blendRate determines how fast the current light settings fade to the next one
-// (under LIGHT_MODE_SETTINGS, otherwise unused).
+// The blendRate determines how fast the current light settings fade to the next one
+// (under LIGHT_MODE_SETTINGS, otherwise unused).
// Get blend rate from `EnvLightSettings.blendRateAndFogNear` in 0-255 range
#define ENV_LIGHT_SETTINGS_BLEND_RATE_U8(blendRateAndFogNear) (((blendRateAndFogNear) >> 10) * 4)
@@ -162,7 +162,7 @@ typedef struct {
/* 0x09 */ s8 light2Dir[3];
/* 0x0C */ u8 light2Color[3];
/* 0x0F */ u8 fogColor[3];
- /* 0x12 */ s16 blendRateAndFogNear;
+ /* 0x12 */ s16 blendRateAndFogNear;
/* 0x14 */ s16 zFar;
} EnvLightSettings; // size = 0x16
diff --git a/include/z64item.h b/include/z64item.h
index 5991723993..61f0cb3e66 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -2,7 +2,7 @@
#define Z64ITEM_H
// Note that z_kaleido_scope_PAL.c assumes that the dimensions and texture format here also matches the dimensions and
-// texture format for MAP_NAME_TEX1_*
+// texture format for MAP_NAME_TEX1_*
#define ITEM_NAME_TEX_WIDTH 128
#define ITEM_NAME_TEX_HEIGHT 16
#define ITEM_NAME_TEX_SIZE ((ITEM_NAME_TEX_WIDTH * ITEM_NAME_TEX_HEIGHT) / 2) // 128x16 IA4 texture
diff --git a/include/z64scene.h b/include/z64scene.h
index d29be7bbec..4efc1a567d 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -43,7 +43,7 @@ typedef struct {
} Spawn;
// TODO: ZAPD Compatibility
-typedef Spawn EntranceEntry;
+typedef Spawn EntranceEntry;
typedef struct {
/* 0x00 */ u8 count; // number of points in the path
diff --git a/src/code/audio_heap.c b/src/code/audio_heap.c
index fd61dc9846..4b586c8c5e 100644
--- a/src/code/audio_heap.c
+++ b/src/code/audio_heap.c
@@ -1172,7 +1172,7 @@ SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(u32 size) {
index = -1;
for (i = 0; i < gAudioCtx.preloadSampleStackTop; i++) {
preload = &gAudioCtx.preloadSampleStack[i];
- if (preload->isFree == false) {
+ if (!preload->isFree) {
startRamAddr = preload->ramAddr;
endRamAddr = preload->ramAddr + preload->sample->size - 1;
@@ -1408,7 +1408,7 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
}
fakematch = &change.oldAddr;
- if ((apply != false) && (apply == true)) {
+ if (apply && (apply == true)) {
u32 temp = change.newAddr;
change.newAddr = *fakematch; // = change.oldAddr
diff --git a/src/code/audio_load.c b/src/code/audio_load.c
index b32b47963e..f30527d971 100644
--- a/src/code/audio_load.c
+++ b/src/code/audio_load.c
@@ -192,8 +192,8 @@ void* AudioLoad_DmaSampleData(u32 devAddr, u32 size, s32 arg2, u8* dmaIndexRef,
dma->ttl = 3;
dma->devAddr = dmaDevAddr;
dma->sizeUnused = transfer;
- AudioLoad_Dma(&gAudioCtx.currAudioFrameDmaIoMsgBuf[gAudioCtx.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL, OS_READ,
- dmaDevAddr, dma->ramAddr, transfer, &gAudioCtx.currAudioFrameDmaQueue, medium, "SUPERDMA");
+ AudioLoad_Dma(&gAudioCtx.curAudioFrameDmaIoMsgBuf[gAudioCtx.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL, OS_READ,
+ dmaDevAddr, dma->ramAddr, transfer, &gAudioCtx.curAudioFrameDmaQueue, medium, "SUPERDMA");
*dmaIndexRef = dmaIndex;
return (devAddr - dmaDevAddr) + dma->ramAddr;
}
@@ -1166,8 +1166,8 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
gAudioCtx.rspTask[0].task.t.data_size = 0;
gAudioCtx.rspTask[1].task.t.data_size = 0;
osCreateMesgQueue(&gAudioCtx.syncDmaQueue, &gAudioCtx.syncDmaMesg, 1);
- osCreateMesgQueue(&gAudioCtx.currAudioFrameDmaQueue, gAudioCtx.currAudioFrameDmaMsgBuf,
- ARRAY_COUNT(gAudioCtx.currAudioFrameDmaMsgBuf));
+ osCreateMesgQueue(&gAudioCtx.curAudioFrameDmaQueue, gAudioCtx.curAudioFrameDmaMsgBuf,
+ ARRAY_COUNT(gAudioCtx.curAudioFrameDmaMsgBuf));
osCreateMesgQueue(&gAudioCtx.externalLoadQueue, gAudioCtx.externalLoadMsgBuf,
ARRAY_COUNT(gAudioCtx.externalLoadMsgBuf));
osCreateMesgQueue(&gAudioCtx.preloadSampleQueue, gAudioCtx.preloadSampleMsgBuf,
@@ -1824,7 +1824,7 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
preloadIndex >>= 24;
preload = &gAudioCtx.preloadSampleStack[preloadIndex];
- if (preload->isFree == false) {
+ if (!preload->isFree) {
sample = preload->sample;
key = (u32)sample->sampleAddr + sample->size + sample->medium;
if (key == preload->endAndMediumKey) {
diff --git a/src/code/audio_synthesis.c b/src/code/audio_synthesis.c
index ca7467f91c..51b2c2e5ab 100644
--- a/src/code/audio_synthesis.c
+++ b/src/code/audio_synthesis.c
@@ -1326,7 +1326,7 @@ Acmd* AudioSynth_ApplyHaasEffect(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisS
aDMEMMove(cmd++, DMEM_TEMP, DMEM_HAAS_TEMP + haasEffectDelaySize, size);
}
- if (haasEffectDelaySize) { // != 0
+ if ((u32)haasEffectDelaySize != 0) {
// Save excessive samples for next iteration
aSaveBuffer(cmd++, DMEM_HAAS_TEMP + size, synthState->synthesisBuffers->haasEffectDelayState,
ALIGN16(haasEffectDelaySize));
diff --git a/src/code/code_800AD920.c b/src/code/code_800AD920.c
index 3bc30b1c5d..94479e164a 100644
--- a/src/code/code_800AD920.c
+++ b/src/code/code_800AD920.c
@@ -27,7 +27,7 @@ void func_800AD950(struct_80166500* this) {
void func_800AD958(struct_80166500* this, Gfx** gfxp) {
Gfx* gfx = *gfxp;
u16* tex = D_0E000000;
- s32 fmt = this->useRgba == false ? G_IM_FMT_IA : G_IM_FMT_RGBA;
+ s32 fmt = !this->useRgba ? G_IM_FMT_IA : G_IM_FMT_RGBA;
s32 y;
s32 height = 6;
diff --git a/src/code/code_800E4FE0.c b/src/code/code_800E4FE0.c
index 7b575d025a..53cd7d2467 100644
--- a/src/code/code_800E4FE0.c
+++ b/src/code/code_800E4FE0.c
@@ -46,7 +46,7 @@ AudioTask* func_800E5000(void) {
s32 pad;
s32 j;
s32 sp5C;
- s16* currAiBuffer;
+ s16* curAiBuffer;
OSTask_t* task;
s32 index;
u32 sp4C;
@@ -88,21 +88,21 @@ AudioTask* func_800E5000(void) {
sp5C = gAudioCtx.curAudioFrameDmaCount;
for (i = 0; i < gAudioCtx.curAudioFrameDmaCount; i++) {
- if (osRecvMesg(&gAudioCtx.currAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK) == 0) {
+ if (osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK) == 0) {
sp5C--;
}
}
if (sp5C != 0) {
for (i = 0; i < sp5C; i++) {
- osRecvMesg(&gAudioCtx.currAudioFrameDmaQueue, NULL, OS_MESG_BLOCK);
+ osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_BLOCK);
}
}
- sp48 = MQ_GET_COUNT(&gAudioCtx.currAudioFrameDmaQueue);
+ sp48 = MQ_GET_COUNT(&gAudioCtx.curAudioFrameDmaQueue);
if (sp48 != 0) {
for (i = 0; i < sp48; i++) {
- osRecvMesg(&gAudioCtx.currAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK);
+ osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK);
}
}
@@ -133,7 +133,7 @@ AudioTask* func_800E5000(void) {
gAudioCtx.curAbiCmdBuf = gAudioCtx.abiCmdBufs[gAudioCtx.rspTaskIndex];
index = gAudioCtx.curAiBufIndex;
- currAiBuffer = gAudioCtx.aiBuffers[index];
+ curAiBuffer = gAudioCtx.aiBuffers[index];
gAudioCtx.aiBufLengths[index] =
(s16)((((gAudioCtx.audioBufferParameters.samplesPerFrameTarget - samplesRemainingInAi) +
@@ -162,7 +162,7 @@ AudioTask* func_800E5000(void) {
}
gAudioCtx.curAbiCmdBuf =
- AudioSynth_Update(gAudioCtx.curAbiCmdBuf, &abiCmdCnt, currAiBuffer, gAudioCtx.aiBufLengths[index]);
+ AudioSynth_Update(gAudioCtx.curAbiCmdBuf, &abiCmdCnt, curAiBuffer, gAudioCtx.aiBufLengths[index]);
// Update audioRandom to the next random number
gAudioCtx.audioRandom = (gAudioCtx.audioRandom + gAudioCtx.totalTaskCount) * osGetCount();
diff --git a/src/code/code_800F7260.c b/src/code/code_800F7260.c
index f316798a5c..4fa6b50a96 100644
--- a/src/code/code_800F7260.c
+++ b/src/code/code_800F7260.c
@@ -140,7 +140,7 @@ void Audio_RemoveMatchingSfxRequests(u8 aspect, SfxBankEntry* cmp) {
break;
}
if (remove) {
- req->sfxId = 0;
+ req->sfxId = NA_SE_NONE;
}
}
}
@@ -158,9 +158,11 @@ void Audio_ProcessSfxRequest(void) {
req = &sSfxRequests[gSfxRequestReadIndex];
evictIndex = 0x80;
- if (req->sfxId == 0) {
+
+ if (req->sfxId == NA_SE_NONE) {
return;
}
+
bankId = SFX_BANK(req->sfxId);
if ((1 << bankId) & D_801333F0) {
AudioDebug_ScrPrt("SE", req->sfxId);
diff --git a/src/code/load.c b/src/code/load.c
index 888f2bdc98..570a968d01 100644
--- a/src/code/load.c
+++ b/src/code/load.c
@@ -1,14 +1,14 @@
#include "global.h"
-s32 Overlay_Load(uintptr_t vRomStart, uintptr_t vRomEnd, void* vRamStart, void* vRamEnd, void* allocatedVRamAddr) {
+s32 Overlay_Load(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd, void* allocatedRamAddr) {
s32 pad[3];
uintptr_t end;
- OverlayRelocationSection* ovl;
- u32 ovlOffset;
+ OverlayRelocationSection* ovlRelocs;
+ u32 relocSectionOffset;
size_t size;
- size = vRomEnd - vRomStart;
- end = (uintptr_t)allocatedVRamAddr + size;
+ size = vromEnd - vromStart;
+ end = (uintptr_t)allocatedRamAddr + size;
if (gOverlayLogSeverity >= 3) {
// "Start loading dynamic link function"
@@ -17,44 +17,52 @@ s32 Overlay_Load(uintptr_t vRomStart, uintptr_t vRomEnd, void* vRamStart, void*
if (gOverlayLogSeverity >= 3) {
// "DMA transfer of TEXT, DATA, RODATA + rel (%08x-%08x)"
- osSyncPrintf("TEXT,DATA,RODATA+relをDMA転送します(%08x-%08x)\n", allocatedVRamAddr, end);
+ osSyncPrintf("TEXT,DATA,RODATA+relをDMA転送します(%08x-%08x)\n", allocatedRamAddr, end);
}
- DmaMgr_RequestSync(allocatedVRamAddr, vRomStart, size);
+ // DMA the overlay, wait until transfer completes
+ DmaMgr_RequestSync(allocatedRamAddr, vromStart, size);
- ovlOffset = ((s32*)end)[-1];
+ // The overlay file is expected to contain a 32-bit offset from the end of the file to the start of the
+ // relocation section.
+ relocSectionOffset = ((s32*)end)[-1];
+ ovlRelocs = (OverlayRelocationSection*)(end - relocSectionOffset);
- ovl = (OverlayRelocationSection*)(end - ovlOffset);
if (gOverlayLogSeverity >= 3) {
- osSyncPrintf("TEXT(%08x), DATA(%08x), RODATA(%08x), BSS(%08x)\n", ovl->textSize, ovl->dataSize, ovl->rodataSize,
- ovl->bssSize);
+ osSyncPrintf("TEXT(%08x), DATA(%08x), RODATA(%08x), BSS(%08x)\n", ovlRelocs->textSize, ovlRelocs->dataSize,
+ ovlRelocs->rodataSize, ovlRelocs->bssSize);
}
if (gOverlayLogSeverity >= 3) {
osSyncPrintf("リロケーションします\n"); // "Relocate"
}
- Overlay_Relocate(allocatedVRamAddr, ovl, vRamStart);
+ // Relocate pointers in overlay code and data
+ Overlay_Relocate(allocatedRamAddr, ovlRelocs, vramStart);
- if (ovl->bssSize != 0) {
+ // Clear bss if present, bss is located immediately following the relocations
+ if (ovlRelocs->bssSize != 0) {
if (gOverlayLogSeverity >= 3) {
// "Clear BSS area (% 08x-% 08x)"
- osSyncPrintf("BSS領域をクリアします(%08x-%08x)\n", end, end + ovl->bssSize);
+ osSyncPrintf("BSS領域をクリアします(%08x-%08x)\n", end, end + ovlRelocs->bssSize);
}
- bzero((void*)end, ovl->bssSize);
+ bzero((void*)end, ovlRelocs->bssSize);
}
- size = (uintptr_t)&ovl->relocations[ovl->nRelocations] - (uintptr_t)ovl;
+ size = (uintptr_t)&ovlRelocs->relocations[ovlRelocs->nRelocations] - (uintptr_t)ovlRelocs;
+
if (gOverlayLogSeverity >= 3) {
// "Clear REL area (%08x-%08x)"
- osSyncPrintf("REL領域をクリアします(%08x-%08x)\n", ovl, (uintptr_t)ovl + size);
+ osSyncPrintf("REL領域をクリアします(%08x-%08x)\n", ovlRelocs, (uintptr_t)ovlRelocs + size);
}
- bzero(ovl, size);
+ // Clear relocations, this space remains allocated and goes unused
+ bzero(ovlRelocs, size);
- size = (uintptr_t)vRamEnd - (uintptr_t)vRamStart;
- osWritebackDCache(allocatedVRamAddr, size);
- osInvalICache(allocatedVRamAddr, size);
+ // Manually flush caches
+ size = (uintptr_t)vramEnd - (uintptr_t)vramStart;
+ osWritebackDCache(allocatedRamAddr, size);
+ osInvalICache(allocatedRamAddr, size);
if (gOverlayLogSeverity >= 3) {
// "Finish loading dynamic link function"
diff --git a/src/code/loadfragment2.c b/src/code/loadfragment2.c
index 1433a360a7..8212572645 100644
--- a/src/code/loadfragment2.c
+++ b/src/code/loadfragment2.c
@@ -1,17 +1,17 @@
#include "global.h"
-void* Overlay_AllocateAndLoad(uintptr_t vRomStart, uintptr_t vRomEnd, void* vRamStart, void* vRamEnd) {
- void* allocatedVRamAddr = SystemArena_MallocRDebug((s32)vRamEnd - (s32)vRamStart, "../loadfragment2.c", 31);
+void* Overlay_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd) {
+ void* allocatedRamAddr = SystemArena_MallocRDebug((s32)vramEnd - (s32)vramStart, "../loadfragment2.c", 31);
if (gOverlayLogSeverity >= 3) {
- osSyncPrintf("OVL:SPEC(%08x-%08x) REAL(%08x-%08x) OFFSET(%08x)\n", vRamStart, vRamEnd, allocatedVRamAddr,
- ((uintptr_t)vRamEnd - (uintptr_t)vRamStart) + (uintptr_t)allocatedVRamAddr,
- (uintptr_t)vRamStart - (uintptr_t)allocatedVRamAddr);
+ osSyncPrintf("OVL:SPEC(%08x-%08x) REAL(%08x-%08x) OFFSET(%08x)\n", vramStart, vramEnd, allocatedRamAddr,
+ ((uintptr_t)vramEnd - (uintptr_t)vramStart) + (uintptr_t)allocatedRamAddr,
+ (uintptr_t)vramStart - (uintptr_t)allocatedRamAddr);
}
- if (allocatedVRamAddr != NULL) {
- Overlay_Load(vRomStart, vRomEnd, vRamStart, vRamEnd, allocatedVRamAddr);
+ if (allocatedRamAddr != NULL) {
+ Overlay_Load(vromStart, vromEnd, vramStart, vramEnd, allocatedRamAddr);
}
- return allocatedVRamAddr;
+ return allocatedRamAddr;
}
diff --git a/src/code/relocation.c b/src/code/relocation.c
index 96b8068585..e42a3fa818 100644
--- a/src/code/relocation.c
+++ b/src/code/relocation.c
@@ -1,7 +1,44 @@
+/**
+ * @file relocation.c
+ *
+ * This file contains the routine responsible for runtime relocation of dynamically loadable code segments (overlays),
+ * see the description of Overlay_Relocate for details.
+ *
+ * @see Overlay_Relocate
+ */
#include "global.h"
-void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* overlayInfo, void* vRamStart) {
- u32 sections[4];
+// Extract MIPS register rs from an instruction word
+#define MIPS_REG_RS(insn) (((insn) >> 0x15) & 0x1F)
+
+// Extract MIPS register rt from an instruction word
+#define MIPS_REG_RT(insn) (((insn) >> 0x10) & 0x1F)
+
+// Extract MIPS jump target from an instruction word
+#define MIPS_JUMP_TARGET(insn) (((insn)&0x03FFFFFF) << 2)
+
+/**
+ * Performs runtime relocation of overlay files, loadable code segments.
+ *
+ * Overlays are expected to be loadable anywhere in direct-mapped cached (KSEG0) memory, with some appropriate
+ * alignment requirements; memory addresses in such code must be updated once loaded in order to execute properly.
+ * When compiled, overlays are given 'fake' KSEG0 RAM addresses larger than the total possible available main memory
+ * (>= 0x80800000), such addresses are referred to as Virtual RAM (VRAM) to distinguish them. When loading the overlay
+ * the relocation table produced at compile time is consulted to determine where and how to update these VRAM addresses
+ * to correct RAM addresses based on the location the overlay was loaded at, enabling the code to execute at this
+ * address as if it were compiled to run at this address.
+ *
+ * Each relocation is represented by a packed 32-bit value, formatted in the following way:
+ * - [31:30] 2-bit section id, taking values from the `RelocSectionId` enum.
+ * - [29:24] 6-bit relocation type describing which relocation operation should be performed. Same as ELF32 MIPS.
+ * - [23: 0] 24-bit section-relative offset indicating where in the section to apply this relocation.
+ *
+ * @param allocatedRamAddress Memory address the binary was loaded at.
+ * @param ovlRelocs Overlay relocation section containing overlay section layout and runtime relocations.
+ * @param vramStart Virtual RAM address that the overlay was compiled at.
+ */
+void Overlay_Relocate(void* allocatedRamAddress, OverlayRelocationSection* ovlRelocs, void* vramStart) {
+ uintptr_t sections[RELOC_SECTION_MAX];
u32 relocatedValue;
u32 dbg;
u32 relocOffset;
@@ -9,12 +46,18 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
uintptr_t unrelocatedAddress;
u32 i;
u32* relocDataP;
+ //! MIPS ELF relocation does not generally require tracking register values, so at first glance it appears this
+ //! register tracking was an unnecessary complication. However there is a bug in the IDO compiler that can cause
+ //! relocations to be emitted in the wrong order under rare circumstances when the compiler attempts to reuse a
+ //! previous HI16 relocation for a different LO16 relocation as an optimization. This register tracking is likely
+ //! a workaround to prevent improper matching of unrelated HI16 and LO16 relocations that would otherwise arise
+ //! due to the incorrect ordering.
u32* luiRefs[32];
u32 luiVals[32];
uintptr_t relocatedAddress;
u32 reloc;
u32* luiInstRef;
- uintptr_t allocu32 = (uintptr_t)allocatedVRamAddress;
+ uintptr_t allocu32 = (uintptr_t)allocatedRamAddress;
u32* regValP;
u32 isLoNeg;
s32 pad;
@@ -25,18 +68,21 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
relocatedAddress = 0;
if (gOverlayLogSeverity >= 3) {
- osSyncPrintf("DoRelocation(%08x, %08x, %08x)\n", allocatedVRamAddress, overlayInfo, vRamStart);
- osSyncPrintf("text=%08x, data=%08x, rodata=%08x, bss=%08x\n", overlayInfo->textSize, overlayInfo->dataSize,
- overlayInfo->rodataSize, overlayInfo->bssSize);
+ osSyncPrintf("DoRelocation(%08x, %08x, %08x)\n", allocatedRamAddress, ovlRelocs, vramStart);
+ osSyncPrintf("text=%08x, data=%08x, rodata=%08x, bss=%08x\n", ovlRelocs->textSize, ovlRelocs->dataSize,
+ ovlRelocs->rodataSize, ovlRelocs->bssSize);
}
- sections[0] = 0;
- sections[1] = allocu32;
- sections[2] = allocu32 + overlayInfo->textSize;
- sections[3] = sections[2] + overlayInfo->dataSize;
+ sections[RELOC_SECTION_NULL] = 0;
+ sections[RELOC_SECTION_TEXT] = allocu32;
+ sections[RELOC_SECTION_DATA] = allocu32 + ovlRelocs->textSize;
+ sections[RELOC_SECTION_RODATA] = sections[RELOC_SECTION_DATA] + ovlRelocs->dataSize;
- for (i = 0; i < overlayInfo->nRelocations; i++) {
- reloc = overlayInfo->relocations[i];
+ for (i = 0; i < ovlRelocs->nRelocations; i++) {
+ reloc = ovlRelocs->relocations[i];
+ // This will always resolve to a 32-bit aligned address as each section containing code or pointers must be
+ // aligned to at least 4 bytes and the MIPS ABI defines the offset of both 16-bit and 32-bit relocations to
+ // be the start of the 32-bit word containing the target.
relocDataP = (u32*)(sections[RELOC_SECTION(reloc)] + RELOC_OFFSET(reloc));
relocData = *relocDataP;
@@ -47,7 +93,7 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
// Check address is valid for relocation
if ((*relocDataP & 0x0F000000) == 0) {
- relocOffset = *relocDataP - (uintptr_t)vRamStart;
+ relocOffset = *relocDataP - (uintptr_t)vramStart;
relocatedValue = relocOffset + allocu32;
relocatedAddress = relocatedValue;
unrelocatedAddress = relocData;
@@ -60,10 +106,10 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
// Extract the address from the target field of the J-type MIPS instruction.
// Relocate the address and update the instruction.
- unrelocatedAddress = PHYS_TO_K0((*relocDataP & 0x03FFFFFF) << 2);
- relocOffset = unrelocatedAddress - (uintptr_t)vRamStart;
+ unrelocatedAddress = PHYS_TO_K0(MIPS_JUMP_TARGET(*relocDataP));
+ relocOffset = unrelocatedAddress - (uintptr_t)vramStart;
relocatedValue = (*relocDataP & 0xFC000000) | (((allocu32 + relocOffset) & 0x0FFFFFFF) >> 2);
- relocatedAddress = PHYS_TO_K0((relocatedValue & 0x03FFFFFF) << 2);
+ relocatedAddress = PHYS_TO_K0(MIPS_JUMP_TARGET(relocatedValue));
*relocDataP = relocatedValue;
break;
@@ -72,8 +118,8 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
// Store the reference to the LUI instruction (hi) using the `rt` register of the instruction.
// This will be updated later in the `R_MIPS_LO16` section.
- luiRefs[(*relocDataP >> 0x10) & 0x1F] = relocDataP;
- luiVals[(*relocDataP >> 0x10) & 0x1F] = *relocDataP;
+ luiRefs[MIPS_REG_RT(*relocDataP)] = relocDataP;
+ luiVals[MIPS_REG_RT(*relocDataP)] = *relocDataP;
break;
case R_MIPS_LO16 << RELOC_TYPE_SHIFT:
@@ -83,13 +129,13 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
// If the lo part is negative, add 1 to the LUI value.
// Note: The lo instruction is assumed to have a signed immediate.
- luiInstRef = luiRefs[(*relocDataP >> 0x15) & 0x1F];
- regValP = &luiVals[(*relocDataP >> 0x15) & 0x1F];
+ luiInstRef = luiRefs[MIPS_REG_RS(*relocDataP)];
+ regValP = &luiVals[MIPS_REG_RS(*relocDataP)];
// Check address is valid for relocation
if ((((*regValP << 0x10) + (s16)*relocDataP) & 0x0F000000) == 0) {
- relocOffset = ((*regValP << 0x10) + (s16)*relocDataP) - (uintptr_t)vRamStart;
- isLoNeg = (((relocOffset + allocu32) & 0x8000) ? 1 : 0);
+ relocOffset = ((*regValP << 0x10) + (s16)*relocDataP) - (uintptr_t)vramStart;
+ isLoNeg = ((relocOffset + allocu32) & 0x8000) ? 1 : 0; // adjust for signed immediate
unrelocatedAddress = (*luiInstRef << 0x10) + (s16)relocData;
*luiInstRef =
(*luiInstRef & 0xFFFF0000) | ((((relocOffset + allocu32) >> 0x10) & 0xFFFF) + isLoNeg);
@@ -101,18 +147,18 @@ void Overlay_Relocate(void* allocatedVRamAddress, OverlayRelocationSection* over
break;
}
- dbg = 0x10;
+ dbg = 16;
switch (RELOC_TYPE_MASK(reloc)) {
case R_MIPS_32 << RELOC_TYPE_SHIFT:
- dbg = 0x16;
+ dbg += 6;
FALLTHROUGH;
case R_MIPS_26 << RELOC_TYPE_SHIFT:
- dbg += 0xA;
+ dbg += 10;
FALLTHROUGH;
case R_MIPS_LO16 << RELOC_TYPE_SHIFT:
if (gOverlayLogSeverity >= 3) {
osSyncPrintf("%02d %08x %08x %08x ", dbg, relocDataP, relocatedValue, relocatedAddress);
- osSyncPrintf(" %08x %08x %08x %08x\n", (uintptr_t)relocDataP + (uintptr_t)vRamStart - allocu32,
+ osSyncPrintf(" %08x %08x %08x %08x\n", (uintptr_t)relocDataP + (uintptr_t)vramStart - allocu32,
relocData, unrelocatedAddress, relocOffset);
}
// Adding a break prevents matching
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 6fd1f64f40..7dbc465be6 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1610,7 +1610,7 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
customNodeListMax = sceneSubdivisionList[i].nodeListMax;
}
}
- if (useCustomSubdivisions == false) {
+ if (!useCustomSubdivisions) {
colCtx->subdivAmount.x = 16;
colCtx->subdivAmount.y = 4;
colCtx->subdivAmount.z = 16;
@@ -2296,7 +2296,7 @@ s32 BgCheck_CheckLineImpl(CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2,
sectorMin.z += colCtx->subdivLength.z;
sectorMax.z += colCtx->subdivLength.z;
}
- } else if (BgCheck_PosInStaticBoundingBox(colCtx, posA) == false) {
+ } else if (!BgCheck_PosInStaticBoundingBox(colCtx, posA)) {
return false;
} else {
result =
@@ -2722,7 +2722,7 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
}
}
- if (foundSlot == false) {
+ if (!foundSlot) {
osSyncPrintf(VT_FGCOL(RED));
osSyncPrintf("DynaPolyInfo_setActor():ダイナミックポリゴン 空きインデックスはありません\n");
osSyncPrintf(VT_RST);
@@ -2788,7 +2788,7 @@ void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgI
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("DynaPolyInfo_delReserve():index %d\n", bgId);
osSyncPrintf(VT_RST);
- if (DynaPoly_IsBgIdBgActor(bgId) == false) {
+ if (!DynaPoly_IsBgIdBgActor(bgId)) {
if (bgId == -1) {
osSyncPrintf(VT_FGCOL(GREEN));
@@ -3178,8 +3178,8 @@ f32 BgCheck_RaycastDownDyna(DynaRaycastDown* dynaRaycastDown) {
if (dynaRaycastDown->actor == dynaRaycastDown->colCtx->dyna.bgActors[i].actor ||
dynaRaycastDown->pos->y < dynaRaycastDown->colCtx->dyna.bgActors[i].minY ||
- Math3D_XZInSphere(&dynaRaycastDown->colCtx->dyna.bgActors[i].boundingSphere, dynaRaycastDown->pos->x,
- dynaRaycastDown->pos->z) == false) {
+ !Math3D_XZInSphere(&dynaRaycastDown->colCtx->dyna.bgActors[i].boundingSphere, dynaRaycastDown->pos->x,
+ dynaRaycastDown->pos->z)) {
continue;
}
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index 7c4d4259a6..e4d758f151 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -3537,7 +3537,7 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a
return 0;
}
- if (intersect2 == false) {
+ if (!intersect2) {
if (frac1 < 0.0f || 1.0f < frac1) {
return 0;
}
@@ -3564,7 +3564,7 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a
((frac2 * itemStep.y + actorToItem.y < 0.0f) || (height < frac2 * itemStep.y + actorToItem.y))) {
intersect2 = false;
}
- if (intersect1 == false && intersect2 == false) {
+ if (!intersect1 && !intersect2) {
return 0;
} else if ((intersect1 == true) && (intersect2 == true)) {
out1->x = frac1 * itemStep.x + actorToItem.x + actorPos->x;
diff --git a/src/code/z_effect.c b/src/code/z_effect.c
index a72fbc4947..dd5436bc2a 100644
--- a/src/code/z_effect.c
+++ b/src/code/z_effect.c
@@ -109,7 +109,7 @@ void Effect_Add(PlayState* play, s32* pIndex, s32 type, u8 arg3, u8 arg4, void*
switch (type) {
case EFFECT_SPARK:
for (i = 0; i < SPARK_COUNT; i++) {
- if (sEffectContext.sparks[i].status.active == false) {
+ if (!sEffectContext.sparks[i].status.active) {
slotFound = true;
*pIndex = i;
effect = &sEffectContext.sparks[i].effect;
@@ -121,7 +121,7 @@ void Effect_Add(PlayState* play, s32* pIndex, s32 type, u8 arg3, u8 arg4, void*
case EFFECT_BLURE1:
case EFFECT_BLURE2:
for (i = 0; i < BLURE_COUNT; i++) {
- if (sEffectContext.blures[i].status.active == false) {
+ if (!sEffectContext.blures[i].status.active) {
slotFound = true;
*pIndex = i + SPARK_COUNT;
effect = &sEffectContext.blures[i].effect;
@@ -132,7 +132,7 @@ void Effect_Add(PlayState* play, s32* pIndex, s32 type, u8 arg3, u8 arg4, void*
break;
case EFFECT_SHIELD_PARTICLE:
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
- if (sEffectContext.shieldParticles[i].status.active == false) {
+ if (!sEffectContext.shieldParticles[i].status.active) {
slotFound = true;
*pIndex = i + SPARK_COUNT + BLURE_COUNT;
effect = &sEffectContext.shieldParticles[i].effect;
diff --git a/src/code/z_message_PAL.c b/src/code/z_message_PAL.c
index 9a04dcee2c..05c43e01be 100644
--- a/src/code/z_message_PAL.c
+++ b/src/code/z_message_PAL.c
@@ -183,7 +183,7 @@ void Message_CloseTextbox(PlayState* play) {
msgCtx->stateTimer = 2;
msgCtx->msgMode = MSGMODE_TEXT_CLOSING;
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
- Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
}
}
@@ -743,10 +743,9 @@ u16 Message_DrawItemIcon(PlayState* play, u16 itemId, Gfx** p, u16 i) {
MessageContext* msgCtx = &play->msgCtx;
// clang-format off
- if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4,
- &gSfxDefaultFreqAndVolScale,
- &gSfxDefaultFreqAndVolScale,
- &gSfxDefaultReverb);
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { \
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
+ &gSfxDefaultReverb);
}
// clang-format on
@@ -860,7 +859,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
play->msgCtx.textPosX = R_TEXT_INIT_XPOS;
- if (sTextIsCredits == false) {
+ if (!sTextIsCredits) {
msgCtx->textPosY = R_TEXT_INIT_YPOS;
} else {
msgCtx->textPosY = YREG(1);
@@ -898,7 +897,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
case MESSAGE_BOX_BREAK:
if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
if (!sTextboxSkipped) {
- Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT;
Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_TRIANGLE);
@@ -916,7 +915,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
case MESSAGE_TEXTID:
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_HAS_NEXT;
if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
- Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->msgMode = MSGMODE_TEXT_DONE;
Font_LoadMessageBoxIcon(font, TEXTBOX_ICON_TRIANGLE);
@@ -948,6 +947,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
if (character) {}
}
+ FALLTHROUGH;
case MESSAGE_QUICKTEXT_DISABLE:
break;
case MESSAGE_AWAIT_BUTTON_PRESS:
@@ -996,10 +996,9 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
break;
case MESSAGE_BACKGROUND:
// clang-format off
- if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4,
- &gSfxDefaultFreqAndVolScale,
- &gSfxDefaultFreqAndVolScale,
- &gSfxDefaultReverb);
+ if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { \
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
// clang-format on
gDPPipeSync(gfx++);
@@ -1113,7 +1112,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
return;
case MESSAGE_PERSISTENT:
if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) {
- Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->msgMode = MSGMODE_TEXT_DONE;
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_PERSISTENT;
@@ -1133,7 +1132,7 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
default:
if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING && i + 1 == msgCtx->textDrawPos &&
msgCtx->textDelayTimer == msgCtx->textDelay) {
- Audio_PlaySfxGeneral(0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
+ Audio_PlaySfxGeneral(NA_SE_NONE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
Message_DrawTextChar(play, &font->charTexBuf[charTexIdx], &gfx);
@@ -1755,7 +1754,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
s32 textId;
s16 j;
s16 i;
- s16 noStop;
+ s16 noStopDoAction;
s32 k;
osSyncPrintf(VT_FGCOL(GREEN));
@@ -1781,7 +1780,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
// "Ocarina Number"
osSyncPrintf(VT_FGCOL(RED) "☆☆☆☆☆ オカリナ番号=%d(%d) ☆☆☆☆☆\n" VT_RST, ocarinaActionId, 2);
- noStop = false;
+ noStopDoAction = false;
if (ocarinaActionId >= 0x893) {
Message_OpenText(play, ocarinaActionId); // You played the [song name]
textId = ocarinaActionId + 0x86E;
@@ -1805,7 +1804,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
}
} else {
msgCtx->ocarinaAction = ocarinaActionId;
- noStop = true;
+ noStopDoAction = true;
if (ocarinaActionId >= OCARINA_ACTION_PLAYBACK_MINUET) {
osSyncPrintf("222222222\n");
Message_OpenText(play, 0x86D); // Play using [A] and [C].
@@ -1835,11 +1834,11 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
msgCtx->msgMode = MSGMODE_TEXT_CONTINUING;
}
msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget;
- if (noStop == false) {
+ if (!noStopDoAction) {
Interface_LoadActionLabelB(play, DO_ACTION_STOP);
- noStop = gSaveContext.hudVisibilityMode;
+ noStopDoAction = gSaveContext.hudVisibilityMode;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_B_ALT);
- gSaveContext.hudVisibilityMode = noStop;
+ gSaveContext.hudVisibilityMode = noStopDoAction;
}
// "Music Performance Start"
osSyncPrintf("演奏開始\n");
@@ -2091,7 +2090,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->stateTimer = 20;
msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_SELECT_INSTRUMENT;
} else {
- AudioOcarina_Start((1 << (msgCtx->ocarinaAction + 0x11)) + 0x8000);
+ AudioOcarina_Start((1 << (msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET)) + 0x8000);
// "Performance Check"
osSyncPrintf("演奏チェック=%d\n", msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET);
msgCtx->msgMode = MSGMODE_SONG_PLAYBACK;
@@ -2470,9 +2469,9 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_SONG_PLAYED_ACT:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
- if (msgCtx->lastPlayedSong < OCARINA_SONG_SARIAS &&
- (msgCtx->ocarinaAction < OCARINA_ACTION_PLAYBACK_MINUET ||
- msgCtx->ocarinaAction >= OCARINA_ACTION_PLAYBACK_SARIA)) {
+ if ((msgCtx->lastPlayedSong <= OCARINA_SONG_PRELUDE) &&
+ !(msgCtx->ocarinaAction >= OCARINA_ACTION_PLAYBACK_MINUET &&
+ msgCtx->ocarinaAction <= OCARINA_ACTION_PLAYBACK_PRELUDE)) {
if (msgCtx->disableWarpSongs || interfaceCtx->restrictions.warpSongs == 3) {
Message_StartTextbox(play, 0x88C, NULL); // "You can't warp here!"
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
@@ -2500,7 +2499,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("Ocarina_PC_Wind=%d(%d) ☆☆☆ ", OCARINA_ACTION_CHECK_MINUET,
msgCtx->ocarinaAction - OCARINA_ACTION_CHECK_MINUET);
- if (msgCtx->lastPlayedSong + OCARINA_ACTION_CHECK_MINUET == msgCtx->ocarinaAction) {
+ if (msgCtx->lastPlayedSong == (msgCtx->ocarinaAction - OCARINA_ACTION_CHECK_MINUET)) {
play->msgCtx.ocarinaMode = OCARINA_MODE_03;
} else {
play->msgCtx.ocarinaMode = msgCtx->lastPlayedSong - 1;
@@ -2509,7 +2508,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("Ocarina_C_Wind=%d(%d) ☆☆☆ ", OCARINA_ACTION_PLAYBACK_MINUET,
msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET);
- if (msgCtx->lastPlayedSong + OCARINA_ACTION_PLAYBACK_MINUET == msgCtx->ocarinaAction) {
+ if (msgCtx->lastPlayedSong == (msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET)) {
play->msgCtx.ocarinaMode = OCARINA_MODE_03;
} else {
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
@@ -2535,7 +2534,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
if (sOcarinaButtonIndexBufPos != 0 && msgCtx->ocarinaStaff->pos == 1) {
sOcarinaButtonIndexBufPos = 0;
}
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
msgCtx->lastOcarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] =
msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
@@ -2548,7 +2548,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_SONG_PLAYBACK:
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
@@ -2595,7 +2596,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING:
msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
osSyncPrintf("\nonpu_pt=%d, locate=%d", sOcarinaButtonIndexBufPos, msgCtx->ocarinaStaff->pos);
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
if (sOcarinaButtonIndexBufLen >= 8) {
for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) {
sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1];
@@ -2646,7 +2648,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_SCARECROW_LONG_PLAYBACK:
case MSGMODE_SCARECROW_SPAWN_PLAYBACK:
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
if (sOcarinaButtonIndexBufLen >= 8) {
for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) {
sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1];
@@ -2681,7 +2684,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING:
msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
msgCtx->lastOcarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] =
msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBufPos++;
@@ -2738,7 +2742,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
Audio_PlaySfxGeneral(NA_SE_SY_METRONOME_LV - SFX_FLAG, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
@@ -2761,7 +2766,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_MEMORY_GAME_LEFT_SKULLKID_WAIT:
case MSGMODE_MEMORY_GAME_RIGHT_SKULLKID_WAIT:
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
@@ -2771,7 +2777,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
Audio_PlaySfxGeneral(NA_SE_SY_METRONOME_LV - SFX_FLAG, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
@@ -2796,7 +2803,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_MEMORY_GAME_ROUND_SUCCESS:
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex;
sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
sOcarinaButtonIndexBufPos++;
@@ -2835,7 +2843,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
break;
case MSGMODE_FROGS_PLAYING:
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
- if (msgCtx->ocarinaStaff->pos && sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1) {
+ if (((u32)msgCtx->ocarinaStaff->pos != 0) &&
+ (sOcarinaButtonIndexBufPos == msgCtx->ocarinaStaff->pos - 1)) {
msgCtx->lastOcarinaButtonIndex = msgCtx->ocarinaStaff->buttonIndex;
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
@@ -3318,7 +3327,7 @@ void Message_Update(PlayState* play) {
// Later, if the ocarina has not been played and another textbox is closed, this handling
// for Saria's song will be carried out.
player->naviTextId = -0xE0;
- player->naviActor->flags |= 0x10000;
+ player->naviActor->flags |= ACTOR_FLAG_16;
}
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE &&
(play->msgCtx.ocarinaMode == OCARINA_MODE_01 || play->msgCtx.ocarinaMode == OCARINA_MODE_0B)) {
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 925f150afd..c953ae4be3 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -514,7 +514,7 @@ void Play_Update(PlayState* this) {
}
}
- if (this->transitionMode) { // != TRANS_MODE_OFF
+ if ((u32)this->transitionMode != TRANS_MODE_OFF) {
switch (this->transitionMode) {
case TRANS_MODE_SETUP:
if (this->transitionTrigger != TRANS_TRIGGER_END) {
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 513a1a5aa1..1bf76a9bb9 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -1322,7 +1322,7 @@ void func_80090A28(Player* this, Vec3f* vecs) {
D_8012608C.x = D_80126080.x;
if (this->unk_845 >= 3) {
- this->unk_845 += 1;
+ this->unk_845++;
D_8012608C.x *= 1.0f + ((9 - this->unk_845) * 0.1f);
}
diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
index 1f7a0caaee..7dd457a30d 100644
--- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
+++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
@@ -109,7 +109,7 @@ void ArrowFire_Hit(ArrowFire* this, PlayState* play) {
timer = this->timer;
if (timer != 0) {
- this->timer -= 1;
+ this->timer--;
if (this->timer >= 8) {
offset = ((this->timer - 8) * (1.0f / 24.0f));
diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
index 11fb51b52b..42394e71aa 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
@@ -110,7 +110,7 @@ void ArrowIce_Hit(ArrowIce* this, PlayState* play) {
timer = this->timer;
if (timer != 0) {
- this->timer -= 1;
+ this->timer--;
if (this->timer >= 8) {
offset = ((this->timer - 8) * (1.0f / 24.0f));
diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
index 5e14ddf5e2..1be30f4fe3 100644
--- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
+++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
@@ -109,7 +109,7 @@ void ArrowLight_Hit(ArrowLight* this, PlayState* play) {
timer = this->timer;
if (timer != 0) {
- this->timer -= 1;
+ this->timer--;
if (this->timer >= 8) {
offset = ((this->timer - 8) * (1.0f / 24.0f));
diff --git a/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c b/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c
index f72d62ae43..ae3ead0668 100644
--- a/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c
@@ -116,7 +116,7 @@ void BgGateShutter_Update(Actor* thisx, PlayState* play) {
BgGateShutter* this = (BgGateShutter*)thisx;
if (this->unk_178 != 0) {
- this->unk_178 -= 1;
+ this->unk_178--;
}
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
index af5940506d..1df1bf5fcd 100644
--- a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
+++ b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
@@ -127,7 +127,7 @@ void func_8087BAE4(BgHaka* this, PlayState* play) {
s32 pad;
if (this->dyna.actor.params != 0) {
- this->dyna.actor.params -= 1;
+ this->dyna.actor.params--;
}
if (this->dyna.unk_150 != 0.0f) {
this->dyna.unk_150 = 0.0f;
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c b/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c
index ef2738418e..6584633071 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c
@@ -112,7 +112,7 @@ void func_80889B5C(BgHidanKousi* this, PlayState* play) {
}
void func_80889BC0(BgHidanKousi* this, PlayState* play) {
- this->unk_168 -= 1;
+ this->unk_168--;
if (this->dyna.actor.category == func_8005B198() || (this->unk_168 <= 0)) {
BgHidanKousi_SetupAction(this, func_80889C18);
}
diff --git a/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c b/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c
index 4c5a89bd70..3cf8ba1fb3 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c
@@ -83,8 +83,8 @@ void func_80899894(BgJyaKanaami* this, PlayState* play) {
if (this->dyna.actor.world.pos.x > -1000.0f && this->unk_16A == 0) {
OnePointCutscene_Init(play, 3450, -99, &this->dyna.actor, CAM_ID_MAIN);
}
- this->unk_16A += 1;
- if (this->unk_16A >= 0xA) {
+ this->unk_16A++;
+ if (this->unk_16A >= 10) {
func_8089993C(this);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c b/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c
index 17e15dffbe..5a42618da2 100644
--- a/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c
+++ b/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c
@@ -89,11 +89,11 @@ void BgMenkuriEye_Update(Actor* thisx, PlayState* play) {
if (!Flags_GetSwitch(play, this->actor.params)) {
if (this->framesUntilDisable != -1) {
if (this->framesUntilDisable != 0) {
- this->framesUntilDisable -= 1;
+ this->framesUntilDisable--;
}
if (this->framesUntilDisable == 0) {
this->framesUntilDisable = -1;
- D_8089C1A0 -= 1;
+ D_8089C1A0--;
}
}
}
@@ -102,7 +102,7 @@ void BgMenkuriEye_Update(Actor* thisx, PlayState* play) {
this->collider.base.acFlags &= ~AC_HIT;
if (this->framesUntilDisable == -1) {
Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_DAMAGE);
- D_8089C1A0 += 1;
+ D_8089C1A0++;
D_8089C1A0 = CLAMP_MAX(D_8089C1A0, 4);
}
this->framesUntilDisable = 416;
diff --git a/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c b/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c
index e27736f9b5..bf5f5d3236 100644
--- a/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c
+++ b/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c
@@ -312,7 +312,7 @@ void func_808B5240(BgSpot16Bombstone* this, PlayState* play) {
func_800287AC(play, &position, &sVelocity, &sAcceleration, D_808B5EB0[index][4], D_808B5EB0[index][5],
D_808B5EB0[index][6]);
- this->unk_158 += 1;
+ this->unk_158++;
}
}
@@ -345,7 +345,7 @@ void BgSpot16Bombstone_SpawnFragments(BgSpot16Bombstone* this, PlayState* play)
EffectSsKakera_Spawn(play, &pos, &velocity, &this->actor.world.pos, -420, 0x31, 0xF, 0xF, 0, scale, 2, 0x40,
160, KAKERA_COLOR_NONE, OBJECT_BOMBIWA, object_bombiwa_DL_0009E0);
- index += 1;
+ index++;
} while (index != ARRAY_COUNT(D_808B6074));
}
}
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c b/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c
index a054896a0e..8531ca1b31 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c
@@ -277,7 +277,7 @@ void BgSpot18Obj_Update(Actor* thisx, PlayState* play) {
BgSpot18Obj* this = (BgSpot18Obj*)thisx;
if (this->unk_168 > 0) {
- this->unk_168 -= 1;
+ this->unk_168--;
}
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
index 2940b79a26..d06cf76e94 100644
--- a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
+++ b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
@@ -1476,7 +1476,7 @@ void BossFd_UpdateEffects(BossFd* this, PlayState* play) {
if ((this->timers[3] == 0) && (sqrtf(SQ(diff.x) + SQ(diff.y) + SQ(diff.z)) < 20.0f)) {
this->timers[3] = 50;
func_8002F6D4(play, NULL, 5.0f, effect->kbAngle, 0.0f, 0x30);
- if (player->isBurning == false) {
+ if (!player->isBurning) {
for (i2 = 0; i2 < PLAYER_BODYPART_MAX; i2++) {
player->flameTimers[i2] = Rand_S16Offset(0, 200);
}
diff --git a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
index 8448bf2260..b79795f444 100644
--- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
+++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
@@ -2820,23 +2820,9 @@ void BossVa_Update(Actor* thisx, PlayState* play2) {
BossVa_UpdateEffects(play);
for (i = 2; i >= 0; i--) {
- if ((play->envCtx.adjAmbientColor[i] - 1) > 0) {
- play->envCtx.adjAmbientColor[i] -= 1;
- } else {
- play->envCtx.adjAmbientColor[i] = 0;
- }
-
- if ((play->envCtx.adjLight1Color[i] - 10) > 0) {
- play->envCtx.adjLight1Color[i] -= 10;
- } else {
- play->envCtx.adjLight1Color[i] = 0;
- }
-
- if ((play->envCtx.adjFogColor[i] - 10) > 0) {
- play->envCtx.adjFogColor[i] -= 10;
- } else {
- play->envCtx.adjFogColor[i] = 0;
- }
+ play->envCtx.adjAmbientColor[i] = MAX(play->envCtx.adjAmbientColor[i] - 1, 0);
+ play->envCtx.adjLight1Color[i] = MAX(play->envCtx.adjLight1Color[i] - 10, 0);
+ play->envCtx.adjFogColor[i] = MAX(play->envCtx.adjFogColor[i] - 10, 0);
}
if (this->onCeiling > 0) {
diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
index 0fa6c24dc6..570f054b91 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -1036,7 +1036,7 @@ void DemoEffect_UpdateLightEffect(DemoEffect* this, PlayState* play) {
}
}
this->light.rotation += 6;
- this->light.scaleFlag += 1;
+ this->light.scaleFlag++;
break;
case 3:
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
index f9c3e5132e..d36f08fc79 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -591,7 +591,7 @@ void DoorShutter_Idle(DoorShutter* this, PlayState* play) {
if (this->unlockTimer != 0) {
Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->dyna.actor));
if (this->doorType != SHUTTER_BOSS) {
- gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]--;
+ gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
} else {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B);
diff --git a/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c b/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c
index c8eeeae28a..c4c19eff69 100644
--- a/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c
+++ b/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c
@@ -212,7 +212,7 @@ void EfcErupc_UpdateEffects(EfcErupc* this, PlayState* play) {
cur->vel.x += cur->accel.x;
cur->vel.y += cur->accel.y;
cur->vel.z += cur->accel.z;
- cur->animTimer += 1;
+ cur->animTimer++;
index = cur->animTimer % 4;
color = &effectColors[index];
cur->color.r = color->r;
diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
index 54d7d804e6..172dd438e5 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
@@ -136,7 +136,7 @@ void EffDust_UpdateFunc_8099DB28(EffDust* this, PlayState* play) {
this->initialPositions[i].y = -800.0f * Math_SinS(theta);
this->initialPositions[i].z = -800.0f * Math_SinS(fi) * Math_CosS(theta);
this->distanceTraveled[i] = 0.0f;
- this->index += 1;
+ this->index++;
}
}
}
@@ -165,7 +165,7 @@ void EffDust_UpdateFunc_8099DD74(EffDust* this, PlayState* play) {
this->initialPositions[i].y = 400.0f * Math_SinS(theta);
this->initialPositions[i].z = 400.0f * Math_SinS(fi) * Math_CosS(theta);
this->distanceTraveled[i] = 0.0f;
- this->index += 1;
+ this->index++;
}
}
}
@@ -180,7 +180,7 @@ void EffDust_UpdateFunc_8099DFC0(EffDust* this, PlayState* play) {
if (parent == NULL || parent->update == NULL || !(player->stateFlags1 & PLAYER_STATE1_12)) {
if (this->life != 0) {
- this->life -= 1;
+ this->life--;
} else {
Actor_Kill(&this->actor);
}
@@ -248,7 +248,7 @@ void EffDust_UpdateFunc_8099DFC0(EffDust* this, PlayState* play) {
}
this->distanceTraveled[i] = 0.0f;
- this->index += 1;
+ this->index++;
}
}
}
diff --git a/src/overlays/actors/ovl_En_Bird/z_en_bird.h b/src/overlays/actors/ovl_En_Bird/z_en_bird.h
index b255ee39b7..1cc9858b13 100644
--- a/src/overlays/actors/ovl_En_Bird/z_en_bird.h
+++ b/src/overlays/actors/ovl_En_Bird/z_en_bird.h
@@ -15,8 +15,8 @@ typedef struct EnBird {
/* 0x0194 */ u32 unk_194; // set to 0 but otherwise unused
/* 0x0198 */ s32 timer;
/* 0x019C */ s16 scaleAnimSpeed; // when true, anim speed scales with XZ speed while slowing down. otherwise anim plays full speed
- /* 0x01A0 */ f32 posYMag;
- /* 0x01A4 */ f32 rotYMag;
+ /* 0x01A0 */ f32 posYMag;
+ /* 0x01A4 */ f32 rotYMag;
/* 0x01A8 */ f32 speedTarget;
/* 0x01AC */ f32 speedStep;
/* 0x01B0 */ f32 flightDistance; // radius of "home" area
diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
index 0b7484a02d..c3879516eb 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
@@ -160,7 +160,7 @@ void EnCow_Destroy(Actor* thisx, PlayState* play) {
void func_809DF494(EnCow* this, PlayState* play) {
if (this->unk_278 > 0) {
- this->unk_278 -= 1;
+ this->unk_278--;
} else {
this->unk_278 = Rand_ZeroFloat(500.0f) + 40.0f;
Animation_Change(&this->skelAnime, &gCowBodyChewAnim, 1.0f, this->skelAnime.curFrame,
@@ -174,8 +174,8 @@ void func_809DF494(EnCow* this, PlayState* play) {
}
}
- this->unk_27A += 1;
- if (this->unk_27A >= 0x31) {
+ this->unk_27A++;
+ if (this->unk_27A > 48) {
this->unk_27A = 0;
}
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
index 2a9a0588cd..16834a0bed 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
@@ -164,7 +164,7 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
if (isFree == true && play->sceneId == SCENE_THIEVES_HIDEOUT) {
noKill = false;
- } else if (isFree == false && play->sceneId == SCENE_CARPENTERS_TENT) {
+ } else if (!isFree && play->sceneId == SCENE_CARPENTERS_TENT) {
noKill = false;
}
diff --git a/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c b/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
index 88416d60aa..1f21ece101 100644
--- a/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
+++ b/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
@@ -369,7 +369,7 @@ void EnDaikuKakariko_Run(EnDaikuKakariko* this, PlayState* play) {
run = false;
if (runDist <= 10.0f) {
- if (this->pathContinue == false) {
+ if (!this->pathContinue) {
this->waypoint++;
if (this->waypoint >= path->count) {
@@ -416,7 +416,7 @@ void EnDaikuKakariko_Run(EnDaikuKakariko* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (this->run == false) {
+ if (!this->run) {
if (angleStepDiff == 0) {
this->run = true;
} else {
diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c
index ba5a20ce05..e18f49c9e7 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -226,7 +226,7 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) {
Animation_PlayOnceSetSpeed(&this->skelAnime, sDoorAnims[this->openAnim],
(player->stateFlags1 & PLAYER_STATE1_27) ? 0.75f : 1.5f);
if (this->lockTimer != 0) {
- gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]--;
+ gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1;
Flags_SetSwitch(play, ENDOOR_GET_LOCKED_SWITCH_FLAG(&this->actor));
Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
}
diff --git a/src/overlays/actors/ovl_En_Ds/z_en_ds.c b/src/overlays/actors/ovl_En_Ds/z_en_ds.c
index 6817b084ca..92a4d4f7cb 100644
--- a/src/overlays/actors/ovl_En_Ds/z_en_ds.c
+++ b/src/overlays/actors/ovl_En_Ds/z_en_ds.c
@@ -104,7 +104,7 @@ void EnDs_TalkAfterBrewOddPotion(EnDs* this, PlayState* play) {
void EnDs_BrewOddPotion3(EnDs* this, PlayState* play) {
if (this->brewTimer > 0) {
- this->brewTimer -= 1;
+ this->brewTimer--;
} else {
this->actionFunc = EnDs_TalkAfterBrewOddPotion;
Message_ContinueTextbox(play, 0x504D);
@@ -116,7 +116,7 @@ void EnDs_BrewOddPotion3(EnDs* this, PlayState* play) {
void EnDs_BrewOddPotion2(EnDs* this, PlayState* play) {
if (this->brewTimer > 0) {
- this->brewTimer -= 1;
+ this->brewTimer--;
} else {
this->actionFunc = EnDs_BrewOddPotion3;
this->brewTimer = 60;
@@ -126,7 +126,7 @@ void EnDs_BrewOddPotion2(EnDs* this, PlayState* play) {
void EnDs_BrewOddPotion1(EnDs* this, PlayState* play) {
if (this->brewTimer > 0) {
- this->brewTimer -= 1;
+ this->brewTimer--;
} else {
this->actionFunc = EnDs_BrewOddPotion2;
this->brewTimer = 20;
diff --git a/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c b/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
index f24274e4c1..8d27e89e34 100644
--- a/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
+++ b/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
@@ -295,7 +295,7 @@ void EnExRuppy_WaitInGame(EnExRuppy* this, PlayState* play) {
}
void EnExRuppy_Kill(EnExRuppy* this, PlayState* play) {
- this->invisible += 1;
+ this->invisible++;
this->invisible &= 1; // Net effect is this->invisible = !this->invisible;
if (this->timer == 0) {
Actor_Kill(&this->actor);
diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
index 0fe3dc394c..d0b965fe2b 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -352,7 +352,7 @@ void EnFr_DivingIntoWater(EnFr* this, PlayState* play) {
vec.z = this->actor.world.pos.z;
EffectSsGSplash_Spawn(play, &vec, NULL, NULL, 1, 1);
- if (this->isBelowWaterSurfaceCurrent == false) {
+ if (!this->isBelowWaterSurfaceCurrent) {
Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
} else {
Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
@@ -594,7 +594,7 @@ s32 EnFr_SetupJumpingUp(EnFr* this, s32 frogIndex) {
EnFr* frog = sEnFrPointers.frogs[frogIndex];
u8 semitone;
- if (frog != NULL && frog->isJumpingUp == false) {
+ if ((frog != NULL) && !frog->isJumpingUp) {
semitone = frog->growingScaleIndex == 3 ? sLargeFrogNotes[frogIndex] : sSmallFrogNotes[frogIndex];
if (this->songIndex == FROG_CHOIR_SONG) {
frog->isJumpingToFrogSong = true;
@@ -756,7 +756,7 @@ void EnFr_ChildSong(EnFr* this, PlayState* play) {
void EnFr_ChildSongFirstTime(EnFr* this, PlayState* play) {
EnFr* frog = sEnFrPointers.frogs[sSongToFrog[this->songIndex]];
- if (frog->isActive == false) {
+ if (!frog->isActive) {
this->actor.textId = 0x40A9;
EnFr_SetupReward(this, play, true);
}
diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
index a7789dfbb0..957f2df07c 100644
--- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c
+++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
@@ -685,7 +685,7 @@ void EnFz_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->actor, 50.0f);
EnFz_ApplyDamage(this, play);
this->actionFunc(this, play);
- if (this->isDespawning == false) {
+ if (!this->isDespawning) {
Collider_UpdateCylinder(&this->actor, &this->collider1);
Collider_UpdateCylinder(&this->actor, &this->collider2);
if (this->isFreezing) {
diff --git a/src/overlays/actors/ovl_En_Guest/z_en_guest.c b/src/overlays/actors/ovl_En_Guest/z_en_guest.c
index 4ebf845e31..332638be11 100644
--- a/src/overlays/actors/ovl_En_Guest/z_en_guest.c
+++ b/src/overlays/actors/ovl_En_Guest/z_en_guest.c
@@ -113,7 +113,7 @@ void func_80A5046C(EnGuest* this) {
if (this->unk_2CA != 0) {
this->unk_2CA--;
} else {
- this->unk_30E += 1;
+ this->unk_30E++;
if (this->unk_30E >= 3) {
this->unk_30E = 0;
this->unk_30D = 0;
diff --git a/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c b/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c
index 8f03ea0943..bc613eaf5f 100644
--- a/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c
+++ b/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c
@@ -215,9 +215,9 @@ void EnHeishi3_Update(Actor* thisx, PlayState* play) {
s32 pad;
Actor_SetFocus(&this->actor, 60.0f);
- this->unk_274 += 1;
+ this->unk_274++;
if (this->caughtTimer != 0) {
- this->caughtTimer -= 1;
+ this->caughtTimer--;
}
this->actionFunc(this, play);
this->actor.shape.rot = this->actor.world.rot;
diff --git a/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c b/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c
index 6d9269d403..5da716f969 100644
--- a/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c
+++ b/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c
@@ -355,7 +355,7 @@ void EnHeishi4_Update(Actor* thisx, PlayState* play) {
this->headRot = this->interactInfo.headRot;
this->torsoRot = this->interactInfo.torsoRot;
}
- this->unk_27E += 1;
+ this->unk_27E++;
this->actionFunc(this, play);
Actor_MoveXZGravity(thisx);
Actor_UpdateBgCheckInfo(play, thisx, 10.0f, 10.0f, 30.0f,
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
index 97b802c8b7..63be1fc35d 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -1366,7 +1366,7 @@ void EnHorse_MountedGallop(EnHorse* this, PlayState* play) {
if (this->noInputTimer <= 0.0f) {
EnHorse_UpdateSpeed(this, play, 0.3f, -0.5f, 10.0f, 0.06f, 8.0f, 0x190);
} else if (this->noInputTimer > 0.0f) {
- this->noInputTimer -= 1;
+ this->noInputTimer--;
this->actor.speed = 8.0f;
}
if (this->actor.speed < 6.0f) {
@@ -3033,7 +3033,7 @@ void EnHorse_MountDismount(EnHorse* this, PlayState* play) {
Actor_SetRideActor(play, &this->actor, mountSide);
}
- if (this->playerControlled == false && Actor_IsMounted(play, &this->actor) == true) {
+ if (!this->playerControlled && Actor_IsMounted(play, &this->actor) == true) {
this->noInputTimer = 55;
this->noInputTimerMax = 55;
this->playerControlled = 1;
@@ -3205,8 +3205,8 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
}
// too close to jump
- if ((movingFast == false && intersectDist < 80.0f) || (movingFast == true && intersectDist < 150.0f)) {
- if (movingFast == false) {
+ if ((!movingFast && intersectDist < 80.0f) || (movingFast == true && intersectDist < 150.0f)) {
+ if (!movingFast) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
} else if (movingFast == true) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
@@ -3218,7 +3218,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
dynaPoly = DynaPoly_GetActor(&play->colCtx, bgId);
if ((this->stateFlags & ENHORSE_FLAG_26) &&
((dynaPoly && dynaPoly->actor.id != ACTOR_BG_UMAJUMP) || dynaPoly == NULL)) {
- if (movingFast == false) {
+ if (!movingFast) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
} else if (movingFast == true) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
@@ -3275,7 +3275,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
obstaclePos = startPos;
obstaclePos.y = this->actor.world.pos.y + 120.0f;
- if (movingFast == false) {
+ if (!movingFast) {
obstaclePos.x += (276.0f * Math_SinS(this->actor.world.rot.y));
obstaclePos.z += (276.0f * Math_CosS(this->actor.world.rot.y));
} else {
@@ -3308,7 +3308,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
EnHorse_StartBraking(this, play);
}
- } else if (movingFast == false && obstacleHeight > 19.0f && obstacleHeight <= 40.0f) {
+ } else if (!movingFast && obstacleHeight > 19.0f && obstacleHeight <= 40.0f) {
EnHorse_Stub1(this);
this->postDrawFunc = EnHorse_LowJumpInit;
} else if ((movingFast == true && this->actor.speed < 13.8f && obstacleHeight > 19.0f && obstacleHeight <= 72.0f) ||
diff --git a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
index 751fe90d33..83aee17eb4 100644
--- a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
+++ b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
@@ -120,7 +120,7 @@ void func_80A686A8(EnHorseGanon* this, PlayState* play) {
func_80A68660(D_80A69248, this->unk_1EC, &vec);
if (Math3D_Vec3f_DistXYZ(&vec, &this->actor.world.pos) <= 400.0f) {
- this->unk_1EC += 1;
+ this->unk_1EC++;
if (this->unk_1EC >= 14) {
this->unk_1EC = 0;
func_80A68660(D_80A69248, 0, &vec);
diff --git a/src/overlays/actors/ovl_En_Kz/z_en_kz.c b/src/overlays/actors/ovl_En_Kz/z_en_kz.c
index f330c77f7f..1b9198b147 100644
--- a/src/overlays/actors/ovl_En_Kz/z_en_kz.c
+++ b/src/overlays/actors/ovl_En_Kz/z_en_kz.c
@@ -180,7 +180,7 @@ s16 EnKz_UpdateTalkState(PlayState* play, Actor* thisx) {
void EnKz_UpdateEyes(EnKz* this) {
if (DECR(this->blinkTimer) == 0) {
- this->eyeIdx += 1;
+ this->eyeIdx++;
if (this->eyeIdx >= 3) {
this->blinkTimer = Rand_S16Offset(30, 30);
this->eyeIdx = 0;
diff --git a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
index 9a19f69bcf..a793a16957 100644
--- a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
+++ b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
@@ -211,7 +211,7 @@ s32 func_80AA08C4(EnMa1* this, PlayState* play) {
void EnMa1_UpdateEyes(EnMa1* this) {
if (DECR(this->blinkTimer) == 0) {
- this->eyeIndex += 1;
+ this->eyeIndex++;
if (this->eyeIndex >= 3) {
this->blinkTimer = Rand_S16Offset(30, 30);
this->eyeIndex = 0;
diff --git a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
index 27c6c3f776..8bd61ffafa 100644
--- a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
+++ b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
@@ -175,7 +175,7 @@ s32 func_80AA1C68(EnMa2* this) {
void EnMa2_UpdateEyes(EnMa2* this) {
if ((!func_80AA1C68(this)) && (DECR(this->blinkTimer) == 0)) {
- this->eyeIndex += 1;
+ this->eyeIndex++;
if (this->eyeIndex >= 3) {
this->blinkTimer = Rand_S16Offset(30, 30);
this->eyeIndex = 0;
diff --git a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
index d051638d98..43c19df76f 100644
--- a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
+++ b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
@@ -229,7 +229,7 @@ s32 func_80AA2F28(EnMa3* this) {
void EnMa3_UpdateEyes(EnMa3* this) {
if ((!func_80AA2F28(this)) && (DECR(this->blinkTimer) == 0)) {
- this->eyeIndex += 1;
+ this->eyeIndex++;
if (this->eyeIndex >= 3) {
this->blinkTimer = Rand_S16Offset(30, 30);
this->eyeIndex = 0;
diff --git a/src/overlays/actors/ovl_En_Mb/z_en_mb.c b/src/overlays/actors/ovl_En_Mb/z_en_mb.c
index 249696eaad..3046a0cf3b 100644
--- a/src/overlays/actors/ovl_En_Mb/z_en_mb.c
+++ b/src/overlays/actors/ovl_En_Mb/z_en_mb.c
@@ -308,7 +308,7 @@ void EnMb_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFeet, 90.0f);
this->actor.flags &= ~ACTOR_FLAG_0;
- this->actor.naviEnemyId += 1; // NAVI_ENEMY_MOBLIN_CLUB
+ this->actor.naviEnemyId += NAVI_ENEMY_MOBLIN_CLUB - NAVI_ENEMY_MOBLIN;
EnMb_SetupClubWaitPlayerNear(this);
break;
default: /* Spear Patrol */
diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c
index 6c36870ebf..4ab1c0f6d7 100644
--- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c
+++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c
@@ -161,7 +161,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) {
EnMs* this = (EnMs*)thisx;
s32 pad;
- this->activeTimer += 1;
+ this->activeTimer++;
Actor_SetFocus(&this->actor, 20.0f);
this->actor.targetArrowOffset = 500.0f;
Actor_SetScale(&this->actor, 0.015f);
diff --git a/src/overlays/actors/ovl_En_Ny/z_en_ny.c b/src/overlays/actors/ovl_En_Ny/z_en_ny.c
index 4f4ae38d6d..b9544ad9fd 100644
--- a/src/overlays/actors/ovl_En_Ny/z_en_ny.c
+++ b/src/overlays/actors/ovl_En_Ny/z_en_ny.c
@@ -230,7 +230,7 @@ void EnNy_Move(EnNy* this, PlayState* play) {
func_80ABCD40(this);
stoneTimer = this->stoneTimer;
this->stoneTimer--;
- if ((stoneTimer <= 0) || (this->hitPlayer != false)) {
+ if ((stoneTimer <= 0) || this->hitPlayer) {
EnNy_SetupTurnToStone(this);
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, this->unk_1F4, 0);
diff --git a/src/overlays/actors/ovl_En_Skj/z_en_skj.c b/src/overlays/actors/ovl_En_Skj/z_en_skj.c
index 718436a8d0..aaf1edd13a 100644
--- a/src/overlays/actors/ovl_En_Skj/z_en_skj.c
+++ b/src/overlays/actors/ovl_En_Skj/z_en_skj.c
@@ -1248,7 +1248,7 @@ void EnSkj_Appear(EnSkj* this) {
void EnSkj_OcarinaGameIdle(EnSkj* this, PlayState* play) {
EnSkj_Appear(this);
- if ((EnSkj_IsLeavingGame(this) == false) && (this->minigameState != 0)) {
+ if (!EnSkj_IsLeavingGame(this) && (this->minigameState != 0)) {
EnSkj_SetupPlayOcarinaGame(this);
}
}
diff --git a/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c b/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c
index 187e051d1c..9c089e9ebb 100644
--- a/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c
+++ b/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c
@@ -111,7 +111,7 @@ void func_80B11A94(EnSyatekiNiw* this, PlayState* play, s16 arg2) {
this->unk_264 = -10000.0f;
}
- this->unk_28E += 1;
+ this->unk_28E++;
this->unk_254 = 3;
if (!(this->unk_28E & 1)) {
this->unk_264 = 0.0f;
diff --git a/src/overlays/actors/ovl_En_Ta/z_en_ta.h b/src/overlays/actors/ovl_En_Ta/z_en_ta.h
index d5bd5c49a3..8f7e1f8b5c 100644
--- a/src/overlays/actors/ovl_En_Ta/z_en_ta.h
+++ b/src/overlays/actors/ovl_En_Ta/z_en_ta.h
@@ -43,7 +43,7 @@ typedef struct EnTa {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ Vec3s jointTable[ENTA_LIMB_MAX];
- /* 0x01F6 */ Vec3s morphTable[ENTA_LIMB_MAX];
+ /* 0x01F6 */ Vec3s morphTable[ENTA_LIMB_MAX];
/* 0x025C */ EnTaActionFunc actionFunc;
/* 0x0260 */ EnTaAnimFunc animFunc;
/* 0x0264 */ ColliderCylinder collider;
diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
index 67a1eebc10..2f5d32da8a 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
@@ -196,7 +196,7 @@ void EnTite_Init(Actor* thisx, PlayState* play) {
if (this->actor.params == TEKTITE_BLUE) {
this->unk_2DC |= UPDBGCHECKINFO_FLAG_6; // Don't use the actor engine's ripple spawning code
thisx->colChkInfo.health = 4;
- thisx->naviEnemyId += 1; // NAVI_ENEMY_BLUE_TEKTITE
+ thisx->naviEnemyId += NAVI_ENEMY_BLUE_TEKTITE - NAVI_ENEMY_RED_TEKTITE;
}
EnTite_SetupIdle(this);
}
diff --git a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
index 9e4abfd767..412edf6921 100644
--- a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
+++ b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
@@ -1904,7 +1904,7 @@ void func_80B57AE0(EnZl3* this, PlayState* play) {
f32 zDiff;
this->unk_344 = 0;
- this->unk_314 += 1;
+ this->unk_314++;
this->unk_360 = 0.0f;
this->unk_364 = 0.0f;
this->unk_368 = 0.0f;
@@ -1947,7 +1947,7 @@ void func_80B57CB4(EnZl3* this, PlayState* play) {
Vec3f* thisPos = &this->actor.world.pos;
f32 temp_f0;
- this->unk_344 += 1;
+ this->unk_344++;
temp_f0 = Environment_LerpWeightAccelDecel(this->unk_346, 0, this->unk_344, 3, 3);
thisPos->x = unk_348->x + (temp_f0 * (unk_354->x - unk_348->x));
thisPos->y = (unk_348->y + (temp_f0 * (unk_354->y - unk_348->y))) + this->unk_360;
@@ -2002,7 +2002,7 @@ void func_80B57F1C(EnZl3* this, PlayState* play) {
if (func_80B57D80(this, play) == 0) {
func_80B54E14(this, &gZelda2Anime2Anim_009BE4, 0, -8.0f, 0);
this->action = 34;
- this->unk_314 -= 1;
+ this->unk_314--;
func_80B57AE0(this, play);
}
}
@@ -2248,7 +2248,7 @@ void func_80B58C08(EnZl3* this, PlayState* play) {
s32 sp28;
f32 temp_f0;
- this->unk_344 += 1;
+ this->unk_344++;
unk_344 = this->unk_344;
unk_346 = this->unk_346;
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 62924450b7..422c5e24b6 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -352,108 +352,108 @@ static u8 D_80853410[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
static PlayerAgeProperties sAgeProperties[] = {
{
- 56.0f,
- 90.0f,
- 1.0f,
- 111.0f,
- 70.0f,
- 79.4f,
- 59.0f,
- 41.0f,
- 19.0f,
- 36.0f,
- 44.8f,
- 56.0f,
- 68.0f,
- 70.0f,
- 18.0f,
- 15.0f,
- 70.0f,
- { 9, 4671, 359 },
+ 56.0f, // unk_00
+ 90.0f, // unk_04
+ 1.0f, // unk_08
+ 111.0f, // unk_0C
+ 70.0f, // unk_10
+ 79.4f, // unk_14
+ 59.0f, // unk_18
+ 41.0f, // unk_1C
+ 19.0f, // unk_20
+ 36.0f, // unk_24
+ 44.8f, // unk_28
+ 56.0f, // unk_2C
+ 68.0f, // unk_30
+ 70.0f, // unk_34
+ 18.0f, // unk_38
+ 15.0f, // unk_3C
+ 70.0f, // unk_40
+ { 9, 4671, 359 }, // unk_44
{
{ 8, 4694, 380 },
{ 9, 6122, 359 },
{ 8, 4694, 380 },
{ 9, 6122, 359 },
- },
+ }, // unk_4A
{
{ 9, 6122, 359 },
{ 9, 7693, 380 },
{ 9, 6122, 359 },
{ 9, 7693, 380 },
- },
+ }, // unk_62
{
{ 8, 4694, 380 },
{ 9, 6122, 359 },
- },
+ }, // unk_7A
{
{ -1592, 4694, 380 },
{ -1591, 6122, 359 },
- },
- 0,
- 0x80,
- &gPlayerAnim_link_demo_Tbox_open,
- &gPlayerAnim_link_demo_back_to_past,
- &gPlayerAnim_link_demo_return_to_past,
- &gPlayerAnim_link_normal_climb_startA,
- &gPlayerAnim_link_normal_climb_startB,
+ }, // unk_86
+ 0, // unk_92
+ 0x80, // unk_94
+ &gPlayerAnim_link_demo_Tbox_open, // unk_98
+ &gPlayerAnim_link_demo_back_to_past, // unk_9C
+ &gPlayerAnim_link_demo_return_to_past, // unk_A0
+ &gPlayerAnim_link_normal_climb_startA, // unk_A4
+ &gPlayerAnim_link_normal_climb_startB, // unk_A8
{ &gPlayerAnim_link_normal_climb_upL, &gPlayerAnim_link_normal_climb_upR, &gPlayerAnim_link_normal_Fclimb_upL,
- &gPlayerAnim_link_normal_Fclimb_upR },
- { &gPlayerAnim_link_normal_Fclimb_sideL, &gPlayerAnim_link_normal_Fclimb_sideR },
- { &gPlayerAnim_link_normal_climb_endAL, &gPlayerAnim_link_normal_climb_endAR },
- { &gPlayerAnim_link_normal_climb_endBR, &gPlayerAnim_link_normal_climb_endBL },
+ &gPlayerAnim_link_normal_Fclimb_upR }, // unk_AC
+ { &gPlayerAnim_link_normal_Fclimb_sideL, &gPlayerAnim_link_normal_Fclimb_sideR }, // unk_BC
+ { &gPlayerAnim_link_normal_climb_endAL, &gPlayerAnim_link_normal_climb_endAR }, // unk_C4
+ { &gPlayerAnim_link_normal_climb_endBR, &gPlayerAnim_link_normal_climb_endBL }, // unk_CC
},
{
- 40.0f,
- 60.0f,
- 11.0f / 17.0f,
- 71.0f,
- 50.0f,
- 47.0f,
- 39.0f,
- 27.0f,
- 19.0f,
- 22.0f,
- 29.6f,
- 32.0f,
- 48.0f,
- 70.0f * (11.0f / 17.0f),
- 14.0f,
- 12.0f,
- 55.0f,
- { -24, 3565, 876 },
+ 40.0f, // unk_00
+ 60.0f, // unk_04
+ 11.0f / 17.0f, // unk_08
+ 71.0f, // unk_0C
+ 50.0f, // unk_10
+ 47.0f, // unk_14
+ 39.0f, // unk_18
+ 27.0f, // unk_1C
+ 19.0f, // unk_20
+ 22.0f, // unk_24
+ 29.6f, // unk_28
+ 32.0f, // unk_2C
+ 48.0f, // unk_30
+ 70.0f * (11.0f / 17.0f), // unk_34
+ 14.0f, // unk_38
+ 12.0f, // unk_3C
+ 55.0f, // unk_40
+ { -24, 3565, 876 }, // unk_44
{
{ -24, 3474, 862 },
{ -24, 4977, 937 },
{ 8, 4694, 380 },
{ 9, 6122, 359 },
- },
+ }, // unk_4A
{
{ -24, 4977, 937 },
{ -24, 6495, 937 },
{ 9, 6122, 359 },
{ 9, 7693, 380 },
- },
+ }, // unk_62
{
{ 8, 4694, 380 },
{ 9, 6122, 359 },
- },
+ }, // unk_7A
{
{ -1592, 4694, 380 },
{ -1591, 6122, 359 },
- },
- 0x20,
- 0,
- &gPlayerAnim_clink_demo_Tbox_open,
- &gPlayerAnim_clink_demo_goto_future,
- &gPlayerAnim_clink_demo_return_to_future,
- &gPlayerAnim_clink_normal_climb_startA,
- &gPlayerAnim_clink_normal_climb_startB,
+ }, // unk_86
+ 0x20, // unk_92
+ 0, // unk_94
+ &gPlayerAnim_clink_demo_Tbox_open, // unk_98
+ &gPlayerAnim_clink_demo_goto_future, // unk_9C
+ &gPlayerAnim_clink_demo_return_to_future, // unk_A0
+ &gPlayerAnim_clink_normal_climb_startA, // unk_A4
+ &gPlayerAnim_clink_normal_climb_startB, // unk_A8
{ &gPlayerAnim_clink_normal_climb_upL, &gPlayerAnim_clink_normal_climb_upR, &gPlayerAnim_link_normal_Fclimb_upL,
- &gPlayerAnim_link_normal_Fclimb_upR },
- { &gPlayerAnim_link_normal_Fclimb_sideL, &gPlayerAnim_link_normal_Fclimb_sideR },
- { &gPlayerAnim_clink_normal_climb_endAL, &gPlayerAnim_clink_normal_climb_endAR },
- { &gPlayerAnim_clink_normal_climb_endBR, &gPlayerAnim_clink_normal_climb_endBL },
+ &gPlayerAnim_link_normal_Fclimb_upR }, // unk_AC
+ { &gPlayerAnim_link_normal_Fclimb_sideL, &gPlayerAnim_link_normal_Fclimb_sideR }, // unk_BC
+ { &gPlayerAnim_clink_normal_climb_endAL, &gPlayerAnim_clink_normal_climb_endAR }, // unk_C4
+ { &gPlayerAnim_clink_normal_climb_endBR, &gPlayerAnim_clink_normal_climb_endBL }, // unk_CC
},
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
index 9f471da245..fc096037e1 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
@@ -81,7 +81,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) {
void EffectSsExtra_Update(PlayState* play, u32 index, EffectSs* this) {
if (this->rTimer != 0) {
- this->rTimer -= 1;
+ this->rTimer--;
} else {
this->velocity.y = 0.0f;
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
index d91e8d6081..8a2d924180 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
@@ -379,7 +379,7 @@ void func_809AA230(EffectSs* this, PlayState* play) {
this->velocity.z *= func_809A9818(0.9f, 0.2f);
if (this->rReg8 > 0) {
- this->rReg8 -= 1;
+ this->rReg8--;
}
}
}
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
index 6ae3e53dbd..18f90b6278 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
@@ -1643,7 +1643,7 @@ void FileSelect_Main(GameState* thisx) {
if (this->stickAdjY < -30) {
if (this->stickYDir == -1) {
- this->inputTimerY -= 1;
+ this->inputTimerY--;
if (this->inputTimerY < 0) {
this->inputTimerY = 2;
} else {
@@ -1655,7 +1655,7 @@ void FileSelect_Main(GameState* thisx) {
}
} else if (this->stickAdjY > 30) {
if (this->stickYDir == 1) {
- this->inputTimerY -= 1;
+ this->inputTimerY--;
if (this->inputTimerY < 0) {
this->inputTimerY = 2;
} else {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c
index 27bfac2782..793ab4b994 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c
@@ -161,7 +161,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
OPEN_DISPS(gfxCtx, "../z_kaleido_collect.c", 248);
- if ((!pauseCtx->mainState /* PAUSE_MAIN_STATE_IDLE */ || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) ||
+ if ((((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->pageIndex == PAUSE_QUEST)) {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
index 9e76c45bb8..f5cd7c341f 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
@@ -219,7 +219,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
while (cursorMoveResult == 0) {
if (pauseCtx->stickAdjX < -30) {
if (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG) {
- pauseCtx->cursorX[PAUSE_EQUIP] -= 1;
+ pauseCtx->cursorX[PAUSE_EQUIP]--;
pauseCtx->cursorPoint[PAUSE_EQUIP] -= 1;
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
@@ -240,7 +240,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else {
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
- pauseCtx->cursorY[PAUSE_EQUIP] += 1;
+ pauseCtx->cursorY[PAUSE_EQUIP]++;
if (pauseCtx->cursorY[PAUSE_EQUIP] >= 4) {
pauseCtx->cursorY[PAUSE_EQUIP] = 0;
@@ -262,7 +262,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else if (pauseCtx->stickAdjX > 30) {
if (pauseCtx->cursorX[PAUSE_EQUIP] < 3) {
- pauseCtx->cursorX[PAUSE_EQUIP] += 1;
+ pauseCtx->cursorX[PAUSE_EQUIP]++;
pauseCtx->cursorPoint[PAUSE_EQUIP] += 1;
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
@@ -276,7 +276,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else {
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
- pauseCtx->cursorY[PAUSE_EQUIP] += 1;
+ pauseCtx->cursorY[PAUSE_EQUIP]++;
if (pauseCtx->cursorY[PAUSE_EQUIP] >= 4) {
pauseCtx->cursorY[PAUSE_EQUIP] = 0;
@@ -310,7 +310,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
while (cursorMoveResult == 0) {
if (pauseCtx->stickAdjY > 30) {
if (pauseCtx->cursorY[PAUSE_EQUIP] != 0) {
- pauseCtx->cursorY[PAUSE_EQUIP] -= 1;
+ pauseCtx->cursorY[PAUSE_EQUIP]--;
pauseCtx->cursorPoint[PAUSE_EQUIP] -= 4;
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
@@ -335,7 +335,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else if (pauseCtx->stickAdjY < -30) {
if (pauseCtx->cursorY[PAUSE_EQUIP] < 3) {
- pauseCtx->cursorY[PAUSE_EQUIP] += 1;
+ pauseCtx->cursorY[PAUSE_EQUIP]++;
pauseCtx->cursorPoint[PAUSE_EQUIP] += 4;
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c
index acd07de7ea..d409917467 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c
@@ -179,7 +179,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
// if not left-most
if (pauseCtx->cursorX[PAUSE_ITEM] != 0) {
// move left
- pauseCtx->cursorX[PAUSE_ITEM] -= 1;
+ pauseCtx->cursorX[PAUSE_ITEM]--;
pauseCtx->cursorPoint[PAUSE_ITEM] -= 1;
// if there's an item there, stop there
@@ -191,7 +191,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
pauseCtx->cursorX[PAUSE_ITEM] = cursorX;
- pauseCtx->cursorY[PAUSE_ITEM] += 1;
+ pauseCtx->cursorY[PAUSE_ITEM]++;
if (pauseCtx->cursorY[PAUSE_ITEM] >= ITEM_GRID_ROWS) {
pauseCtx->cursorY[PAUSE_ITEM] = 0;
}
@@ -215,7 +215,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
}
} else if (pauseCtx->stickAdjX > 30) {
if (pauseCtx->cursorX[PAUSE_ITEM] < (ITEM_GRID_COLS - 1)) {
- pauseCtx->cursorX[PAUSE_ITEM] += 1;
+ pauseCtx->cursorX[PAUSE_ITEM]++;
pauseCtx->cursorPoint[PAUSE_ITEM] += 1;
if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) {
@@ -223,7 +223,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
}
} else {
pauseCtx->cursorX[PAUSE_ITEM] = cursorX;
- pauseCtx->cursorY[PAUSE_ITEM] += 1;
+ pauseCtx->cursorY[PAUSE_ITEM]++;
if (pauseCtx->cursorY[PAUSE_ITEM] >= ITEM_GRID_ROWS) {
pauseCtx->cursorY[PAUSE_ITEM] = 0;
@@ -339,7 +339,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
while (moveCursorResult == 0) {
if (pauseCtx->stickAdjY > 30) {
if (pauseCtx->cursorY[PAUSE_ITEM] != 0) {
- pauseCtx->cursorY[PAUSE_ITEM] -= 1;
+ pauseCtx->cursorY[PAUSE_ITEM]--;
pauseCtx->cursorPoint[PAUSE_ITEM] -= ITEM_GRID_COLS;
if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) {
@@ -353,7 +353,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
}
} else if (pauseCtx->stickAdjY < -30) {
if (pauseCtx->cursorY[PAUSE_ITEM] < (ITEM_GRID_ROWS - 1)) {
- pauseCtx->cursorY[PAUSE_ITEM] += 1;
+ pauseCtx->cursorY[PAUSE_ITEM]++;
pauseCtx->cursorPoint[PAUSE_ITEM] += ITEM_GRID_COLS;
if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c
index ab9e98e999..7f8f4537fd 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c
@@ -1329,7 +1329,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
- if (!pauseCtx->pageIndex) { // pageIndex == PAUSE_ITEM
+ if ((u32)pauseCtx->pageIndex == PAUSE_ITEM) {
pauseCtx->itemPageRoll = pauseCtx->rollRotSavePrompt_ + 314.0f;
Matrix_Translate(0.0f, (f32)R_PAUSE_OFFSET_VERTICAL / 100.0f, -pauseCtx->savePromptOffsetDepth_ / 10.0f,
@@ -1703,7 +1703,8 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) &&
(pauseCtx->nameDisplayTimer < R_PAUSE_NAME_DISPLAY_TIMER_THRESHOLD_) &&
- (!pauseCtx->mainState /* PAUSE_MAIN_STATE_IDLE */ || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
+ (((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
(pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED)
/* PAUSE_MAIN_STATE_SONG_PROMPT_INIT, PAUSE_MAIN_STATE_SONG_PROMPT,
@@ -1712,7 +1713,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->cursorSpecialPos == 0)) {
- if (!pauseCtx->mainState /* PAUSE_MAIN_STATE_IDLE */ ||
+ if (((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
(pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED)
@@ -1845,7 +1846,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
}
}
} else {
- if (!pauseCtx->pageIndex) { // pageIndex == PAUSE_ITEM
+ if ((u32)pauseCtx->pageIndex == PAUSE_ITEM) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] =
WREG(49 + gSaveContext.language);
@@ -3480,7 +3481,7 @@ void KaleidoScope_Update(PlayState* play) {
PAUSE_STATE_15, PAUSE_STATE_16, PAUSE_STATE_17, PAUSE_STATE_CLOSING */
))) {
- if ((!pauseCtx->mainState /* PAUSE_MAIN_STATE_IDLE */ ||
+ if ((((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->state == PAUSE_STATE_MAIN)) {
diff --git a/tools/asmsplitter/asmsplitter.py b/tools/asmsplitter/asmsplitter.py
index c3cfe3a7a3..39a88225f9 100644
--- a/tools/asmsplitter/asmsplitter.py
+++ b/tools/asmsplitter/asmsplitter.py
@@ -31,7 +31,7 @@ for directory in dirs:
continue
print("Processing asm//" + directory)
-
+
folderName = os.path.splitext(directory)[0]
lines = ReadAllLines("asm//" + directory)
functions = list()
@@ -65,5 +65,5 @@ for directory in dirs:
cLines.insert(len(cLines), "#pragma GLOBAL_ASM(\"asm/non_matchings/code/" + folderName + "/" + func.funcName + ".s\")\n")
WriteAllLines("c//" + folderName + ".c", cLines)
-
+
print("Done!")
diff --git a/tools/fado/.gitrepo b/tools/fado/.gitrepo
index af2674663b..0f548ed09d 100644
--- a/tools/fado/.gitrepo
+++ b/tools/fado/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = git@github.com:EllipticEllipsis/fado.git
branch = master
- commit = a0fa828089353ba48e378b281c23100c247b1c92
- parent = eadc477187888e1ae078d021b4a00b1366f0c9a4
+ commit = 8d896ee97d565508755584803c409fc33bb0c953
+ parent = 9f09505d34619883748a7dab05071883281c14fd
method = merge
- cmdver = 0.4.3
+ cmdver = 0.4.5
diff --git a/tools/fado/README.md b/tools/fado/README.md
index 2b42cf28f6..61b32d6037 100644
--- a/tools/fado/README.md
+++ b/tools/fado/README.md
@@ -7,9 +7,9 @@ Contains
- **Fado** a program for generating the `.ovl`/relocation section for Zelda64 overlay files
- **Mido** an automatic dependency file generator
-Compatible with both IDO and GCC (although [see below](N_B)).
+Compatible with both IDO and GCC (although [see below](N_B)). Both ordinary MIPS REL sections and RELA sections are now supported.
-Format is the standard "Zelda64" .ovl section, with the relocs divided by section, as used by
+Output format is the standard "Zelda64" .ovl section, with the relocs divided by section, as used by
- *The Legend of Zelda: Ocarina of Time* (all Nintendo 64/Gamecube/iQue releases)
- *The Legend of Zelda: Majora's Mask* (all Nintendo 64/Gamecube releases)
diff --git a/tools/fado/include/mips_elf.h b/tools/fado/include/mips_elf.h
index dacb9d6b48..122e98d25f 100644
--- a/tools/fado/include/mips_elf.h
+++ b/tools/fado/include/mips_elf.h
@@ -473,6 +473,14 @@ typedef struct {
Elf32_Word r_info; /* Relocation type and symbol index */
} Elf32_Rel;
+/* Relocation table entry with addend (in section of type SHT_RELA). */
+
+typedef struct {
+ Elf32_Addr r_offset; /* Address */
+ Elf32_Word r_info; /* Relocation type and symbol index */
+ Elf32_Sword r_addend; /* Addend */
+} Elf32_Rela;
+
/* How to extract and insert information held in the r_info field. */
#define ELF32_R_SYM(val) ((val) >> 8)
diff --git a/tools/fado/lib/fairy/fairy.c b/tools/fado/lib/fairy/fairy.c
index 2186cd0415..8fc090300c 100644
--- a/tools/fado/lib/fairy/fairy.c
+++ b/tools/fado/lib/fairy/fairy.c
@@ -105,7 +105,7 @@ bool Fairy_StartsWith(const char* string, const char* initial) {
FairyFileHeader* Fairy_ReadFileHeader(FairyFileHeader* header, FILE* file) {
fseek(file, 0, SEEK_SET);
- assert(fread(header, 0x34, 1, file) != 0);
+ assert(fread(header, sizeof(char), 0x34, file) == 0x34);
if (!Fairy_VerifyMagic(header->e_ident)) {
fprintf(stderr, "Not a valid ELF file.\n");
@@ -150,7 +150,7 @@ FairySecHeader* Fairy_ReadSectionTable(FairySecHeader* sectionTable, FILE* file,
size_t tableSize = number * entrySize;
fseek(file, tableOffset, SEEK_SET);
- assert(fread(sectionTable, tableSize, 1, file) != 0);
+ assert(fread(sectionTable, sizeof(char), tableSize, file) == tableSize);
/* Since the section table happens to only have entries of width 4, we can byteswap it by pretending it is a raw
* uint32_t array */
@@ -165,13 +165,21 @@ FairySecHeader* Fairy_ReadSectionTable(FairySecHeader* sectionTable, FILE* file,
return sectionTable;
}
-FairySym* Fairy_ReadSymbolTable(FairySym* symbolTable, FILE* file, size_t tableOffset, size_t tableSize) {
+size_t Fairy_ReadSymbolTable(FairySym** symbolTableOut, FILE* file, size_t tableOffset, size_t tableSize) {
size_t number = tableSize / sizeof(FairySym);
+ FairySym* symbolTable = malloc(tableSize);
- fseek(file, tableOffset, SEEK_SET);
- assert(fread(symbolTable, tableSize, 1, file) != 0);
+ *symbolTableOut = NULL;
- /* Reend the variables that are larger than bytes */
+ if (symbolTable == NULL) {
+ return 0;
+ }
+ if (fseek(file, tableOffset, SEEK_SET) != 0 || fread(symbolTable, sizeof(char), tableSize, file) != tableSize) {
+ free(symbolTable);
+ return 0;
+ }
+
+ /* Reend the variables that are wider than bytes */
{
size_t i;
for (i = 0; i < number; i++) {
@@ -182,31 +190,65 @@ FairySym* Fairy_ReadSymbolTable(FairySym* symbolTable, FILE* file, size_t tableO
}
}
- return symbolTable;
+ *symbolTableOut = symbolTable;
+ return number;
}
/* Can be used for both the section header string table and the strtab */
char* Fairy_ReadStringTable(char* stringTable, FILE* file, size_t tableOffset, size_t tableSize) {
fseek(file, tableOffset, SEEK_SET);
- assert(fread(stringTable, tableSize, 1, file) != 0);
+ assert(fread(stringTable, sizeof(char), tableSize, file) == tableSize);
return stringTable;
}
-/* offset and number are attained from the section table */
-FairyRel* Fairy_ReadRelocs(FairyRel* relocTable, FILE* file, size_t offset, size_t size) {
- fseek(file, offset, SEEK_SET);
- assert(fread(relocTable, size, 1, file) != 0);
+/* offset and number are attained from the section table, the returned pointer must be freed */
+size_t Fairy_ReadRelocs(FairyRela** relocsOut, FILE* file, int type, size_t offset, size_t size) {
+ /* Final size of the relocation table, relocations of type SHT_REL need more space for extra addend of 0 */
+ size_t finalSize = (type == SHT_REL) ? ((size * sizeof(FairyRela)) / sizeof(FairyRel)) : size;
+ void* readBuf = malloc(size);
+ FairyRela* relocTable = malloc(finalSize);
- /* Reend the variables that are larger than bytes */
+ *relocsOut = NULL;
+
+ if (readBuf == NULL) {
+ return 0;
+ }
+ if (relocTable == NULL) {
+ free(readBuf);
+ return 0;
+ }
+ if (fseek(file, offset, SEEK_SET) != 0 || fread(readBuf, sizeof(char), size, file) != size) {
+ free(readBuf);
+ free(relocTable);
+ return 0;
+ }
+
+ /* Reend the variables that are wider than bytes */
{
size_t i;
- uint32_t* data = (uint32_t*)relocTable;
+ uint32_t* data = (uint32_t*)readBuf;
for (i = 0; i < size / sizeof(uint32_t); i++) {
data[i] = REEND32(data[i]);
}
}
- return relocTable;
+ /* Make the relocation table, for SHT_REL sections add an addend of 0 */
+ if (type == SHT_REL) {
+ size_t i;
+ FairyRel* rel = (FairyRel*)readBuf;
+
+ for (i = 0; i < size / sizeof(FairyRel); i++) {
+ relocTable[i].r_info = rel[i].r_info;
+ relocTable[i].r_offset = rel[i].r_offset;
+ relocTable[i].r_addend = 0;
+ }
+ } else {
+ memcpy(relocTable, readBuf, size);
+ }
+ free(readBuf);
+
+ *relocsOut = relocTable;
+ return finalSize / sizeof(FairyRela);
}
char* Fairy_GetSectionName(FairySecHeader* sectionTable, char* shstrtab, size_t index) {
@@ -240,7 +282,8 @@ void Fairy_InitFile(FairyFileInfo* fileInfo, FILE* file) {
shstrtab = malloc(sectionTable[fileHeader.e_shstrndx].sh_size * sizeof(char));
fseek(file, sectionTable[fileHeader.e_shstrndx].sh_offset, SEEK_SET);
- assert(fread(shstrtab, sectionTable[fileHeader.e_shstrndx].sh_size, 1, file) != 0);
+ assert(fread(shstrtab, sizeof(char), sectionTable[fileHeader.e_shstrndx].sh_size, file) ==
+ sectionTable[fileHeader.e_shstrndx].sh_size);
/* Search for the sections we need */
{
@@ -251,6 +294,8 @@ void Fairy_InitFile(FairyFileInfo* fileInfo, FILE* file) {
}
for (currentIndex = 0; currentIndex < fileHeader.e_shnum; currentIndex++) {
+ size_t off = 0;
+
currentSection = sectionTable[currentIndex];
switch (currentSection.sh_type) {
@@ -299,10 +344,11 @@ void Fairy_InitFile(FairyFileInfo* fileInfo, FILE* file) {
case SHT_SYMTAB:
if (strcmp(&shstrtab[currentSection.sh_name + 1], "symtab") == 0) {
- fileInfo->symtabInfo.sectionSize = currentSection.sh_size;
- fileInfo->symtabInfo.sectionData = malloc(currentSection.sh_size);
- Fairy_ReadSymbolTable(fileInfo->symtabInfo.sectionData, file, currentSection.sh_offset,
- currentSection.sh_size);
+ fileInfo->symtabInfo.sectionType = SHT_SYMTAB;
+ fileInfo->symtabInfo.sectionEntrySize = sizeof(FairySym);
+ fileInfo->symtabInfo.sectionEntryCount =
+ Fairy_ReadSymbolTable((FairySym**)&fileInfo->symtabInfo.sectionData, file,
+ currentSection.sh_offset, currentSection.sh_size);
}
break;
@@ -314,30 +360,32 @@ void Fairy_InitFile(FairyFileInfo* fileInfo, FILE* file) {
}
break;
+ case SHT_RELA:
+ off += 1;
case SHT_REL:
+ off += 5;
/* This assumes only one reloc section of each name */
// TODO: is this a problem?
{
FairySection relocSection = FAIRY_SECTION_OTHER;
- /* Ignore the first 5 chars, which will always be ".rel." */
- if (strcmp(&shstrtab[currentSection.sh_name + 5], "text") == 0) {
+ /* Ignore the first 5/6 chars, which will always be ".rel."/".rela." */
+ if (strcmp(&shstrtab[currentSection.sh_name + off], "text") == 0) {
relocSection = FAIRY_SECTION_TEXT;
- FAIRY_DEBUG_PRINTF("%s", "Found rel.text section\n");
- } else if (strcmp(&shstrtab[currentSection.sh_name + 5], "data") == 0) {
+ } else if (strcmp(&shstrtab[currentSection.sh_name + off], "data") == 0) {
relocSection = FAIRY_SECTION_DATA;
- FAIRY_DEBUG_PRINTF("%s", "Found rel.data section\n");
- } else if (strcmp(&shstrtab[currentSection.sh_name + 5], "rodata") == 0) {
+ } else if (strcmp(&shstrtab[currentSection.sh_name + off], "rodata") == 0) {
relocSection = FAIRY_SECTION_RODATA;
- FAIRY_DEBUG_PRINTF("%s", "Found rel.rodata section\n");
} else {
break;
}
+ FAIRY_DEBUG_PRINTF("Found %s section\n", &shstrtab[currentSection.sh_name]);
- fileInfo->relocTablesInfo[relocSection].sectionSize = currentSection.sh_size;
- fileInfo->relocTablesInfo[relocSection].sectionData = malloc(currentSection.sh_size);
- Fairy_ReadRelocs(fileInfo->relocTablesInfo[relocSection].sectionData, file,
- currentSection.sh_offset, currentSection.sh_size);
+ fileInfo->relocTablesInfo[relocSection].sectionType = SHT_RELA;
+ fileInfo->relocTablesInfo[relocSection].sectionEntrySize = sizeof(FairyRela);
+ fileInfo->relocTablesInfo[relocSection].sectionEntryCount =
+ Fairy_ReadRelocs((FairyRela**)&fileInfo->relocTablesInfo[relocSection].sectionData, file,
+ currentSection.sh_type, currentSection.sh_offset, currentSection.sh_size);
}
break;
diff --git a/tools/fado/lib/fairy/fairy.h b/tools/fado/lib/fairy/fairy.h
index 038a4bf15d..5a3cb3d973 100644
--- a/tools/fado/lib/fairy/fairy.h
+++ b/tools/fado/lib/fairy/fairy.h
@@ -24,6 +24,7 @@ typedef Elf32_Ehdr FairyFileHeader;
typedef Elf32_Shdr FairySecHeader;
typedef Elf32_Sym FairySym;
typedef Elf32_Rel FairyRel;
+typedef Elf32_Rela FairyRela;
typedef struct {
int define;
@@ -32,7 +33,9 @@ typedef struct {
typedef struct {
void* sectionData;
- size_t sectionSize;
+ int sectionType;
+ size_t sectionEntryCount;
+ size_t sectionEntrySize;
} FairySectionInfo;
typedef struct {
@@ -60,9 +63,9 @@ bool Fairy_StartsWith(const char* string, const char* initial);
FairyFileHeader* Fairy_ReadFileHeader(FairyFileHeader* header, FILE* file);
FairySecHeader* Fairy_ReadSectionTable(FairySecHeader* sectionTable, FILE* file, size_t tableOffset, size_t number);
-FairySym* Fairy_ReadSymbolTable(FairySym* symbolTable, FILE* file, size_t tableOffset, size_t tableSize);
char* Fairy_ReadStringTable(char* stringTable, FILE* file, size_t tableOffset, size_t tableSize);
-FairyRel* Fairy_ReadRelocs(FairyRel* relocTable, FILE* file, size_t offset, size_t number);
+size_t Fairy_ReadSymbolTable(FairySym** symbolTableOut, FILE* file, size_t tableOffset, size_t tableSize);
+size_t Fairy_ReadRelocs(FairyRela** relocsOut, FILE* file, int type, size_t offset, size_t size);
char* Fairy_GetSectionName(FairySecHeader* sectionTable, char* shstrtab, size_t index);
char* Fairy_GetSymbolName(FairySym* symtab, char* strtab, size_t index);
diff --git a/tools/fado/lib/fairy/fairy_print.c b/tools/fado/lib/fairy/fairy_print.c
index 65fb7e015e..80b8fcd9ea 100644
--- a/tools/fado/lib/fairy/fairy_print.c
+++ b/tools/fado/lib/fairy/fairy_print.c
@@ -32,7 +32,7 @@ void Fairy_PrintSymbolTable(FILE* inputFile) {
shstrtab = malloc(sectionTable[shstrndx].sh_size * sizeof(char));
fseek(inputFile, sectionTable[shstrndx].sh_offset, SEEK_SET);
- assert(fread(shstrtab, sectionTable[shstrndx].sh_size, 1, inputFile) != 0);
+ assert(fread(shstrtab, sizeof(char), sectionTable[shstrndx].sh_size, inputFile) == sectionTable[shstrndx].sh_size);
{
size_t currentIndex;
@@ -44,9 +44,8 @@ void Fairy_PrintSymbolTable(FILE* inputFile) {
case SHT_SYMTAB:
if (strcmp(&shstrtab[currentHeader.sh_name], ".symtab") == 0) {
printf("symtab found\n");
- symbolTableNum = currentHeader.sh_size / sizeof(FairySym);
- symbolTable = malloc(currentHeader.sh_size);
- Fairy_ReadSymbolTable(symbolTable, inputFile, currentHeader.sh_offset, currentHeader.sh_size);
+ symbolTableNum = Fairy_ReadSymbolTable(&symbolTable, inputFile, currentHeader.sh_offset,
+ currentHeader.sh_size);
}
break;
@@ -74,7 +73,8 @@ void Fairy_PrintSymbolTable(FILE* inputFile) {
printf("and mallocked\n");
fseek(inputFile, sectionTable[strtabndx].sh_offset, SEEK_SET);
printf("file offset sought: %X\n", sectionTable[strtabndx].sh_offset);
- assert(fread(strtab, sectionTable[strtabndx].sh_size, 1, inputFile) != 0);
+ assert(fread(strtab, sizeof(char), sectionTable[strtabndx].sh_size, inputFile) ==
+ sectionTable[strtabndx].sh_size);
printf("file read\n");
}
}
@@ -117,7 +117,7 @@ void Fairy_PrintSymbolTable(FILE* inputFile) {
void Fairy_PrintRelocs(FILE* inputFile) {
FairyFileHeader fileHeader;
FairySecHeader* sectionTable;
- FairyRel* relocs;
+ FairyRela* relocs;
size_t shstrndx;
char* shstrtab;
size_t currentSection;
@@ -131,29 +131,28 @@ void Fairy_PrintRelocs(FILE* inputFile) {
shstrtab = malloc(sectionTable[shstrndx].sh_size * sizeof(char));
fseek(inputFile, sectionTable[shstrndx].sh_offset, SEEK_SET);
- assert(fread(shstrtab, sectionTable[shstrndx].sh_size, 1, inputFile) != 0);
+ assert(fread(shstrtab, sizeof(char), sectionTable[shstrndx].sh_size, inputFile) == sectionTable[shstrndx].sh_size);
for (currentSection = 0; currentSection < fileHeader.e_shnum; currentSection++) {
- if (sectionTable[currentSection].sh_type != SHT_REL) {
+ size_t nRelocs;
+
+ if (sectionTable[currentSection].sh_type != SHT_REL || sectionTable[currentSection].sh_type != SHT_RELA) {
continue;
}
printf("Section size: %d\n", sectionTable[currentSection].sh_size);
- relocs = malloc(sectionTable[currentSection].sh_size * sizeof(char));
-
- Fairy_ReadRelocs(relocs, inputFile, sectionTable[currentSection].sh_offset,
- sectionTable[currentSection].sh_size);
+ nRelocs = Fairy_ReadRelocs(&relocs, inputFile, sectionTable[currentSection].sh_type,
+ sectionTable[currentSection].sh_offset, sectionTable[currentSection].sh_size);
// fseek(inputFile, sectionTable[currentSection].sh_offset, SEEK_SET);
- // assert(fread(relocs, sectionTable[currentSection].sh_size, 1, inputFile) != 0);
+ // assert(fread(relocs, sizeof(char), sectionTable[currentSection].sh_size, inputFile) ==
+ // sectionTable[currentSection].sh_size);
printf("Relocs in section [%2zd]: %s:\n", currentSection, shstrtab + sectionTable[currentSection].sh_name);
printf("Offset Info Type Symbol\n");
{
size_t currentReloc;
- for (currentReloc = 0; currentReloc < sectionTable[currentSection].sh_size / sizeof(*relocs);
- currentReloc++) {
-
+ for (currentReloc = 0; currentReloc < nRelocs; currentReloc++) {
printf("%08X,%08X ", relocs[currentReloc].r_offset, relocs[currentReloc].r_info);
switch (ELF32_R_TYPE(relocs[currentReloc].r_info)) {
@@ -212,7 +211,7 @@ void Fairy_PrintSectionTable(FILE* inputFile) {
shstrtab = malloc(sectionTable[shstrndx].sh_size * sizeof(char));
fseek(inputFile, sectionTable[shstrndx].sh_offset, SEEK_SET);
- assert(fread(shstrtab, sectionTable[shstrndx].sh_size, 1, inputFile) != 0);
+ assert(fread(shstrtab, sizeof(char), sectionTable[shstrndx].sh_size, inputFile) == sectionTable[shstrndx].sh_size);
printf("[Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n");
for (currentSection = 0; currentSection < fileHeader.e_shnum; currentSection++) {
@@ -261,7 +260,7 @@ const char* relSectionStrings[] = {
".rodata",
};
-static uint32_t Fairy_PackReloc(FairyOverlayRelSection sec, FairyRel rel) {
+static uint32_t Fairy_PackReloc(FairyOverlayRelSection sec, FairyRela rel) {
return (sec << 0x1E) | (ELF32_R_TYPE(rel.r_info) << 0x18) | rel.r_offset;
}
@@ -290,7 +289,7 @@ void Fairy_PrintSectionSizes(FairySecHeader* sectionTable, FILE* inputFile, size
bool strtabFound = false;
/* Count the reloc sections */
for (currentSection = 0; currentSection < number; currentSection++) {
- if (sectionTable[currentSection].sh_type == SHT_REL) {
+ if (sectionTable[currentSection].sh_type == SHT_REL || sectionTable[currentSection].sh_type == SHT_RELA) {
relocSectionsCount++;
}
}
@@ -301,6 +300,8 @@ void Fairy_PrintSectionSizes(FairySecHeader* sectionTable, FILE* inputFile, size
/* Find the section sizes and the reloc sections */
for (currentSection = 0; currentSection < number; currentSection++) {
+ size_t off = 0;
+
currentHeader = sectionTable[currentSection];
sectionName = &shstrtab[currentHeader.sh_name + 1]; /* ignore the initial '.' */
switch (currentHeader.sh_type) {
@@ -329,17 +330,19 @@ void Fairy_PrintSectionSizes(FairySecHeader* sectionTable, FILE* inputFile, size
}
break;
+ case SHT_RELA:
+ off += 1;
case SHT_REL:
relocSectionIndices[currentRelocSection] = currentSection;
- sectionName += 4; /* ignore the "rel." part */
- if (Fairy_StartsWith(sectionName, "rodata")) {
- printf(".rel.rodata\n");
+ off += 4; /* ignore the "rel."/"rela." part */
+ if (Fairy_StartsWith(§ionName[off], "rodata")) {
+ printf("%s\n", sectionName);
relocSectionSection[currentRelocSection] = REL_SECTION_RODATA;
- } else if (Fairy_StartsWith(sectionName, "data")) {
- printf(".rel.data\n");
+ } else if (Fairy_StartsWith(§ionName[off], "data")) {
+ printf("%s\n", sectionName);
relocSectionSection[currentRelocSection] = REL_SECTION_DATA;
- } else if (Fairy_StartsWith(sectionName, "text")) {
- printf(".rel.text\n");
+ } else if (Fairy_StartsWith(§ionName[off], "text")) {
+ printf("%s\n", sectionName);
relocSectionSection[currentRelocSection] = REL_SECTION_TEXT;
}
@@ -373,36 +376,34 @@ void Fairy_PrintSectionSizes(FairySecHeader* sectionTable, FILE* inputFile, size
printf(".word 0x%08X # .bss size\n\n", bssSize);
if (!symtabFound) {
- fprintf(stderr, "Symbol table not found");
+ fprintf(stderr, "Symbol table not found\n");
return;
}
/* Obtain the symbol table */
- symtab = malloc(symtabHeader.sh_size);
-
// TODO: Consider replacing this with a lighter-weight read: sufficient to get the name, shndx
- Fairy_ReadSymbolTable(symtab, inputFile, symtabHeader.sh_offset, symtabHeader.sh_size);
+ Fairy_ReadSymbolTable(&symtab, inputFile, symtabHeader.sh_offset, symtabHeader.sh_size);
if (!strtabFound) {
- fprintf(stderr, "String table not found");
+ fprintf(stderr, "String table not found\n");
} else {
/* Obtain the string table */
strtab = malloc(strtabHeader.sh_size);
fseek(inputFile, strtabHeader.sh_offset, SEEK_SET);
- assert(fread(strtab, strtabHeader.sh_size, 1, inputFile) != 0);
+ assert(fread(strtab, sizeof(char), strtabHeader.sh_size, inputFile) == strtabHeader.sh_size);
}
/* Do single-file relocs */
{
- FairyRel* relocs;
+ FairyRela* relocs;
for (currentSection = 0; currentSection < relocSectionsCount; currentSection++) {
size_t currentReloc;
- size_t sectionRelocCount;
- currentHeader = sectionTable[relocSectionIndices[currentSection]];
- sectionRelocCount = currentHeader.sh_size / sizeof(FairyRel);
- relocs = malloc(currentHeader.sh_size);
- Fairy_ReadRelocs(relocs, inputFile, currentHeader.sh_offset, currentHeader.sh_size);
+ size_t nRelocs;
- for (currentReloc = 0; currentReloc < sectionRelocCount; currentReloc++) {
+ currentHeader = sectionTable[relocSectionIndices[currentSection]];
+ nRelocs = Fairy_ReadRelocs(&relocs, inputFile, currentHeader.sh_type, currentHeader.sh_offset,
+ currentHeader.sh_size);
+
+ for (currentReloc = 0; currentReloc < nRelocs; currentReloc++) {
FairySym symbol = symtab[ELF32_R_SYM(relocs[currentReloc].r_info)];
if (symbol.st_shndx == SHN_UNDEF) {
continue; // TODO: this is where multifile has to look elsewhere
@@ -453,7 +454,7 @@ void PrintZeldaReloc(FILE* inputFile) {
shstrtab = malloc(sectionTable[shstrndx].sh_size * sizeof(char));
fseek(inputFile, sectionTable[shstrndx].sh_offset, SEEK_SET);
- assert(fread(shstrtab, sectionTable[shstrndx].sh_size, 1, inputFile) != 0);
+ assert(fread(shstrtab, sizeof(char), sectionTable[shstrndx].sh_size, inputFile) == sectionTable[shstrndx].sh_size);
Fairy_PrintSectionSizes(sectionTable, inputFile, fileHeader.e_shentsize * fileHeader.e_shnum, shstrtab);
diff --git a/tools/fado/lib/vc_vector/vc_vector.c b/tools/fado/lib/vc_vector/vc_vector.c
index 3f677c242a..426f1b0cbb 100644
--- a/tools/fado/lib/vc_vector/vc_vector.c
+++ b/tools/fado/lib/vc_vector/vc_vector.c
@@ -112,15 +112,15 @@ bool vc_vector_is_equals(vc_vector* vector1, vc_vector* vector2) {
return memcmp(vector1->data, vector2->data, size_vector1) == 0;
}
-float vc_vector_get_growth_factor() {
+float vc_vector_get_growth_factor(void) {
return GROWTH_FACTOR;
}
-size_t vc_vector_get_default_count_of_elements() {
+size_t vc_vector_get_default_count_of_elements(void) {
return DEFAULT_COUNT_OF_ELEMENTS;
}
-size_t vc_vector_struct_size() {
+size_t vc_vector_struct_size(void) {
return sizeof(vc_vector);
}
diff --git a/tools/fado/lib/vc_vector/vc_vector.h b/tools/fado/lib/vc_vector/vc_vector.h
index 2b1422c1a5..e57f832543 100644
--- a/tools/fado/lib/vc_vector/vc_vector.h
+++ b/tools/fado/lib/vc_vector/vc_vector.h
@@ -24,13 +24,13 @@ void vc_vector_release(vc_vector* vector);
bool vc_vector_is_equals(vc_vector* vector1, vc_vector* vector2);
// Returns constant value of the vector growth factor.
-float vc_vector_get_growth_factor();
+float vc_vector_get_growth_factor(void);
// Returns constant value of the vector default count of elements.
-size_t vc_vector_get_default_count_of_elements();
+size_t vc_vector_get_default_count_of_elements(void);
// Returns constant value of the vector struct size.
-size_t vc_vector_struct_size();
+size_t vc_vector_struct_size(void);
// ----------------------------------------------------------------------------
// Element access
diff --git a/tools/fado/src/fado.c b/tools/fado/src/fado.c
index bab70b1305..464f8855b5 100644
--- a/tools/fado/src/fado.c
+++ b/tools/fado/src/fado.c
@@ -40,8 +40,7 @@ void Fado_ConstructStringVectors(vc_vector** stringVectors, FairyFileInfo* fileI
stringVectors[currentFile] = vc_vector_create(0x40, sizeof(char**), NULL);
/* Build a vector of pointers to defined symbols' names */
- for (currentSym = 0; currentSym < fileInfo[currentFile].symtabInfo.sectionSize / sizeof(FairySym);
- currentSym++) {
+ for (currentSym = 0; currentSym < fileInfo[currentFile].symtabInfo.sectionEntryCount; currentSym++) {
if ((symtab[currentSym].st_shndx != STN_UNDEF) &&
Fado_CheckInProgBitsSections(symtab[currentSym].st_shndx, fileInfo[currentFile].progBitsSections)) {
/* Have to pass a double pointer so it copies the pointer instead of the start of the string */
@@ -86,7 +85,7 @@ typedef struct {
} FadoRelocInfo;
/* Construct the Zelda64ovl-compatible reloc word from an ELF reloc */
-FadoRelocInfo Fado_MakeReloc(int file, FairySection section, FairyRel* data) {
+FadoRelocInfo Fado_MakeReloc(int file, FairySection section, FairyRela* data) {
FadoRelocInfo relocInfo = { 0 };
uint32_t sectionPrefix = 0;
@@ -223,11 +222,10 @@ void Fado_Relocs(FILE* outputFile, int inputFilesCount, FILE** inputFiles, const
relocList[section] = vc_vector_create(0x100, sizeof(FadoRelocInfo), NULL);
for (currentFile = 0; currentFile < inputFilesCount; currentFile++) {
- FairyRel* relSection = fileInfos[currentFile].relocTablesInfo[section].sectionData;
- if (relSection != NULL) {
+ FairyRela* relSection = fileInfos[currentFile].relocTablesInfo[section].sectionData;
- for (relocIndex = 0;
- relocIndex < fileInfos[currentFile].relocTablesInfo[section].sectionSize / sizeof(FairyRel);
+ if (relSection != NULL) {
+ for (relocIndex = 0; relocIndex < fileInfos[currentFile].relocTablesInfo[section].sectionEntryCount;
relocIndex++) {
FadoRelocInfo currentReloc = Fado_MakeReloc(currentFile, section, &relSection[relocIndex]);
diff --git a/tools/fado/src/main.c b/tools/fado/src/main.c
index 4bfbebba0f..e6b7926d65 100644
--- a/tools/fado/src/main.c
+++ b/tools/fado/src/main.c
@@ -15,7 +15,7 @@
#include "version.inc"
-void PrintVersion() {
+void PrintVersion(void) {
printf("Fado (Fairy-Assisted relocations for Decompiled Overlays), version %s\n", versionNumber);
printf("Copyright (C) 2021 Elliptic Ellipsis\n");
printf("%s\n", credits);
@@ -88,7 +88,7 @@ static size_t posArgCount = ARRAY_COUNT(posArgInfo);
static size_t optCount = ARRAY_COUNT(optInfo);
static struct option longOptions[ARRAY_COUNT(optInfo)];
-void ConstructLongOpts() {
+void ConstructLongOpts(void) {
size_t i;
for (i = 0; i < optCount; i++) {
@@ -133,14 +133,15 @@ int main(int argc, char** argv) {
outputFileName = optarg;
outputFile = fopen(optarg, "wb");
if (outputFile == NULL) {
- fprintf(stderr, "error: unable to open output file '%s' for writing", optarg);
+ fprintf(stderr, "error: unable to open output file '%s' for writing\n", optarg);
return EXIT_FAILURE;
}
break;
case 'v':
if (sscanf(optarg, "%u", &gVerbosity) == 0) {
- fprintf(stderr, "warning: verbosity argument '%s' should be a nonnegative decimal integer", optarg);
+ fprintf(stderr, "warning: verbosity argument '%s' should be a nonnegative decimal integer\n",
+ optarg);
}
break;
@@ -182,7 +183,7 @@ int main(int argc, char** argv) {
FAIRY_INFO_PRINTF("Using input file %s\n", argv[optind + i]);
inputFiles[i] = fopen(argv[optind + i], "rb");
if (inputFiles[i] == NULL) {
- fprintf(stderr, "error: unable to open input file '%s' for reading", argv[optind + i]);
+ fprintf(stderr, "error: unable to open input file '%s' for reading\n", argv[optind + i]);
return EXIT_FAILURE;
}
}
@@ -214,14 +215,14 @@ int main(int argc, char** argv) {
FILE* dependencyFile = fopen(dependencyFileName, "w");
if (dependencyFile == NULL) {
- fprintf(stderr, "error: unable to open dependency file '%s' for writing", dependencyFileName);
+ fprintf(stderr, "error: unable to open dependency file '%s' for writing\n", dependencyFileName);
return EXIT_FAILURE;
}
strcpy(objectFile, outputFileName);
extensionStart = strrchr(objectFile, '.');
if (extensionStart == objectFile + fileNameLength) {
- fprintf(stderr, "error: file name should not end in a '.'");
+ fprintf(stderr, "error: file name should not end in a '.'\n");
return EXIT_FAILURE;
}
strcpy(extensionStart, ".o");
diff --git a/tools/fado/src/version.inc b/tools/fado/src/version.inc
index a065de9a83..9bc9fbf30f 100644
--- a/tools/fado/src/version.inc
+++ b/tools/fado/src/version.inc
@@ -1,5 +1,5 @@
/* Copyright (C) 2021 Elliptic Ellipsis */
/* SPDX-License-Identifier: AGPL-3.0-only */
-const char versionNumber[] = "1.2.1";
-const char credits[] = "Written by Elliptic Ellipsis\nand AngheloAlf";
+const char versionNumber[] = "1.3.1";
+const char credits[] = "Written by Elliptic Ellipsis\nwith additions from AngheloAlf and Tharo";
const char repo[] = "https://github.com/EllipticEllipsis/fado/";
diff --git a/tools/mkldscript.c b/tools/mkldscript.c
index a2c992e3ae..c29f61f819 100644
--- a/tools/mkldscript.c
+++ b/tools/mkldscript.c
@@ -9,13 +9,13 @@
#include "spec.h"
#include "util.h"
-// Note: *SECTION ALIGNMENT* Object files built with a compiler such as GCC can, by default, use narrower
+// Note: *SECTION ALIGNMENT* Object files built with a compiler such as GCC can, by default, use narrower
// alignment for sections size, compared to IDO padding sections to a 0x10-aligned size.
-// To properly generate relocations relative to section starts, sections currently need to be aligned
-// explicitly (to 0x10 currently, a narrower alignment might work), otherwise the linker does implicit alignment
-// and inserts padding between the address indicated by section start symbols (such as *SegmentRoDataStart) and
+// To properly generate relocations relative to section starts, sections currently need to be aligned
+// explicitly (to 0x10 currently, a narrower alignment might work), otherwise the linker does implicit alignment
+// and inserts padding between the address indicated by section start symbols (such as *SegmentRoDataStart) and
// the actual aligned start of the section.
-// With IDO, the padding of sections to an aligned size makes the section start at aligned addresses out of the box,
+// With IDO, the padding of sections to an aligned size makes the section start at aligned addresses out of the box,
// so the explicit alignment has no further effect.
struct Segment *g_segments;
diff --git a/tools/msgdis.py b/tools/msgdis.py
index 95b1a34706..9329ea7a89 100644
--- a/tools/msgdis.py
+++ b/tools/msgdis.py
@@ -309,7 +309,7 @@ def cvt(m):
doubles = re.compile(r"(?fields & (1 << stmt)))
util_fatal_error("line %i: duplicate '%s' statement", lineNum, stmtNames[stmt]);
@@ -292,7 +292,7 @@ void parse_rom_spec(char *spec, struct Segment **segments, int *segment_count)
/**
* @brief Parses the spec, looking only for the segment with the name `segmentName`.
* Returns true if the segment was found, false otherwise
- *
+ *
* @param[out] dstSegment The Segment to be filled. Will only contain the data of the searched segment, or garbage if the segment was not found. dstSegment must be previously allocated, a stack variable is recommended
* @param[in,out] spec A null-terminated string containing the whole spec file. This string will be modified by this function
* @param[in] segmentName The name of the segment being searched
@@ -344,8 +344,8 @@ bool get_single_segment_by_name(struct Segment* dstSegment, char *spec, const ch
/**
* @brief Frees the elements of the passed Segment. Will not free the pointer itself
- *
- * @param segment
+ *
+ * @param segment
*/
void free_single_segment_elements(struct Segment *segment) {
if (segment->includes != NULL) {