Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ endif
DEFAULT_OPT_FLAGS = -Os -ffinite-math-only -fno-signed-zeros -fno-math-errno
# Note: -fno-associative-math is used here to suppress warnings, ideally we would enable this as an optimization but
# this conflicts with -ftrapping-math apparently.
# TODO: Figure out how to allow -fassociative-math to be enabled
# HACKERSM64_DO: Figure out how to allow -fassociative-math to be enabled
SAFETY_OPT_FLAGS = -ftrapping-math -fno-associative-math

# Main opt flags
Expand Down Expand Up @@ -724,7 +724,7 @@ $(BUILD_DIR)/%.ci4.inc.c: %.ci4.png
#==============================================================================#

# Link segment file to resolve external labels
# TODO: ideally this would be `-Trodata-segment=0x07000000` but that doesn't set the address
# DECOMP_DO: ideally this would be `-Trodata-segment=0x07000000` but that doesn't set the address
$(BUILD_DIR)/%.elf: $(BUILD_DIR)/%.o
$(call print,Linking ELF file:,$<,$@)
$(V)$(LD) -e 0 -Ttext=$(SEGMENT_ADDRESS) -Map $@.map -o $@ $<
Expand Down
2 changes: 1 addition & 1 deletion Makefile.split
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ $(BUILD_DIR)/actors/common1.elf: SEGMENT_ADDRESS := 0x03000000

$(BUILD_DIR)/levels/%/leveldata.elf: SEGMENT_ADDRESS := 0x07000000

# TODO: Generate these rules from the level configs?
# DECOMP_DO: Generate these rules from the level configs?

