diff --git a/game/kernel/jak2/kscheme.cpp b/game/kernel/jak2/kscheme.cpp index a095948251..3ae7a614ac 100644 --- a/game/kernel/jak2/kscheme.cpp +++ b/game/kernel/jak2/kscheme.cpp @@ -4,6 +4,8 @@ #include #include +#include "fileio.h" + #include "common/common_types.h" #include "common/global_profiler/GlobalProfiler.h" #include "common/goal_constants.h" @@ -13,10 +15,8 @@ #include "game/kernel/common/fileio.h" #include "game/kernel/common/kdsnetm.h" #include "game/kernel/common/klink.h" -#include "game/kernel/common/kmalloc.h" #include "game/kernel/common/kmemcard.h" #include "game/kernel/common/kprint.h" -#include "game/kernel/common/kscheme.h" #include "game/kernel/jak2/kdgo.h" #include "game/kernel/jak2/klink.h" #include "game/kernel/jak2/klisten.h" @@ -1799,11 +1799,20 @@ u64 loadc(const char* /*file_name*/, kheapinfo* /*heap*/, u32 /*flags*/) { return 0; } -u64 loado(u32 file_name_in, u32 /*heap_in*/) { - // ASSERT(false); +// NOTE: copied from jak 1 +u64 loado(u32 file_name_in, u32 heap_in) { + char loadName[272]; Ptr file_name(file_name_in); + Ptr heap(heap_in); printf("****** CALL TO loado(%s) ******\n", file_name->data()); - return s7.offset; + kstrcpy(loadName, MakeFileName(DATA_FILE_TYPE, file_name->data(), 0)); + s32 returnValue = load_and_link(file_name->data(), loadName, heap.c(), LINK_FLAG_PRINT_LOGIN); + + if (returnValue < 0) { + return s7.offset; + } else { + return returnValue; + } } /*! @@ -1814,11 +1823,14 @@ u64 unload(u32 name) { return 0; } -s64 load_and_link(const char* /*filename*/, - char* /*decode_name*/, - kheapinfo* /*heap*/, - u32 /*flags*/) { - ASSERT(false); - return 0; +// NOTE: copied from jak 1 +s64 load_and_link(const char* filename, char* decode_name, kheapinfo* heap, u32 flags) { + (void)filename; + s32 sz; + auto rv = FileLoad(decode_name, make_ptr(heap), Ptr(0), KMALLOC_ALIGN_64, &sz); + if (((s32)rv.offset) > -1) { + return (s32)link_and_exec(rv, decode_name, sz, make_ptr(heap), flags, false).offset; + } + return (s32)rv.offset; } } // namespace jak2 diff --git a/game/kernel/jak2/kscheme.h b/game/kernel/jak2/kscheme.h index 1081b2ceda..043d0af055 100644 --- a/game/kernel/jak2/kscheme.h +++ b/game/kernel/jak2/kscheme.h @@ -3,6 +3,7 @@ #include "game/kernel/common/Ptr.h" #include "game/kernel/common/Symbol4.h" +#include "game/kernel/common/kmalloc.h" #include "game/kernel/common/kscheme.h" namespace jak2 { @@ -56,6 +57,7 @@ u64 load(u32 file_name_in, u32 heap_in); u64 loadb(u32 file_name_in, u32 heap_in, u32 param3); u64 loado(u32 file_name_in, u32 heap_in); u64 unload(u32 name); +s64 load_and_link(const char* filename, char* decode_name, kheapinfo* heap, u32 flags); u64 call_method_of_type(u32 arg, Ptr type, u32 method_id); u64 call_goal_function_by_name(const char* name); u64 alloc_heap_memory(u32 heap, u32 size); diff --git a/goal_src/jak2/engine/load/file-io.gc b/goal_src/jak2/engine/load/file-io.gc index d98cee2868..69a465aca2 100644 --- a/goal_src/jak2/engine/load/file-io.gc +++ b/goal_src/jak2/engine/load/file-io.gc @@ -151,19 +151,21 @@ NOTE: this is a special type in three ways: (format *file-temp-string* "map~D/~S-mp" MAP_FILE_VERSION arg1) ) ((= arg0 (file-kind art-group)) - (format - *file-temp-string* - "art-group~D/~S-ag" - (cond - ((> arg2 0) - arg2 - ) - (else - ART_GROUP_FILE_VERSION - ) - ) - arg1 - ) + ;; og:preserve-this removed art-group prefix + ; (format + ; *file-temp-string* + ; "art-group~D/~S-ag" + ; (cond + ; ((> arg2 0) + ; arg2 + ; ) + ; (else + ; ART_GROUP_FILE_VERSION + ; ) + ; ) + ; arg1 + ; ) + (format *file-temp-string* "~S-ag" arg1) ) ) *file-temp-string*