define level_rules =
$(1)_SEG7_FILES := $$(patsubst %.png,%.inc.c,$$(wildcard levels/$(1)/*.png))
Expand Down
2 changes: 1 addition & 1 deletion actors/bowser_flame/model.inc.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Bowser Flame

// TODO: These 64x64 textures are referenced as two different texture addresses in the DLs
// DECOMP_DO: These 64x64 textures are referenced as two different texture addresses in the DLs

// 0x06000000
ALIGNED8 static const Texture flame_seg6_texture_06000000[] = {
Expand Down
2 changes: 1 addition & 1 deletion actors/door/model.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -604,7 +604,7 @@ static const Vtx door_seg3_vertex_themed_handle_near_2[] = {
};

// 0x03014888 - 0x030149C0
const Gfx door_seg3_sub_dl_themed_handle_near[] = { // TODO: Combine vertices
const Gfx door_seg3_sub_dl_themed_handle_near[] = { // HACKERSM64_DO: Combine vertices
gsSPVertex(door_seg3_vertex_themed_handle_near_1, 15, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
gsSP2Triangles( 3, 6, 4, 0x0, 7, 6, 3, 0x0),
Expand Down
2 changes: 1 addition & 1 deletion actors/impact_smoke/model.inc.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Impact Smoke

// TODO: These 64x64 textures are referenced as two different texture addresses in the DLs
// DECOMP_DO: These 64x64 textures are referenced as two different texture addresses in the DLs

// 0x0605AA28
ALIGNED8 static const Texture impact_smoke_seg6_texture_0605AA28[] = {
Expand Down
4 changes: 2 additions & 2 deletions data/behavior_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ enum BehaviorCommands {
#define BIT_CLEAR(field, value) \
BC_BBH(BHV_CMD_BIT_CLEAR, field, value)

// TODO: this one needs a better name / labelling
// DECOMP_DO: this one needs a better name / labelling
// Gets a random short, right shifts it the specified amount and adds min to it, then sets the specified field to that value.
#define SET_INT_RAND_RSHIFT(field, min, rshift) \
BC_BBH(BHV_CMD_SET_INT_RAND_RSHIFT, field, min), \
Expand All @@ -235,7 +235,7 @@ enum BehaviorCommands {
BC_BBH(BHV_CMD_ADD_RANDOM_FLOAT, field, min), \
BC_H(range)

// TODO: better name (unused anyway)
// DECOMP_DO: better name (unused anyway)
// Gets a random short, right shifts it the specified amount and adds min to it, then adds the value to the specified field. Unused.
#define ADD_INT_RAND_RSHIFT(field, min, rshift) \
BC_BBH(BHV_CMD_ADD_INT_RAND_RSHIFT, field, min), \
Expand Down
8 changes: 4 additions & 4 deletions extract_assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ def main():
local_version = new_version

# Create work list
todo = defaultdict(lambda: [])
to_do = defaultdict(lambda: [])
for (asset, data, exists) in all_assets:
# Leave existing assets alone if they have a compatible version.
if exists and not (local_version == new_version or asset_needs_update(asset, local_version)):
Expand All @@ -176,7 +176,7 @@ def main():
mio0 = None if len(pos) == 1 else pos[0]
pos = pos[-1]
if lang in langs:
todo[(lang, mio0)].append((asset, pos, size, meta))
to_do[(lang, mio0)].append((asset, pos, size, meta))
break

# Load ROMs
Expand Down Expand Up @@ -206,12 +206,12 @@ def main():

# Go through the assets in roughly alphabetical order (but assets in the same
# mio0 file still go together).
keys = sorted(list(todo.keys()), key=lambda k: todo[k][0][0])
keys = sorted(list(to_do.keys()), key=lambda k: to_do[k][0][0])

# Import new assets
for key in keys:

assets = todo[key]
assets = to_do[key]
lang, mio0 = key
romname = romLUT[lang]
if mio0 == "@sound":
Expand Down
2 changes: 1 addition & 1 deletion include/config/config_game.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

/**
* Enables some mechanics that change behavior depending on hardcoded level numbers.
* TODO: separate this into separate defines, behavior params, or make these mechanics otherwise dynamic.
* HACKERSM64_DO: separate this into separate defines, behavior params, or make these mechanics otherwise dynamic.
*/
// #define ENABLE_VANILLA_LEVEL_SPECIFIC_CHECKS

Expand Down
2 changes: 1 addition & 1 deletion include/course_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
enum CourseNum {
#include "levels/course_defines.h"
COURSE_END, // To mark end + 1 for marking max and count.
// TODO: clean this up. This is still bad. Which
// DECOMP_DO: clean this up. This is still bad. Which
// one is clearer? Need to get rid of one of these.
COURSE_MAX = COURSE_END - 1,
COURSE_COUNT = COURSE_MAX,
Expand Down
4 changes: 2 additions & 2 deletions include/object_constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -1397,7 +1397,7 @@ enum oActionsIntroPeach {
PEACH_ACT_UNFADE,
PEACH_ACT_FADE_2,
};
enum animIDsPeach { //! TODO: anim names 0-3 & 6-8
enum animIDsPeach { //! HACKERSM64_DO: anim names 0-3 & 6-8
PEACH_ANIM_0,
PEACH_ANIM_1,
PEACH_ANIM_2,
Expand Down Expand Up @@ -2087,7 +2087,7 @@ enum oActionsSnowmansBottom {
#define TTC_COG_BP_SHAPE_HEXAGON (0 << 1)
#define TTC_COG_BP_SHAPE_TRIANGLE (1 << 1)
#define TTC_COG_BP_DIR_MASK 0x01
#define TTC_COG_BP_DIR_CCW (0 << 0) // TODO: Check these
#define TTC_COG_BP_DIR_CCW (0 << 0) // DECOMP_DO: Check these
#define TTC_COG_BP_DIR_CW (1 << 0)

/* TTC Pit Block */
Expand Down
6 changes: 3 additions & 3 deletions include/segment_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
* If you change these numbers, make sure to also change them in Makefile.split,
* and in your level scripts (in places marked with *seg*).
*
* TODO: Make this an enum without breaking sm64.ld
* TODO: Find a way to use these with SEG_ADDRESS in sm64.ld without breaking Fast64
* TODO: Find a way to use these with SEG_ADDRESS in Makefile.split
* HACKERSM64_DO: Make this an enum without breaking sm64.ld
* HACKERSM64_DO: Find a way to use these with SEG_ADDRESS in sm64.ld without breaking Fast64
* HACKERSM64_DO: Find a way to use these with SEG_ADDRESS in Makefile.split
*/

#define SEGMENT_MAIN 0x00 // | Segment 0 | General Segment, includes most of /src/ (engine, buffers, goddard, audio, etc.)
Expand Down
4 changes: 2 additions & 2 deletions levels/castle_grounds/areas/1/11/model.inc.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// TODO: what is this? 0700C4C0-0700C4C8 [8,8]
// DECOMP_DO: what is this? 0700C4C0-0700C4C8 [8,8]
UNUSED static const u64 castle_grounds_unused_0 = 0;

// 0x0700C4C8 - 0x0700C4E0

// 0x0700C4E0 - 0x0700C4F8

// TODO: what is this? 0700C4F8-0700C500 [8,8]
// DECOMP_DO: what is this? 0700C4F8-0700C500 [8,8]
UNUSED static const u64 castle_grounds_unused_1 = 0;

// 0x0700C500 - 0x0700C530
Expand Down
2 changes: 1 addition & 1 deletion levels/castle_grounds/areas/1/12/model.inc.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TODO: what is this? 0700C960-0700C968 [8,8]
// DECOMP_DO: what is this? 0700C960-0700C968 [8,8]
UNUSED static const u64 castle_grounds_unused_2 = 0;

// 0x0700C968 - 0x0700C9A8
Expand Down
4 changes: 2 additions & 2 deletions levels/castle_inside/painting.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,7 @@ static const Vtx inside_castle_seg7_vertex_07022598[] = {
{{{ 0, 614, 0}, 0, { 0, 0}, {0x00, 0x00, 0x7f, 0xff}}},
};

// TODO: this is unused
// DECOMP_DO: this is unused
// 0x070225D8 - 0x07022610
const Gfx inside_castle_seg7_dl_070225D8[] = {
gsDPPipeSync(),
Expand All @@ -592,7 +592,7 @@ const Gfx inside_castle_seg7_dl_070225D8[] = {
gsSPEndDisplayList(),
};

// TODO: this is unused
// DECOMP_DO: this is unused
// 0x07022610 - 0x07022640
const Gfx inside_castle_seg7_dl_07022610[] = {
gsSP1Triangle( 0, 1, 2, 0x0),
Expand Down
2 changes: 1 addition & 1 deletion levels/jrb/unused_lid/collision.inc.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// This file only has a collision entry and no model. It may have been some sort of
// collision hitbox for an object that didn't have a model.

// TODO: this appears to be a lid for an unused box
// DECOMP_DO: this appears to be a lid for an unused box
// 0x0700D1DC - 0x0700D20C
const Collision jrb_seg7_collision_0700D1DC[] = {
COL_INIT(),
Expand Down
2 changes: 1 addition & 1 deletion levels/level_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// Argument 11: Specify level camera table, if specified. _ for none.

// NOTE: Be sure to edit sZoomOutAreaMasks in camera.c, as there isnt a good way to macro those right now.
// TODO: Figure something out for sZoomOutAreaMasks?
// DECOMP_DO: Figure something out for sZoomOutAreaMasks?

STUB_LEVEL( "", LEVEL_UNKNOWN_1, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
STUB_LEVEL( "", LEVEL_UNKNOWN_2, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
Expand Down
2 changes: 1 addition & 1 deletion levels/wf/leveldata.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
#include "levels/wf/breakable_wall_left/collision.inc.c"
#include "levels/wf/kickable_board/collision.inc.c"
#include "levels/wf/tower_door/collision.inc.c"
#include "levels/wf/rotating_platform/collision.inc.c" // This is odd... TODO: investigate this.
#include "levels/wf/rotating_platform/collision.inc.c" // This is odd... DECOMP_DO: investigate this.
#include "levels/wf/areas/1/10/collision.inc.c"
#include "levels/wf/areas/1/11/collision.inc.c"
#include "levels/wf/areas/1/collision.inc.c"
Expand Down
1 change: 0 additions & 1 deletion src/audio/data.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ extern OSMesgQueue *D_SH_80350FA8;
#define AUDIO_INIT_POOL_SIZE (0x2400 + (MAX_NUM_SOUNDBANKS * sizeof(s32)) + EXT_AUDIO_INIT_POOL_SIZE)
#endif

// TODO: needs validation once EU can compile. EU is very likely incorrect!
#define AUDIO_HEAP_SIZE (SEQ_BANK_MEM + AUDIO_INIT_POOL_SIZE + NOTES_BUFFER_SIZE + BETTER_REVERB_SIZE + REVERB_WINDOW_HEAP_SIZE)

#ifdef VERSION_SH
Expand Down
51 changes: 1 addition & 50 deletions src/audio/external.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ u8 sSoundRequestCount = 0;
// (e.g. "only if Mario's X position is between 100 and 300"), and finally a
// fallback dynamic. Due to the encoding of the tables, the conditions must
// come in the same order as the macros.
// TODO: dynamic isn't a great term for this, it means other things in music...
// DECOMP_DO: dynamic isn't a great term for this, it means other things in music...

enum MusicDynConditionTypes {
MARIO_X_GE,
Expand Down Expand Up @@ -262,55 +262,6 @@ u16 sLevelAcousticReaches[LEVEL_COUNT] = {
#define VOLUME_RANGE_UNK2 0.8f
#endif

// sBackgroundMusicDefaultVolume represents the default volume for background music sequences using the level player (deprecated).
// This code block is simply commented out for now as to not destroy compatibility with any streamed audio tools.
// TODO: Delete this entirely once the unsupporting streamed tools or their builds are outdated.

/*

u8 sBackgroundMusicDefaultVolume[] = {
127, // SEQ_SOUND_PLAYER
80, // SEQ_EVENT_CUTSCENE_COLLECT_STAR
80, // SEQ_MENU_TITLE_SCREEN
75, // SEQ_LEVEL_GRASS
70, // SEQ_LEVEL_INSIDE_CASTLE
75, // SEQ_LEVEL_WATER
75, // SEQ_LEVEL_HOT
75, // SEQ_LEVEL_BOSS_KOOPA
70, // SEQ_LEVEL_SNOW
65, // SEQ_LEVEL_SLIDE
80, // SEQ_LEVEL_SPOOKY
65, // SEQ_EVENT_PIRANHA_PLANT
85, // SEQ_LEVEL_UNDERGROUND
75, // SEQ_MENU_STAR_SELECT
65, // SEQ_EVENT_POWERUP
70, // SEQ_EVENT_METAL_CAP
65, // SEQ_EVENT_KOOPA_MESSAGE
70, // SEQ_LEVEL_KOOPA_ROAD
70, // SEQ_EVENT_HIGH_SCORE
65, // SEQ_EVENT_MERRY_GO_ROUND
80, // SEQ_EVENT_RACE
70, // SEQ_EVENT_CUTSCENE_STAR_SPAWN
85, // SEQ_EVENT_BOSS
75, // SEQ_EVENT_CUTSCENE_COLLECT_KEY
75, // SEQ_EVENT_ENDLESS_STAIRS
85, // SEQ_LEVEL_BOSS_KOOPA_FINAL
70, // SEQ_EVENT_CUTSCENE_CREDITS
80, // SEQ_EVENT_SOLVE_PUZZLE
80, // SEQ_EVENT_TOAD_MESSAGE
70, // SEQ_EVENT_PEACH_MESSAGE
75, // SEQ_EVENT_CUTSCENE_INTRO
80, // SEQ_EVENT_CUTSCENE_VICTORY
70, // SEQ_EVENT_CUTSCENE_ENDING
65, // SEQ_MENU_FILE_SELECT
0, // SEQ_EVENT_CUTSCENE_LAKITU (not in JP)
};

STATIC_ASSERT(ARRAY_COUNT(sBackgroundMusicDefaultVolume) == SEQ_COUNT,
"change this array if you are adding sequences");

*/

u8 sCurrentBackgroundMusicSeqId = SEQUENCE_NONE;
u8 sMusicDynamicDelay = 0;
u8 sSoundBankUsedListBack[SOUND_BANK_COUNT] = {[0 ... SOUND_BANK_COUNT-1] = 0};
Expand Down
22 changes: 11 additions & 11 deletions src/audio/heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -732,7 +732,7 @@ size = ALIGN16(size);
}
}

// TODO: why is this guaranteed to write <= 32 entries...?
// DECOMP_DO: why is this guaranteed to write <= 32 entries...?
// Because the buffer is small enough that more don't fit?
arg0->persistent.entries[arg0->persistent.numEntries].id = id;
arg0->persistent.entries[arg0->persistent.numEntries].size = size;
Expand Down Expand Up @@ -1011,11 +1011,11 @@ void init_reverb_eu(void) {
reverb->unk28 = soundAlloc(&gNotesAndBuffersPool, (16 * sizeof(s16)));
for (i = 0; i < gAudioBufferParameters.updatesPerFrame; i++) {
mem = soundAlloc(&gNotesAndBuffersPool, DEFAULT_LEN_2CH);
reverb->items[0][i].toDownsampleLeft = mem;
reverb->items[0][i].toDownsampleRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
reverb->items[0][i].toBeDownsampledLeft = mem;
reverb->items[0][i].toBeDownsampledRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
mem = soundAlloc(&gNotesAndBuffersPool, DEFAULT_LEN_2CH);
reverb->items[1][i].toDownsampleLeft = mem;
reverb->items[1][i].toDownsampleRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
reverb->items[1][i].toBeDownsampledLeft = mem;
reverb->items[1][i].toBeDownsampledRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
}
}

Expand All @@ -1034,7 +1034,7 @@ void init_reverb_eu(void) {
bzero(reverb->unk28, (16 * sizeof(s16)));

// All reverb downsample buffers are adjacent in memory, so clear them all in a single call
bzero(reverb->items[0][0].toDownsampleLeft, (DEFAULT_LEN_1CH * 4 * gAudioBufferParameters.updatesPerFrame));
bzero(reverb->items[0][0].toBeDownsampledLeft, (DEFAULT_LEN_1CH * 4 * gAudioBufferParameters.updatesPerFrame));
}
}
}
Expand Down Expand Up @@ -1116,11 +1116,11 @@ void init_reverb_us(s32 presetId) {
gSynthesisReverb.unk28 = soundAlloc(&gNotesAndBuffersPool, (16 * sizeof(s16)));
for (i = 0; i < gAudioUpdatesPerFrame; i++) {
mem = soundAlloc(&gNotesAndBuffersPool, DEFAULT_LEN_2CH);
gSynthesisReverb.items[0][i].toDownsampleLeft = mem;
gSynthesisReverb.items[0][i].toDownsampleRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
gSynthesisReverb.items[0][i].toBeDownsampledLeft = mem;
gSynthesisReverb.items[0][i].toBeDownsampledRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
mem = soundAlloc(&gNotesAndBuffersPool, DEFAULT_LEN_2CH);
gSynthesisReverb.items[1][i].toDownsampleLeft = mem;
gSynthesisReverb.items[1][i].toDownsampleRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
gSynthesisReverb.items[1][i].toBeDownsampledLeft = mem;
gSynthesisReverb.items[1][i].toBeDownsampledRight = (mem + (DEFAULT_LEN_1CH / sizeof(s16)));
}
} else {
bzero(gSynthesisReverb.ringBuffer.left, (REVERB_WINDOW_SIZE_MAX * 2 * sizeof(s16)));
Expand All @@ -1143,7 +1143,7 @@ void init_reverb_us(s32 presetId) {
bzero(gSynthesisReverb.unk28, (16 * sizeof(s16)));

// All reverb downsample buffers are adjacent in memory, so clear them all in a single call
bzero(gSynthesisReverb.items[0][0].toDownsampleLeft, (DEFAULT_LEN_1CH * 4 * gAudioUpdatesPerFrame));
bzero(gSynthesisReverb.items[0][0].toBeDownsampledLeft, (DEFAULT_LEN_1CH * 4 * gAudioUpdatesPerFrame));
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/audio/heap.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ struct SeqOrBankEntry {
struct PersistentPool {
/*0x00*/ u32 numEntries;
/*0x04*/ struct SoundAllocPool pool;
#ifdef EXPAND_AUDIO_HEAP // TODO: Make this a configurable define rather than using static values
#ifdef EXPAND_AUDIO_HEAP // HACKERSM64_DO: Make this a configurable define rather than using static values
/*0x14*/ struct SeqOrBankEntry entries[64];
// size = 0x314
#else
Expand Down
2 changes: 1 addition & 1 deletion src/audio/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ struct Note {
// that results in messy US/EU ifdefs. Instead we cast to a struct pointer
// when needed... This breaks alignment on non-N64 platforms, which we hack
// around by skipping the padding in that case.
// TODO: use macros or something instead.
// DECOMP_DO: use macros or something instead.
#ifdef TARGET_N64
u8 pad0[12];
#endif
Expand Down
4 changes: 2 additions & 2 deletions src/audio/load.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ void *dma_sample_data(uintptr_t devAddr, u32 size, s32 arg2, u8 *dmaIndexRef) {
transfer = dma->bufSize;
dmaDevAddr = devAddr & ~0xF;
dma->source = dmaDevAddr;
#ifdef VERSION_US // TODO: Is there a reason this only exists in US?
#ifdef VERSION_US // HACKERSM64_DO: Is there a reason this only exists in US?
osInvalDCache(dma->buffer, transfer);
#endif
osPiStartDma(&gCurrAudioFrameDmaIoMesgBufs[gCurrAudioFrameDmaCount++], OS_MESG_PRI_NORMAL,
Expand Down Expand Up @@ -343,7 +343,7 @@ void patch_sound(UNUSED struct AudioBankSound *sound, UNUSED u8 *memBase, UNUSED
#if defined(VERSION_EU)
else if (sample->loaded == 0x80) {
PATCH(sample->sampleAddr, offsetBase);
u8 *mem = soundAlloc(&gNotesAndBuffersPool, sample->sampleSize); // TODO: Memory issue most likely!
u8 *mem = soundAlloc(&gNotesAndBuffersPool, sample->sampleSize); // HACKERSM64_DO: Memory issue most likely!
if (mem == NULL) {
sample->sampleAddr = patched;
sample->loaded = 1;
Expand Down
Loading