├── .gitattributes ├── .github └── workflows │ ├── delete_all_releases.yml │ ├── delete_releases.yml │ └── main.yml ├── .gitignore ├── .gitmodules ├── CMake └── EditorVersion.cmake ├── CMakeLists.txt ├── CONTRIBUTING.MD ├── External └── CMakeLists.txt ├── KAIN2 ├── CMakeLists.txt ├── Game │ ├── BSP.C │ ├── BSP.H │ ├── CAMERA.C │ ├── CAMERA.H │ ├── CINEMA │ │ ├── CINEPSX.C │ │ └── CINEPSX.H │ ├── CMakeLists.txt │ ├── COLLIDE.C │ ├── COLLIDE.H │ ├── CORE.H │ ├── DEBUG.C │ ├── DEBUG.H │ ├── DRAW.C │ ├── DRAW.H │ ├── EVENT.C │ ├── EVENT.H │ ├── FONT.C │ ├── FONT.H │ ├── FX.C │ ├── FX.H │ ├── G2 │ │ ├── ANIMG2.C │ │ ├── ANIMG2.H │ │ ├── ANMCTRLR.C │ │ ├── ANMCTRLR.H │ │ ├── ANMDECMP.C │ │ ├── ANMDECMP.H │ │ ├── ANMG2ILF.C │ │ ├── ANMG2ILF.H │ │ ├── ANMINTRP.C │ │ ├── ANMINTRP.H │ │ ├── INSTNCG2.C │ │ ├── INSTNCG2.H │ │ ├── MAING2.C │ │ ├── MAING2.H │ │ ├── POOLMMG2.C │ │ ├── POOLMMG2.H │ │ ├── QUATG2.C │ │ ├── QUATG2.H │ │ ├── TIMERG2.C │ │ └── TIMERG2.H │ ├── G2TYPES.H │ ├── GAMELOOP.C │ ├── GAMELOOP.H │ ├── GAMEPAD.C │ ├── GAMEPAD.H │ ├── GENERIC.C │ ├── GENERIC.H │ ├── GEX2.H │ ├── GLYPH.C │ ├── GLYPH.H │ ├── INLINE_C_EXT.H │ ├── INSTANCE.C │ ├── INSTANCE.H │ ├── KAIN2.ICO │ ├── KAIN2.RC │ ├── LIGHT3D.C │ ├── LIGHT3D.H │ ├── LIST.C │ ├── LIST.H │ ├── LOAD3D.C │ ├── LOAD3D.H │ ├── LOCAL │ │ ├── LOCALSTR.C │ │ └── LOCALSTR.H │ ├── MATH3D.C │ ├── MATH3D.H │ ├── MCARD │ │ ├── MCASSERT.C │ │ ├── MCASSERT.H │ │ ├── MEMCARD.C │ │ └── MEMCARD.H │ ├── MEMPACK.C │ ├── MEMPACK.H │ ├── MENU │ │ ├── MENU.C │ │ ├── MENU.H │ │ ├── MENUDEFS.C │ │ ├── MENUDEFS.H │ │ ├── MENUFACE.C │ │ ├── MENUFACE.H │ │ ├── MENUUTIL.C │ │ └── MENUUTIL.H │ ├── MONSTER │ │ ├── ALUKA.C │ │ ├── ALUKA.H │ │ ├── ALUKABSS.C │ │ ├── HUMAN.C │ │ ├── HUMAN.H │ │ ├── HUNTER.C │ │ ├── HUNTER.H │ │ ├── KAIN.C │ │ ├── MBMISS.C │ │ ├── MBMISS.H │ │ ├── MISSILE.C │ │ ├── MISSILE.H │ │ ├── MONAPI.C │ │ ├── MONAPI.H │ │ ├── MONLIB.C │ │ ├── MONLIB.H │ │ ├── MONMSG.C │ │ ├── MONMSG.H │ │ ├── MONSENSE.C │ │ ├── MONSENSE.H │ │ ├── MONSTER.C │ │ ├── MONSTER.H │ │ ├── MONTABLE.C │ │ ├── MONTABLE.H │ │ ├── MORLOCK.H │ │ ├── PRIESTESS.C │ │ ├── RONINBSS.C │ │ ├── SKINBOS.C │ │ ├── SKINNER.C │ │ ├── SLUAGH.C │ │ ├── SLUAGH.H │ │ ├── SOUL.C │ │ ├── SOUL.H │ │ ├── VWRAITH.C │ │ ├── VWRAITH.H │ │ ├── WALBOSB.C │ │ ├── WALBOSS.C │ │ ├── WALLCR.C │ │ ├── WORSHIP.C │ │ └── WORSHIP.H │ ├── OBTABLE.C │ ├── OBTABLE.H │ ├── OVERLAYS │ │ ├── CINEMAX.C │ │ ├── CINEMAX.H │ │ ├── MCARDX.C │ │ └── MCARDX.H │ ├── PHYSICS.C │ ├── PHYSICS.H │ ├── PHYSOBS.C │ ├── PHYSOBS.H │ ├── PIPE3D.C │ ├── PIPE3D.H │ ├── PLAN │ │ ├── ENMYPLAN.C │ │ ├── ENMYPLAN.H │ │ ├── PLAN.C │ │ ├── PLAN.H │ │ ├── PLANAPI.C │ │ ├── PLANAPI.H │ │ ├── PLANCOLL.C │ │ ├── PLANCOLL.H │ │ ├── PLANPOOL.C │ │ ├── PLANPOOL.H │ │ ├── PLANSRCH.C │ │ └── PLANSRCH.H │ ├── PLAYER.C │ ├── PLAYER.H │ ├── PSX │ │ ├── AADLIB.C │ │ ├── AADLIB.H │ │ ├── AADSEQEV.C │ │ ├── AADSEQEV.H │ │ ├── AADSFX.C │ │ ├── AADSFX.H │ │ ├── AADSQCMD.C │ │ ├── AADSQCMD.H │ │ ├── AADVOICE.C │ │ ├── AADVOICE.H │ │ ├── COLLIDES.C │ │ ├── COLLIDES.H │ │ ├── COLLIDES.S │ │ ├── DRAWS.C │ │ ├── DRAWS.H │ │ ├── DRAWS.S │ │ ├── MAIN.C │ │ ├── MAIN.H │ │ ├── PSX_G2 │ │ │ ├── MAINVM.C │ │ │ ├── MAINVM.H │ │ │ ├── QUATVM.C │ │ │ └── QUATVM.H │ │ ├── SNMAIN.H │ │ ├── SNMAIN.S │ │ ├── SUPPORT.C │ │ └── SUPPORT.H │ ├── Platform │ │ ├── Android.cmake │ │ ├── Apple.cmake │ │ ├── Durango.cmake │ │ ├── Emscripten.cmake │ │ ├── Linux.cmake │ │ ├── Mingw.cmake │ │ ├── Win32.cmake │ │ ├── Win64.cmake │ │ └── WindowsStore.cmake │ ├── RAZCNTRL.C │ ├── RAZCNTRL.H │ ├── RAZIEL │ │ ├── ALGOCTRL.C │ │ ├── ALGOCTRL.H │ │ ├── ATTACK.C │ │ ├── ATTACK.H │ │ ├── CONTROL.C │ │ ├── CONTROL.H │ │ ├── HEALTH.C │ │ ├── HEALTH.H │ │ ├── PUPPET.C │ │ ├── PUPPET.H │ │ ├── RAZDBUG.C │ │ ├── RAZDBUG.H │ │ ├── RAZIEL.C │ │ ├── RAZIEL.H │ │ ├── RAZLIB.C │ │ ├── RAZLIB.H │ │ ├── SENSES.C │ │ ├── SENSES.H │ │ ├── SPIDER.C │ │ ├── SPIDER.H │ │ ├── STEERING.C │ │ ├── STEERING.H │ │ ├── SWIM.C │ │ └── SWIM.H │ ├── REAVER.C │ ├── REAVER.H │ ├── RELMOD.C │ ├── RELMOD.H │ ├── RESOLVE.C │ ├── RESOLVE.H │ ├── SAVEINFO.C │ ├── SAVEINFO.H │ ├── SCRIPT.C │ ├── SCRIPT.H │ ├── SIGNAL.C │ ├── SIGNAL.H │ ├── SOUND.C │ ├── SOUND.H │ ├── SPLINE.C │ ├── SPLINE.H │ ├── STATE.C │ ├── STATE.H │ ├── STREAM.C │ ├── STREAM.H │ ├── STRMLOAD.C │ ├── STRMLOAD.H │ ├── TIMER.C │ ├── TIMER.H │ ├── UNDRWRLD.C │ ├── UNDRWRLD.H │ ├── VM.C │ ├── VM.H │ ├── VOICEXA.C │ ├── VOICEXA.H │ ├── VRAM.C │ └── VRAM.H └── Tools │ ├── CMakeLists.txt │ ├── ShiftEditor │ ├── CMakeLists.txt │ ├── EDITOR.C │ ├── EDITOR.H │ ├── EDITOR.ICO │ ├── EDITOR.RC │ ├── Editor_Version.h │ ├── Editor_Version.h.in │ ├── Main.cpp │ ├── Platform │ │ ├── Android.cmake │ │ ├── Durango.cmake │ │ ├── Emscripten.cmake │ │ ├── Linux.cmake │ │ ├── Mingw.cmake │ │ ├── Windows.cmake │ │ └── WindowsStore.cmake │ └── UserInterface │ │ ├── Dark │ │ ├── DockClose.png │ │ ├── DockMinimise.png │ │ ├── DockPin.png │ │ ├── Engine.ico │ │ ├── Main.qss │ │ ├── Toolbar1.png │ │ ├── Toolbar10.png │ │ ├── Toolbar11.png │ │ ├── Toolbar12.png │ │ ├── Toolbar13.png │ │ ├── Toolbar14.png │ │ ├── Toolbar15.png │ │ ├── Toolbar16.png │ │ ├── Toolbar17.png │ │ ├── Toolbar18.png │ │ ├── Toolbar19.png │ │ ├── Toolbar2.png │ │ ├── Toolbar20.png │ │ ├── Toolbar21.png │ │ ├── Toolbar22.png │ │ ├── Toolbar23.png │ │ ├── Toolbar24.png │ │ ├── Toolbar25.png │ │ ├── Toolbar26.png │ │ ├── Toolbar27.png │ │ ├── Toolbar28.png │ │ ├── Toolbar29.png │ │ ├── Toolbar3.png │ │ ├── Toolbar30.png │ │ ├── Toolbar31.png │ │ ├── Toolbar32.png │ │ ├── Toolbar33.png │ │ ├── Toolbar34.png │ │ ├── Toolbar4.png │ │ ├── Toolbar5.png │ │ ├── Toolbar6.png │ │ ├── Toolbar7.png │ │ ├── Toolbar8.png │ │ └── Toolbar9.png │ │ ├── ShiftBottomPane.cpp │ │ ├── ShiftBottomPane.h │ │ ├── ShiftCenterPane.cpp │ │ ├── ShiftCenterPane.h │ │ ├── ShiftD3D11Frame.cpp │ │ ├── ShiftD3D11Frame.h │ │ ├── ShiftD3D11Window.cpp │ │ ├── ShiftD3D11Window.h │ │ ├── ShiftD3D9Frame.cpp │ │ ├── ShiftD3D9Frame.h │ │ ├── ShiftEmptyPane.cpp │ │ ├── ShiftEmptyPane.h │ │ ├── ShiftLabel.cpp │ │ ├── ShiftLabel.h │ │ ├── ShiftLeftPane.cpp │ │ ├── ShiftLeftPane.h │ │ ├── ShiftMenuBar.cpp │ │ ├── ShiftMenuBar.h │ │ ├── ShiftOGLFrame.cpp │ │ ├── ShiftOGLFrame.h │ │ ├── ShiftPanes.h │ │ ├── ShiftRenderablePropertiesPane.cpp │ │ ├── ShiftRenderablePropertiesPane.h │ │ ├── ShiftResources.qrc │ │ ├── ShiftRightPane.cpp │ │ ├── ShiftRightPane.h │ │ ├── ShiftToolBar.cpp │ │ ├── ShiftToolBar.h │ │ ├── ShiftToolBox.cpp │ │ ├── ShiftToolBox.h │ │ ├── ShiftToolButton.cpp │ │ ├── ShiftToolButton.h │ │ ├── ShiftToolMenuButton.cpp │ │ ├── ShiftToolMenuButton.h │ │ ├── ShiftUnitPropertiesPane.cpp │ │ ├── ShiftUnitPropertiesPane.h │ │ ├── ShiftWindow.cpp │ │ ├── ShiftWindow.h │ │ └── ShiftWindow.ui │ ├── ShiftGlyph │ ├── CMakeLists.txt │ ├── FILE.C │ ├── FILE.H │ ├── FX.H │ ├── GLYPH.H │ ├── LOCALS.H │ ├── MAIN.C │ ├── MONSTER.H │ ├── OBJECT.H │ ├── PLAYER.H │ ├── SOUND.H │ ├── UPGRADE.C │ └── UPGRADE.H │ ├── ShiftList │ ├── BIGFILE.C │ ├── BIGFILE.H │ ├── CMakeLists.txt │ ├── FILELIST.H │ └── MAIN.C │ └── ShiftMidi │ ├── CMakeLists.txt │ ├── MAIN.C │ ├── MIDI.C │ └── MIDI.H ├── Makefile ├── README.MD └── appveyor.yml /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/delete_all_releases.yml: -------------------------------------------------------------------------------- 1 | name: Delete Older Releases (All) 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | delete_releases: 8 | name: Delete Older Releases (All) 9 | runs-on: windows-latest 10 | steps: 11 | - name: Delete 12 | uses: dev-drprasad/delete-older-releases@v0.2.1 13 | 14 | with: 15 | keep_latest: 0 16 | delete_tags: true 17 | env: 18 | GITHUB_TOKEN: ${{secrets.PAT}} 19 | -------------------------------------------------------------------------------- /.github/workflows/delete_releases.yml: -------------------------------------------------------------------------------- 1 | name: Delete Older Releases (Keep latest 15) 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | delete_releases: 8 | name: Delete Older Releases (Keep latest 15) 9 | runs-on: windows-latest 10 | steps: 11 | - name: Delete 12 | uses: dev-drprasad/delete-older-releases@v0.2.1 13 | 14 | with: 15 | keep_latest: 15 16 | delete_tags: true 17 | env: 18 | GITHUB_TOKEN: ${{secrets.PAT}} 19 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Emscripten Release Build 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - 'main2' 8 | 9 | jobs: 10 | release_web: 11 | name: Web Release 12 | runs-on: windows-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v4.1.1 16 | with: 17 | token: ${{secrets.PAT}} 18 | submodules: 'true' 19 | 20 | - uses: mymindstorm/setup-emsdk@v12 21 | 22 | - name: Create Build Directory 23 | run: cmake -E make_directory ${{github.workspace}}/Build/Build_EMSDK 24 | 25 | - name: Configure CMake 26 | run: cmd.exe /k ${{github.workspace}}/External/libValkyrie/Platform/Emscripten/Generate-Project-Files-GHA.bat 27 | 28 | - name: Build 29 | run: cmake --build ${{github.workspace}}/Build/Build_EMSDK --config Release 30 | 31 | - name: Create Deployment Directory 32 | run: cmake -E make_directory ${{github.workspace}}/Build/Build_EMSDK/kain2/Deploy/ 33 | 34 | - name: Copy to Deployment Folder 35 | run: copy ${{github.workspace}}/Build/Build_EMSDK/KAIN2/Game/KAIN2_Web.* ${{github.workspace}}/Build/Build_EMSDK/KAIN2/Deploy/ 36 | 37 | - name: Deploy to FTP 38 | uses: dennisameling/ftp-upload-action@v1.0.10 39 | with: 40 | server: ${{secrets.FTP_SERVER}} 41 | username: ${{secrets.FTP_USER}} 42 | password: ${{secrets.FTP_PASSWORD}} 43 | local_dir: ${{github.workspace}}/Build/Build_EMSDK/kain2/Deploy/ 44 | server_dir: ./ 45 | secure: false 46 | 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Build/ 2 | /KAIN2/Tools/ShiftDecompiler/* 3 | /KAIN2/*.filters 4 | /Build/* 5 | /Build/Build_Emscripten/* 6 | /Build/Build_EMSDK/* 7 | /Build/Build_UWP/* 8 | /Build/Build_Durango/* 9 | /Build/Build_PSP2/* 10 | /Build/Build_NX_Win/* 11 | /Build/Build_NX_Arm/* 12 | /Build/Build_Linux/* 13 | /Build/Build_Win32/* 14 | Emulator/Shaders/D3D9/*.h 15 | Emulator/Shaders/D3D11/*.h 16 | Emulator/Shaders/D3D12/*.h 17 | Emulator/Shaders/Vulkan/*.h 18 | Emulator/Shaders/GXM/*.gxp 19 | Emulator/Shaders/GXM/*.gxp.obj 20 | Emulator/Shaders/GXM/*.sdb 21 | Emulator/Shaders/NVN/*.bnsh 22 | Emulator/Shaders/XED3D/*.h 23 | /Binaries/* 24 | 25 | /.vs/* 26 | *.res 27 | .DS_Store* 28 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "External/SDL"] 2 | path = External/SDL 3 | url = https://github.com/libsdl-org/SDL.git 4 | [submodule "External/libValkyrie"] 5 | path = External/libValkyrie 6 | url = https://github.com/Gh0stBlade/libValkyrie.git 7 | [submodule "External/emsdk"] 8 | path = External/emsdk 9 | url = https://github.com/emscripten-core/emsdk.git 10 | -------------------------------------------------------------------------------- /CMake/EditorVersion.cmake: -------------------------------------------------------------------------------- 1 | set(GIT_COMMIT_COUNT "0") 2 | 3 | find_package(Git) 4 | if(GIT_FOUND) 5 | execute_process( 6 | COMMAND ${GIT_EXECUTABLE} rev-list HEAD --count 7 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 8 | OUTPUT_VARIABLE GIT_COMMIT_COUNT 9 | ERROR_QUIET 10 | OUTPUT_STRIP_TRAILING_WHITESPACE 11 | ) 12 | # message( STATUS "GIT hash: ${GIT_COMMIT_COUNT}") 13 | else() 14 | message(STATUS "GIT not found") 15 | endif() 16 | 17 | string(TIMESTAMP _time_stamp) 18 | 19 | configure_file(../../../../KAIN2/Tools/ShiftEditor/Editor_Version.h.in ../../../KAIN2/Tools/ShiftEditor/Editor_Version.h @ONLY) -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.5) 2 | 3 | project ("Soul Reaver") 4 | 5 | macro(OPTIONAL_DEFINE DEFNAME DESCRIPTION VALUE) 6 | set(${DEFNAME} ${VALUE}) 7 | list(APPEND OPT_DEFINITIONS ${DEFNAME}) 8 | endmacro() 9 | 10 | macro(BuildPreProcessorDefinitions) 11 | foreach(DEF ${OPT_DEFINITIONS}) 12 | if(${${DEF}} STREQUAL "ON") 13 | target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEF}=1) 14 | else() 15 | target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEF}=0) 16 | endif() 17 | list(REMOVE_ITEM OPT_DEFINITIONS ${DEF}) 18 | endforeach() 19 | endmacro() 20 | 21 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMake") 22 | 23 | #Set root path 24 | set(ROOT_DIR ${ROOT_DIR} "${CMAKE_CURRENT_SOURCE_DIR}") 25 | 26 | #Stores root external lib folder. 27 | set(EXTERN_LIB_PATH ${EXTERN_LIB_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/External") 28 | 29 | #Extract target architecture (MSVC only) 30 | if (MSVC OR APPLE OR DEFINED PLATFORM_PSP2) 31 | if(${PLATFORM_DURANGO}) 32 | set(TARGET_ARCH "Durango64") 33 | elseif(${PLATFORM_PSP2}) 34 | set(TARGET_ARCH "PSP2") 35 | elseif(${PLATFORM_NX}) 36 | set(TARGET_ARCH "NX") 37 | elseif(APPLE) 38 | set(TARGET_ARCH "Mac") 39 | elseif(LINUX) 40 | set(TARGET_ARCH "Linux") 41 | elseif(CMAKE_CL_64) 42 | set(TARGET_ARCH "Win64") 43 | else() 44 | set(TARGET_ARCH "Win32") 45 | endif() 46 | endif() 47 | 48 | if (ANDROID) 49 | set(TARGET_ARCH "Androidx86") 50 | endif() 51 | 52 | if (EMSCRIPTEN) 53 | set(TARGET_ARCH "Web") 54 | endif() 55 | 56 | 57 | #We want to be able to group projects in folders 58 | set_property(GLOBAL PROPERTY USE_FOLDERS ON) 59 | add_subdirectory(External) 60 | add_subdirectory(KAIN2) -------------------------------------------------------------------------------- /External/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(libValkyrie) 2 | 3 | if(NOT EMSCRIPTEN AND NOT PLATFORM_NX AND NOT PLATFORM_NX_ARM) 4 | if(ANDROID) 5 | add_subdirectory(SDL EXCLUDE_FROM_ALL) 6 | else() 7 | add_subdirectory(SDL) 8 | endif() 9 | 10 | if(NOT ANDROID) 11 | set_target_properties(SDL2 PROPERTIES FOLDER "Libs/3rdParty/SDL2") 12 | set_target_properties(SDL2-static PROPERTIES FOLDER "Libs/3rdParty/SDL2") 13 | 14 | if(NOT WINDOWS_STORE) 15 | set_target_properties(SDL2main PROPERTIES FOLDER "Libs/3rdParty/SDL2") 16 | endif() 17 | set_target_properties(SDL2_test PROPERTIES FOLDER "Libs/3rdParty/SDL2") 18 | set_target_properties(uninstall PROPERTIES FOLDER "Libs/3rdParty/SDL2") 19 | set_target_properties(sdl_headers_copy PROPERTIES FOLDER "Libs/3rdParty/SDL2") 20 | 21 | set_target_properties(SDL2 PROPERTIES EXCLUDE_FROM_ALL True) 22 | set_target_properties(SDL2_test PROPERTIES EXCLUDE_FROM_ALL True) 23 | set_target_properties(uninstall PROPERTIES EXCLUDE_FROM_ALL True) 24 | 25 | set_target_properties(SDL2 PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True) 26 | set_target_properties(SDL2_test PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True) 27 | set_target_properties(uninstall PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True) 28 | endif() 29 | endif() -------------------------------------------------------------------------------- /KAIN2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(KAIN2_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) 2 | add_subdirectory(Game) 3 | if(NOT UNIX AND NOT EMSCRIPTEN AND NOT ANDROID AND NOT PLATFORM_PSP2 AND NOT PLATFORM_NX AND NOT PLATFORM_NX_ARM AND NOT APPLE) 4 | #add_subdirectory(Editor) 5 | add_subdirectory(Tools) 6 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/BSP.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | 3 | #if 0 4 | // @fixme in spite of matching better than the version below, this code somehow renders all debug menu areas inaccessible. 5 | void SBSP_IntroduceInstances(struct _Terrain* terrain, int unitID) // Matching - 100% 6 | { 7 | int i; 8 | struct Intro* intro; 9 | 10 | for (intro = terrain->introList, i = terrain->numIntros; i != 0; i--, intro++) 11 | { 12 | if (!(intro->flags & 0x4008)) 13 | { 14 | INSTANCE_IntroduceInstance(intro, unitID); 15 | } 16 | } 17 | } 18 | #else 19 | void SBSP_IntroduceInstances(struct _Terrain* terrain, int unitID) 20 | { 21 | int i; 22 | struct Intro* intro; 23 | 24 | i = terrain->numIntros; 25 | intro = terrain->introList; 26 | 27 | if (i-- != 0) 28 | { 29 | if (!(intro[i].flags & 0x4008)) 30 | { 31 | INSTANCE_IntroduceInstance(&intro[0], unitID); 32 | } 33 | } 34 | } 35 | #endif 36 | 37 | void SBSP_IntroduceInstancesAndLights(struct _Terrain* terrain, struct _CameraCore_Type* cameraCore, struct LightInfo* lightInfo, int unitID) // Matching - 100% 38 | { 39 | SBSP_IntroduceInstances(terrain, unitID); 40 | } -------------------------------------------------------------------------------- /KAIN2/Game/BSP.H: -------------------------------------------------------------------------------- 1 | #ifndef BSP_H 2 | #define BSP_H 3 | 4 | #include "CORE.H" 5 | 6 | struct _Sphere_noSq 7 | { 8 | struct _Position position; // size=6, offset=0 9 | unsigned short radius; // size=0, offset=6 10 | }; 11 | 12 | struct _BoundingBox 13 | { 14 | short minX; // size=0, offset=0 15 | short minY; // size=0, offset=2 16 | short minZ; // size=0, offset=4 17 | short maxX; // size=0, offset=6 18 | short maxY; // size=0, offset=8 19 | short maxZ; // size=0, offset=10 20 | }; 21 | 22 | struct _BSPNode 23 | { 24 | struct _Sphere_noSq sphere; // size=8, offset=0 25 | short a; // size=0, offset=8 26 | short b; // size=0, offset=10 27 | short c; // size=0, offset=12 28 | short flags; // size=0, offset=14 29 | long d; // size=0, offset=16 30 | void* front; // size=0, offset=20 31 | void* back; // size=0, offset=24 32 | struct _Sphere_noSq spectralSphere; // size=8, offset=28 33 | short front_spectral_error; // size=0, offset=36 34 | short back_spectral_error; // size=0, offset=38 35 | short front_material_error; // size=0, offset=40 36 | short back_material_error; // size=0, offset=42 37 | }; 38 | 39 | struct _BSPLeaf 40 | { 41 | struct _Sphere_noSq sphere; // size=8, offset=0 42 | struct _TFace* faceList; // size=12, offset=8 43 | short numFaces; // size=0, offset=12 44 | short flags; // size=0, offset=14 45 | struct _BoundingBox box; // size=12, offset=16 46 | struct _BoundingBox spectralBox; // size=12, offset=28 47 | struct _Sphere_noSq spectralSphere; // size=8, offset=40 48 | }; 49 | 50 | struct BSPTree 51 | { 52 | struct _BSPNode* bspRoot; // size=44, offset=0 53 | struct _BSPLeaf* startLeaves; // size=48, offset=4 54 | struct _BSPLeaf* endLeaves; // size=48, offset=8 55 | struct _Position globalOffset; // size=6, offset=12 56 | short flags; // size=0, offset=18 57 | struct _Position localOffset; // size=6, offset=20 58 | short ID; // size=0, offset=26 59 | long splineID; // size=0, offset=28 60 | struct _Instance* instanceSpline; // size=668, offset=32 61 | }; 62 | 63 | struct _SBSPLeaf 64 | { 65 | struct _Sphere_noSq sphere; // size=8, offset=0 66 | struct Intro** introList; // size=76, offset=8 67 | short numIntros; // size=0, offset=12 68 | short flags; // size=0, offset=14 69 | struct CDLight** lightList; // size=24, offset=16 70 | short numLights; // size=0, offset=20 71 | short pad; // size=0, offset=22 72 | }; 73 | 74 | struct BSPScratch 75 | { 76 | //struct MATRIX vv[2]; // size=64, offset=0 77 | MATRIX vv[2]; // size=64, offset=0 78 | //struct MATRIX camMatrix; // size=32, offset=64 79 | MATRIX camMatrix; // size=32, offset=64 80 | //struct VECTOR dpv[3]; // size=48, offset=96 81 | VECTOR dpv[3]; // size=48, offset=96 82 | long d[6]; // size=24, offset=144 83 | //struct MATRIX boundMatrix; // size=32, offset=168 84 | MATRIX boundMatrix; // size=32, offset=168 85 | long in_spectral; // size=0, offset=200 86 | }; 87 | 88 | typedef struct _SBSPLeaf SBSPLeaf; 89 | 90 | extern void SBSP_IntroduceInstances(struct _Terrain* terrain, int unitID); // 0x8003DF34 91 | extern void SBSP_IntroduceInstancesAndLights(struct _Terrain* terrain, struct _CameraCore_Type* cameraCore, struct LightInfo* lightInfo, int unitID); // 0x8003DF98 92 | 93 | #endif 94 | -------------------------------------------------------------------------------- /KAIN2/Game/CINEMA/CINEPSX.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "Game/CINEMA/CINEPSX.H" 3 | #include "Game/STREAM.H" 4 | #include "Game/STRMLOAD.H" 5 | #include "Game/PSX/MAIN.H" 6 | #include "Game/OVERLAYS/CINEMAX.H" 7 | #include "Game/GAMEPAD.H" 8 | 9 | #include 10 | 11 | static struct cinema_fn_table_t* the_cine_table; // offset 0x800CAD90 12 | static struct _ObjectTracker* the_cine_tracker; // offset 0x800CAD94 13 | int StCdIntrFlag; 14 | 15 | int CINE_CDIntrQuery() 16 | { 17 | if (StCdIntrFlag != 0) 18 | { 19 | StCdIntrFlag = 0; 20 | return 1; 21 | } 22 | 23 | return 0; 24 | } 25 | 26 | unsigned short CINE_Pad(int pad) 27 | { 28 | if (pad != 0) 29 | { 30 | return readGPBuffer2.data.pad; 31 | } 32 | else 33 | { 34 | return readGPBuffer1.data.pad; 35 | } 36 | } 37 | 38 | void CINE_Play(char *strfile, unsigned short mask, int buffers) 39 | { 40 | if (the_cine_table != NULL) 41 | { 42 | #if defined(PSXPC_VERSION) 43 | if (!strcmp(the_cine_table->versionID, __DATE__)) 44 | #else 45 | if (the_cine_table->versionID == __DATE__) 46 | #endif 47 | { 48 | the_cine_table->play(strfile, mask, buffers); 49 | } 50 | else 51 | { 52 | printf("CINEMA : Version number is wrong. Not playing the cinematics.\n"); 53 | } 54 | } 55 | } 56 | 57 | #if defined(PSXPC_VERSION) 58 | void CINE_PatchTable() 59 | { 60 | the_cine_table->versionID = __DATE__; 61 | the_cine_table->play = CINEMAX_Play; 62 | } 63 | 64 | #endif 65 | 66 | int CINE_Load() 67 | { 68 | struct _ObjectTracker* tracker; 69 | int attempts; 70 | 71 | attempts = 0; 72 | tracker = STREAM_GetObjectTracker("cinemax"); 73 | 74 | do 75 | { 76 | if (tracker->objectStatus == 2) 77 | { 78 | break; 79 | } 80 | 81 | attempts++; 82 | STREAM_PollLoadQueue(); 83 | VSync(0); 84 | } while (attempts < 400); 85 | 86 | if (attempts < 400) 87 | { 88 | the_cine_tracker = tracker; 89 | the_cine_table = (struct cinema_fn_table_t*)tracker->object->relocModule; 90 | 91 | #if defined(PSXPC_VERSION) 92 | CINE_PatchTable(); 93 | #endif 94 | 95 | return 1; 96 | } 97 | else 98 | { 99 | printf("cinema timeout\n"); 100 | } 101 | 102 | return 0; 103 | } 104 | 105 | int CINE_Loaded() 106 | { 107 | return the_cine_tracker != NULL; 108 | } 109 | 110 | void CINE_Unload() 111 | { 112 | VSyncCallback(VblTick); 113 | 114 | the_cine_table = NULL; 115 | 116 | if (the_cine_tracker != NULL) 117 | { 118 | STREAM_DumpObject(the_cine_tracker); 119 | 120 | the_cine_tracker = NULL; 121 | } 122 | } 123 | 124 | void CINE_PlayIngame(int number) 125 | { 126 | char movie_name[24]; 127 | 128 | sprintf(movie_name, "\\CHRONO%d.STR;1", number); 129 | 130 | if (CINE_Load() != 0) 131 | { 132 | CINE_Play(movie_name, 0x1, 2); 133 | 134 | CINE_Unload(); 135 | } 136 | } -------------------------------------------------------------------------------- /KAIN2/Game/CINEMA/CINEPSX.H: -------------------------------------------------------------------------------- 1 | #ifndef CINEPSX_H 2 | #define CINEPSX_H 3 | 4 | struct cinema_fn_table_t // hashcode: 0xBFD79C7E (dec: -1076388738) 5 | { 6 | int (*play)(char* strfile, unsigned short mask, int buffers); // size=0, offset=0 7 | char* versionID; // size=0, offset=4 8 | }; 9 | 10 | 11 | extern int CINE_CDIntrQuery(); // 0x800B777C 12 | 13 | extern unsigned short CINE_Pad(int pad); // 0x800B77A4 14 | 15 | extern void CINE_Play(char *strfile, unsigned short mask, int buffers); // 0x800B77C8 16 | 17 | extern int CINE_Load(); // 0x800B782C 18 | 19 | extern int CINE_Loaded(); // 0x800B78D0 20 | 21 | extern void CINE_Unload(); // 0x800B78E0 22 | 23 | extern void CINE_PlayIngame(int number); // 0x800B7928 24 | 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /KAIN2/Game/FONT.H: -------------------------------------------------------------------------------- 1 | #ifndef FONT_H 2 | #define FONT_H 3 | 4 | #include "G2/QUATG2.H" 5 | #include "CORE.H" 6 | 7 | typedef struct FontChar // hashcode: 0x5A2F9F5B (dec: 1513070427) 8 | { 9 | short x; // size=0, offset=0 10 | short y; // size=0, offset=2 11 | char c; // size=0, offset=4 12 | char color; // size=0, offset=5 13 | } FontChar; 14 | 15 | struct FontTracker // hashcode: 0xE32D3F0A (dec: -483574006) 16 | { 17 | struct FontChar font_buffer[256]; // size=1536, offset=0 18 | long font_xpos; // size=0, offset=1536 19 | long font_ypos; // size=0, offset=1540 20 | long font_buffIndex; // size=0, offset=1544 21 | short font_tpage; // size=0, offset=1548 22 | short font_clut; // size=0, offset=1550 23 | short font_vramU; // size=0, offset=1552 24 | short font_vramV; // size=0, offset=1554 25 | short font_width; // size=0, offset=1556 26 | short sprite_sort_push; // size=0, offset=1558 27 | short font_vramX; // size=0, offset=1560 28 | short font_vramY; // size=0, offset=1562 29 | char color_global; // size=0, offset=1564 30 | char color_local; // size=0, offset=1565 31 | }; 32 | 33 | typedef struct font_color_t // hashcode: 0x5F515B79 (dec: 1599167353) 34 | { 35 | int r; // size=0, offset=0 36 | int g; // size=0, offset=4 37 | int b; // size=0, offset=8 38 | } font_color_t; 39 | 40 | typedef struct FontPos // hashcode: 0x0084D7DD (dec: 8706013) 41 | { 42 | char x; // size=0, offset=0 43 | char y; // size=0, offset=1 44 | char w; // size=0, offset=2 45 | char h; // size=0, offset=3 46 | } FontPos; 47 | 48 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 49 | extern "C" { 50 | #endif 51 | 52 | extern unsigned short SpecialFogClut; 53 | extern FontPos fontPos[79]; 54 | extern char charMap[92][3]; 55 | extern struct Object* fontsObject; 56 | extern struct _BlockVramEntry* FONT_vramBlock; // offset 0x800D05E4 57 | extern struct FontTracker fontTracker; 58 | 59 | extern void FONT_MakeSpecialFogClut(int x, int y); // 0x8002CB74 60 | extern void FONT_Init(); // 0x8002CBF8 61 | extern void FONT_ReloadFont(); // 0x8002CD18 62 | extern void FONT_DrawChar(struct FontChar *fontChar); // 0x8002CD7C 63 | extern long FONT_Get2DImageIndex(unsigned char c); // 0x8002CDB0 64 | extern void drawChar2DPoly(long fpi, long x, long y); // 0x8002CDC8 65 | extern void FONT_DrawChar2D(unsigned char c, long x, long y); // 0x8002CFC8 66 | extern long FONT_CharSpacing(char c, long fontXSize); // 0x8002D1FC 67 | extern void FONT_AddCharToBuffer(char c, long x, long y); // 0x8002D340 68 | extern void FONT_Print(const char *fmt, ...); // 0x8002D3AC 69 | extern void FONT_Print2(const char *fmt, ...); // 0x8002D43C 70 | extern int FONT_GetStringWidth(char *str); // 0x8002D48C 71 | extern void FONT_Flush(); // 0x8002D500 72 | extern void FONT_SetCursor(short x, short y); // 0x8002D590 73 | extern void FONT_VaReallyPrint(const char *fmt, va_list ap); // 0x8002D5B0 74 | extern void FONT_FontPrintCentered(char *text, long y); // 0x8002D740 75 | extern void FONT_SetColorIndex(int color); // 0x8002D798 76 | extern void FONT_SetColorIndexCol(int color, int r, int g, int b); // 0x8002D7A4 77 | 78 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 79 | } 80 | #endif 81 | 82 | #endif 83 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/ANMDECMP.H: -------------------------------------------------------------------------------- 1 | #ifndef ANMDECMP_H 2 | #define ANMDECMP_H 3 | 4 | #include "Game/GEX2.H" 5 | #include "ANIMG2.H" 6 | 7 | extern void _G2Anim_DecompressChannel_AdaptiveDelta(struct _G2AnimDecompressChannelInfo_Type *dcInfo, struct _G2AnimChanStatus_Type *status); // 0x800900F4 8 | extern void _G2Anim_DecompressChannel_Linear(struct _G2AnimDecompressChannelInfo_Type *dcInfo, struct _G2AnimChanStatus_Type *status); // 0x80090220 9 | extern void _G2Anim_InitializeChannel_AdaptiveDelta(struct _G2AnimDecompressChannelInfo_Type *dcInfo, struct _G2AnimChanStatus_Type *status); // 0x800902B4 10 | extern void _G2Anim_InitializeChannel_Linear(struct _G2AnimDecompressChannelInfo_Type *dcInfo, struct _G2AnimChanStatus_Type *status); // 0x800902EC 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/ANMINTRP.H: -------------------------------------------------------------------------------- 1 | #ifndef ANMINTRP_H 2 | #define ANMINTRP_H 3 | 4 | extern struct _G2AnimSegValue_Type _segValues[]; 5 | 6 | extern void G2AnimSection_InterpToKeylistAtTime(struct _G2AnimSection_Type *section, struct _G2AnimKeylist_Type *keylist, int keylistID, short targetTime, int duration); // 0x800920DC 7 | extern void _G2AnimSection_UpdateStoredFrameFromQuat(struct _G2AnimSection_Type *section); // 0x800923C0 8 | extern void _G2AnimSection_InterpStateToQuat(struct _G2AnimSection_Type *section); // 0x800925B0 9 | extern void _G2AnimSection_SegValueToQuat(struct _G2AnimSection_Type *section, int zeroOne); // 0x80092740 10 | extern struct _G2AnimInterpStateBlock_Type * _G2Anim_AllocateInterpStateBlockList(struct _G2AnimSection_Type *section); // 0x800928CC 11 | extern void _G2Anim_FreeInterpStateBlockList(struct _G2AnimInterpStateBlock_Type *block); // 0x80092964 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/INSTNCG2.H: -------------------------------------------------------------------------------- 1 | #ifndef INSTNCG2_H 2 | #define INSTNCG2_H 3 | 4 | extern void G2Instance_BuildTransformsForList(struct _Instance *listHead); // 0x80094D90 5 | extern void G2Instance_BuildTransforms(struct _Instance *instance); // 0x80094F0C 6 | extern void G2Instance_RebuildTransforms(struct _Instance *instance); // 0x80094F68 7 | extern struct _G2AnimKeylist_Type * G2Instance_GetKeylist(struct _Instance *instance, int id); // 0x80094FC4 8 | extern void _G2Instance_RebuildAnimatedTransforms(struct _Instance *instance); // 0x80094FE4 9 | extern void G2Instance_ClearMatrices(struct _Instance *instance); // 0x80095418 10 | extern void _G2Instance_BuildAnimatedTransforms(struct _Instance *instance); // 0x8009546C 11 | extern void _G2Instance_RebuildNonAnimatedTransforms(struct _Instance *instance); // 0x80095528 12 | extern void _G2Instance_BuildDeactivatedTransforms(struct _Instance *instance); // 0x800957B4 13 | extern void _G2Instance_BuildNonAnimatedTransforms(struct _Instance *instance); // 0x80095934 14 | extern void _G2Instance_BuildFacadeTransforms(struct _Instance *instance, struct _Segment *segment, MATRIX *segMatrix, MATRIX *matrixPool, long scale_flag); // 0x800959F0 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/MAING2.C: -------------------------------------------------------------------------------- 1 | #include "../CORE.H" 2 | #include "MAING2.H" 3 | 4 | enum _G2Bool_Enum MainG2_InitEngine(void* appData, unsigned int screenWidth, unsigned int screenHeight, char* filesystemName) // Matching - 100% 5 | { 6 | return (enum _G2Bool_Enum)!G2FALSE; 7 | } 8 | 9 | void MainG2_ShutDownEngine(void* appData) 10 | { 11 | } 12 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/MAING2.H: -------------------------------------------------------------------------------- 1 | #ifndef MAING2_H 2 | #define MAING2_H 3 | 4 | struct _PVertex 5 | { 6 | short x; // size=0, offset=0 7 | short y; // size=0, offset=2 8 | long otz; // size=0, offset=4 9 | }; 10 | 11 | struct _VertexPool 12 | { 13 | struct _PVertex vertex[528]; // size=4224, offset=0 14 | //struct CVECTOR color[528]; // size=2112, offset=4224 15 | CVECTOR color[528]; // size=2112, offset=4224 16 | }; 17 | 18 | extern enum _G2Bool_Enum MainG2_InitEngine(void *appData, unsigned int screenWidth, unsigned int screenHeight, char *filesystemName); // 0x80095D8C 19 | extern void MainG2_ShutDownEngine(void *appData); // 0x80095D94 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/POOLMMG2.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "Game/G2/POOLMMG2.H" 3 | #include "Game/MEMPACK.H" 4 | 5 | void G2PoolMem_InitPool(void *voidPool, int blockCount, int blockSize) // Matching - 100% 6 | { 7 | ((struct _G2PoolMemPool_Type*)voidPool)->blockPool = (struct _G2PoolMem_Type*)MEMPACK_Malloc(blockCount * blockSize, 0x19); 8 | ((struct _G2PoolMemPool_Type*)voidPool)->stack = (unsigned short*)MEMPACK_Malloc(blockCount * 4, 0x19); 9 | ((struct _G2PoolMemPool_Type*)voidPool)->blockSize = blockSize; 10 | ((struct _G2PoolMemPool_Type*)voidPool)->stackSize = blockCount; 11 | 12 | G2PoolMem_ResetPool(voidPool); 13 | } 14 | 15 | void G2PoolMem_ResetPool(void* voidPool) // Matching - 100% 16 | { 17 | struct _G2PoolMemPool_Type* pool; 18 | int blockIndex; 19 | 20 | pool = (struct _G2PoolMemPool_Type*)voidPool; 21 | 22 | blockIndex = 0; 23 | pool->stackTop = 0; 24 | 25 | if (pool->stackSize != 0) 26 | { 27 | do 28 | { 29 | 30 | pool->stack[blockIndex++] = blockIndex; 31 | 32 | } while (blockIndex < pool->stackSize); 33 | } 34 | } 35 | 36 | void* G2PoolMem_Allocate(void* voidPool) // Matching - 100% 37 | { 38 | int blockIndex; 39 | 40 | if (((struct _G2PoolMemPool_Type*)voidPool)->stackTop >= ((struct _G2PoolMemPool_Type*)voidPool)->stackSize) 41 | { 42 | return NULL; 43 | } 44 | 45 | blockIndex = ((struct _G2PoolMemPool_Type*)voidPool)->stack[((struct _G2PoolMemPool_Type*)voidPool)->stackTop]; 46 | ((struct _G2PoolMemPool_Type*)voidPool)->stackTop++; 47 | return (char*)(((struct _G2PoolMemPool_Type*)voidPool)->blockPool) + (((struct _G2PoolMemPool_Type*)voidPool)->blockSize * blockIndex); 48 | } 49 | 50 | void G2PoolMem_Free(void *voidPool, void *block) // Matching - 100% 51 | { 52 | int blockIndex; 53 | 54 | blockIndex = (((char*)block) - ((char*)((struct _G2PoolMemPool_Type*)voidPool)->blockPool)) / ((struct _G2PoolMemPool_Type*)voidPool)->blockSize; 55 | 56 | ((struct _G2PoolMemPool_Type*)voidPool)->stack[--((struct _G2PoolMemPool_Type*)voidPool)->stackTop] = blockIndex; 57 | } -------------------------------------------------------------------------------- /KAIN2/Game/G2/POOLMMG2.H: -------------------------------------------------------------------------------- 1 | #ifndef POOLMMG2_H 2 | #define POOLMMG2_H 3 | 4 | struct _G2PoolMemPool_Type 5 | { 6 | unsigned short blockSize; // size=0, offset=0 7 | unsigned short stackTop; // size=0, offset=2 8 | unsigned short stackSize; // size=0, offset=4 9 | unsigned short* stack; // size=0, offset=8 10 | struct _G2PoolMem_Type* blockPool; // size=0, offset=12 11 | }; 12 | 13 | extern void G2PoolMem_InitPool(void *voidPool, int blockCount, int blockSize); // 0x80095D9C 14 | extern void G2PoolMem_ResetPool(void *voidPool); // 0x80095E08 15 | extern void * G2PoolMem_Allocate(void *voidPool); // 0x80095E44 16 | extern void G2PoolMem_Free(void *voidPool, void *block); // 0x80095EA0 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/QUATG2.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "QUATG2.H" 3 | #include "Game/COLLIDE.H" 4 | #include "Game/MATH3D.H" 5 | #include "Game/PSX/COLLIDES.H" 6 | 7 | #define EulSafe "\000\001\002\000" 8 | #define EulNext "\001\002\000\001" 9 | #define EulFrmR 1 10 | #define EulParOdd 1 11 | 12 | void G2Quat_ToEuler(struct _G2Quat_Type* quat, struct _G2EulerAngles_Type* euler, int order) // Matching - 100% 13 | { 14 | struct _G2Matrix_Type tempMatrix; 15 | 16 | G2Quat_ToMatrix_S(quat, &tempMatrix); 17 | 18 | G2EulerAngles_FromMatrix(euler, &tempMatrix, order); 19 | } 20 | 21 | void G2EulerAngles_FromMatrix(struct _G2EulerAngles_Type* euler, struct _G2Matrix_Type* matrix, long order) // Matching - 99.82% 22 | { 23 | long i; 24 | long j; 25 | long k; 26 | long n; 27 | long s; 28 | long f; 29 | long g; // not from SYMDUMP 30 | 31 | unsigned int o; 32 | o = order; 33 | g = o & 1; 34 | o >>= 1; 35 | i = o & 1; 36 | o >>= 1; 37 | f = o & 1; 38 | o >>= 1; 39 | n = EulSafe[o & 3]; 40 | s = EulNext[n + f]; 41 | k = EulNext[n + 1 - f]; 42 | 43 | if (i == 1) 44 | { 45 | long sy; 46 | i = matrix->rotScale[n][s]; 47 | j = matrix->rotScale[n][k]; 48 | sy = MATH3D_FastSqrt((i * i + j * j) >> 12); 49 | if (sy > 16) 50 | { 51 | euler->x = (short)ratan2(matrix->rotScale[n][s], matrix->rotScale[n][k]); 52 | euler->y = (short)ratan2(sy, matrix->rotScale[n][n]); 53 | euler->z = (short)ratan2(matrix->rotScale[s][n], -matrix->rotScale[k][n]); 54 | } 55 | else 56 | { 57 | euler->x = (short)ratan2(-matrix->rotScale[s][k], matrix->rotScale[s][s]); 58 | euler->y = (short)ratan2(sy, matrix->rotScale[n][n]); 59 | euler->z = 0; 60 | } 61 | } 62 | else 63 | { 64 | long cy; 65 | i = matrix->rotScale[n][n]; 66 | j = matrix->rotScale[s][n]; 67 | cy = MATH3D_FastSqrt((i * i + j * j) >> 12); 68 | if (cy > 16) 69 | { 70 | euler->x = (short)ratan2(matrix->rotScale[k][s], matrix->rotScale[k][k]); 71 | euler->y = (short)ratan2(-matrix->rotScale[k][n], cy); 72 | euler->z = (short)ratan2(matrix->rotScale[s][n], matrix->rotScale[n][n]); 73 | } 74 | else 75 | { 76 | euler->x = (short)ratan2(-matrix->rotScale[s][k], matrix->rotScale[s][s]); 77 | euler->y = (short)ratan2(-matrix->rotScale[k][n], cy); 78 | euler->z = 0; 79 | } 80 | } 81 | 82 | if (f == EulParOdd) 83 | { 84 | euler->x = -euler->x; 85 | euler->y = -euler->y; 86 | euler->z = -euler->z; 87 | } 88 | if (g == EulFrmR) 89 | { 90 | short t; 91 | t = euler->x; 92 | euler->x = euler->z; 93 | euler->z = t; 94 | } 95 | euler->order = (short)order; 96 | } 97 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/QUATG2.H: -------------------------------------------------------------------------------- 1 | #ifndef QUATG2_H 2 | #define QUATG2_H 3 | 4 | extern void G2Quat_ToEuler(struct _G2Quat_Type *quat, struct _G2EulerAngles_Type *euler, int order); // 0x80095ED8 5 | extern void G2EulerAngles_FromMatrix(struct _G2EulerAngles_Type *euler, struct _G2Matrix_Type *matrix, long order); // 0x80095F1C 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/TIMERG2.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "TIMERG2.H" 3 | 4 | short G2Timer_GetFrameTime() // Matching - 100% 5 | { 6 | short atime; 7 | 8 | if (gameTrackerX.timeMult == 0) 9 | { 10 | atime = 100; 11 | } 12 | else 13 | { 14 | atime = (short)((gameTrackerX.timeMult * 100) >> 12); 15 | } 16 | 17 | if (atime <= 0) 18 | { 19 | atime = 1; 20 | } 21 | 22 | return atime; 23 | } 24 | -------------------------------------------------------------------------------- /KAIN2/Game/G2/TIMERG2.H: -------------------------------------------------------------------------------- 1 | #ifndef TIMERG2_H 2 | #define TIMERG2_H 3 | 4 | extern short G2Timer_GetFrameTime(); // 0x80096280 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /KAIN2/Game/GENERIC.H: -------------------------------------------------------------------------------- 1 | #ifndef GENERIC_H 2 | #define GENERIC_H 3 | 4 | struct evAnimationInstanceSwitchData // hashcode: 0xEE7F2A6C (dec: -293655956) 5 | { 6 | struct _Instance* instance; // size=616, offset=0 7 | int anim; // size=0, offset=4 8 | int frame; // size=0, offset=8 9 | int frames; // size=0, offset=12 10 | int mode; // size=0, offset=16 11 | }; 12 | 13 | struct evControlSaveDataData // hashcode: 0xA76A68A9 (dec: -1486198615) 14 | { 15 | long length; // size=0, offset=0 16 | void* data; // size=0, offset=4 17 | }; 18 | 19 | struct GenericTune // hashcode: 0x1B714C34 (dec: 460409908) 20 | { 21 | long flags; // size=0, offset=0 22 | void* shatterData; // size=0, offset=4 23 | }; 24 | 25 | extern void GenericInit(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8003E194 26 | extern void GenericCollide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8003E2D0 27 | extern void GenericProcess(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8003E2D8 28 | extern unsigned long GenericQuery(struct _Instance *instance, unsigned long query); // 0x8003E32C 29 | extern void GenericMessage(struct _Instance *instance, unsigned long message, unsigned long data); // 0x8003E4A4 30 | extern void GenericRelocateTune(struct Object *object, long offset); // 0x8003E620 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /KAIN2/Game/INLINE_C_EXT.H: -------------------------------------------------------------------------------- 1 | #ifndef INLINE_C_EXT_H 2 | #define INLINE_C_EXT_H 3 | 4 | #if defined(PSXPC_VERSION) 5 | #define gte_ldlvnlsv( r0 ) \ 6 | ((int*)&MAC1)[0] = ((unsigned short*)r0)[0]; \ 7 | ((int*)&MAC2)[0] = ((unsigned short*)r0)[1]; \ 8 | ((int*)&MAC3)[0] = ((unsigned short*)r0)[2]; \ 9 | 10 | #define gte_stlvnlsv( r0 ) \ 11 | ((unsigned short*)r0)[0] = ((int*)&MAC1)[0]; \ 12 | ((unsigned short*)r0)[1] = ((int*)&MAC2)[0]; \ 13 | ((unsigned short*)r0)[2] = ((int*)&MAC3)[0]; \ 14 | 15 | #define gte_ldv0sv( r0 ) \ 16 | ((int*)&R11)[0] = ((unsigned short*)r0)[0] | ((unsigned short*)r0)[1]; \ 17 | ((int*)&R13)[0] = ((unsigned short*)r0)[2];\ 18 | 19 | #define gte_ldv2_ext( r0 ) \ 20 | ((int*)&R31)[0] = ((int*)r0)[0]; \ 21 | ((int*)&R33)[0] = ((int*)r0)[1]; \ 22 | 23 | #define gte_ldv3_ext( r0 ) \ 24 | ((int*)&R11)[0] = ((int*)r0)[0]; \ 25 | ((int*)&R13)[0] = ((int*)r0)[1]; \ 26 | ((int*)&R22)[0] = ((int*)r0)[2]; \ 27 | 28 | #define gte_ldsv_ext( r0, r1, r2 ) \ 29 | IR1 = r0; \ 30 | IR2 = r1; \ 31 | IR3 = r2; \ 32 | 33 | #define gte_stsv_ext( r0, r1, r2 ) \ 34 | r0 = MAC1; \ 35 | r1 = MAC2; \ 36 | r2 = MAC3; \ 37 | 38 | #elif defined(PSX_VERSION) 39 | #define gte_ldlvnlsv( r0 ) __asm__ volatile ( \ 40 | "lhu $12, 0( %0 );" \ 41 | "lhu $13, 2 ( %0 );" \ 42 | "lhu $14, 4 ( %0 );" \ 43 | "mtc2 $12, $25;" \ 44 | "mtc2 $13, $26;" \ 45 | "mtc2 $14, $27" \ 46 | : \ 47 | : "r"( r0 ) \ 48 | : "$12", "$13", "$14" ) 49 | 50 | 51 | #define gte_stlvnlsv( r0 ) __asm__ volatile ( \ 52 | "mfc2 $12, $25;" \ 53 | "mfc2 $13, $26;" \ 54 | "mfc2 $14, $27;" \ 55 | "sh $12, 0( %0 );" \ 56 | "sh $13, 2( %0 );" \ 57 | "sh $14, 4( %0 )" \ 58 | : \ 59 | : "r"( r0 ) \ 60 | : "$12", "$13", "$14", "memory" ) 61 | 62 | #define gte_ldv0sv( r0 ) __asm__ volatile ( \ 63 | "lhu $12, 0( %0 );" \ 64 | "lhu $13, 2( %0 );" \ 65 | "lhu $14, 4( %0 );" \ 66 | "or $12, $13;" \ 67 | "ctc2 $12, $0;" \ 68 | "ctc2 $14, $1;" \ 69 | : \ 70 | : "r"( r0 ) \ 71 | : "$12", "$13", "$14" ) 72 | 73 | #define gte_ldv2_ext( r0 ) __asm__ volatile ( \ 74 | "lw $12, 0( %0 );" \ 75 | "lw $13, 4( %0 );" \ 76 | "ctc2 $12, $3;" \ 77 | "ctc2 $13, $4;" \ 78 | : \ 79 | : "r"( r0 ) \ 80 | : "$12", "$13" ) 81 | 82 | #define gte_ldv3_ext( r0 ) __asm__ volatile ( \ 83 | "lw $12, 0( %0 );" \ 84 | "lw $13, 4( %0 );" \ 85 | "lw $14, 8( %0 );" \ 86 | "ctc2 $12, $0;" \ 87 | "ctc2 $13, $1;" \ 88 | "ctc2 $14, $2;" \ 89 | : \ 90 | : "r"( r0 ) \ 91 | : "$12", "$13", "$14" ) 92 | 93 | #define gte_ldsv_ext( r0, r1, r2 ) __asm__ volatile ( \ 94 | "mtc2 %0, $9;" \ 95 | "mtc2 %1, $10;" \ 96 | "mtc2 %2, $11;" \ 97 | : \ 98 | : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) 99 | 100 | #define gte_stsv_ext( r0, r1, r2 ) __asm__ volatile ( \ 101 | "mfc2 %0, $25;" \ 102 | "mfc2 %1, $26;" \ 103 | "mfc2 %2, $27;" \ 104 | : \ 105 | : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) 106 | #endif 107 | 108 | #endif -------------------------------------------------------------------------------- /KAIN2/Game/KAIN2.ICO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Game/KAIN2.ICO -------------------------------------------------------------------------------- /KAIN2/Game/KAIN2.RC: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "KAIN2.ICO" -------------------------------------------------------------------------------- /KAIN2/Game/LIGHT3D.H: -------------------------------------------------------------------------------- 1 | #ifndef LIGHT3D_H 2 | #define LIGHT3D_H 3 | 4 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 5 | extern "C" { 6 | #endif 7 | 8 | #include "CORE.H" 9 | 10 | struct CDLight 11 | { 12 | struct NodeType node; // size=8, offset=0 13 | unsigned char r; // size=0, offset=8 14 | unsigned char g; // size=0, offset=9 15 | unsigned char b; // size=0, offset=10 16 | unsigned char flags; // size=0, offset=11 17 | struct _Sphere sphere; // size=12, offset=12 18 | }; 19 | 20 | extern void LIGHT_GetLightMatrix(struct _Instance *instance, struct Level *level, MATRIX *lightM, MATRIX *colorM); // 0x80035824 21 | extern void LIGHT_PresetInstanceLight(struct _Instance *instance, short attenuate, MATRIX *lm); // 0x80035B98 22 | extern void LIGHT_GetAmbient(struct _ColorType *color, struct _Instance *instance); // 0x80035D14 23 | extern void LIGHT_CalcLightValue(struct _TFace *tface, struct _Instance *instance, struct _Terrain *terrain); // 0x80035D44 24 | extern void LIGHT_SetAmbientInstance(struct _Instance *instance, struct Level *level); // 0x80036498 25 | extern void LIGHT_SetMatrixForLightGroupInstance(struct _Instance *instance, struct Level *level); // 0x800364C8 26 | extern void LIGHT_DrawShadow(MATRIX *wcTransform, struct _Instance *instance, struct _PrimPool *primPool, unsigned int **ot); // 0x80036644 27 | extern void LIGHT_CalcShadowPositions(struct GameTracker *gameTracker); // 0x80036928 28 | extern void LIGHT_Restore(struct LightInfo *lightInfo); // 0x80036C28 29 | extern void LIGHT_CalcDQPTable(struct Level *level); // 0x80036C30 30 | 31 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 32 | } 33 | #endif 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /KAIN2/Game/LIST.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | #include "LIST.H" 3 | 4 | void LIST_InsertFunc(struct NodeType* list, struct NodeType* node) // Matching - 100% 5 | { 6 | node->prev = list; 7 | 8 | node->next = list->next; 9 | 10 | if (list->next != NULL) 11 | { 12 | list->next->prev = node; 13 | } 14 | 15 | list->next = node; 16 | } 17 | 18 | void LIST_DeleteFunc(struct NodeType* node)//Matching - 100% 19 | { 20 | if (node->prev) 21 | { 22 | if (node->next) 23 | { 24 | node->prev->next = node->next; 25 | node->next->prev = node->prev; 26 | node->next = NULL; 27 | node->prev = NULL; 28 | return; 29 | } 30 | } 31 | else if (node->next) 32 | { 33 | node->next->prev = NULL; 34 | node->next = NULL; 35 | node->prev = NULL; 36 | 37 | return; 38 | } 39 | if (node->prev) 40 | { 41 | node->prev->next = NULL; 42 | node->next = NULL; 43 | } 44 | else 45 | { 46 | node->next = NULL; 47 | } 48 | node->prev = NULL; 49 | } 50 | 51 | struct NodeType* LIST_GetFunc(struct NodeType* list) // Matching - 100% 52 | { 53 | struct NodeType* temp; // not from SYMDUMP 54 | 55 | temp = list->next; 56 | 57 | if (temp != NULL) 58 | { 59 | LIST_DeleteFunc(temp); 60 | 61 | return temp; 62 | } 63 | 64 | return NULL; 65 | } -------------------------------------------------------------------------------- /KAIN2/Game/LIST.H: -------------------------------------------------------------------------------- 1 | #ifndef LIST_H 2 | #define LIST_H 3 | 4 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 5 | extern "C" { 6 | #endif 7 | 8 | extern void LIST_InsertFunc(struct NodeType *list, struct NodeType *node); // 0x8004F568 9 | extern void LIST_DeleteFunc(struct NodeType *node); // 0x8004F594 10 | extern struct NodeType * LIST_GetFunc(struct NodeType *list); // 0x8004F600 11 | 12 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 13 | } 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /KAIN2/Game/LOCAL/LOCALSTR.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "LOCALSTR.H" 3 | #include "Game/LOAD3D.H" 4 | #include "Game/VOICEXA.H" 5 | 6 | #include 7 | 8 | struct LocalizationHeader* LocalizationTable; 9 | char** LocalStrings; 10 | 11 | enum language_t localstr_get_language() 12 | { 13 | return the_language; 14 | } 15 | 16 | #if defined(PSXPC_VERSION) && defined(NO_CD) 17 | #if defined(SN_TARGET_PSP2) 18 | #define LOCALS_TBL "ux0:app\\TEST12345\\locals.tbl" 19 | #else 20 | #define LOCALS_TBL "LOCALS.TBL" 21 | #endif 22 | #else 23 | #define LOCALS_TBL "\\LOCALS.TBL;1" 24 | #endif 25 | 26 | void localstr_set_language(enum language_t lang) 27 | { 28 | int i; 29 | 30 | LocalizationTable = (struct LocalizationHeader*)LOAD_ReadFileFromCD(LOCALS_TBL, 6); 31 | 32 | if (LocalizationTable != NULL) 33 | { 34 | LocalStrings = (char**)(LocalizationTable + 1); 35 | 36 | voiceList = (struct XAVoiceListEntry*)(char*)(LocalizationTable + LocalizationTable->XATableOffset); 37 | 38 | if (LocalizationTable->numStrings > 0) 39 | { 40 | for (i = 0; i < LocalizationTable->numStrings; i++) 41 | { 42 | LocalStrings[i] = LocalStrings[i] + (uintptr_t)LocalizationTable; 43 | } 44 | } 45 | 46 | the_language = LocalizationTable->language; 47 | } 48 | } 49 | 50 | char* localstr_get(enum localstr_t id) 51 | { 52 | static char BlankStr[2] = { '.', 0x0 }; 53 | 54 | if (LocalStrings == NULL) 55 | { 56 | return &BlankStr[0]; 57 | } 58 | else 59 | { 60 | return LocalStrings[id]; 61 | } 62 | } -------------------------------------------------------------------------------- /KAIN2/Game/MCARD/MCASSERT.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "MCASSERT.H" 3 | 4 | 5 | void mcassert(char* exp, char* file, int line) 6 | { 7 | if (exp != NULL) 8 | { 9 | printf("%s:%ld: %s\n", file, line, exp); 10 | } 11 | else 12 | { 13 | printf("%s:%ld: assertion failure\n", file, line); 14 | } 15 | 16 | #if defined(PSXPC_VERSION) 17 | while (1) 18 | { 19 | 20 | } 21 | #elif defined(PSX_VERSION) 22 | _break(1u, 7u); 23 | #endif 24 | } 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /KAIN2/Game/MCARD/MCASSERT.H: -------------------------------------------------------------------------------- 1 | #ifndef MCASSERT_H 2 | #define MCASSERT_H 3 | 4 | extern void mcassert(char *exp, char *file, long line); // 0x800B9DC0 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /KAIN2/Game/MEMPACK.H: -------------------------------------------------------------------------------- 1 | #ifndef MEMPACK_H 2 | #define MEMPACK_H 3 | 4 | #include "LOAD3D.H" 5 | 6 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 7 | extern "C" { 8 | #endif 9 | 10 | struct MemHeader 11 | { 12 | unsigned short magicNumber; // size=0, offset=0 13 | unsigned char memStatus; // size=0, offset=2 14 | unsigned char memType; // size=0, offset=3 15 | unsigned long memSize; // size=0, offset=4 16 | }; 17 | 18 | struct NewMemTracker 19 | { 20 | struct MemHeader* rootNode; // size=8, offset=0 21 | unsigned long totalMemory; // size=0, offset=4 22 | unsigned long currentMemoryUsed; // size=0, offset=8 23 | char* lastMemoryAddress; // size=0, offset=12 24 | long doingGarbageCollection; // size=0, offset=16 25 | }; 26 | 27 | extern uintptr_t overlayAddress; // 0x800CE194 28 | 29 | extern void MEMPACK_Init(); // 0x8004FAA4 30 | extern struct MemHeader * MEMPACK_GetSmallestBlockTopBottom(long allocSize); // 0x8004FB0C 31 | extern struct MemHeader * MEMPACK_GetSmallestBlockBottomTop(long allocSize); // 0x8004FB74 32 | extern long MEMPACK_RelocatableType(long memType); // 0x8004FBE0 33 | extern char* MEMPACK_Malloc(unsigned long allocSize, unsigned char memType); // 0x8004FC18 34 | extern char* MEMPACK_MallocFailOk(unsigned long allocSize, unsigned char memType); // 0x8004FC94 35 | extern void MEMORY_MergeAddresses(struct MemHeader *firstAddress, struct MemHeader *secondAddress); // 0x8004FE20 36 | extern void MEMPACK_Return(char *address, long takeBackSize); // 0x8004FE68 37 | extern void MEMPACK_Free(char *address); // 0x8004FEEC 38 | extern void MEMPACK_FreeByType(unsigned char memType); // 0x8004FF9C 39 | extern unsigned long MEMPACK_Size(char *address); // 0x80050034 40 | extern unsigned long MEMPACK_ReportFreeMemory(); // 0x80050040 41 | extern void MEMPACK_ReportMemory2(); // 0x80050050 42 | extern void MEMPACK_ReportMemory(); // 0x80050080 43 | extern void MEMPACK_SetMemoryBeingStreamed(char *address); // 0x8005011C 44 | extern void MEMPACK_SetMemoryDoneStreamed(char *address); // 0x80050128 45 | extern long MEMPACK_MemoryValidFunc(char *address); // 0x80050134 46 | extern char * MEMPACK_GarbageCollectMalloc(unsigned long *allocSize, unsigned char memType, unsigned long *freeSize); // 0x80050168 47 | extern void MEMPACK_GarbageSplitMemoryNow(unsigned long allocSize, struct MemHeader *bestAddress, long memType, unsigned long freeSize); // 0x800502CC 48 | extern void MEMPACK_GarbageCollectFree(struct MemHeader *memAddress); // 0x800502F0 49 | extern void MEMPACK_DoGarbageCollection(); // 0x800503A0 50 | extern void MEMPACK_RelocateAreaType(struct MemHeader *newAddress, long offset, struct Level *oldLevel); // 0x800505BC 51 | extern void MEMPACK_RelocateG2AnimKeylistType(struct _G2AnimKeylist_Type **pKeylist, int offset, char *start, char *end); // 0x80050EA0 52 | extern void MEMPACK_RelocateObjectType(struct MemHeader *newAddress, long offset, struct Object *oldObject); // 0x80050F40 53 | extern void MEMPACK_RelocateCDMemory(struct MemHeader *newAddress, long offset, struct _BigFileDir *oldDir); // 0x800514B0 54 | 55 | #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) 56 | } 57 | #endif 58 | 59 | #endif 60 | -------------------------------------------------------------------------------- /KAIN2/Game/MENU/MENUDEFS.H: -------------------------------------------------------------------------------- 1 | #ifndef MENUDEFS_H 2 | #define MENUDEFS_H 3 | 4 | #include "MENU.H" 5 | 6 | typedef enum sfx_t 7 | { 8 | sfx_sound = 0, 9 | sfx_music = 1, 10 | sfx_voice = 2, 11 | sfx_error = 3, 12 | }sfx_t; 13 | 14 | extern int PAUSE_XPOS; // offset 0x800d1fa0 15 | extern int PAUSE_WIDTH; // offset 0x800d1fa4 16 | extern int PAUSE_YPOS; // offset 0x800d1f94 17 | 18 | extern void do_check_controller(void *gt); // 0x800B8938 19 | extern int do_push_menu(void* gt, intptr_t menuparam, enum menu_ctrl_t ctrl); // 0x800B896C 20 | extern int do_pop_menu(void *gt, intptr_t param, enum menu_ctrl_t ctrl); // 0x800B89A4 21 | extern int do_function(void* gt, intptr_t fnparam, enum menu_ctrl_t ctrl); // 0x800B89DC 22 | extern int do_start_game(void *gt, intptr_t parameter, enum menu_ctrl_t ctrl); // 0x800B8A10 23 | extern int do_save_menu(void* gt, intptr_t parameter, enum menu_ctrl_t ctrl); // 0x800B8A74 24 | extern void womp_background(char *tim_path); // 0x800B8AB0 25 | #if !defined(PSX_VERSION) 26 | extern void play_movie(char *name); // 0x800B8AE8 27 | #endif 28 | extern void menudefs_reset_hack_attract_mode(); // 0x800B8B30 29 | extern void check_hack_attract(); // 0x800B8B54 30 | extern int get_volume(void *gt, enum sfx_t sfx); // 0x800B8BC4 31 | extern void set_volume(enum sfx_t sfx, int cooked); // 0x800B8C30 32 | extern int do_sound_adjust(void *gt, intptr_t sfxparam, enum menu_ctrl_t ctrl); // 0x800B8CBC 33 | extern void sound_item(void *gt, char *text, enum sfx_t sfx); // 0x800B8D38 34 | extern int menudefs_toggle_dualshock(void *gt, intptr_t param, enum menu_ctrl_t ctrl); // 0x800B8D9C 35 | extern int options_menu(void *gt, int index); // 0x800B8E00 36 | extern int main_menu(void *gt, int index); // 0x800B8F48 37 | extern int do_main_menu(void *gt, intptr_t param, enum menu_ctrl_t ctrl); // 0x800B904C 38 | extern char * flashStart(); // 0x800B90A0 39 | extern int menudefs_main_menu(void *gt, int index); // 0x800B92A4 40 | extern int menudefs_confirmexit_menu(void *gt, int index); // 0x800B934C 41 | extern int menudefs_pause_menu(void *gt, int index); // 0x800B93F4 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /KAIN2/Game/MENU/MENUFACE.H: -------------------------------------------------------------------------------- 1 | #ifndef MENUFACE_H 2 | #define MENUFACE_H 3 | 4 | #include "../VRAM.H" 5 | 6 | struct _ButtonTexture 7 | { 8 | short tpage; // size=0, offset=0 9 | short clut; // size=0, offset=2 10 | short textureW; // size=0, offset=4 11 | short textureH; // size=0, offset=6 12 | struct _BlockVramEntry* vramBlock; // size=0, offset=8 13 | long xshift; // size=0, offset=12 14 | }; 15 | 16 | enum bdepth // Hashcode: 0xB297A406 (dec: -1298684922) 17 | { 18 | TIM_4BIT = 0, 19 | TIM_8BIT = 1, 20 | TIM_16BIT = 2, 21 | }; 22 | 23 | struct menuface_t // hashcode: 0xC2732FD8 (dec: -1032638504) 24 | { 25 | short x; // size=0, offset=0 26 | short y; // size=0, offset=2 27 | char w; // size=0, offset=4 28 | char h; // size=0, offset=5 29 | char frames; // size=0, offset=6 30 | short curFrame; // size=0, offset=8 31 | short transitionDir; // size=0, offset=10 32 | unsigned short delay; // size=0, offset=12 33 | unsigned short loaded; // size=0, offset=14 34 | }; 35 | 36 | typedef enum bdepth bdepth; 37 | typedef struct menuface_t menuface_t; 38 | 39 | extern char * NextTimAddr(char *addr, int w, int h, enum bdepth bpp); // 0x800B9538 40 | extern void menuface_initialize(); // 0x800B9580 41 | extern void menuface_terminate(); // 0x800B96AC 42 | extern void MENUFACE_ChangeStateRandomly(int index); // 0x800B9758 43 | extern void MENUFACE_RefreshFaces(); // 0x800B987C 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /KAIN2/Game/MENU/MENUUTIL.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "MENUUTIL.H" 3 | #include "Game/GAMELOOP.H" 4 | #include "MENU.H" 5 | #include "Game/FONT.H" 6 | #include "Game/SOUND.H" 7 | 8 | struct menu_sound_entry_t the_menu_sounds[6] = { menu_sound_none, 5, menu_sound_default, 5, menu_sound_select, 5, menu_sound_adjust, 5, menu_sound_engage, 5, menu_sound_pop, 5, }; 9 | 10 | enum menu_ctrl_t menu_get_ctrl(void *gt) 11 | { 12 | enum menu_ctrl_t ctrl; 13 | 14 | if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x1)) 15 | { 16 | ctrl = menu_ctrl_up; 17 | } 18 | else if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x2)) 19 | { 20 | ctrl = menu_ctrl_down; 21 | } 22 | else if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x4)) 23 | { 24 | ctrl = menu_ctrl_left; 25 | } 26 | else if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x8)) 27 | { 28 | ctrl = menu_ctrl_right; 29 | } 30 | else if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x80) && !(((struct GameTracker*)gt)->controlCommand[0][0] & 0x300)) 31 | { 32 | ctrl = menu_ctrl_engage; 33 | } 34 | else 35 | { 36 | if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x10)) 37 | { 38 | ctrl = menu_ctrl_cancel; 39 | } 40 | else 41 | { 42 | if ((((struct GameTracker*)gt)->controlCommand[0][1] & 0x4000)) 43 | { 44 | ctrl = menu_ctrl_start; 45 | 46 | } 47 | else 48 | { 49 | ctrl = menu_ctrl_none; 50 | } 51 | } 52 | } 53 | 54 | return ctrl; 55 | } 56 | 57 | void menu_print(int xpos, int ypos, char *text, int color) 58 | { 59 | FONT_SetCursor(xpos, ypos); 60 | 61 | if (color != 0) 62 | { 63 | FONT_SetColorIndex(color); 64 | } 65 | 66 | FONT_Print2(text); 67 | 68 | if (color != 0) 69 | { 70 | FONT_SetColorIndex(0); 71 | } 72 | } 73 | 74 | int menu_text_width(char *text) 75 | { 76 | return FONT_GetStringWidth(text); 77 | } 78 | 79 | void menu_sound(enum menu_sound_t sound) 80 | { 81 | struct menu_sound_entry_t *entry; 82 | 83 | entry = &the_menu_sounds[sound]; 84 | 85 | SndPlay(entry->sfx); 86 | } -------------------------------------------------------------------------------- /KAIN2/Game/MENU/MENUUTIL.H: -------------------------------------------------------------------------------- 1 | #ifndef MENUUTIL_H 2 | #define MENUUTIL_H 3 | 4 | #include "MENU.H" 5 | 6 | extern enum menu_ctrl_t menu_get_ctrl(void *gt); // 0x800B87FC 7 | extern void menu_print(int xpos, int ypos, char *text, int color); // 0x800B887C 8 | extern int menu_text_width(char *text); // 0x800B88E4 9 | extern void menu_sound(enum menu_sound_t sound); // 0x800B8904 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/ALUKA.H: -------------------------------------------------------------------------------- 1 | #ifndef __ALUKA_H 2 | #define __ALUKA_H 3 | 4 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 5 | extern "C" { 6 | #endif 7 | 8 | extern void MON_Say(struct _Instance* instance, const char* fmt, ...); 9 | 10 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 11 | } 12 | #endif 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/ALUKABSS.C: -------------------------------------------------------------------------------- 1 | //0001:00004f80 _ALUKABSS_SetTwist 00405f80 f alukabss.obj 2 | //0001:00004fe0 _ALUKABSS_RotateToFace 00405fe0 f alukabss.obj 3 | //0001:00005160 _ALUKABSS_RazTimeAtMarker 00406160 f alukabss.obj 4 | //0001:00005250 _ALUKABSS_TimeSinceSpit 00406250 f alukabss.obj 5 | //0001:000052a0 _ALUKABSS_ShouldAttack 004062a0 f alukabss.obj 6 | //0001:00005390 _ALUKABSS_InitCircle 00406390 f alukabss.obj 7 | //0001:00005410 _ALUKABSS_Circle 00406410 f alukabss.obj 8 | //0001:00005490 _ALUKABSS_SetUpWaterPlaneClip 00406490 f alukabss.obj 9 | //0001:00005540 _ALUKABSS_Query 00406540 f alukabss.obj 10 | //0001:00005560 _ALUKABSS_Message 00406560 f alukabss.obj 11 | //0001:000056f0 _ALUKABSS_Init 004066f0 f alukabss.obj 12 | //0001:000057e0 _ALUKABSS_CleanUp 004067e0 f alukabss.obj 13 | //0001:00005840 _ALUKABSS_DamageEffect 00406840 f alukabss.obj 14 | //0001:00005980 _ALUKABSS_IdleEntry 00406980 f alukabss.obj 15 | //0001:000059c0 _ALUKABSS_Idle 004069c0 f alukabss.obj 16 | //0001:00005bc0 _ALUKABSS_PursueEntry 00406bc0 f alukabss.obj 17 | //0001:00005bd0 _ALUKABSS_Pursue 00406bd0 f alukabss.obj 18 | //0001:00005ce0 _ALUKABSS_CombatEntry 00406ce0 f alukabss.obj 19 | //0001:00005cf0 _ALUKABSS_Combat 00406cf0 f alukabss.obj 20 | //0001:00005f60 _ALUKABSS_AttackEntry 00406f60 f alukabss.obj 21 | //0001:00005fe0 _ALUKABSS_Attack 00406fe0 f alukabss.obj 22 | //0001:00006130 _ALUKABSS_LandInWaterEntry 00407130 f alukabss.obj 23 | //0001:00006150 _ALUKABSS_LandInWater 00407150 f alukabss.obj 24 | //0001:00006270 _ALUKABSS_ProjectileEntry 00407270 f alukabss.obj 25 | //0001:000062c0 _ALUKABSS_Projectile 004072c0 f alukabss.obj 26 | //0001:00006460 _ALUKABSS_DeadEntry 00407460 f alukabss.obj 27 | //0001:00006480 _ALUKABSS_Dead 00407480 f alukabss.obj 28 | //0001:00006530 _ALUKABSS_DoNothingEntry 00407530 f alukabss.obj 29 | //0001:00006550 _ALUKABSS_DoNothing 00407550 f alukabss.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/HUMAN.H: -------------------------------------------------------------------------------- 1 | #ifndef HUMAN_H 2 | #define HUMAN_H 3 | 4 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 5 | extern "C" { 6 | #endif 7 | 8 | extern struct _MonsterFunctionTable HUMAN_FunctionTable; 9 | 10 | extern void HUMAN_WaitForWeapon(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007CB40 11 | extern struct _Instance * HUMAN_CreateWeapon(struct _Instance *instance, int weaponid, int segment); // 0x8007CBB0 12 | extern void HUMAN_Init(struct _Instance *instance); // 0x8007CC84 13 | extern void HUMAN_CleanUp(struct _Instance *instance); // 0x8007CD7C 14 | extern unsigned long HUMAN_Query(struct _Instance *instance, unsigned long query); // 0x8007CD9C 15 | extern void HUMAN_DeadEntry(struct _Instance *instance); // 0x8007CE8C 16 | extern void HUMAN_Dead(struct _Instance *instance); // 0x8007CF04 17 | extern void HUMAN_StunnedEntry(struct _Instance *instance); // 0x8007CFEC 18 | extern void HUMAN_Stunned(struct _Instance *instance); // 0x8007D064 19 | extern void HUMAN_EmbraceEntry(struct _Instance *instance); // 0x8007D10C 20 | extern void HUMAN_Embrace(struct _Instance *instance); // 0x8007D168 21 | extern void HUMAN_IdleEntry(struct _Instance *instance); // 0x8007D330 22 | extern void HUMAN_Idle(struct _Instance *instance); // 0x8007D378 23 | extern void HUMAN_Flee(struct _Instance *instance); // 0x8007D530 24 | extern void HUMAN_GetAngry(); // 0x8007D688 25 | extern int HUMAN_TypeOfHuman(struct _Instance *instance); // 0x8007D750 26 | 27 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 28 | } 29 | #endif 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/HUNTER.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | 3 | //0001:00006f00 _FX_MakeHitFlame 00407f00 f hunter.obj 4 | void FX_MakeHitFlame(_Position* pos, short a2, int a3, int a4, int a5) {} // unused 5 | //0001:00006ff0 _HUNTER_InitFlamethrow 00407ff0 f hunter.obj 6 | void HUNTER_InitFlamethrow(struct _Instance* instance){} // unused 7 | //0001:00007020 _HUNTER_Flamethrow 00408020 f hunter.obj 8 | int HUNTER_Flamethrow(struct _Instance* instance, int damage, int a3, int segment) { return 0; } 9 | //0001:00007410 _HUNTER_Init 00408410 f hunter.obj 10 | void HUNTER_Init(struct _Instance* instance){} 11 | //0001:000074c0 _HUNTER_CleanUp 004084c0 f hunter.obj 12 | void HUNTER_CleanUp(struct _Instance* instance){} 13 | //0001:000074f0 _HUNTER_ProjectileEntry 004084f0 f hunter.obj 14 | void HUNTER_ProjectileEntry(struct _Instance* instance) {} 15 | //0001:00007520 _HUNTER_Projectile 00408520 f hunter.obj 16 | void HUNTER_Projectile(struct _Instance* instance) {} 17 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/HUNTER.H: -------------------------------------------------------------------------------- 1 | #ifndef __HUNTER_H 2 | #define __HUNTER_H 3 | 4 | #include "Game/MONSTER/MONSTER.H" 5 | 6 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 7 | extern "C" { 8 | #endif 9 | 10 | extern struct _MonsterFunctionTable HUNTER_FunctionTable; 11 | 12 | extern void FX_MakeHitFlame(_Position* pos, short a2, int a3, int a4, int a5); 13 | extern void HUNTER_InitFlamethrow(struct _Instance* instance); 14 | extern int HUNTER_Flamethrow(struct _Instance* instance, int damage, int a3, int segment); 15 | extern void HUNTER_Init(struct _Instance* instance); 16 | extern void HUNTER_CleanUp(struct _Instance* instance); 17 | extern void HUNTER_ProjectileEntry(struct _Instance* instance); 18 | extern void HUNTER_Projectile(struct _Instance* instance); 19 | 20 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 21 | } 22 | #endif 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/KAIN.C: -------------------------------------------------------------------------------- 1 | //0001:000077c0 _KAIN_PickUpReaver 004087c0 f kain.obj 2 | //0001:00007870 _KAIN_FindFarthestMarkerPosition 00408870 f kain.obj 3 | //0001:00007900 _KAIN_TeleportEntry 00408900 f kain.obj 4 | //0001:00007950 _KAIN_Teleport 00408950 f kain.obj 5 | //0001:00007bf0 _KAIN_EndEffects 00408bf0 f kain.obj 6 | //0001:00007c20 _KAIN_LightningEntry 00408c20 f kain.obj 7 | //0001:00007cc0 _KAIN_Lightning 00408cc0 f kain.obj 8 | //0001:000081a0 _KAIN_FFieldOffset 004091a0 f kain.obj 9 | //0001:000081e0 _KAIN_ChargeEntry 004091e0 f kain.obj 10 | //0001:00008270 _KAIN_ChargeUp 00409270 f kain.obj 11 | //0001:00008340 _KAIN_ChargeDown 00409340 f kain.obj 12 | //0001:00008370 _CheckHit 00409370 f kain.obj 13 | //0001:00008390 _SwitchToHit 00409390 f kain.obj 14 | //0001:000083b0 _KAIN_DamageEffect 004093b0 f kain.obj 15 | //0001:00008430 _KAIN_Message 00409430 f kain.obj 16 | //0001:000087f0 _KAIN_Query 004097f0 f kain.obj 17 | //0001:00008860 _KAIN_Init 00409860 f kain.obj 18 | //0001:00008970 _KAIN_CleanUp 00409970 f kain.obj 19 | //0001:000089d0 _KAIN_IdleEntry 004099d0 f kain.obj 20 | //0001:00008ae0 _KAIN_Idle 00409ae0 f kain.obj 21 | //0001:00008b80 _KAIN_CombatEntry 00409b80 f kain.obj 22 | //0001:00008cf0 _KAIN_Combat 00409cf0 f kain.obj 23 | //0001:00008e80 _KAIN_AttackEntry 00409e80 f kain.obj 24 | //0001:00008ff0 _KAIN_Attack 00409ff0 f kain.obj 25 | //0001:00009310 _KAIN_PursueEntry 0040a310 f kain.obj 26 | //0001:000093d0 _KAIN_Pursue 0040a3d0 f kain.obj 27 | //0001:00009510 _KAIN_HitEntry 0040a510 f kain.obj 28 | //0001:000096b0 _KAIN_Hit 0040a6b0 f kain.obj 29 | //0001:00009760 _KAIN_DoNothingEntry 0040a760 f kain.obj 30 | //0001:000097b0 _KAIN_DoNothing 0040a7b0 f kain.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MBMISS.H: -------------------------------------------------------------------------------- 1 | #ifndef MBMISS_H 2 | #define MBMISS_H 3 | 4 | struct _walbossAttributes // hashcode: 0x300B2C35 (dec: 806038581) 5 | { 6 | unsigned char segmentToAttach; // size=0, offset=0 7 | unsigned char frameToBirth; // size=0, offset=1 8 | unsigned char frameToExpel; // size=0, offset=2 9 | unsigned char maxEggHits; // size=0, offset=3 10 | short maxAngle; // size=0, offset=4 11 | short timeForHitAgony; // size=0, offset=6 12 | short segmentForBodyTwist; // size=0, offset=8 13 | short timeToThornPrep; // size=0, offset=10 14 | short timeToThornPoke; // size=0, offset=12 15 | short timeToEggThrob; // size=0, offset=14 16 | short timeToEggExplode; // size=0, offset=16 17 | short razielStunTime; // size=0, offset=18 18 | short eggIgniteDist; // size=0, offset=20 19 | short angleForShortAttack; // size=0, offset=22 20 | short closeAttackStart; // size=0, offset=24 21 | short junk; // size=0, offset=26 22 | struct { 23 | short plusDelta; // size=0, offset=0 24 | short minusDelta; // size=0, offset=2 25 | short validAtHitPoint; // size=0, offset=4 26 | } attackDeltas; // size=0, offset=28, found in object files: mbmiss.o, mbmiss.o 27 | }; 28 | 29 | extern void WCBEGG_Message(struct _Instance *instance, unsigned long message, unsigned long data); // 0x8008EFA8 30 | extern int WCBEGG_ShouldIgniteEgg(struct _Instance *egg, struct _walbossAttributes *wa); // 0x8008F04C 31 | extern void WCBEGG_Process(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F144 32 | extern void WCBEGG_ExplodeProcess(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F338 33 | extern void WCBEGG_SplitProcess(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F478 34 | extern void WCBEGG_CommonPostProcess(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F574 35 | extern void WCBEGG_CommonPostProcess2(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F604 36 | extern void WCBEGG_ExplodeCollide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F678 37 | extern void WCBEGG_Collide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F7FC 38 | extern long WALBOSC_AnimCallback(struct _G2Anim_Type *anim, int sectionID, enum _G2AnimCallbackMsg_Enum message, long messageDataA, long messageDataB, struct _Instance *instance); // 0x8008F884 39 | extern void WALBOSC_Collide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8008F904 40 | extern void WALBOSC_Message(struct _Instance *instance, unsigned long message, unsigned long data); // 0x8008F9C4 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MISSILE.H: -------------------------------------------------------------------------------- 1 | #ifndef MISSILE_H 2 | #define MISSILE_H 3 | 4 | #include "MONSTER.H" 5 | 6 | struct MissileGraphics 7 | { 8 | unsigned char object; // size=0, offset=0 9 | unsigned char model; // size=0, offset=1 10 | }; 11 | 12 | extern void MISSILE_Process(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007D7BC 13 | extern void MISSILE_Collide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007D814 14 | extern struct _Instance * MISSILE_Find(struct _Instance *instance, struct _MonsterMissile *missiledef); // 0x8007D850 15 | extern struct _Instance * MISSILE_Birth(struct _Instance *instance, struct _MonsterMissile *missiledef); // 0x8007D8CC 16 | extern struct _Instance * MISSILE_Fire(struct _Instance *instance, struct _MonsterMissile *missiledef, void *target, int type); // 0x8007D9A0 17 | extern struct _Instance * MISSILE_FireAtInstance(struct _Instance *instance, struct _MonsterMissile *missiledef, struct _Instance *target); // 0x8007DA60 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MONAPI.H: -------------------------------------------------------------------------------- 1 | #ifndef MONAPI_H 2 | #define MONAPI_H 3 | 4 | #include "MONSTER.H" 5 | 6 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 7 | extern "C" { 8 | #endif 9 | 10 | extern void MonsterProcess(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007DA80 11 | extern void MonsterInit(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007DBB8 12 | extern void SendHitObject(struct _Instance *instance, struct _Instance *hit, int type); // 0x8007DDC0 13 | extern void MonsterCollide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007DE94 14 | extern void MonsterAdditionalCollide(struct _Instance *instance, struct GameTracker *gameTracker); // 0x8007E3A8 15 | extern unsigned long MonsterQuery(struct _Instance *instance, unsigned long query); // 0x8007E3D8 16 | extern void MonsterMessage(struct _Instance *instance, unsigned long message, unsigned long data); // 0x8007E638 17 | extern void AnimDistanceAndVel(struct Object *object, struct _MonsterAnim *mAnim); // 0x8007E900 18 | extern void TranslateAnimList(struct Object *object, struct _MonsterAnim *animList, int numAnims); // 0x8007EA68 19 | extern void MonsterTranslateAnim(struct Object *object); // 0x8007EB64 20 | extern void MonsterRelocateTune(struct Object *object, long offset); // 0x8007ED1C 21 | extern void MonsterRelocateInstanceObject(struct _Instance *instance, long offset); // 0x8007EF38 22 | extern void MONAPI_TurnHead(struct _Instance *instance, short *rotx, short *rotz, struct GameTracker *gameTracker); // 0x8007F05C 23 | extern void MONAPI_SetLookAround(struct _Instance *instance); // 0x8007F0D8 24 | extern void MONAPI_ResetLookAround(struct _Instance *instance); // 0x8007F108 25 | extern long MONAPI_OkToLookAround(struct _Instance *instance); // 0x8007F138 26 | extern void MONAPI_DeleteRegen(struct _MONAPI_Regenerator *regen); // 0x8007F14C 27 | extern void MONAPI_ProcessGenerator(); // 0x8007F198 28 | extern void MONAPI_AddToGenerator(struct _Instance *instance); // 0x8007F2D8 29 | extern void MONAPI_CheckGenerator(struct _Instance *instance); // 0x8007F378 30 | 31 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 32 | } 33 | #endif 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MONMSG.H: -------------------------------------------------------------------------------- 1 | #ifndef MONMSG_H 2 | #define MONMSG_H 3 | 4 | #include "MONSTER.H" 5 | 6 | struct evMonsterAlarmData 7 | { 8 | struct _Instance* sender; // size=668, offset=0 9 | struct _Position position; // size=6, offset=4 10 | short type; // size=0, offset=10 11 | }; 12 | 13 | extern int MON_GroundMoveQueueHandler(struct _Instance *instance); // 0x800847B8 14 | 15 | extern void MON_PupateMessageHandler(struct _Instance *instance, struct __Event *message); // 0x80084840 16 | 17 | extern void MON_IdleMessageHandler(struct _Instance *instance, struct __Event *message); // 0x80084A84 18 | 19 | extern void MON_DefaultMessageHandler(struct _Instance *instance, struct __Event *message); // 0x80084BC8 20 | 21 | extern void MON_PupateQueueHandler(struct _Instance *instance); // 0x800859C0 22 | 23 | extern void MON_IdleQueueHandler(struct _Instance *instance); // 0x80085A0C 24 | 25 | extern void MON_DefaultQueueHandler(struct _Instance *instance); // 0x80085A58 26 | 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MONSENSE.H: -------------------------------------------------------------------------------- 1 | #ifndef MONSENSE_H 2 | #define MONSENSE_H 3 | 4 | #include "Game/INSTANCE.H" 5 | #include "MONSTER.H" 6 | 7 | extern struct _MonsterIR * MONSENSE_FindIR(struct _MonsterVars *mv, struct _Instance *instance); // 0x80085AA4 8 | 9 | extern int MONSENSE_See(struct _Instance *instance, struct evCollideInstanceStatsData *data); // 0x80085ADC 10 | 11 | extern int MONSENSE_Hear(struct _Instance *instance, struct evCollideInstanceStatsData *data); // 0x80085C78 12 | 13 | extern int MONSENSE_Smell(struct _Instance *instance, struct evCollideInstanceStatsData *data); // 0x80085D08 14 | 15 | extern struct _MonsterIR * MONSENSE_FirstSense(struct _Instance *instance, struct _Instance *sensed); // 0x80085D30 16 | 17 | extern void MONSENSE_SetupMIR(struct _Instance *instance, struct evCollideInstanceStatsData *data, int flags); // 0x80085ED4 18 | 19 | extern void MONSENSE_SenseInstance(struct _Instance *instance, struct evCollideInstanceStatsData *data); // 0x80086300 20 | 21 | extern void MONSENSE_StartMonsterIRList(struct _Instance *instance); // 0x800864F4 22 | 23 | extern struct _MonsterIR * MONSENSE_GetMonsterIR(struct _MonsterVars *mv); // 0x80086608 24 | 25 | extern void MONSENSE_InitIRList(struct _MonsterVars *mv, struct _MonsterIR *list, int num); // 0x80086630 26 | 27 | extern struct _MonsterIR * MONSENSE_SetEnemy(struct _Instance *instance, struct _Instance *newenemy); // 0x8008665C 28 | 29 | extern void MONSENSE_ProcessIRList(struct _Instance *instance); // 0x8008677C 30 | 31 | extern void MONSENSE_SetupSenses(struct _Instance *instance); // 0x8008699C 32 | 33 | extern void MONSENSE_RemoveSenses(struct _Instance *instance); // 0x80086B08 34 | 35 | extern void MONSENSE_Radar(struct _Instance *instance); // 0x80086BA8 36 | 37 | extern short MONSENSE_GetClosestFreeDirection(struct _Instance *instance, short angle, long range); // 0x80086DE4 38 | 39 | extern int MONSENSE_GetDistanceInDirection(struct _Instance *instance, short angle); // 0x80086EE8 40 | 41 | extern void MONSENSE_DoSenses(struct _Instance *instance); // 0x80086F20 42 | 43 | extern void MONSENSE_AdjustRadarFromObjects(struct _Instance *instance); // 0x80087018 44 | 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MONTABLE.H: -------------------------------------------------------------------------------- 1 | #ifndef MONTABLE_H 2 | #define MONTABLE_H 3 | 4 | 5 | #include "Game/MONSTER/MONSTER.H" 6 | 7 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 8 | extern "C" { 9 | #endif 10 | 11 | extern void MONTABLE_SetupTablePointer(struct Object *object); // 0x8008CE88 12 | extern struct _MonsterState * MONTABLE_GetStateFuncs(struct _Instance *instance, int state); // 0x8008CED8 13 | extern void* MONTABLE_GetDamageEffectFunc(struct _Instance *instance); // 0x8008CF48 14 | extern void* MONTABLE_GetInitFunc(struct _Instance *instance); // 0x8008CF7C 15 | extern void* MONTABLE_GetCleanUpFunc(struct _Instance *instance); // 0x8008CFB0 16 | extern void MONTABLE_SetQueryFunc(struct _Instance *instance); // 0x8008CFE4 17 | extern void MONTABLE_SetMessageFunc(struct _Instance *instance); // 0x8008D018 18 | 19 | #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) || defined(c_plusplus) 20 | } 21 | #endif 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/MORLOCK.H: -------------------------------------------------------------------------------- 1 | #ifndef __MORLOCK_H 2 | #define __MORLOCK_H 3 | 4 | #endif 5 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/PRIESTESS.C: -------------------------------------------------------------------------------- 1 | /* ========================================== */ 2 | /* Unused code from the PC version, it's from */ 3 | /* the prototype priestess and barely does a */ 4 | /* thing in actuality. */ 5 | /* ========================================== */ 6 | #include 7 | #include "Game/CORE.H" 8 | 9 | void PRIESTS_Init(struct _Instance* instance) 10 | { 11 | UNIMPLEMENTED(); 12 | } 13 | void PRIESTS_CleanUp(struct _Instance* instance) 14 | { 15 | UNIMPLEMENTED(); 16 | } 17 | 18 | u_long PRIESTS_Query(struct _Instance* instance, unsigned long data) 19 | { 20 | UNIMPLEMENTED(); 21 | return 0; 22 | } 23 | 24 | void PRIESTS_Message(struct _Instance* instance, unsigned int message, unsigned int data) 25 | { 26 | UNIMPLEMENTED(); 27 | } 28 | 29 | void PRIESTS_IdleEntry(struct _Instance* instance) 30 | { 31 | UNIMPLEMENTED(); 32 | } 33 | // TODO: fill me 34 | void PRIESTS_Idle(struct _Instance* instance) 35 | { 36 | UNIMPLEMENTED(); 37 | } 38 | 39 | void PRIESTS_PursueEntry(struct _Instance* instance) 40 | { 41 | UNIMPLEMENTED(); 42 | } 43 | 44 | void PRIESTS_Pursue(struct _Instance* instance) 45 | { 46 | UNIMPLEMENTED(); 47 | } 48 | 49 | void PRIESTS_FleeEntry(struct _Instance* instance) 50 | { 51 | UNIMPLEMENTED(); 52 | } 53 | 54 | void PRIESTS_Flee(struct _Instance* instance) 55 | { 56 | UNIMPLEMENTED(); 57 | } 58 | 59 | // ------------------ unlinked code ------------------ 60 | struct _Instance* PRIESTS_InstanceToPossess(struct _Instance* instance) 61 | { 62 | UNIMPLEMENTED(); 63 | return NULL; 64 | } 65 | 66 | void PRIESTS_DoAttackAnim(_Instance* instance, int a2) 67 | { 68 | UNIMPLEMENTED(); 69 | } 70 | 71 | extern void HUMAN_DeadEntry(struct _Instance* instance); 72 | extern void HUMAN_Dead(struct _Instance* instance); -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/RONINBSS.C: -------------------------------------------------------------------------------- 1 | //0001:000188f0 _RONINBSS_StartBand 004198f0 f roninbss.obj 2 | //0001:00018930 _RONINBSS_StopBand 00419930 f roninbss.obj 3 | //0001:00018960 _RONINBSS_InitConstrict 00419960 f roninbss.obj 4 | //0001:000189c0 _RONINBSS_Constrict 004199c0 f roninbss.obj 5 | //0001:00018cc0 _RONINBSS_StopSoulSuck 00419cc0 f roninbss.obj 6 | //0001:00018cf0 _RONINBSS_FadeMove 00419cf0 f roninbss.obj 7 | //0001:00018dd0 _RONINBSS_ChooseAttack 00419dd0 f roninbss.obj 8 | //0001:00018ec0 _RONINBSS_Collide 00419ec0 f roninbss.obj 9 | //0001:00018ff0 _RONINBSS_Message 00419ff0 f roninbss.obj 10 | //0001:000192f0 _RONINBSS_Query 0041a2f0 f roninbss.obj 11 | //0001:000193b0 _RONINBSS_Init 0041a3b0 f roninbss.obj 12 | //0001:00019480 _RONINBSS_CleanUp 0041a480 f roninbss.obj 13 | //0001:000194c0 _RONINBSS_DamageEffect 0041a4c0 f roninbss.obj 14 | //0001:000195f0 _RONINBSS_FindClosestMarkerInUnit 0041a5f0 f roninbss.obj 15 | //0001:000196f0 _RONINBSS_GetNextMarkerInSeries 0041a6f0 f roninbss.obj 16 | //0001:000197a0 _RONINBSS_FindValve 0041a7a0 f roninbss.obj 17 | //0001:000197e0 _RONINBSS_IdleEntry 0041a7e0 f roninbss.obj 18 | //0001:00019850 _RONINBSS_Idle 0041a850 f roninbss.obj 19 | //0001:000199d0 _RONINBSS_WanderEntry 0041a9d0 f roninbss.obj 20 | //0001:00019a10 _RONINBSS_Wander 0041aa10 f roninbss.obj 21 | //0001:00019ba0 _RONINBSS_AttackEntry 0041aba0 f roninbss.obj 22 | //0001:00019bd0 _RONINBSS_Attack 0041abd0 f roninbss.obj 23 | //0001:00019be0 _RONINBSS_CombatEntry 0041abe0 f roninbss.obj 24 | //0001:00019c30 _RONINBSS_Combat 0041ac30 f roninbss.obj 25 | //0001:00019f30 _RONINBSS_HitEntry 0041af30 f roninbss.obj 26 | //0001:0001a030 _RONINBSS_Hit 0041b030 f roninbss.obj 27 | //0001:0001a060 _RONINBSS_FallEntry 0041b060 f roninbss.obj 28 | //0001:0001a0c0 _RONINBSS_Fall 0041b0c0 f roninbss.obj 29 | //0001:0001a0d0 _RONINBSS_PursueEntry 0041b0d0 f roninbss.obj 30 | //0001:0001a140 _RONINBSS_Pursue 0041b140 f roninbss.obj 31 | //0001:0001a7b0 _RONINBSS_DoNothingEntry 0041b7b0 f roninbss.obj 32 | //0001:0001a800 _RONINBSS_DoNothing 0041b800 f roninbss.obj 33 | //0001:0001a810 _RONINBSS_DeadEntry 0041b810 f roninbss.obj 34 | //0001:0001a830 _RONINBSS_Dead 0041b830 f roninbss.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/SKINBOS.C: -------------------------------------------------------------------------------- 1 | //0001:0001a8e0 _SKINBOS_Turn 0041b8e0 f skinbos.obj 2 | //0001:0001a960 _SKINBOS_GateDrop 0041b960 f skinbos.obj 3 | //0001:0001abd0 _SKINBOS_CheckPointInsideMasher 0041bbd0 f skinbos.obj 4 | //0001:0001aca0 _SKINBOS_CheckInsideMasher 0041bca0 f skinbos.obj 5 | //0001:0001acd0 _SKINBOS_DoPhaseFade 0041bcd0 f skinbos.obj 6 | //0001:0001af70 _SKINBOS_HandleOneShotAnims 0041bf70 f skinbos.obj 7 | //0001:0001b140 _SKINBOS_DoPhasingOutInit 0041c140 f skinbos.obj 8 | //0001:0001b220 _SKINBOS_CheckPhaseIn 0041c220 f skinbos.obj 9 | //0001:0001b280 _SKINBOS_ShouldEscapeJail 0041c280 f skinbos.obj 10 | //0001:0001b2c0 _SKINBOS_ProcessGateHitBlood 0041c2c0 f skinbos.obj 11 | //0001:0001b3a0 _SKINBOS_StartVertexBlood 0041c3a0 f skinbos.obj 12 | //0001:0001b460 _SKINBOS_Collide 0041c460 f skinbos.obj 13 | //0001:0001b6b0 _SKINBOS_DamageEffect 0041c6b0 f skinbos.obj 14 | //0001:0001b700 _SKINBOS_Message 0041c700 f skinbos.obj 15 | //0001:0001bb80 _SKINBOS_Query 0041cb80 f skinbos.obj 16 | //0001:0001bc00 _SKINBOS_Init 0041cc00 f skinbos.obj 17 | //0001:0001bca0 _SKINBOS_CleanUp 0041cca0 f skinbos.obj 18 | //0001:0001bcf0 _SKINBOS_IdleEntry 0041ccf0 f skinbos.obj 19 | //0001:0001bd60 _SKINBOS_Idle 0041cd60 f skinbos.obj 20 | //0001:0001bf20 _SKINBOS_FindRandomNodeInUnit 0041cf20 f skinbos.obj 21 | //0001:0001bfd0 _SKINBOS_WanderEntry 0041cfd0 f skinbos.obj 22 | //0001:0001c000 _SKINBOS_Wander 0041d000 f skinbos.obj 23 | //0001:0001c0c0 _SKINBOS_PursueEntry 0041d0c0 f skinbos.obj 24 | //0001:0001c0d0 _SKINBOS_Pursue 0041d0d0 f skinbos.obj 25 | //0001:0001c590 _SKINBOS_HitEntry 0041d590 f skinbos.obj 26 | //0001:0001c620 _SKINBOS_Hit 0041d620 f skinbos.obj 27 | //0001:0001c6a0 _SKINBOS_CombatEntry 0041d6a0 f skinbos.obj 28 | //0001:0001c6b0 _SKINBOS_Combat 0041d6b0 f skinbos.obj 29 | //0001:0001c950 _SKINBOS_StunnedEntry 0041d950 f skinbos.obj 30 | //0001:0001c970 _SKINBOS_Stunned 0041d970 f skinbos.obj 31 | //0001:0001c980 _SKINBOS_AttackEntry 0041d980 f skinbos.obj 32 | //0001:0001c9e0 _SKINBOS_Attack 0041d9e0 f skinbos.obj 33 | //0001:0001ca90 _SKINBOS_DeadEntry 0041da90 f skinbos.obj 34 | //0001:0001cab0 _SKINBOS_Dead 0041dab0 f skinbos.obj 35 | //0001:0001cb00 _SKINBOS_FleeEntry 0041db00 f skinbos.obj 36 | //0001:0001cb40 _SKINBOS_Flee 0041db40 f skinbos.obj 37 | //0001:0001cd20 _SKINBOS_LandOnFeetEntry 0041dd20 f skinbos.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/SKINNER.C: -------------------------------------------------------------------------------- 1 | //0001:0001cd80 _MON_GetRandomGroundPoint 0041dd80 f skinner.obj 2 | //0001:0001cef0 _MONSENSE_DetectPlayer 0041def0 f skinner.obj 3 | //0001:0001cf20 _FX_StartInstanceBurrow 0041df20 f skinner.obj 4 | //0001:0001cff0 _FX_StopInstanceBurrow 0041dff0 f skinner.obj 5 | //0001:0001d000 _SKINNER_BurrowInEntry 0041e000 f skinner.obj 6 | //0001:0001d0a0 _SKINNER_BurrowIn 0041e0a0 f skinner.obj 7 | //0001:0001d0e0 _SKINNER_PupateEntry 0041e0e0 f skinner.obj 8 | //0001:0001d130 _SKINNER_Pupate 0041e130 f skinner.obj 9 | //0001:0001d160 _SKINNER_PursueEntry 0041e160 f skinner.obj 10 | //0001:0001d1c0 _SKINNER_Pursue 0041e1c0 f skinner.obj 11 | //0001:0001d5a0 _SKINNER_HideEntry 0041e5a0 f skinner.obj 12 | //0001:0001d670 _SKINNER_Hide 0041e670 f skinner.obj 13 | //0001:0001d770 _SKINNER_SurpriseAttackEntry 0041e770 f skinner.obj 14 | //0001:0001d7f0 _SKINNER_SurpriseAttack 0041e7f0 f skinner.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/SLUAGH.H: -------------------------------------------------------------------------------- 1 | #ifndef SLUAGH_H 2 | #define SLUAGH_H 3 | 4 | #include "MONSTER.H" 5 | 6 | extern struct _MonsterFunctionTable SLUAGH_FunctionTable; 7 | extern unsigned long SLUAGH_Query(struct _Instance *instance, unsigned long query); // 0x8008D04C 8 | extern void SLUAGH_DamageEffect(struct _Instance *instance, struct evFXHitData *data); // 0x8008D0E0 9 | extern void SLUAGH_Init(struct _Instance *instance); // 0x8008D2D4 10 | extern void SLUAGH_DeathEntry(struct _Instance *instance); // 0x8008D390 11 | extern void SLUAGH_Death(struct _Instance *instance); // 0x8008D454 12 | extern void SLUAGH_AttackEntry(struct _Instance *instance); // 0x8008D4DC 13 | extern void SLUAGH_Attack(struct _Instance *instance); // 0x8008D540 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/SOUL.H: -------------------------------------------------------------------------------- 1 | #ifndef SOUL_H 2 | #define SOUL_H 3 | 4 | #include "MONSTER.H" 5 | 6 | extern struct _MonsterFunctionTable SOUL_FunctionTable; 7 | 8 | extern void SOUL_QueueHandler(struct _Instance *instance); // 0x8008D6D4 9 | extern void SOUL_Physics(struct _Instance *instance, long time); // 0x8008D770 10 | extern void SOUL_Fade(struct _Instance *instance); // 0x8008D7D0 11 | extern void SOUL_MoveToDest(struct _Instance *instance, long maxAccel, long time); // 0x8008D884 12 | extern void SOUL_MovePastWall(struct _Instance *instance, struct _Instance *sucker); // 0x8008D974 13 | extern void SOUL_Init(struct _Instance *instance); // 0x8008DAE4 14 | extern void SOUL_CleanUp(struct _Instance *instance); // 0x8008DBA8 15 | extern void SOUL_BirthEntry(struct _Instance *instance); // 0x8008DBC8 16 | extern void SOUL_Birth(struct _Instance *instance); // 0x8008DC1C 17 | extern void SOUL_SoulSuckEntry(struct _Instance *instance); // 0x8008DC84 18 | extern long SOUL_CalcAccel(long delta, long vel, long magnitude); // 0x8008DCAC 19 | extern void SOUL_SoulSuck(struct _Instance *instance); // 0x8008DCEC 20 | extern void SOUL_WanderEntry(struct _Instance *instance); // 0x8008E294 21 | extern void SOUL_Wander(struct _Instance *instance); // 0x8008E304 22 | extern void SOUL_FleeEntry(struct _Instance *instance); // 0x8008E494 23 | extern void SOUL_Flee(struct _Instance *instance); // 0x8008E4C4 24 | extern void SOUL_IdleEntry(struct _Instance *instance); // 0x8008E628 25 | extern void SOUL_Idle(struct _Instance *instance); // 0x8008E6CC 26 | extern void SOUL_ReanimateEntry(struct _Instance *instance); // 0x8008E7CC 27 | extern void SOUL_Reanimate(struct _Instance *instance); // 0x8008E834 28 | extern void SOUL_Effect(struct _Instance *instance, struct evFXHitData *data); // 0x8008E8EC 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/VWRAITH.H: -------------------------------------------------------------------------------- 1 | #ifndef VWRAITH_H 2 | #define VWRAITH_H 3 | 4 | #include "Game/MONSTER/MONSTER.H" 5 | 6 | extern struct _MonsterFunctionTable VWRAITH_FunctionTable; 7 | 8 | extern void VWRAITH_MoveVertical(struct _Instance *instance, long targetZ, int velocity); // 0x8008E8F4 9 | extern void VWRAITH_Init(struct _Instance *instance); // 0x8008E94C 10 | extern int VWRAITH_ShouldISwoop(struct _Instance *instance); // 0x8008EA00 11 | extern void VWRAITH_PursueEntry(struct _Instance *instance); // 0x8008EA84 12 | extern void VWRAITH_Pursue(struct _Instance *instance); // 0x8008EB1C 13 | extern void VWRAITH_VerticalMove(struct _Instance *instance); // 0x8008ECEC 14 | extern void VWRAITH_CombatEntry(struct _Instance *instance); // 0x8008ED70 15 | extern void VWRAITH_Combat(struct _Instance *instance); // 0x8008ED90 16 | extern void VWRAITH_EmbraceEntry(struct _Instance *instance); // 0x8008EDBC 17 | extern void VWRAITH_Embrace(struct _Instance *instance); // 0x8008EDDC 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/WALBOSB.C: -------------------------------------------------------------------------------- 1 | //0001:0001f460 _WALBOSB_SetYaw 00420460 f walbosb.obj 2 | //0001:0001f480 _WALBOSB_SetPitch 00420480 f walbosb.obj 3 | //0001:0001f4d0 _WALBOSB_InterpYaw 004204d0 f walbosb.obj 4 | //0001:0001f510 _WALBOSB_InterpPitch 00420510 f walbosb.obj 5 | //0001:0001f5b0 _WALBOSB_TurnToPosition 004205b0 f walbosb.obj 6 | //0001:0001f690 _WALBOSB_ElevateToPosition 00420690 f walbosb.obj 7 | //0001:0001f750 _WALBOSB_OtherAttackingLegs 00420750 f walbosb.obj 8 | //0001:0001f7d0 _WALBOSB_ResetAbortedAttacks 004207d0 f walbosb.obj 9 | //0001:0001f810 _WALBOSB_AbortedAttacks 00420810 f walbosb.obj 10 | //0001:0001f860 _WALBOSB_ShouldIAttack 00420860 f walbosb.obj 11 | //0001:0001fa20 _WALBOSB_ChooseAttack 00420a20 f walbosb.obj 12 | //0001:0001faf0 _WALBOSB_WalbossMessage 00420af0 f walbosb.obj 13 | //0001:0001fb30 _WALBOSB_AutofaceMarker 00420b30 f walbosb.obj 14 | //0001:0001fb80 _WALBOSB_SetAutofacePos 00420b80 f walbosb.obj 15 | //0001:0001fcc0 _WALBOSB_ResetSetAutofacePos 00420cc0 f walbosb.obj 16 | //0001:0001fd10 _WALBOSB_Collide 00420d10 f walbosb.obj 17 | //0001:0001fd60 _WALBOSB_Query 00420d60 f walbosb.obj 18 | //0001:0001fd80 _WALBOSB_Message 00420d80 f walbosb.obj 19 | //0001:0001ff40 _WALBOSB_Init 00420f40 f walbosb.obj 20 | //0001:00020080 _WALBOSB_CleanUp 00421080 f walbosb.obj 21 | //0001:000200e0 _WALBOSB_IdleEntry 004210e0 f walbosb.obj 22 | //0001:00020140 _WALBOSB_HandleFade 00421140 f walbosb.obj 23 | //0001:00020300 _WALBOSB_Idle 00421300 f walbosb.obj 24 | //0001:000204e0 _WALBOSB_CombatEntry 004214e0 f walbosb.obj 25 | //0001:00020540 _WALBOSB_Combat 00421540 f walbosb.obj 26 | //0001:00020680 _WALBOSB_AttackEntry 00421680 f walbosb.obj 27 | //0001:00020750 _WALBOSB_Attack 00421750 f walbosb.obj 28 | //0001:00020eb0 _WALBOSB_HitEntry 00421eb0 f walbosb.obj 29 | //0001:00020fd0 _WALBOSB_Hit 00421fd0 f walbosb.obj 30 | //0001:00021000 _WALBOSB_DoNothingEntry 00422000 f walbosb.obj 31 | //0001:00021020 _WALBOSB_DoNothing 00422020 f walbosb.obj 32 | //0001:00021030 _WALBOSB_GeneralDeathEntry 00422030 f walbosb.obj 33 | //0001:000210b0 _WALBOSB_GeneralDeath 004220b0 f walbosb.obj 34 | //0001:00021150 _WALBOSB_DeadEntry 00422150 f walbosb.obj 35 | //0001:00021170 _WALBOSB_Dead 00422170 f walbosb.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/WALBOSS.C: -------------------------------------------------------------------------------- 1 | //0001:000211b0 _WALBOSS_SetSegmentYaw 004221b0 f walboss.obj 2 | //0001:00021240 _WALBOSS_InterpSegmentYaw 00422240 f walboss.obj 3 | //0001:00021350 _WALBOSS_TurnToPosition 00422350 f walboss.obj 4 | //0001:00021380 _WALBOSS_ChooseAttack 00422380 f walboss.obj 5 | //0001:00021510 _WALBOSS_ShouldIAttack 00422510 f walboss.obj 6 | //0001:00021680 _WALBOSS_MessageToLegs 00422680 f walboss.obj 7 | //0001:000216c0 _WALBOSS_LivingLegs 004226c0 f walboss.obj 8 | //0001:00021710 _WALBOSS_FindEgg 00422710 f walboss.obj 9 | //0001:00021760 _WALBOSS_CreateEgg 00422760 f walboss.obj 10 | //0001:00021810 _WALBOSS_EjectEgg 00422810 f walboss.obj 11 | //0001:00021870 _WALBOSS_BirthEggEntry 00422870 f walboss.obj 12 | //0001:000218b0 _WALBOSS_BirthEgg 004228b0 f walboss.obj 13 | //0001:00021a70 _WALBOSS_CorrectLookAT 00422a70 f walboss.obj 14 | //0001:00021b50 _WALBOSS_LegHurtEntry 00422b50 f walboss.obj 15 | //0001:00021bc0 _WALBOSS_LegHurt 00422bc0 f walboss.obj 16 | //0001:00021c50 _WALBOSS_HitByEggEntry 00422c50 f walboss.obj 17 | //0001:00021cf0 _WALBOSS_HitByEgg 00422cf0 f walboss.obj 18 | //0001:00021d70 _WALBOSS_HandleThorn 00422d70 f walboss.obj 19 | //0001:00021fa0 _WALBOSS_Collide 00422fa0 f walboss.obj 20 | //0001:00022000 _WALBOSS_Message 00423000 f walboss.obj 21 | //0001:00022270 _WALBOSS_Query 00423270 f walboss.obj 22 | //0001:000222d0 _WALBOSS_Init 004232d0 f walboss.obj 23 | //0001:000224d0 _WALBOSS_CleanUp 004234d0 f walboss.obj 24 | //0001:00022530 _WALBOSS_DamageEffect 00423530 f walboss.obj 25 | //0001:00022580 _WALBOSS_HandleFade 00423580 f walboss.obj 26 | //0001:00022770 _WALBOSS_IdleEntry 00423770 f walboss.obj 27 | //0001:00022850 _WALBOSS_Idle 00423850 f walboss.obj 28 | //0001:00022b00 _WALBOSS_NoticeEntry 00423b00 f walboss.obj 29 | //0001:00022b50 _WALBOSS_Notice 00423b50 f walboss.obj 30 | //0001:00022ba0 _WALBOSS_CombatEntry 00423ba0 f walboss.obj 31 | //0001:00022bb0 _WALBOSS_Combat 00423bb0 f walboss.obj 32 | //0001:00022c80 _WALBOSS_AttackEntry 00423c80 f walboss.obj 33 | //0001:00022cd0 _WALBOSS_Attack 00423cd0 f walboss.obj 34 | //0001:00022e80 _WALBOSS_HitEntry 00423e80 f walboss.obj 35 | //0001:00022f70 _WALBOSS_Hit 00423f70 f walboss.obj 36 | //0001:00022fa0 _WALBOSS_DoNothingEntry 00423fa0 f walboss.obj 37 | //0001:00022fc0 _WALBOSS_DoNothing 00423fc0 f walboss.obj 38 | //0001:00022fd0 _WALBOSS_DeadEntry 00423fd0 f walboss.obj 39 | //0001:00023000 _WALBOSS_Dead 00424000 f walboss.obj -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/WORSHIP.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "WORSHIP.H" 3 | 4 | struct _MonsterFunctionTable WORSHIP_FunctionTable; 5 | 6 | void WORSHIP_Init(struct _Instance* instance) // Matching - 98.30% 7 | { 8 | struct _MonsterAttributes* ma; 9 | struct _MonsterVars* mv; 10 | struct _Instance* weapon; 11 | 12 | short var_v0; 13 | 14 | mv = (struct _MonsterVars*)instance->extraData; 15 | ma = (struct _MonsterAttributes*)instance->data; 16 | if (mv->age == 0) 17 | { 18 | weapon = HUMAN_CreateWeapon(instance, 12, ma->rightWeaponSegment); 19 | if (weapon) 20 | { 21 | HUMAN_Init(weapon); 22 | } 23 | } 24 | else 25 | { 26 | HUMAN_CreateWeapon(instance, 11, ma->leftWeaponSegment); 27 | weapon = HUMAN_CreateWeapon(instance, 11, ma->rightWeaponSegment); 28 | if (weapon) 29 | { 30 | HUMAN_Init(weapon); 31 | } 32 | } 33 | if (mv->age == 0) 34 | { 35 | mv->soulJuice = 20480; 36 | } 37 | else 38 | { 39 | mv->soulJuice = 24576; 40 | } 41 | } 42 | 43 | void WORSHIP_CombatEntry(struct _Instance* instance) // Matching - 100% 44 | { 45 | struct _MonsterVars* mv; 46 | struct _MonsterAttributes* ma; 47 | struct _Instance* child; // Not exist in sysdump 48 | 49 | mv = (struct _MonsterVars*)instance->extraData; 50 | if (mv->enemy && mv->enemy->distance < mv->subAttr->combatAttributes->combatRange && mv->age == 1) 51 | { 52 | ma = (struct _MonsterAttributes*)instance->data; 53 | child = instance->LinkChild; 54 | if (child != NULL) { 55 | if ((child->LinkSibling == 0) && (child->ParentLinkNode == ma->rightWeaponSegment)) 56 | { 57 | INSTANCE_UnlinkFromParent(child); 58 | INSTANCE_LinkToParent(child, instance, ma->leftWeaponSegment); 59 | mv->mvFlags |= 0x20; 60 | } 61 | } 62 | else 63 | { 64 | HUMAN_CreateWeapon(instance, 11, ma->leftWeaponSegment); 65 | mv->mvFlags |= 0x20; 66 | } 67 | } 68 | MON_CombatEntry(instance); 69 | } 70 | -------------------------------------------------------------------------------- /KAIN2/Game/MONSTER/WORSHIP.H: -------------------------------------------------------------------------------- 1 | #ifndef WORSHIP_H 2 | #define WORSHIP_H 3 | 4 | #include "Game/MONSTER/MONSTER.H" 5 | 6 | extern struct _MonsterFunctionTable WORSHIP_FunctionTable; 7 | 8 | extern void WORSHIP_Init(struct _Instance *instance); // 0x8008EE08 9 | extern void WORSHIP_CombatEntry(struct _Instance *instance); // 0x8008EEA8 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /KAIN2/Game/OBTABLE.H: -------------------------------------------------------------------------------- 1 | #ifndef OBTABLE_H 2 | #define OBTABLE_H 3 | 4 | struct _ObjectOwnerInfo 5 | { 6 | long magicnum; // size=0, offset=0 7 | short animID; // size=0, offset=4 8 | char objectName[1]; // size=0, offset=6 9 | }; 10 | 11 | struct ObjectAccess 12 | { 13 | char* objectName; // size=0, offset=0 14 | void* object; // size=0, offset=4 15 | }; 16 | 17 | typedef struct _ObjectOwnerInfo ObjectOwnerInfo; 18 | 19 | typedef struct ObjectAccess ObjectAccess; 20 | 21 | struct ObjectFunc 22 | { 23 | char* scriptName; // size=0, offset=0 24 | void (*initFunc)(struct _Instance*, struct GameTracker*); // size=0, offset=4 25 | void (*processFunc)(struct _Instance* playerInstance, struct GameTracker* gameTracker); // size=0, offset=8 26 | void (*collideFunc)(struct _Instance* instance, struct GameTracker* gameTracker); // size=0, offset=12 27 | unsigned long (*queryFunc)(struct _Instance* instance, unsigned long Query); // size=0, offset=16 28 | void (*messageFunc)(struct _Instance* instance, unsigned long Message, unsigned long Data); // size=0, offset=20 29 | void (*additionalCollideFunc)(struct _Instance* instance, struct GameTracker* gameTracker); // size=0, offset=24 30 | void (*relocateTuneFunc)(struct Object* object, long offset); // size=0, offset=28 31 | void (*relocateInstObFunc)(struct _Instance* instance, long offset); // size=0, offset=32 32 | }; 33 | 34 | 35 | extern struct ObjectAccess objectAccess[28]; 36 | typedef struct ObjectFunc ObjectFunc; 37 | 38 | extern void OBTABLE_InstanceInit(struct _Instance *instance); // 0x8003D9AC 39 | extern void OBTABLE_GetInstanceCollideFunc(struct _Instance *instance); // 0x8003DA90 40 | extern void OBTABLE_GetInstanceAdditionalCollideFunc(struct _Instance *instance); // 0x8003DAD8 41 | extern void OBTABLE_GetInstanceProcessFunc(struct _Instance *instance); // 0x8003DB18 42 | extern void OBTABLE_GetInstanceQueryFunc(struct _Instance *instance); // 0x8003DB60 43 | extern void OBTABLE_GetInstanceMessageFunc(struct _Instance *instance); // 0x8003DBA8 44 | extern void OBTABLE_InitObjectWithID(struct Object *object); // 0x8003DBF0 45 | extern void OBTABLE_ClearObjectReferences(); // 0x8003DDC8 46 | extern void OBTABLE_RemoveObjectEntry(struct Object *object); // 0x8003DDFC 47 | extern struct Object * OBTABLE_FindObject(char *objectName); // 0x8003DE44 48 | extern void OBTABLE_ChangeObjectAccessPointers(struct Object *oldObject, struct Object *newObject); // 0x8003DEF0 49 | extern void OBTABLE_RelocateObjectTune(struct Object *object, long offset); // 0x8003DF38 50 | extern void OBTABLE_RelocateInstanceObject(struct _Instance *instance, long offset); // 0x8003DF9C 51 | extern void OBTABLE_InitAnimPointers(struct _ObjectTracker *objectTracker); // 0x8003DFF8 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /KAIN2/Game/OVERLAYS/CINEMAX.H: -------------------------------------------------------------------------------- 1 | #ifndef CINEMAX_H 2 | #define CINEMAX_H 3 | 4 | #define MAX_BUFFER_COUNT (3*2) 5 | 6 | struct BufferInfo 7 | { 8 | char* buffer[MAX_BUFFER_COUNT]; 9 | 10 | unsigned short unk_18; 11 | unsigned short unk_1A; 12 | unsigned short unk_1C; 13 | unsigned short unk_1E; 14 | 15 | unsigned short unk_20; 16 | unsigned short unk_22; 17 | unsigned short unk_24; 18 | unsigned short unk_26; 19 | 20 | unsigned short unk_28; 21 | unsigned short unk_2A; 22 | unsigned short unk_2C; 23 | unsigned short unk_2E; 24 | 25 | unsigned short unk_30; 26 | unsigned short unk_32; 27 | unsigned short unk_34; 28 | unsigned short unk_36; 29 | unsigned short unk_38; 30 | 31 | int unk_3A; 32 | int unk_3C; 33 | }; 34 | 35 | extern int CINEMAX_Play(char* strfile, unsigned short mask, int buffers); 36 | extern int CINEMAX_ActuallyPlay(char* strfile, unsigned short mask, int buffers); 37 | extern void CINEMAX_ClearBuffers(); 38 | extern void CINEMAX_VSync(); 39 | extern void CINEMAX_InitBufferDetails(char* b1, char* b2, char* b3, char* b4, struct BufferInfo* bd); 40 | extern void CINEMAX_InitStream(char* buffer, CdlLOC* fp, void (*func)()); 41 | extern void CINEMAX_Unknown(); 42 | extern void CINEMAX_E1EB0(unsigned int* func, int unk2); 43 | extern void CINEMAX_E1FCC(); 44 | extern int CINEMAX_E1658(struct BufferInfo* buffer_info); 45 | extern int CINEMAX_E1708(struct BufferInfo* buffer_info); 46 | extern void CINEMAX_KickCD(CdlLOC* fp); 47 | 48 | #endif -------------------------------------------------------------------------------- /KAIN2/Game/OVERLAYS/MCARDX.H: -------------------------------------------------------------------------------- 1 | #ifndef MCARDX_H 2 | #define MCARDX_H 3 | 4 | #include "Game/CORE.H" 5 | 6 | #include "Game/MCARD/MEMCARD.H" 7 | 8 | extern void MCARDX_initialize(struct mcmenu_t* mcmenu, struct memcard_t* memcard, int nblocks); 9 | extern int MCARDX_set_buffer(struct mcmenu_t* mcmenu, void* buffer, int nbytes); 10 | extern void MCARDX_begin(struct mcmenu_t* mcmenu); 11 | extern void MCARDX_end(struct mcmenu_t* mcmenu); 12 | extern int MCARDX_main(struct mcmenu_t* mcmenu, int index); 13 | extern void sub_80163C8C(struct mcpsx_t* mcpsx); 14 | extern void sub_80164380(struct mcard_t* mcard); 15 | extern int MCARDX_pause(struct mcmenu_t* mcmenu, int index); 16 | 17 | #endif -------------------------------------------------------------------------------- /KAIN2/Game/PLAN/ENMYPLAN.H: -------------------------------------------------------------------------------- 1 | #ifndef ENMYPLAN_H 2 | #define ENMYPLAN_H 3 | 4 | #include "PLANAPI.H" 5 | 6 | extern void ENMYPLAN_InitEnemyPlanPool(void *enemyPlanPool); // 0x800965A4 7 | 8 | extern int ENMYPLAN_GetNextAvailablePlanningSlot(); // 0x800965C4 9 | 10 | extern int ENMYPLAN_GetInitializedPlanningWorkspaceFinal(); // 0x80096604 11 | 12 | extern void ENMYPLAN_ReleasePlanningWorkspace(int slotID); // 0x80096660 13 | 14 | extern int ENMYPLAN_WayPointSkipped(_Position *currentPos, _Position *targetPos, _Position *nextTargetPos); // 0x800966C8 15 | 16 | extern int ENMYPLAN_WayPointReached(_Position *currentPos, _Position *oldCurrentPos, _Position *targetPos); // 0x80096834 17 | 18 | extern void ENMYPLAN_Replan(struct EnemyPlanSlotData *planSlot); // 0x800968E4 19 | 20 | extern int ENMYPLAN_PathClear(_Position *pos, _Position *target); // 0x80096910 21 | 22 | extern int ENMYPLAN_MoveToTargetFinal(struct _Instance *instance, _Position *outputPos, int slotID, _Position *targetPos, int validNodeTypes); // 0x80096A90 23 | 24 | extern int ValidSlotAndState(struct EnemyPlanSlotData *pool, int slotID); // 0x80096F9C 25 | 26 | extern int ENMYPLAN_GetNodeTypeOfNextWaypoint(int slotID); // 0x80096FE0 27 | 28 | extern int ENMYPLAN_GetPosOfNextWaypoint(int slotID, _Position *pos); // 0x8009704C 29 | 30 | extern void ENMYPLAN_RelocatePlanPositions(int slotID, _Position *offset); // 0x800970EC 31 | 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /KAIN2/Game/PLAN/PLAN.H: -------------------------------------------------------------------------------- 1 | #ifndef PLAN_H 2 | #define PLAN_H 3 | 4 | #include "PLANAPI.H" 5 | 6 | extern long PLAN_CalcMinDistFromExistingNodes(_Position *pos, struct PlanningNode *planningPool, int distanceType); // 0x80097188 7 | 8 | extern void PLAN_UpdatePlanMkrNodes(struct PlanningNode *planningPool, _Position *playerPos); // 0x80097224 9 | 10 | extern void PLAN_UpdatePlayerNode(struct PlanningNode *planningPool, _Position *playerPos); // 0x80097470 11 | 12 | extern void PLAN_AddRandomNode(struct PlanningNode *planningPool, _Position *playerPos); // 0x800975C4 13 | 14 | extern void PLAN_DeleteRandomNode(struct PlanningNode *planningPool); // 0x800977D0 15 | 16 | extern void PLAN_DeleteOutOfRangeNodesOfSource(struct PlanningNode *planningPool, _Position *playerPos, int nodeSourceToCheck, long removeDist); // 0x80097804 17 | 18 | extern void PLAN_AddOrRemoveRandomNodes(struct PlanningNode *planningPool, _Position *playerPos); // 0x800978DC 19 | 20 | extern void PLAN_AddInitialNodes(struct PlanningNode *planningPool, struct _Instance *player); // 0x8009792C 21 | 22 | extern void PLAN_AddOrRemoveNodes(struct PlanningNode *planningPool, struct _Instance *player); // 0x800979E8 23 | 24 | extern struct PlanningNode * PLAN_FindNodeMostInNeedOfConnectivityExpansion(struct PlanningNode *planningPool); // 0x80097AD0 25 | 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /KAIN2/Game/PLAN/PLANCOLL.H: -------------------------------------------------------------------------------- 1 | #ifndef PLANCOLL_H 2 | #define PLANCOLL_H 3 | 4 | #include "Game/CORE.H" 5 | #include "PLANAPI.H" 6 | #include "Game/COLLIDE.H" 7 | 8 | struct _fth { 9 | char x; // size=0, offset=0 10 | char y; // size=0, offset=1 11 | char z; // size=0, offset=2 12 | char nodeType; // size=0, offset=3 13 | }; 14 | 15 | extern int PLANCOLL_DoesLOSExistFinal(_Position *startPos, _Position *endPos, int collideType, int passThroughHit, int zoffset); // 0x80098B14 16 | 17 | extern int PLANCOLL_CheckUnderwaterPoint(_Position *position); // 0x80098C18 18 | 19 | extern int PLANCOLL_FindTerrainHitFinal(struct _PlanCollideInfo *pci, int *placement, int distBefore, int distAfter, int start, int end); // 0x80098D84 20 | 21 | extern int PLANCOLL_DoesStraightLinePathExist(_Position *startPos, _Position *endPos, int collideType); // 0x80099044 22 | 23 | extern int PLANCOLL_DoesWaterPathUpExist(_Position *startPos, _Position *endPos, int collideType, _Position *peakPos, int passThroughHit); // 0x800990D0 24 | 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /KAIN2/Game/PLAN/PLANPOOL.H: -------------------------------------------------------------------------------- 1 | #ifndef PLANPOOL_H 2 | #define PLANPOOL_H 3 | 4 | #include "PLANAPI.H" 5 | 6 | extern int PLANPOOL_NumNodesInPlan(struct PlanningNode *goalNode, struct PlanningNode *planningPool); // 0x80099208 7 | 8 | extern int PLANPOOL_CountBitsSetInLong(long mylong); // 0x80099254 9 | 10 | extern int PLANPOOL_NumConnectionsExaminedForNode(struct PlanningNode *node); // 0x80099274 11 | 12 | extern int PLANPOOL_NumConnectionsForNode(struct PlanningNode *node); // 0x80099298 13 | 14 | extern struct PlanningNode * PLANPOOL_GetFirstNodeOfSource(struct PlanningNode *planningPool, char nodeSource); // 0x800992BC 15 | 16 | extern int PLANPOOL_NumberOfNodesOfType(struct PlanningNode *planningPool, char nodeType); // 0x8009930C 17 | 18 | extern int PLANPOOL_NumberOfNodesOfSource(struct PlanningNode *planningPool, char nodeSource); // 0x80099358 19 | 20 | extern struct PlanningNode * PLANPOOL_GetNodeWithID(struct PlanningNode *planningPool, int type, int id, long suID); // 0x800993A8 21 | 22 | extern struct PlanningNode * PLANPOOL_GetNodeByPosition(_Position *currentPos, struct PlanningNode *planningPool); // 0x80099414 23 | 24 | extern struct PlanningNode * PLANPOOL_GetClosestNode(_Position *pos, struct PlanningNode *planningPool, char distanceType); // 0x800994E8 25 | 26 | extern int PLANPOOL_AppropriatePair(struct PlanningNode *node1, struct PlanningNode *node2); // 0x800995E8 27 | 28 | extern int PLANPOOL_AreTwoNodesConnected(struct PlanningNode *node1, struct PlanningNode *node2, struct PlanningNode *planningPool); // 0x8009975C 29 | 30 | extern void PLANPOOL_MarkTwoNodesAsConnected(struct PlanningNode *node1, struct PlanningNode *node2, struct PlanningNode *planningPool); // 0x800997CC 31 | 32 | extern void PLANPOOL_MarkTwoNodesAsNotConnected(struct PlanningNode *node1, struct PlanningNode *node2, struct PlanningNode *planningPool); // 0x800998C8 33 | 34 | extern struct PlanningNode * PLANPOOL_GetClosestUnexploredValidNeighbor(struct PlanningNode *startNode, struct PlanningNode *planningPool); // 0x80099924 35 | 36 | extern void PLANPOOL_ChangeNodePosition(_Position *newPos, struct PlanningNode *nodeToChange, struct PlanningNode *planningPool); // 0x80099A34 37 | 38 | extern struct PlanningNode * PLANPOOL_AddNodeToPool(_Position *pos, struct PlanningNode *planningPool, short nodeType, short nodeID, long streamUnitID); // 0x80099AEC 39 | 40 | extern void PLANPOOL_DeleteNodeFromPool(struct PlanningNode *nodeToDelete, struct PlanningNode *planningPool); // 0x80099BE0 41 | 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /KAIN2/Game/PLAN/PLANSRCH.H: -------------------------------------------------------------------------------- 1 | #ifndef PLANSRCH_H 2 | #define PLANSRCH_H 3 | 4 | #include "PLANAPI.H" 5 | 6 | 7 | extern int PLANSRCH_ValidNode(struct PlanningNode *node, int validNodeTypes); // 0x80099DAC 8 | 9 | extern struct PlanningNode * PLANSRCH_FindNodeToExpand(struct PlanningNode *planningPool, struct PlanningNode *goalNode, int validNodeTypes); // 0x80099DC4 10 | 11 | extern void PLANSRCH_ExpandNode(struct PlanningNode *planningPool, struct PlanningNode *nodeToExpand); // 0x80099ED8 12 | 13 | extern void PLANSRCH_InitNodesForSearch(struct PlanningNode *planningPool); // 0x80099FFC 14 | 15 | extern struct PlanningNode * PLANSRCH_FindPathInGraph(struct PlanningNode *planningPool, struct PlanningNode *startNode, struct PlanningNode *goalNode, int validNodeTypes); // 0x8009A048 16 | 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /KAIN2/Game/PLAYER.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | #include "PLAYER.H" 3 | #include "Game/RAZIEL/RAZIEL.H" 4 | 5 | void PLAYER_TurnHead(struct _Instance* instance, short* rotx, short* rotz, struct GameTracker* gameTracker) // Matching - 100% 6 | { 7 | if ((INSTANCE_Query(instance, 0x1) & 0x1)) 8 | { 9 | RAZIEL_TurnHead(instance, rotx, rotz, gameTracker); 10 | } 11 | else 12 | { 13 | MONAPI_TurnHead(instance, rotx, rotz, gameTracker); 14 | } 15 | } 16 | 17 | long PLAYER_OkToLookAround(struct _Instance* instance) // Matching - 100% 18 | { 19 | if ((INSTANCE_Query(instance, 0x1) & 0x1)) 20 | { 21 | return RAZIEL_OkToLookAround(instance); 22 | } 23 | else 24 | { 25 | return MONAPI_OkToLookAround(instance); 26 | } 27 | } 28 | 29 | void PLAYER_SetLookAround(struct _Instance* instance) // Matching - 100% 30 | { 31 | if (INSTANCE_Query(instance, 0x1) & 0x1) 32 | { 33 | RAZIEL_SetLookAround(instance); 34 | } 35 | else 36 | { 37 | MONAPI_SetLookAround(instance); 38 | } 39 | } 40 | 41 | void PLAYER_ReSetLookAround(struct _Instance* instance) // Matching - 100% 42 | { 43 | if(INSTANCE_Query(instance, 0x1) & 0x1) 44 | { 45 | RAZIEL_ResetLookAround(instance); 46 | } 47 | else 48 | { 49 | MONAPI_ResetLookAround(instance); 50 | } 51 | } -------------------------------------------------------------------------------- /KAIN2/Game/PSX/AADSEQEV.H: -------------------------------------------------------------------------------- 1 | #ifndef AADSEQEV_H 2 | #define AADSEQEV_H 3 | 4 | #include "AADLIB.H" 5 | 6 | extern int aadQueueNextEvent(struct _AadSequenceSlot *slot, int track); // 0x800548E8 7 | 8 | extern void aadExecuteEvent(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80054ADC 9 | 10 | extern void midiNoteOff(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80054B74 11 | 12 | extern void midiNoteOn(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80054B7C 13 | 14 | extern void aadUpdateChannelVolPan(struct _AadSequenceSlot *slot, int channel); // 0x80054EF0 15 | 16 | extern void aadUpdateSlotVolPan(struct _AadSequenceSlot *slot); // 0x80055274 17 | 18 | extern void aadUpdateChannelPitchBend(struct _AadSequenceSlot *slot, int channel); // 0x800555D0 19 | 20 | extern void midiPolyphonicAftertouch(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80055780 21 | 22 | extern void midiControlChange(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80055788 23 | 24 | extern void midiProgramChange(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x800557C4 25 | 26 | extern void midiChannelAftertouch(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x800557DC 27 | 28 | extern void midiPitchWheelControl(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x800557E4 29 | 30 | extern void midiMetaEvent(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x8005582C 31 | 32 | extern void midiControlBankSelect(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80055834 33 | 34 | extern void midiControlVolume(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x8005583C 35 | 36 | extern void midiControlPan(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x8005588C 37 | 38 | extern void midiControlCallback(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x800558DC 39 | 40 | extern void midiControlDummy(struct AadSeqEvent *event, struct _AadSequenceSlot *slot); // 0x80055920 41 | 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/AADSFX.H: -------------------------------------------------------------------------------- 1 | #ifndef AADSFX_H 2 | #define AADSFX_H 3 | 4 | 5 | extern unsigned long aadPlaySfx(unsigned int toneID, int volume, int pan, int pitchOffset); // 0x800569DC 6 | 7 | extern unsigned long aadStopSfx(unsigned long handle); // 0x80056A40 8 | 9 | extern void aadStopAllSfx(); // 0x80056A7C 10 | 11 | extern int aadIsSfxPlaying(unsigned long handle); // 0x80056AAC 12 | 13 | extern int aadIsSfxPlayingOrRequested(unsigned long handle); // 0x80056B1C 14 | 15 | extern int aadIsSfxTypePlaying(unsigned int toneID); // 0x80056BD4 16 | 17 | extern int aadIsSfxTypePlayingOrRequested(unsigned int sfxToneID); // 0x80056C48 18 | 19 | extern unsigned long aadSetSfxVolPanPitch(unsigned long handle, int volume, int pan, int pitch); // 0x80056D00 20 | 21 | extern unsigned long createSfxHandle(unsigned int toneID); // 0x80056D44 22 | 23 | extern void aadPutSfxCommand(int statusByte, int dataByte0, int dataByte1, unsigned long ulongParam, int shortParam); // 0x80056D8C 24 | 25 | extern void aadExecuteSfxCommand(struct AadSfxCommand *sfxCmd); // 0x80056E80 26 | 27 | extern void sfxCmdPlayTone(struct AadSfxCommand *sfxCmd); // 0x80056ECC 28 | 29 | extern void sfxCmdStopTone(struct AadSfxCommand *sfxCmd); // 0x80057038 30 | 31 | extern void sfxCmdStopAllTones(struct AadSfxCommand *sfxCmd); // 0x800570F0 32 | 33 | extern void sfxCmdSetToneVolumeAndPan(struct AadSfxCommand *sfxCmd); // 0x80057194 34 | 35 | extern void sfxCmdSetToneVolPanPitch(struct AadSfxCommand *sfxCmd); // 0x80057508 36 | 37 | extern void sfxCmdLockVoice(struct AadSfxCommand *sfxCmd); // 0x80057974 38 | 39 | extern void sfxCmdSetVoiceAttr(struct AadSfxCommand *sfxCmd); // 0x800579C0 40 | 41 | extern void sfxCmdSetVoiceKeyOn(struct AadSfxCommand *sfxCmd); // 0x80057A4C 42 | 43 | extern void sfxCmdSetVoiceKeyOff(struct AadSfxCommand *sfxCmd); // 0x80057A68 44 | 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/AADVOICE.H: -------------------------------------------------------------------------------- 1 | #ifndef AADVOICE_H 2 | #define AADVOICE_H 3 | 4 | #include "AADLIB.H" 5 | 6 | extern struct AadSynthVoice * aadAllocateVoice(int priority); // 0x80057A98 7 | 8 | extern void SpuSetVoiceADSR1ADSR2(int vNum, unsigned short adsr1, unsigned short adsr2); // 0x80057B8C 9 | 10 | extern void aadPlayTone(struct AadToneAtr *toneAtr, unsigned long waveStartAddr, struct AadProgramAtr *progAtr, int midiNote, int volume, int masterVolume, int masterPan, int slotVolume, int masterMasterVol, struct AadSynthVoice *voice, int pitchOffset); // 0x80057C34 11 | 12 | extern void aadPlayTonePitchBend(struct AadToneAtr *toneAtr, unsigned long waveStartAddr, struct AadProgramAtr *progAtr, int midiNote, int volume, int masterVolume, int masterPan, int slotVolume, int masterMasterVol, struct AadSynthVoice *voice, int pitchWheelPos); // 0x80058064 13 | 14 | extern unsigned long aadStepsPerCent[]; 15 | 16 | extern short aadPitchTable[]; 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/PSX_G2/MAINVM.C: -------------------------------------------------------------------------------- 1 | #include "MAINVM.H" 2 | #include "Game/PSX/MAIN.H" 3 | 4 | #if defined(PSXPC_VERSION) 5 | #include "Game/CORE.H" 6 | #if (defined(SDL2) || defined(__ANDROID__)) && defined(UWP_SDL2) || defined(_WIN32) && !defined(SN_TARGET_PSP2) && !defined(PLATFORM_NX) && !defined(PLATFORM_NX_ARM) && !defined(_XBOX) 7 | #undef R13 8 | #undef R12 9 | #undef R11 10 | #include 11 | #endif 12 | #endif 13 | 14 | struct _G2AppDataVM_Type _appDataVM; 15 | 16 | EMULATOR_THREAD_DEF 17 | 18 | #if !defined(EDITOR) 19 | 20 | #if defined(PLATFORM_NX) || defined(PLATFORM_NX_ARM) 21 | extern "C" void nnMain() 22 | #elif (defined(PSXPC_VERSION) || defined(__ANDROID__)) 23 | int main(int argc, char* argv[]) 24 | #elif defined(UWP) 25 | int main(Platform::Array^ args) 26 | #else 27 | int main() 28 | #endif 29 | { 30 | #if defined(PLATFORM_NX) || defined(PLATFORM_NX_ARM) 31 | MainG2(&_appDataVM); 32 | #else 33 | return MainG2(&_appDataVM); 34 | #endif 35 | } 36 | #endif 37 | 38 | #if defined(UWP_SDL2) 39 | #include 40 | 41 | int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 42 | { 43 | if (FAILED(Windows::Foundation::Initialize(RO_INIT_MULTITHREADED))) 44 | { 45 | return 1; 46 | } 47 | 48 | SDL_WinRTRunApp(SDL_main, NULL); 49 | return 0; 50 | } 51 | #endif 52 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/PSX_G2/MAINVM.H: -------------------------------------------------------------------------------- 1 | #ifndef MAINVM_H 2 | #define MAINVM_H 3 | 4 | #include "Game/CORE.H" 5 | 6 | struct _G2AppDataVM_Type // hashcode: 0xC1BF7B11 (dec: -1044415727) 7 | { 8 | int argc; // size=0, offset=0 9 | int* argv; // size=0, offset=4 10 | }; 11 | 12 | #if !defined(UWP) && !defined(__EMSCRIPTEN__) && !defined(PLATFORM_NX) && !defined(PLATFORM_NX_ARM) && !defined(SN_TARGET_PSP2) && !defined(__ANDROID__) && !defined(__APPLE__) && !defined(_XBOX) && !defined(__linux__) 13 | extern int main(); // 0x800962C0 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/PSX_G2/QUATVM.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "QUATVM.H" 3 | #include "Game/PSX/COLLIDES.H" 4 | #include "Game/MATH3D.H" 5 | 6 | void G2Quat_Slerp_VM(long ratio, struct _G2Quat_Type* quatA, struct _G2Quat_Type* quatB, struct _G2Quat_Type* quatOut, int spin)//Matching - 75.88% 7 | { 8 | long beta; 9 | short theta; 10 | short cos_t; 11 | long bflip; 12 | long foo[4]; 13 | long cosTemp1; 14 | long cosTemp2; 15 | 16 | gte_ldsv(quatA); 17 | 18 | gte_ldv0sv(quatB); 19 | 20 | gte_rtir(); 21 | 22 | cosTemp1 = (quatA->w * quatB->w) >> 12; 23 | 24 | gte_stlvnl0(&cosTemp2); 25 | 26 | cos_t = (short)(((unsigned short*)&cosTemp2)[0] + cosTemp1); 27 | 28 | if (cos_t < 0) 29 | { 30 | cos_t = -cos_t; 31 | 32 | bflip = 1; 33 | } 34 | else 35 | { 36 | bflip = 0; 37 | } 38 | 39 | if ((4096 - cos_t) > 0) 40 | { 41 | beta = MATH3D_racos_S(cos_t); 42 | theta = (short)beta; 43 | 44 | theta += (spin << 12); 45 | 46 | spin = rsin(beta); 47 | 48 | cosTemp1 = (ratio * theta); 49 | 50 | theta = spin; 51 | 52 | ratio = cosTemp1 >> 12; 53 | 54 | beta = ((rsin(beta - ratio) << 12) / theta); 55 | 56 | ratio = (rsin(ratio) << 12) / theta; 57 | } 58 | else 59 | { 60 | beta = 4096 - ratio; 61 | } 62 | 63 | if (bflip != 0) 64 | { 65 | ratio = -ratio; 66 | } 67 | 68 | gte_ldsv(quatA); 69 | 70 | gte_lddp(beta); 71 | 72 | gte_gpf12(); 73 | 74 | foo[3] = (beta * quatA->w) >> 12; 75 | 76 | gte_ldsv(quatB); 77 | 78 | gte_lddp(ratio); 79 | 80 | gte_gpl12(); 81 | 82 | foo[3] += ((ratio * quatB->w) >> 12); 83 | 84 | gte_stlvl(&foo); 85 | 86 | cosTemp1 = 0x1000000 / MATH3D_FastSqrt((((foo[3] * foo[3]) + (foo[0] * foo[0]) + (foo[1] * foo[1]) + (foo[2] * foo[2])) + 2048) >> 12); 87 | 88 | gte_lddp(cosTemp1); 89 | 90 | gte_gpf12(); 91 | 92 | quatOut->w =(short)((foo[3] * cosTemp1) >> 12); 93 | 94 | gte_stsv(quatOut); 95 | } -------------------------------------------------------------------------------- /KAIN2/Game/PSX/PSX_G2/QUATVM.H: -------------------------------------------------------------------------------- 1 | #ifndef QUATVM_H 2 | #define QUATVM_H 3 | 4 | 5 | extern void G2Quat_Slerp_VM(long ratio, struct _G2Quat_Type *quatA, struct _G2Quat_Type *quatB, struct _G2Quat_Type *quatOut, int spin); // 0x800962F4 6 | 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/SNMAIN.H: -------------------------------------------------------------------------------- 1 | #ifndef SNMAIN_H 2 | #define SNMAIN_H 3 | 4 | 5 | extern void __SN_ENTRY_POINT() ; // 0x800B6D2C 6 | 7 | extern void __main() ; // 0x800B6DD4 8 | 9 | extern void __initialised() ; // 0x800CAD6C 10 | 11 | extern void __heapbase() ; // 0x800CAD70 12 | 13 | extern void __heapsize() ; // 0x800CAD74 14 | 15 | extern void __text() ; // 0x800CAD78 16 | 17 | extern void __textlen() ; // 0x800CAD7C 18 | 19 | extern void __data() ; // 0x800CAD80 20 | 21 | extern void __datalen() ; // 0x800CAD84 22 | 23 | extern void __bss() ; // 0x800CAD88 24 | 25 | extern void __bsslen() ; // 0x800CAD8C 26 | 27 | extern void the_cine_table() ; // 0x800CAD90 28 | 29 | extern void __ra_temp() ; // 0x800D5AD0 30 | 31 | extern void voiceTracker() ; // 0x800D5AD4 32 | 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /KAIN2/Game/PSX/SUPPORT.H: -------------------------------------------------------------------------------- 1 | #ifndef SUPPORT_H 2 | #define SUPPORT_H 3 | 4 | 5 | //extern int printf(char *fmt); // 0x80074170 6 | 7 | //extern int sprintf(char *string, char *fmt); // 0x800741C0 8 | 9 | //extern int vsprintf(char *str, char *fmtstr, void *argptr); // 0x800741F0 10 | 11 | extern char * my_itoa(unsigned long value, char *str, int radix); // 0x8007446C 12 | 13 | //extern int atoi(char *str); // 0x8007453C 14 | 15 | extern int mytolower(int c); // 0x800745AC 16 | 17 | //extern int strcmpi(char *s1, char *s2); // 0x800745C8 18 | 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Android.cmake: -------------------------------------------------------------------------------- 1 | if(ANDROID) 2 | 3 | Message("Compiling for Android!") 4 | 5 | include_directories(${ROOT_DIR}/EXTERNAL/SDL/include) 6 | 7 | set(SDL2MAIN_LIBRARY SDL2main) 8 | set(SDL2_LIBRARY SDL2) 9 | set(GLES3_LIBRARY GLESv3) 10 | set(EGL_LIBRARY EGL) 11 | 12 | target_link_libraries(${PROJECT_NAME} 13 | ${SDL2MAIN_LIBRARY} 14 | ${SDL2_LIBRARY} 15 | ${GLES3_LIBRARY} 16 | ${EGL_LIBRARY} 17 | ) 18 | 19 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 20 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 21 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 22 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 23 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 24 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 25 | 26 | 27 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Apple.cmake: -------------------------------------------------------------------------------- 1 | if((APPLE)) 2 | 3 | #Find libs 4 | find_package(OpenGL REQUIRED) 5 | 6 | set(PSX_LIB libValkyrie.a) 7 | 8 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build/Build_Mac/External/libValkyrie/$(Configuration)) 9 | 10 | include_directories(${EXTERN_LIB_PATH}/SDL/include) 11 | 12 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Durango.cmake: -------------------------------------------------------------------------------- 1 | if(WINDOWS_STORE AND DEFINED PLATFORM_DURANGO) 2 | 3 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build_Durango/Emulator/$(Configuration) ${EXTERN_LIB_PATH}/SDL_mixer/VisualC-WinRT/x64/Debug/SDL_mixer-UWP ${EXTERN_LIB_PATH}/SDL/VisualC-WinRT/x64/Debug/SDL-UWP) 4 | target_link_libraries(${PROJECT_NAME} SDL2.lib SDL2_mixer.lib) 5 | 6 | include_directories(${EXTERN_LIB_PATH}/SDL/include) 7 | include_directories(${EXTERN_LIB_PATH}/SDL_mixer/include) 8 | 9 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /ZW") 10 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /ZW") 11 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /ZW") 12 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW") 13 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZW") 14 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /ZW") 15 | 16 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 17 | 18 | set(PSX_LIB Valkyrie.lib) 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Emscripten.cmake: -------------------------------------------------------------------------------- 1 | if(EMSCRIPTEN) 2 | 3 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -sALLOW_MEMORY_GROWTH -sPTHREAD_POOL_SIZE_STRICT=0 -sASYNCIFY --std=c++11 -s USE_WEBGL2=1 -s FULL_ES3=1 -s USE_PTHREADS=1 -s WASM=1 -s USE_SDL=2") 4 | 5 | set(SDL2_LIBRARIES "-s USE_SDL=2") 6 | 7 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 8 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O3 -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 9 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 10 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 11 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O3 -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 12 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 13 | 14 | link_directories(${ROOT_DIR}/Build_EMSDK/libValkyrie/) 15 | 16 | set(PSX_LIB ${ROOT_DIR}/Build/Build_EMSDK/External/libValkyrie/libValkyrie.a) 17 | 18 | set(CMAKE_EXECUTABLE_SUFFIX ".html") 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Linux.cmake: -------------------------------------------------------------------------------- 1 | if(UNIX AND NOT(ANDROID) AND NOT(EMSCRIPTEN) AND NOT (PLATFORM_NX_ARM) AND NOT (APPLE)) 2 | 3 | #Find libs 4 | find_package(OpenGL REQUIRED) 5 | 6 | set(PSX_LIB libValkyrie.a) 7 | 8 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build/Build_Linux/External/libValkyrie/) 9 | 10 | include_directories(${EXTERN_LIB_PATH}/SDL/include) 11 | 12 | set(CMAKE_CXX_STANDARD 11) 13 | 14 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpermissive -Wno-narrowing -DDEBUG -D_DEBUG") 15 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fpermissive -Wno-narrowing -DDEBUG -D_DEBUG") 16 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fpermissive -Wno-narrowing -DDEBUG -D_DEBUG") 17 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -Wno-narrowing -DDEBUG -D_DEBUG") 18 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fpermissive -Wno-narrowing -DDEBUG -D_DEBUG") 19 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fpermissive -Wno-narrowing -DDEBUG -D_DEBUG") 20 | 21 | endif() 22 | -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Mingw.cmake: -------------------------------------------------------------------------------- 1 | if(MINGW) 2 | 3 | #Find libs 4 | find_package(SDL2 REQUIRED) 5 | find_package(OpenGL REQUIRED) 6 | #We want to link GLEW statically 7 | set(GLEW_USE_STATIC_LIBS ON) 8 | find_package(GLEW REQUIRED) 9 | 10 | #We want to link GLEW statically 11 | set(GLEW_USE_STATIC_LIBS ON) 12 | 13 | #Setup project include directories 14 | include_directories(${GLEW_INCLUDE_DIR}) 15 | include_directories(${SDL2_INCLUDE_DIR}) 16 | 17 | set(PSX_LIB libPSXCombined.a) 18 | 19 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-narrowing -std=c++11") 20 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wno-narrowing -std=c++11") 21 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-narrowing -std=c++11") 22 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing -std=c++11") 23 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-narrowing -std=c++11") 24 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-narrowing -std=c++11") 25 | 26 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Win32.cmake: -------------------------------------------------------------------------------- 1 | if(NOT ("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "x64") AND MSVC AND NOT WINDOWS_STORE AND NOT PLATFORM_PSP2 AND NOT PLATFORM_NX AND NOT PLATFORM_NX_ARM) 2 | 3 | #Find libs 4 | find_package(OpenGL REQUIRED) 5 | 6 | find_package(Vulkan) 7 | if(Vulkan_FOUND) 8 | include_directories(${Vulkan_INCLUDE_DIR}) 9 | 10 | target_link_libraries( 11 | ${PROJECT_NAME} 12 | ${Vulkan_LIBRARY} 13 | ) 14 | endif() 15 | 16 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build/Build_Win32/External/libValkyrie/$(Configuration)) 17 | 18 | set(PSX_LIB Valkyrie.lib) 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/Win64.cmake: -------------------------------------------------------------------------------- 1 | if(("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "x64") AND MSVC AND NOT WINDOWS_STORE AND NOT PLATFORM_PSP2 AND NOT PLATFORM_NX AND NOT PLATFORM_NX_ARM) 2 | 3 | #Find libs 4 | find_package(OpenGL REQUIRED) 5 | 6 | find_package(Vulkan) 7 | if(Vulkan_FOUND) 8 | include_directories(${Vulkan_INCLUDE_DIR}) 9 | 10 | target_link_libraries( 11 | ${PROJECT_NAME} 12 | ${Vulkan_LIBRARY} 13 | ) 14 | endif() 15 | 16 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build/Build_Win64/External/libValkyrie/$(Configuration)) 17 | 18 | set(PSX_LIB Valkyrie.lib) 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/Platform/WindowsStore.cmake: -------------------------------------------------------------------------------- 1 | if(WINDOWS_STORE AND NOT DEFINED PLATFORM_DURANGO) 2 | 3 | include_directories(${EXTERN_LIB_PATH}/SDL/Include) 4 | 5 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /ZW") 6 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /ZW") 7 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /ZW") 8 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW") 9 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZW") 10 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /ZW") 11 | 12 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 13 | 14 | set(PSX_LIB Valkyrie.lib) 15 | 16 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build/Build_UWP/External/libValkyrie/$(Configuration)) 17 | 18 | endif() -------------------------------------------------------------------------------- /KAIN2/Game/RAZCNTRL.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | #include "RAZCNTRL.H" 3 | 4 | long RazielCommands[10] = { 0x8000, 0x40, 0x20, 0x80, 0x400, 0x800, 0x100, 0x200, 0xC00, 0x10 }; 5 | int Pending; 6 | int Up; 7 | int Down; 8 | 9 | void ProcessRazControl(long* command) // Matching - 100% 10 | { 11 | if ((command[0] & RazielCommands[2])) 12 | { 13 | Up = 0; 14 | 15 | Down++; 16 | } 17 | else 18 | { 19 | Up++; 20 | 21 | if (Down != 0) 22 | { 23 | Pending = Down; 24 | } 25 | 26 | Down = 0; 27 | } 28 | 29 | if (Down >= 6) 30 | { 31 | Pending = Down; 32 | } 33 | 34 | if (Up >= 3) 35 | { 36 | Pending = 0; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZCNTRL.H: -------------------------------------------------------------------------------- 1 | #ifndef RAZCNTRL_H 2 | #define RAZCNTRL_H 3 | 4 | extern long RazielCommands[10]; 5 | 6 | extern void ProcessRazControl(long *command); // 0x80070694 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/ALGOCTRL.H: -------------------------------------------------------------------------------- 1 | #ifndef ALGOCTRL_H 2 | #define ALGOCTRL_H 3 | 4 | extern void InitAlgorithmicWings(struct _Instance *instance); // 0x800A1C24 5 | 6 | extern void DeInitAlgorithmicWings(struct _Instance *instance); // 0x800A1DBC 7 | 8 | extern void AlgorithmicWings(struct _Instance *instance, struct evAnimationControllerDoneData *ControllerData); // 0x800A1E4C 9 | 10 | extern void AlgorithmicNeck(struct _Instance *Player, struct _Instance *Target); // 0x800A1EBC 11 | 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/ATTACK.H: -------------------------------------------------------------------------------- 1 | #ifndef ATTACK_H 2 | #define ATTACK_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | extern int StateHandlerDecodeHold(int *Message, int *Data); // 0x8009BB00 7 | 8 | extern void StateHandlerAttack2(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009BE68 9 | 10 | extern void StateHandlerCannedReaction(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009CF38 11 | 12 | extern void StateHandlerStumble(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009D1C8 13 | 14 | extern void StateHandlerHitReaction(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009D5EC 15 | 16 | extern void StateHandlerThrow2(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009D868 17 | 18 | extern void PointAt(struct _Instance *instance, _Position *Target, struct _Rotation *Rot1); // 0x8009E390 19 | 20 | extern void ThrowSetFocusPoint(struct _Instance *instance, struct _Rotation *rot); // 0x8009E4B0 21 | 22 | extern void LimitRotation(struct _Rotation *rot); // 0x8009E5F0 23 | 24 | extern void StateHandlerGrab(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009E764 25 | 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/CONTROL.H: -------------------------------------------------------------------------------- 1 | #ifndef CONTROL_H 2 | #define CONTROL_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | struct __Force 7 | { 8 | int Type; // size=0, offset=0 9 | struct _Vector LinearForce; // size=12, offset=4 10 | short Friction; // size=0, offset=16 11 | }; 12 | 13 | extern void SetPhysics(struct _Instance *instance, short gravity, long x, long y, long z); // 0x8009A1B0 14 | 15 | extern void ResetPhysics(struct _Instance *instance, short gravity); // 0x8009A224 16 | 17 | extern void SetDampingPhysics(struct _Instance *instance, int damping); // 0x8009A2E0 18 | 19 | extern void SetImpulsePhysics(struct _Instance *instance, struct __Player *player); // 0x8009A388 20 | 21 | extern void SetDropPhysics(struct _Instance *instance, struct __Player *player); // 0x8009A4B8 22 | 23 | extern void InitExternalForces(struct __Force *Forces, int MaxForces); // 0x8009A4F0 24 | 25 | extern void SetExternalForce(struct __Force *In, short x, short y, short z, short Space, int Friction); // 0x8009A530 26 | 27 | extern void SetExternalTransitionForce(struct __Force *in, struct _Instance *instance, int time, int x, int y, int z); // 0x8009A570 28 | 29 | extern void ProcessPhysics(struct __Player *player, struct __CharacterState *In, int CurrentSection, int Mode); // 0x8009A5D8 30 | 31 | extern void ApplyExternalLocalForces(struct __Player *player, struct _Instance *instance, struct __Force *Forces, int MaxForces, struct _Vector *Out); // 0x8009A7D0 32 | 33 | extern int PhysicsMode; 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/HEALTH.H: -------------------------------------------------------------------------------- 1 | #ifndef HEALTH_H 2 | #define HEALTH_H 3 | 4 | 5 | extern void InitHealthSystem(); // 0x800A45C8 6 | 7 | extern void GainHealth(int data); // 0x800A4668 8 | 9 | extern void LoseHealth(int amount); // 0x800A46F4 10 | 11 | extern void DrainHealth(int amount); // 0x800A47F0 12 | 13 | extern void BumpUpHealth(); // 0x800A490C 14 | 15 | extern int GetMaxHealth(); // 0x800A4950 16 | 17 | extern void ProcessHealth(struct _Instance *instance); // 0x800A49A0 18 | 19 | extern int HealthCheckForLowHealth(); // 0x800A4E4C 20 | 21 | extern void DrainMana(int amount); // 0x800A4EB8 22 | 23 | extern void SetMana(int amount); // 0x800A4EFC 24 | 25 | extern void HealthInstantDeath(struct _Instance *instance); // 0x800A4F24 26 | 27 | extern void RAZIEL_DebugHealthSetScale(long healthScale); // 0x800A4FA4 28 | 29 | extern void RAZIEL_DebugManaSetMax(long manaScale); // 0x800A4FFC 30 | 31 | extern void RAZIEL_DebugHealthFillUp(); // 0x800A5024 32 | 33 | extern void RAZIEL_DebugManaFillUp(); // 0x800A5084 34 | 35 | extern void razPlayUnderworldSounds(struct _Instance *instance); // 0x800A50A4 36 | 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/PUPPET.H: -------------------------------------------------------------------------------- 1 | #ifndef PUPPET_H 2 | #define PUPPET_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | extern void StateHandlerPuppetShow(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009A984 7 | 8 | extern void StateHandlerMoveToPosition(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009AD20 9 | 10 | extern void DefaultPuppetStateHandler(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009AFC8 11 | 12 | extern void StateHandlerWarpGate(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009B27C 13 | 14 | extern void StateHandlerForcedGlide(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009B710 15 | 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/RAZDBUG.C: -------------------------------------------------------------------------------- 1 | #include "Game/CORE.H" 2 | #include "RAZDBUG.H" 3 | 4 | void DebugProcess(struct _Instance* instance, struct __Player* player) 5 | { 6 | } -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/RAZDBUG.H: -------------------------------------------------------------------------------- 1 | #ifndef RAZDBUG_H 2 | #define RAZDBUG_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | extern void DebugProcess(struct _Instance *instance, struct __Player *player); // 0x800A338C 7 | 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/SENSES.H: -------------------------------------------------------------------------------- 1 | #ifndef SENSES_H 2 | #define SENSES_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | extern int SetEngagedInstance(struct __Player *player, struct evCollideInstanceStatsData *Ptr, unsigned long Attribute); // 0x800A3394 7 | 8 | extern void UpdateEngagementList(struct evCollideInstanceStatsData *Ptr, struct __Player *player); // 0x800A342C 9 | 10 | extern long UpdateAutoFaceAngle(struct _Instance *player, struct _Instance *instance); // 0x800A4588 11 | 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/SPIDER.H: -------------------------------------------------------------------------------- 1 | #ifndef SPIDER_H 2 | #define SPIDER_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | extern void StateHandlerWallGrab(struct __CharacterState *In, int CurrentSection, int Data); // 0x800A0E58 7 | 8 | extern void StateHandlerWallIdle(struct __CharacterState *In, int CurrentSection, int Data); // 0x800A10C8 9 | 10 | extern void StateHandlerWallDismount(struct __CharacterState *In, int CurrentSection, int Data); // 0x800A19B0 11 | 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/STEERING.H: -------------------------------------------------------------------------------- 1 | #ifndef STEERING_H 2 | #define STEERING_H 3 | 4 | 5 | extern int UpdateZoneDelta(int rc, int LastRC); // 0x800A213C 6 | 7 | extern int GetControllerInput(int *ZDirection, long *controlCommand); // 0x800A2178 8 | 9 | extern int DecodeDirection(int Source, int Destination, short *Difference, short *Zone); // 0x800A2358 10 | 11 | extern int ProcessMovement(struct _Instance *instance, long *controlCommand, struct GameTracker *GT); // 0x800A2448 12 | 13 | extern void SteerTurn(struct _Instance *instance, int rc); // 0x800A298C 14 | 15 | extern void SteerMove(struct _Instance *instance, int rc); // 0x800A2A20 16 | 17 | extern int SteerAutoFace(struct _Instance *instance, long *controlCommand); // 0x800A2AD0 18 | 19 | extern void SteerSwim(struct _Instance *instance); // 0x800A2D64 20 | 21 | extern void SteerWallcrawling(struct _Instance *instance); // 0x800A2E54 22 | 23 | extern void SteerDisableAutoFace(struct _Instance *instance); // 0x800A2E88 24 | 25 | extern void SteerSwitchMode(struct _Instance *instance, int mode); // 0x800A2F1C 26 | 27 | extern void razInitWallCrawlSteering(struct _Instance *instance); // 0x800A3178 28 | 29 | extern void razDeinitWallCrawlSteering(struct _Instance *instance); // 0x800A32B4 30 | 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /KAIN2/Game/RAZIEL/SWIM.H: -------------------------------------------------------------------------------- 1 | #ifndef SWIM_H 2 | #define SWIM_H 3 | 4 | #include "Game/PLAYER.H" 5 | 6 | extern void StateHandlerInitSwim(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009EEFC 7 | 8 | extern void StateHandlerSwimCoil(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009F008 9 | 10 | extern void StateHandlerSwimTread(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009F788 11 | 12 | extern void StateHandlerSwimDiveIn(struct __CharacterState *In, int CurrentSection, int Data); // 0x8009FF50 13 | 14 | extern void StateHandlerSwim(struct __CharacterState *In, int CurrentSection, int Data); // 0x800A02DC 15 | 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /KAIN2/Game/RELMOD.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | #include "RELMOD.H" 3 | 4 | #if defined(PSXPC_VERSION) 5 | void RELMOD_InitModulePointers(uintptr_t baseaddr, int* relocs) 6 | #else 7 | void RELMOD_InitModulePointers(int baseaddr, int* relocs) // Matching - 100% 8 | #endif 9 | { 10 | unsigned int* rel_addr; 11 | int temp; // not from SYMDUMP 12 | 13 | while (*relocs != -1) 14 | { 15 | rel_addr = (unsigned int*)(baseaddr + (*relocs & ~0x3)); 16 | 17 | switch (*relocs++ & 0x3) 18 | { 19 | case 0: 20 | temp = *rel_addr; 21 | 22 | if (temp >= 0) 23 | { 24 | *rel_addr += baseaddr; 25 | } 26 | 27 | break; 28 | case 1: 29 | *(short*)rel_addr = ((baseaddr + *relocs++) + 32768) >> 16; 30 | break; 31 | case 2: 32 | *(short*)rel_addr += baseaddr; 33 | break; 34 | case 3: 35 | *rel_addr += ((unsigned int)baseaddr << 4) >> 6; 36 | break; 37 | } 38 | } 39 | } 40 | 41 | 42 | void RELMOD_RelocModulePointers(int baseaddr, int offset, int* relocs) // Matching - 95.78% 43 | { 44 | int oldbaseaddr; 45 | int* rel_addr; 46 | 47 | while (*relocs != -1) 48 | { 49 | oldbaseaddr = baseaddr - offset; 50 | 51 | rel_addr = (int*)(baseaddr + (*relocs & ~0x3)); 52 | 53 | switch (*relocs++ & 0x3) 54 | { 55 | case 0: 56 | *rel_addr += offset; 57 | break; 58 | case 1: 59 | *(short*)rel_addr = (((baseaddr + *relocs++) + 32768) >> 16); 60 | break; 61 | case 2: 62 | *(short*)rel_addr += offset; 63 | break; 64 | case 3: 65 | *rel_addr = (*rel_addr - (((unsigned int)oldbaseaddr << 4) >> 6)) + ((unsigned int)(baseaddr << 4) >> 6); 66 | break; 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /KAIN2/Game/RELMOD.H: -------------------------------------------------------------------------------- 1 | #ifndef RELMOD_H 2 | #define RELMOD_H 3 | 4 | #include "CORE.H" 5 | 6 | extern void RELMOD_InitModulePointers(uintptr_t baseaddr, int* relocs); // 0x8007C974 7 | 8 | extern void RELMOD_RelocModulePointers(int baseaddr, int offset, int *relocs); // 0x8007CA58 9 | 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /KAIN2/Game/RESOLVE.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | #include "RESOLVE.H" 3 | 4 | void RESOLVE_Pointers(struct RedirectList* redirectList, long* data, long* baseAddr)//Matching - 100% 5 | { 6 | long* rdList; 7 | int i; 8 | long* handle; 9 | 10 | rdList = redirectList->data; 11 | 12 | for (i = redirectList->numPointers; i != 0; i--, rdList++) 13 | { 14 | handle = (long*)((char*)data + *rdList); 15 | *handle += (long)((char*)baseAddr); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /KAIN2/Game/RESOLVE.H: -------------------------------------------------------------------------------- 1 | #ifndef RESOLVE_H 2 | #define RESOLVE_H 3 | 4 | #include "CORE.H" 5 | 6 | struct RedirectList 7 | { 8 | long numPointers; // size=0, offset=0 9 | long* data; // size=0, offset=4 10 | }; 11 | 12 | extern void RESOLVE_Pointers(struct RedirectList* redirectList, long* data, long* baseAddr); // 0x8003C678 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /KAIN2/Game/SCRIPT.H: -------------------------------------------------------------------------------- 1 | #ifndef SCRIPT_H 2 | #define SCRIPT_H 3 | 4 | 5 | extern void SCRIPT_CombineEulerAngles(struct _Rotation *combinedRotation, struct _Rotation *inputRotation1, struct _Rotation *inputRotation2); // 0x8003C6B0 6 | 7 | extern void SCRIPT_InstanceSplineInit(struct _Instance *instance); // 0x8003C730 8 | 9 | extern short SCRIPTCountFramesInSpline(struct _Instance *instance); // 0x8003C980 10 | 11 | extern struct Spline * ScriptGetPosSpline(struct _Instance *instance); // 0x8003CAD0 12 | 13 | extern struct RSpline * ScriptGetRotSpline(struct _Instance *instance); // 0x8003CB08 14 | 15 | extern int SCRIPT_GetSplineFrameNumber(struct _Instance *instance, struct SplineDef *splineDef); // 0x8003CB40 16 | 17 | extern struct MultiSpline * SCRIPT_GetMultiSpline(struct _Instance *instance, unsigned long *isParent, unsigned long *isClass); // 0x8003CBA0 18 | 19 | extern struct SplineDef * SCRIPT_GetPosSplineDef(struct _Instance *instance, struct MultiSpline *multi, unsigned long isParent, unsigned long isClass); // 0x8003CC4C 20 | 21 | extern struct SplineDef * SCRIPT_GetRotSplineDef(struct _Instance *instance, struct MultiSpline *multi, unsigned long isParent, unsigned long isClass); // 0x8003CC78 22 | 23 | extern struct SplineDef * SCRIPT_GetScaleSplineDef(struct _Instance *instance, struct MultiSpline *multi, unsigned long isParent, unsigned long isClass); // 0x8003CCA4 24 | 25 | extern void SCRIPT_RelativisticSpline(struct _Instance *instance, struct _SVector *point); // 0x8003CCD0 26 | 27 | extern void SCRIPT_InstanceSplineSet(struct _Instance *instance, short frameNum, struct SplineDef *splineDef, struct SplineDef *rsplineDef, struct SplineDef *ssplineDef); // 0x8003CEC0 28 | 29 | extern long SCRIPT_SplineProcess(struct _Instance *instance, struct MultiSpline *multi, struct SplineDef *splineDef, struct SplineDef *rsplineDef, struct SplineDef *ssplineDef, int direction, int isClass); // 0x8003D198 30 | 31 | extern long SCRIPT_InstanceSplineProcess(struct _Instance *instance, struct SplineDef *splineDef, struct SplineDef *rsplineDef, struct SplineDef *ssplineDef, int direction); // 0x8003D480 32 | 33 | extern void SCRIPT_FadeOutProcess(struct _Instance *instance); // 0x8003D588 34 | 35 | extern void ScriptKillInstance(struct _Instance *instance, int effect); // 0x8003D5D0 36 | 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /KAIN2/Game/STRMLOAD.H: -------------------------------------------------------------------------------- 1 | #ifndef STRMLOAD_H 2 | #define STRMLOAD_H 3 | 4 | #include "LOAD3D.H" 5 | 6 | struct _LoadQueueEntry 7 | { 8 | struct _LoadQueueEntry* next; // size=112, offset=0 9 | short status; // size=0, offset=4 10 | char relocateBinary; // size=0, offset=6 11 | char mempackUsed; // size=0, offset=7 12 | struct _NonBlockLoadEntry loadEntry; // size=100, offset=8 13 | #ifdef PSX_VERSION 14 | #if defined(PSXPC_VERSION) 15 | long long endLoadTime; // size=0, offset=108 16 | #else 17 | long endLoadTime; // size=0, offset=108 18 | #endif 19 | #endif 20 | }; 21 | 22 | extern int gCurDir; // offset 0x800CF4E8 23 | 24 | extern int numLoads; // offset 0x800D2730 25 | 26 | extern struct _LoadQueueEntry* loadFree; // offset 0x800D2724 27 | 28 | extern int loadFromHead; // offset 0x800CF4E0 29 | 30 | extern struct _LoadQueueEntry* loadHead; // offset 0x800D2728 31 | 32 | extern struct _LoadQueueEntry LoadQueue[40]; // offset 0x800D1D24 33 | 34 | extern struct _LoadStatus loadStatus; // offset 0x800D0D84 35 | 36 | extern struct _LoadQueueEntry* loadTail; // offset 0x800D272C 37 | 38 | extern void STREAM_NextLoadFromHead(); // 0x8005FAE8 39 | 40 | extern void STREAM_NextLoadCanFail(); // 0x8005FAF8 41 | 42 | extern void STREAM_NextLoadAsNormal(); // 0x8005FB08 43 | 44 | extern void STREAM_InitLoader(char *bigFileName, char *voiceFileName); // 0x8005FB18 45 | 46 | extern void STREAM_RemoveQueueHead(); // 0x8005FB6C 47 | 48 | extern void STREAM_RemoveQueueEntry(struct _LoadQueueEntry *entry, struct _LoadQueueEntry *prev); // 0x8005FBAC 49 | 50 | extern struct _LoadQueueEntry * STREAM_AddQueueEntryToTail(); // 0x8005FC08 51 | 52 | extern struct _LoadQueueEntry * STREAM_AddQueueEntryToHead(); // 0x8005FC74 53 | 54 | extern int STREAM_IsCdBusy(long *numberInQueue); // 0x8005FD28 55 | 56 | extern int STREAM_PollLoadQueue(); // 0x8005FD48 57 | 58 | extern struct _LoadQueueEntry * STREAM_SetUpQueueEntry(char *fileName, void *retFunc, void *retData, void *retData2, void **retPointer, int fromhead); // 0x800600C8 59 | 60 | extern void STREAM_QueueNonblockingLoads(char *fileName, unsigned char memType, void *retFunc, void *retData, void *retData2, void **retPointer, long relocateBinary); // 0x800601B4 61 | 62 | extern void LOAD_LoadToAddress(char *fileName, void* loadAddr, long relocateBinary); // 0x80060240 63 | 64 | extern void LOAD_NonBlockingBinaryLoad(char *fileName, void *retFunc, void *retData, void *retData2, void **retPointer, int memType); // 0x800602A8 65 | 66 | extern void LOAD_NonBlockingFileLoad(char *fileName, void *retFunc, void *retData, void *retData2, void **retPointer, int memType); // 0x800602EC 67 | 68 | extern void LOAD_NonBlockingBufferedLoad(char *fileName, void *retFunc, void *retData, void *retData2); // 0x8006032C 69 | 70 | extern int LOAD_IsXAInQueue(); // 0x80060368 71 | 72 | extern void LOAD_PlayXA(int number); // 0x800603B0 73 | 74 | extern long * LOAD_ReadFile(char *fileName, unsigned char memType); // 0x800603E0 75 | 76 | extern void LOAD_ChangeDirectory(char *name); // 0x8006042C 77 | 78 | extern void LOAD_AbortDirectoryChange(char *name); // 0x80060478 79 | 80 | extern void LOAD_AbortFileLoad(char *fileName, void *retFunc); // 0x80060500 81 | 82 | 83 | #endif 84 | -------------------------------------------------------------------------------- /KAIN2/Game/TIMER.C: -------------------------------------------------------------------------------- 1 | #include "CORE.H" 2 | #include "TIMER.H" 3 | #include "PSX/MAIN.H" 4 | 5 | volatile int gameTimer; // 0x800D05F0 6 | 7 | #if defined(PSXPC_VERSION) 8 | unsigned long long TIMER_GetTimeMS() 9 | #else 10 | unsigned long TIMER_GetTimeMS() // Matching - 100% 11 | #endif 12 | { 13 | #if defined (PSXPC_VERSION) 14 | return (1000 * Emulator_GetPerformanceCounter()) / Emulator_GetPerformanceFrequency(); 15 | #elif defined(PSX_VERSION) 16 | unsigned long ticks; 17 | unsigned long mticks; 18 | 19 | EnterCriticalSection(); 20 | ticks = GetRCnt(0xF2000000) & 0xFFFF; 21 | mticks = gameTimer; 22 | ExitCriticalSection(); 23 | return (mticks >> 16) * 126819 + (ticks | mticks << 16) / 33869; 24 | #endif 25 | } 26 | 27 | #if defined(PSXPC_VERSION) 28 | unsigned long long TIMER_TimeDiff(long long x) 29 | #else 30 | unsigned long TIMER_TimeDiff(unsigned long x) 31 | #endif 32 | { 33 | #if defined(PSXPC_VERSION) 34 | return Emulator_GetPerformanceCounter() / (Emulator_GetPerformanceFrequency() / 1000000) - x; 35 | 36 | #elif defined(PSX_VERSION) 37 | unsigned long intrs; 38 | unsigned long ticks; 39 | unsigned long prevIntrs; 40 | unsigned long prevTicks; 41 | unsigned long diffIntrs; 42 | unsigned long diffTicks; 43 | unsigned long timeDiff; 44 | 45 | ticks = GetRCnt(0xF2000000) & 0xFFFF; 46 | prevIntrs = x >> 16; 47 | intrs = gameTimer & 0xFFFF; 48 | prevTicks = x & 0xFFFF; 49 | 50 | if (intrs < prevIntrs) 51 | { 52 | diffIntrs = (intrs + 65536) - prevIntrs; 53 | } 54 | else 55 | { 56 | diffIntrs = intrs - prevIntrs; 57 | } 58 | 59 | if (ticks < prevTicks) 60 | { 61 | diffTicks = (ticks + 65535) - prevTicks; 62 | diffIntrs--; 63 | } 64 | else 65 | { 66 | diffTicks = ticks - prevTicks; 67 | } 68 | 69 | if (diffIntrs >= 2259) 70 | { 71 | timeDiff = 4293263; 72 | } 73 | else 74 | { 75 | timeDiff = ((diffTicks * 29) + (diffIntrs * 1900515)) / 1000; 76 | } 77 | 78 | if (gTimerEnabled == 0) 79 | { 80 | timeDiff = 0; 81 | } 82 | 83 | return timeDiff; 84 | #endif 85 | } 86 | -------------------------------------------------------------------------------- /KAIN2/Game/TIMER.H: -------------------------------------------------------------------------------- 1 | #ifndef TIMER_H 2 | #define TIMER_H 3 | 4 | extern volatile int gameTimer; // 0x800D05F0 5 | 6 | 7 | #if defined(PSXPC_VERSION) 8 | extern unsigned long long TIMER_GetTimeMS(); // 0x8003D7B0 9 | extern unsigned long long TIMER_TimeDiff(long long x); // 0x8003D840 10 | #else 11 | extern unsigned long TIMER_GetTimeMS(); // 0x8003D7B0 12 | extern unsigned long TIMER_TimeDiff(unsigned long x); // 0x8003D840 13 | #endif 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /KAIN2/Game/UNDRWRLD.H: -------------------------------------------------------------------------------- 1 | #ifndef UNDRWRLD_H 2 | #define UNDRWRLD_H 3 | 4 | struct UW_ScreenXY 5 | { 6 | short sx; // size=0, offset=0 7 | short sy; // size=0, offset=2 8 | short dx; // size=0, offset=4 9 | short dy; // size=0, offset=6 10 | }; 11 | 12 | extern void UNDERWORLD_StartProcess(); // 0x800B4B90 13 | 14 | extern long UNDERWORLD_RotateScreenStep(long time); // 0x800B4C14 15 | 16 | extern void UNDERWORLD_DoUV(unsigned char *uv, struct UW_ScreenXY *p0, int tx); // 0x800B4D80 17 | 18 | extern POLY_GT3 * UNDERWORLD_Poly(POLY_GT3 *last, struct UW_ScreenXY *p0, struct UW_ScreenXY *p1, struct UW_ScreenXY *p2, int drawY); // 0x800B4DCC 19 | 20 | extern void UNDERWORLD_DisplayFrame(long *primStart, long drawY); // 0x800B4F44 21 | 22 | extern void UNDERWORLD_SetupSource(); // 0x800B509C 23 | 24 | extern void UNDERWORLD_InitDisplayProcess(); // 0x800B5148 25 | 26 | extern struct _StreamUnit * UNDERWORLD_LoadLevel(char *baseAreaName, struct GameTracker *gameTracker); // 0x800B5208 27 | 28 | extern void UNDERWORLD_UpdatePlayer(struct Intro *playerIntro, struct _Instance *instance); // 0x800B5500 29 | 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /KAIN2/Game/VM.H: -------------------------------------------------------------------------------- 1 | #ifndef VM_H 2 | #define VM_H 3 | 4 | #include "STREAM.H" 5 | 6 | extern void VM_Tick(long time); // 0x8004FC24 7 | 8 | extern void VM_UpdateMorph(struct Level* level, int initFlg); // 0x8004FC44 9 | 10 | extern void VM_VMObjectSetTable(struct Level* level, struct _VMObject* vmobject, int table); // 0x8005001C 11 | 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /KAIN2/Tools/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #Store the path to our tools folder folder in "TOOL_ROOT_DIR". 2 | set(TOOL_ROOT_DIR ${TOOL_ROOT_DIR} "${CMAKE_CURRENT_SOURCE_DIR}") 3 | 4 | #Add each tool project 5 | if(NOT(DEFINED ENV{TRAVIS} OR DEFINED ENV{APPVEYOR}) OR APPLE) 6 | add_subdirectory(ShiftMidi) 7 | add_subdirectory(ShiftList) 8 | add_subdirectory(ShiftEditor) 9 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/EDITOR.H: -------------------------------------------------------------------------------- 1 | #ifndef EDITOR_H 2 | #define EDITOR_H 3 | 4 | #if defined(EDITOR) 5 | 6 | extern void Editor_DoDebug(); 7 | 8 | #endif 9 | 10 | #endif -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/EDITOR.ICO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/EDITOR.ICO -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/EDITOR.RC: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "EDITOR.ICO" -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Editor_Version.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define RES_GIT_COMMIT_STRING "1.0.2471\0" 4 | #define GIT_COMMIT_COUNT (2471) 5 | const int g_GIT_COMMIT_COUNT = 2471; 6 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Editor_Version.h.in: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define RES_GIT_COMMIT_STRING "1.0.@GIT_COMMIT_COUNT@\0" 4 | #define GIT_COMMIT_COUNT (@GIT_COMMIT_COUNT@) 5 | const int g_GIT_COMMIT_COUNT = @GIT_COMMIT_COUNT@; -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Main.cpp: -------------------------------------------------------------------------------- 1 | #include "UserInterface/ShiftWindow.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | ///@FIXME should ideally fix this sometime. 8 | #pragma warning( disable : 4100 ) 9 | 10 | int main(int argc, char* argv[]) 11 | { 12 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 13 | 14 | QApplication a(argc, argv); 15 | 16 | QFile styleFile(":/Dark/Main.qss"); 17 | styleFile.open(QFile::ReadOnly); 18 | 19 | QString style(styleFile.readAll()); 20 | a.setStyleSheet(style); 21 | 22 | QTranslator translator; 23 | const QStringList uiLanguages = QLocale::system().uiLanguages(); 24 | for (const QString& locale : uiLanguages) { 25 | const QString baseName = "Engine_" + QLocale(locale).name(); 26 | if (translator.load(":/i18n/" + baseName)) { 27 | a.installTranslator(&translator); 28 | break; 29 | } 30 | } 31 | 32 | a.setWindowIcon(QIcon(":/Dark/Engine.ico")); 33 | ShiftWindow w; 34 | w.setWindowState(Qt::WindowMaximized); 35 | w.show(); 36 | return a.exec(); 37 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/Android.cmake: -------------------------------------------------------------------------------- 1 | if(ANDROID) 2 | 3 | Message("Compiling for Android!") 4 | 5 | include_directories(${ROOT_DIR}/EXTERNAL/SDL/include) 6 | 7 | set(SDL2MAIN_LIBRARY SDL2main) 8 | set(SDL2_LIBRARY SDL2) 9 | set(GLES3_LIBRARY GLESv3) 10 | set(EGL_LIBRARY EGL) 11 | 12 | target_link_libraries(${PROJECT_NAME} 13 | ${SDL2MAIN_LIBRARY} 14 | ${SDL2_LIBRARY} 15 | ${GLES3_LIBRARY} 16 | ${EGL_LIBRARY} 17 | ) 18 | 19 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 20 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 21 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 22 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 23 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 24 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-exceptions -Wno-c++11-narrowing -fno-exceptions -Wnonportable-include-path") 25 | 26 | 27 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/Durango.cmake: -------------------------------------------------------------------------------- 1 | if(WINDOWS_STORE AND DEFINED PLATFORM_DURANGO) 2 | 3 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build_Durango/External/libValkyrie/$(Configuration) ${EXTERN_LIB_PATH}/SDL_mixer/VisualC-WinRT/x64/Debug/SDL_mixer-UWP ${EXTERN_LIB_PATH}/SDL/VisualC-WinRT/x64/Debug/SDL-UWP) 4 | target_link_libraries(${PROJECT_NAME} SDL2.lib SDL2_mixer.lib) 5 | 6 | include_directories(${EXTERN_LIB_PATH}/SDL/include) 7 | include_directories(${EXTERN_LIB_PATH}/SDL_mixer/include) 8 | 9 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /ZW") 10 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /ZW") 11 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /ZW") 12 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW") 13 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZW") 14 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /ZW") 15 | 16 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 17 | 18 | set(PSX_LIB Valkyrie.lib) 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/Emscripten.cmake: -------------------------------------------------------------------------------- 1 | if(EMSCRIPTEN) 2 | 3 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -sASYNCIFY --std=c++11 -s FETCH_DEBUG -s USE_WEBGL2=1 -s FULL_ES3=1 -s USE_PTHREADS=1 -s WASM=1 -s GLOBAL_BASE=0 -s ALLOW_MEMORY_GROWTH=1 -lopenal -s USE_SDL=2 -s TOTAL_MEMORY=512MB") 4 | 5 | set(SDL2_LIBRARIES "-s USE_SDL=2") 6 | 7 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -s TOTAL_MEMORY=1024MB -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 8 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O2 -s TOTAL_MEMORY=1024MB -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 9 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2 -s TOTAL_MEMORY=1024MB -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 10 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -s TOTAL_MEMORY=1024MB -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 11 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2 -s TOTAL_MEMORY=1024MB -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 12 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -s TOTAL_MEMORY=1024MB -Wno-error=format-security -Wno-narrowing -Wno-nonportable-include-path") 13 | 14 | link_directories(${ROOT_DIR}/Build_EMSDK/External/libValkyrie/) 15 | 16 | set(PSX_LIB ${ROOT_DIR}/Build_EMSDK/External/libValkyrie/libValkyrie.a) 17 | 18 | set(CMAKE_EXECUTABLE_SUFFIX ".html") 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/Linux.cmake: -------------------------------------------------------------------------------- 1 | if(UNIX AND NOT(ANDROID) AND NOT(EMSCRIPTEN) AND NOT (PLATFORM_NX_ARM)) 2 | 3 | #Find libs 4 | find_package(SDL2 REQUIRED) 5 | find_package(OpenGL REQUIRED) 6 | #We want to link GLEW statically 7 | set(GLEW_USE_STATIC_LIBS ON) 8 | find_package(GLEW REQUIRED) 9 | 10 | #We want to link GLEW statically 11 | set(GLEW_USE_STATIC_LIBS ON) 12 | 13 | #Setup project include directories 14 | include_directories(${GLEW_INCLUDE_DIR}) 15 | include_directories(${SDL2_INCLUDE_DIR}) 16 | 17 | set(PSX_LIB Valkyrie_${TARGET_ARCH}) 18 | 19 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpermissive -Wno-narrowing -std=c++11") 20 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fpermissive -Wno-narrowing -std=c++11") 21 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fpermissive -Wno-narrowing -std=c++11") 22 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -Wno-narrowing -std=c++11") 23 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fpermissive -Wno-narrowing -std=c++11") 24 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fpermissive -Wno-narrowing -std=c++11") 25 | 26 | endif() 27 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/Mingw.cmake: -------------------------------------------------------------------------------- 1 | if(MINGW) 2 | 3 | #Find libs 4 | find_package(SDL2 REQUIRED) 5 | find_package(OpenGL REQUIRED) 6 | #We want to link GLEW statically 7 | set(GLEW_USE_STATIC_LIBS ON) 8 | find_package(GLEW REQUIRED) 9 | 10 | #We want to link GLEW statically 11 | set(GLEW_USE_STATIC_LIBS ON) 12 | 13 | #Setup project include directories 14 | include_directories(${GLEW_INCLUDE_DIR}) 15 | include_directories(${SDL2_INCLUDE_DIR}) 16 | 17 | set(PSX_LIB libPSXCombined.a) 18 | 19 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-narrowing -std=c++11") 20 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wno-narrowing -std=c++11") 21 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-narrowing -std=c++11") 22 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing -std=c++11") 23 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-narrowing -std=c++11") 24 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-narrowing -std=c++11") 25 | 26 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/Windows.cmake: -------------------------------------------------------------------------------- 1 | if(MSVC AND NOT WINDOWS_STORE AND NOT PLATFORM_PSP2 AND NOT PLATFORM_NX AND NOT PLATFORM_NX_ARM) 2 | 3 | #SET(USE_VULKAN TRUE) 4 | 5 | #Find libs 6 | if(USE_VULKAN) 7 | find_package(Vulkan REQUIRED) 8 | include_directories(${Vulkan_INCLUDE_DIR}) 9 | else() 10 | find_package(OpenGL REQUIRED) 11 | endif() 12 | 13 | include_directories(${EXTERN_LIB_PATH}/glew-cmake/Include) 14 | include_directories(${EXTERN_LIB_PATH}/SDL/Include) 15 | 16 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build/Build_Win32/External/libValkyrie/) 17 | 18 | set(PSX_LIB Valkyrie.lib) 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/Platform/WindowsStore.cmake: -------------------------------------------------------------------------------- 1 | if(WINDOWS_STORE AND NOT DEFINED PLATFORM_DURANGO) 2 | 3 | target_link_directories(${PROJECT_NAME} PUBLIC ${ROOT_DIR}/Build_UWP/External/libValkyrie/$(Configuration) ${EXTERN_LIB_PATH}/SDL_mixer/VisualC-WinRT/x64/Debug/SDL_mixer-UWP ${EXTERN_LIB_PATH}/SDL/VisualC-WinRT/x64/Debug/SDL-UWP) 4 | target_link_libraries(${PROJECT_NAME} SDL2.lib SDL2_mixer.lib) 5 | set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "${LINK_FLAGS} /LARGEADDRESSAWARE:NO") 6 | include_directories(${EXTERN_LIB_PATH}/SDL/include) 7 | include_directories(${EXTERN_LIB_PATH}/SDL_mixer/include) 8 | 9 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /ZW") 10 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /ZW") 11 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /ZW") 12 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW") 13 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZW") 14 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /ZW") 15 | 16 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 17 | 18 | set(PSX_LIB Valkyrie.lib) 19 | 20 | endif() -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/DockClose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/DockClose.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/DockMinimise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/DockMinimise.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/DockPin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/DockPin.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Engine.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Engine.ico -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar1.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar10.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar11.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar12.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar13.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar14.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar15.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar16.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar17.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar18.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar19.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar2.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar20.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar21.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar22.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar23.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar24.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar25.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar26.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar27.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar28.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar29.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar3.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar30.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar31.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar32.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar33.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar34.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar4.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar5.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar6.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar7.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar8.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftEditor/UserInterface/Dark/Toolbar9.png -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftBottomPane.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftBottomPane.h" 2 | 3 | Shift::BottomPane::BottomPane(QWidget* parent) 4 | { 5 | m_consoleWidget = new QDockWidget(QObject::tr("Console"), parent); 6 | m_consoleWidget->setObjectName("ShiftConsole"); 7 | m_consoleWidget->setAllowedAreas(Qt::BottomDockWidgetArea); 8 | 9 | m_groupBox = new QGroupBox; 10 | m_consoleWidget->setWidget(m_groupBox); 11 | 12 | m_boxLayout = new QHBoxLayout(m_groupBox); 13 | 14 | m_textBox = new QLineEdit; 15 | m_textBox->setText(QObject::tr("(Enter Command)")); 16 | m_textBox->setObjectName("ShiftConsoleTextBox"); 17 | 18 | m_button = new QPushButton; 19 | m_button->setText(QObject::tr("Run")); 20 | m_button->setObjectName("ShiftConsoleButton"); 21 | 22 | m_boxLayout->addWidget(m_textBox); 23 | m_boxLayout->addWidget(m_button); 24 | } 25 | 26 | Shift::BottomPane::~BottomPane() 27 | { 28 | if (m_textBox != nullptr) 29 | { 30 | delete m_textBox; 31 | m_textBox = nullptr; 32 | } 33 | 34 | if (m_button != nullptr) 35 | { 36 | delete m_button; 37 | m_button = nullptr; 38 | } 39 | 40 | if (m_groupBox != nullptr) 41 | { 42 | delete m_groupBox; 43 | m_groupBox = nullptr; 44 | } 45 | 46 | if (m_consoleWidget != nullptr) 47 | { 48 | delete m_consoleWidget; 49 | m_consoleWidget = nullptr; 50 | } 51 | } 52 | 53 | QDockWidget* Shift::BottomPane::getConsoleWidget() 54 | { 55 | return m_consoleWidget; 56 | } 57 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftBottomPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace Shift 10 | { 11 | class BottomPane 12 | { 13 | public: 14 | BottomPane(QWidget* parent); 15 | ~BottomPane(); 16 | QDockWidget* getConsoleWidget(); 17 | 18 | private: 19 | QHBoxLayout* m_boxLayout; 20 | QDockWidget* m_consoleWidget; 21 | QGroupBox* m_groupBox; 22 | QLineEdit* m_textBox; 23 | QPushButton* m_button; 24 | }; 25 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftCenterPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_SETUP.H" 11 | 12 | #if defined(D3D9) 13 | #include "ShiftD3D9Frame.h" 14 | #elif defined(D3D11) 15 | #include "ShiftD3D11Frame.h" 16 | #elif defined(OGL) 17 | #include "ShiftOGLFrame.h" 18 | #endif 19 | #include "ShiftD3D11Window.h" 20 | #include "ShiftLabel.h" 21 | #include "ShiftPanes.h" 22 | 23 | #define MAX_GAME_INSTANCE_COUNT (6) 24 | 25 | namespace Shift 26 | { 27 | class CenterPane 28 | { 29 | public: 30 | CenterPane(Shift::Panes* panes, QWidget* parent); 31 | ~CenterPane(); 32 | QWidget* getViewportWidget(); 33 | QDockWidget* getViewportDockWidget(); 34 | 35 | QTabWidget* getTabWidget() 36 | { 37 | return m_tabWidget; 38 | } 39 | 40 | void addNewViewport(); 41 | 42 | private: 43 | QDockWidget* m_viewportWidget; 44 | QStackedLayout* m_stackedLayout; 45 | QTabWidget* m_tabWidget; 46 | 47 | #if defined(D3D9) 48 | Shift::D3D9Frame* m_viewport[MAX_GAME_INSTANCE_COUNT]; 49 | #elif defined(D3D11) 50 | Shift::D3D11Frame* m_viewport[MAX_GAME_INSTANCE_COUNT]; 51 | #elif defined(OGL) 52 | Shift::OGLFrame* m_viewport[MAX_GAME_INSTANCE_COUNT]; 53 | #endif 54 | Shift::Label* m_labelItemsCount; 55 | QLabel* m_labelUntitled; 56 | QTimer* m_timer[MAX_GAME_INSTANCE_COUNT]; 57 | 58 | Shift::Panes* m_panes; 59 | 60 | int m_numViewports; 61 | }; 62 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftD3D11Frame.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_SETUP.H" 4 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_INCLUDES.H" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include "ShiftPanes.h" 15 | #include "Game/CORE.H" 16 | 17 | namespace Shift 18 | { 19 | class D3D11Frame : public QFrame 20 | { 21 | Q_OBJECT 22 | 23 | public: 24 | D3D11Frame(Shift::Panes* panes, QTabWidget* tabWidget, QWidget* parent = nullptr) 25 | { 26 | setAttribute(Qt::WA_NativeWindow, true); 27 | m_dragging = false; 28 | m_panes = panes; 29 | m_tabWidget = tabWidget; 30 | } 31 | 32 | virtual void initialiseHWND(HWND windowHandle, int width, int height, int instanceCount); 33 | virtual void resizeEvent(QResizeEvent* event) override; 34 | void keyPressEvent(QKeyEvent* event) override; 35 | void keyReleaseEvent(QKeyEvent* event) override; 36 | void mousePressEvent(QMouseEvent* event) override; 37 | void mouseReleaseEvent(QMouseEvent* event) override; 38 | void mouseMoveEvent(QMouseEvent* event) override; 39 | void render(); 40 | void renderWidget(); 41 | 42 | private: 43 | bool m_dragging; 44 | QPoint m_previousMousePosition; 45 | QLabel* m_labelItemsCount; 46 | void pickRayVector(int mouseX, int mouseY, int ClientWidth, int ClientHeight, VECTOR* rayPos, VECTOR* rayDir); 47 | //bool rayBoxIntersect(DirectX::XMVECTOR& rpos, DirectX::XMVECTOR& rdir, Engine::Vector3& boxMin, Engine::Vector3& boxMax, DirectX::XMMATRIX& transform); 48 | void CheckIfRayIntersectedWithAnySceneObject(DirectX::XMVECTOR& rayPosition, DirectX::XMVECTOR& rayDirection); 49 | QSize getRatio(QSize currentResolution); 50 | Shift::Panes* m_panes; 51 | QTabWidget* m_tabWidget; 52 | 53 | void setCameraSpeed(int speed); 54 | }; 55 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftD3D11Window.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #if 0 5 | namespace Shift 6 | { 7 | class D3D11WindowPrivate; 8 | 9 | class D3D11Window : public QPaintDeviceWindow 10 | { 11 | Q_DECLARE_PRIVATE(D3D11Window) 12 | Q_OBJECT 13 | 14 | public: 15 | D3D11Window(QWindow* parent = Q_NULLPTR); 16 | 17 | virtual void paintD3D(); 18 | virtual void afterPresent(); 19 | 20 | protected: 21 | void paintEvent(QPaintEvent* event) Q_DECL_OVERRIDE; 22 | void resizeEvent(QResizeEvent*) Q_DECL_OVERRIDE; 23 | 24 | private: 25 | Q_DISABLE_COPY(D3D11Window) 26 | }; 27 | } 28 | #endif -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftD3D9Frame.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_SETUP.H" 4 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_INCLUDES.H" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include "ShiftPanes.h" 15 | #include "Game/CORE.H" 16 | 17 | namespace Shift 18 | { 19 | class D3D9Frame : public QFrame 20 | { 21 | Q_OBJECT 22 | 23 | public: 24 | D3D9Frame(Shift::Panes* panes, QTabWidget* tabWidget, QWidget* parent = nullptr) 25 | { 26 | setAttribute(Qt::WA_NativeWindow, true); 27 | m_dragging = false; 28 | m_panes = panes; 29 | m_tabWidget = tabWidget; 30 | } 31 | 32 | virtual void initialiseHWND(HWND windowHandle, int width, int height, int instance_index); 33 | virtual void resizeEvent(QResizeEvent* event) override; 34 | void keyPressEvent(QKeyEvent* event) override; 35 | void keyReleaseEvent(QKeyEvent* event) override; 36 | void mousePressEvent(QMouseEvent* event) override; 37 | void mouseReleaseEvent(QMouseEvent* event) override; 38 | void mouseMoveEvent(QMouseEvent* event) override; 39 | void render(); 40 | void renderWidget(); 41 | 42 | private: 43 | bool m_dragging; 44 | QPoint m_previousMousePosition; 45 | QLabel* m_labelItemsCount; 46 | void pickRayVector(int mouseX, int mouseY, int ClientWidth, int ClientHeight, VECTOR* rayPos, VECTOR* rayDir); 47 | //bool rayBoxIntersect(DirectX::XMVECTOR& rpos, DirectX::XMVECTOR& rdir, Engine::Vector3& boxMin, Engine::Vector3& boxMax, DirectX::XMMATRIX& transform); 48 | void CheckIfRayIntersectedWithAnySceneObject(DirectX::XMVECTOR& rayPosition, DirectX::XMVECTOR& rayDirection); 49 | QSize getRatio(QSize currentResolution); 50 | Shift::Panes* m_panes; 51 | QTabWidget* m_tabWidget; 52 | 53 | void setCameraSpeed(int speed); 54 | }; 55 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftEmptyPane.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftEmptyPane.h" 2 | 3 | Shift::Pane::Pane(QWidget* parent) : QVBoxLayout(nullptr) 4 | { 5 | 6 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftEmptyPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace Shift 6 | { 7 | class Pane : public QVBoxLayout 8 | { 9 | Q_OBJECT 10 | 11 | public: 12 | Pane(QWidget* parent = nullptr); 13 | 14 | private: 15 | 16 | }; 17 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftLabel.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftLabel.h" 2 | 3 | Shift::Label::Label(QWidget* parent) : QLabel(parent) 4 | { 5 | 6 | } 7 | 8 | Shift::Label::~Label() 9 | { 10 | 11 | } 12 | 13 | void Shift::Label::paintEvent(QPaintEvent* event) 14 | { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftLabel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace Shift 10 | { 11 | class Label : public QLabel 12 | { 13 | Q_OBJECT 14 | 15 | public: 16 | Shift::Label(QWidget* parent = nullptr); 17 | ~Label(); 18 | 19 | protected: 20 | virtual void paintEvent(QPaintEvent* event) override; 21 | }; 22 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftLeftPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | namespace Shift 13 | { 14 | class LeftPane : public QVBoxLayout 15 | { 16 | Q_OBJECT 17 | 18 | public: 19 | LeftPane(QWidget* parent); 20 | ~LeftPane(); 21 | QDockWidget* getZoneSliceManagerWidget(); 22 | QDockWidget* getPlacementBrowserWidget(); 23 | 24 | void update(); 25 | 26 | private: 27 | QDockWidget* m_zoneSliceManagerWidget; 28 | QDockWidget* m_placementBrowserWidget; 29 | QTabWidget* m_placementBrowserTabWidget; 30 | QLabel* m_labelObjects; 31 | QLabel* m_labelMeshes; 32 | QLabel* m_labelOther; 33 | QLabel* m_labelUnits; 34 | QLabel* m_labelInUse; 35 | QLabel* m_labelFav; 36 | QGroupBox* m_groupBox; 37 | QComboBox* m_comboBox; 38 | QTimer* m_timer; 39 | 40 | private slots: 41 | void zoneIndexChanged(int index); 42 | }; 43 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftMenuBar.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | namespace Shift 12 | { 13 | class MenuBar : public QMenuBar 14 | { 15 | Q_OBJECT 16 | 17 | public: 18 | Shift::MenuBar(QWidget* parent = nullptr); 19 | 20 | 21 | private: 22 | QMenu* m_zoneMenu; 23 | QMenu* m_editMenu; 24 | QMenu* m_scriptsMenu; 25 | QMenu* m_windowsMenu; 26 | QMenu* m_unsupportedMenu; 27 | QMenu* m_helpMenu; 28 | 29 | QLabel* m_labelVersion; 30 | QLabel* m_labelWhatsNew; 31 | 32 | QDialog* m_zoneOpenDialog; 33 | QHBoxLayout* m_vbox; 34 | QGroupBox* m_groupBox; 35 | QLabel* m_labelZone; 36 | QComboBox* m_zoneComboBox; 37 | QPushButton* m_openButton; 38 | 39 | private slots: 40 | void DoOpenZone(); 41 | void OpenZone(); 42 | }; 43 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftOGLFrame.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_SETUP.H" 4 | #include "Core/Setup/Platform/EMULATOR_PLATFORM_INCLUDES.H" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include "ShiftPanes.h" 15 | #include "Game/CORE.H" 16 | 17 | namespace Shift 18 | { 19 | class OGLFrame : public QFrame 20 | { 21 | Q_OBJECT 22 | 23 | public: 24 | OGLFrame(Shift::Panes* panes, QTabWidget* tabWidget, QWidget* parent = nullptr) 25 | { 26 | setAttribute(Qt::WA_NativeWindow, true); 27 | m_dragging = false; 28 | m_panes = panes; 29 | m_tabWidget = tabWidget; 30 | } 31 | 32 | virtual void initialiseHWND(HWND windowHandle, int width, int height, int instance_index); 33 | virtual void resizeEvent(QResizeEvent* event) override; 34 | void keyPressEvent(QKeyEvent* event) override; 35 | void keyReleaseEvent(QKeyEvent* event) override; 36 | void mousePressEvent(QMouseEvent* event) override; 37 | void mouseReleaseEvent(QMouseEvent* event) override; 38 | void mouseMoveEvent(QMouseEvent* event) override; 39 | void render(); 40 | void renderWidget(); 41 | 42 | private: 43 | bool m_dragging; 44 | QPoint m_previousMousePosition; 45 | QLabel* m_labelItemsCount; 46 | void pickRayVector(int mouseX, int mouseY, int ClientWidth, int ClientHeight, VECTOR* rayPos, VECTOR* rayDir); 47 | //bool rayBoxIntersect(DirectX::XMVECTOR& rpos, DirectX::XMVECTOR& rdir, Engine::Vector3& boxMin, Engine::Vector3& boxMax, DirectX::XMMATRIX& transform); 48 | void CheckIfRayIntersectedWithAnySceneObject(DirectX::XMVECTOR& rayPosition, DirectX::XMVECTOR& rayDirection); 49 | QSize getRatio(QSize currentResolution); 50 | Shift::Panes* m_panes; 51 | QTabWidget* m_tabWidget; 52 | 53 | void setCameraSpeed(int speed); 54 | }; 55 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftPanes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Shift 4 | { 5 | class MenuBar; 6 | class ToolBar; 7 | class ToolBox; 8 | class LeftPane; 9 | class CenterPane; 10 | class RightPane; 11 | class BottomPane; 12 | 13 | struct Panes 14 | { 15 | MenuBar* m_menuBar; 16 | ToolBar* m_toolBar; 17 | ToolBox* m_toolBox; 18 | LeftPane* m_leftPane; 19 | CenterPane* m_centerPane; 20 | RightPane* m_rightPane; 21 | BottomPane* m_bottomPane; 22 | }; 23 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftRenderablePropertiesPane.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftRenderablePropertiesPane.h" 2 | 3 | #if 0 4 | Shift::RenderablePropertiesPane::RenderablePropertiesPane(Engine::Resource::RenderableMesh* mesh, int instance, QWidget* parent) : QVBoxLayout(parent) 5 | { 6 | m_mesh = mesh; 7 | m_instance = instance; 8 | m_animSelectComboBox = new QComboBox; 9 | m_animSelectLabel = new QLabel; 10 | 11 | m_animSelectLabel->setText("DEBUGGING"); 12 | addWidget(m_animSelectLabel); 13 | addWidget(m_animSelectComboBox); 14 | addStretch(); 15 | 16 | for (int i = 0; i < mesh->m_animations.size(); i++) 17 | { 18 | m_animSelectComboBox->addItem(mesh->m_animationNames[i]); 19 | } 20 | 21 | connect(m_animSelectComboBox, SIGNAL(currentIndexChanged(int)),this, SLOT(animChanged(int))); 22 | } 23 | 24 | Shift::RenderablePropertiesPane::~RenderablePropertiesPane() 25 | { 26 | if (m_animSelectComboBox != nullptr) 27 | { 28 | delete m_animSelectComboBox; 29 | } 30 | 31 | if (m_animSelectLabel != nullptr) 32 | { 33 | delete m_animSelectLabel; 34 | } 35 | } 36 | 37 | void Shift::RenderablePropertiesPane::animChanged(int index) 38 | { 39 | if (m_mesh != nullptr) 40 | { 41 | m_mesh->m_currentAnimation[m_instance] = m_mesh->m_animations[index]->mAnimID; 42 | } 43 | } 44 | #endif -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftRenderablePropertiesPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #if 0 9 | namespace Shift 10 | { 11 | class RenderablePropertiesPane : public QVBoxLayout 12 | { 13 | Q_OBJECT 14 | 15 | public: 16 | RenderablePropertiesPane(Engine::Resource::RenderableMesh* mesh, int instance, QWidget* parent = nullptr); 17 | ~RenderablePropertiesPane(); 18 | 19 | private: 20 | QComboBox* m_animSelectComboBox; 21 | QLabel* m_animSelectLabel; 22 | Engine::Resource::RenderableMesh* m_mesh; 23 | int m_instance; 24 | 25 | private slots: 26 | void animChanged(int index); 27 | }; 28 | } 29 | #endif -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftResources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dark/Toolbar1.png 4 | Dark/Toolbar2.png 5 | Dark/Toolbar3.png 6 | Dark/Toolbar4.png 7 | Dark/Toolbar5.png 8 | Dark/Toolbar6.png 9 | Dark/Toolbar7.png 10 | Dark/Toolbar8.png 11 | Dark/Toolbar9.png 12 | Dark/Toolbar10.png 13 | Dark/Toolbar11.png 14 | Dark/Toolbar12.png 15 | Dark/Toolbar13.png 16 | Dark/Toolbar14.png 17 | Dark/Toolbar15.png 18 | Dark/Toolbar16.png 19 | Dark/Toolbar17.png 20 | Dark/Toolbar18.png 21 | Dark/Toolbar19.png 22 | Dark/Toolbar20.png 23 | Dark/Toolbar21.png 24 | Dark/Toolbar22.png 25 | Dark/Toolbar23.png 26 | Dark/Toolbar24.png 27 | Dark/Toolbar25.png 28 | Dark/Toolbar26.png 29 | Dark/Toolbar27.png 30 | Dark/Toolbar28.png 31 | Dark/Toolbar29.png 32 | Dark/Toolbar30.png 33 | Dark/Toolbar31.png 34 | Dark/Toolbar32.png 35 | Dark/Toolbar33.png 36 | Dark/Toolbar34.png 37 | Dark/DockClose.png 38 | Dark/DockMinimise.png 39 | Dark/DockPin.png 40 | Dark/Engine.ico 41 | Dark/Main.qss 42 | 43 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftRightPane.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftRightPane.h" 2 | #include "ShiftEmptyPane.h" 3 | #include "ShiftRenderablePropertiesPane.h" 4 | #include "ShiftUnitPropertiesPane.h" 5 | 6 | enum Shift::RightPane::PaneIndex g_activeRightPane = Shift::RightPane::PaneIndex::NONE; 7 | enum Shift::RightPane::PaneIndex g_lastActiveRightPane = Shift::RightPane::PaneIndex::NONE; 8 | 9 | struct Level* g_selectedUnit = nullptr; 10 | 11 | Shift::RightPane::RightPane(QWidget* parent) 12 | { 13 | m_shiftPropertyEditorWidget = new QDockWidget(QObject::tr("ShiftPropertyEditor"), parent); 14 | m_shiftPropertyEditorWidget->setObjectName("shiftpropertyeditor"); 15 | m_shiftPropertyEditorWidget->setAllowedAreas(Qt::RightDockWidgetArea); 16 | m_shiftPropertyEditorWidget->setFixedWidth(278); 17 | m_shiftPropertyEditorWidget->setFixedHeight(750); 18 | m_layout = nullptr; 19 | m_groupBox = new QGroupBox(m_shiftPropertyEditorWidget); 20 | 21 | m_timer = new QTimer(m_groupBox); 22 | parent->connect(m_timer, &QTimer::timeout, this, &Shift::RightPane::update); 23 | m_timer->setInterval(1000.0f / 10.0f); 24 | m_timer->start(); 25 | 26 | populateEmpty(); 27 | } 28 | 29 | Shift::RightPane::~RightPane() 30 | { 31 | if (m_groupBox != nullptr) 32 | { 33 | delete m_groupBox; 34 | } 35 | 36 | if (m_shiftPropertyEditorWidget != nullptr) 37 | { 38 | delete m_shiftPropertyEditorWidget; 39 | } 40 | } 41 | 42 | QDockWidget* Shift::RightPane::getShiftPropertyEditorWidget() 43 | { 44 | return m_shiftPropertyEditorWidget; 45 | } 46 | 47 | void Shift::RightPane::populateUnitProperties() 48 | { 49 | if (m_layout != nullptr) 50 | { 51 | delete m_layout; 52 | } 53 | 54 | m_groupBox->setTitle("Properties:"); 55 | m_layout = new Shift::UnitPropertiesPane(); 56 | m_groupBox->setLayout(m_layout); 57 | m_groupBox->setGeometry(0, 0, 278, 725); 58 | } 59 | 60 | void Shift::RightPane::populateEmpty() 61 | { 62 | if (m_layout != nullptr) 63 | { 64 | delete m_layout; 65 | } 66 | 67 | m_groupBox->setTitle(""); 68 | m_layout = new Shift::Pane(m_shiftPropertyEditorWidget); 69 | m_groupBox->setLayout(m_layout); 70 | m_groupBox->setGeometry(0, 23, 278, 725); 71 | } 72 | 73 | void Shift::RightPane::update() 74 | { 75 | if (g_lastActiveRightPane != g_activeRightPane) 76 | { 77 | switch (g_activeRightPane) 78 | { 79 | case Shift::RightPane::PaneIndex::NONE: 80 | populateEmpty(); 81 | break; 82 | case Shift::RightPane::PaneIndex::UNIT_PROPERTIES: 83 | populateUnitProperties(); 84 | break; 85 | } 86 | } 87 | 88 | g_lastActiveRightPane = g_activeRightPane; 89 | } 90 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftRightPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include "Game/STREAM.H" 11 | #include "Game/GAMELOOP.H" 12 | 13 | extern struct Level* g_selectedUnit; 14 | 15 | namespace Shift 16 | { 17 | class RightPane : public QVBoxLayout 18 | { 19 | Q_OBJECT 20 | 21 | public: 22 | enum PaneIndex 23 | { 24 | NONE, 25 | UNIT_PROPERTIES, 26 | }; 27 | 28 | RightPane(QWidget* parent); 29 | ~RightPane(); 30 | QDockWidget* getShiftPropertyEditorWidget(); 31 | //void populateRenderableProperties(Engine::Resource::RenderableMesh* mesh, int instance); 32 | void populateUnitProperties(); 33 | void populateEmpty(); 34 | void update(); 35 | 36 | private: 37 | QDockWidget* m_shiftPropertyEditorWidget; 38 | QGroupBox* m_groupBox; 39 | QVBoxLayout* m_layout; 40 | QTimer* m_timer; 41 | }; 42 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftToolBar.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include "ShiftToolButton.h" 9 | #include "ShiftToolMenuButton.h" 10 | 11 | namespace Shift 12 | { 13 | class ToolBar : public QToolBar 14 | { 15 | Q_OBJECT 16 | 17 | public: 18 | Shift::ToolBar(QWidget* parent = nullptr); 19 | ~ToolBar(); 20 | 21 | private: 22 | Shift::ToolButton* m_mouseButton; 23 | Shift::ToolButton* m_translateButton; 24 | Shift::ToolButton* m_rotateButton; 25 | Shift::ToolButton* m_scaleButton; 26 | Shift::ToolButton* m_toolButton5; 27 | Shift::ToolButton* m_toolButton6; 28 | Shift::ToolButton* m_toolButton7; 29 | Shift::ToolButton* m_toolButton8; 30 | Shift::ToolButton* m_toolButton9; 31 | Shift::ToolButton* m_toolButton10; 32 | Shift::ToolMenuButton* m_toolButton11; 33 | Shift::ToolMenuButton* m_toolButton12; 34 | Shift::ToolMenuButton* m_toolButton13; 35 | Shift::ToolMenuButton* m_toolButton14; 36 | Shift::ToolMenuButton* m_toolButton15; 37 | Shift::ToolMenuButton* m_toolButton16; 38 | Shift::ToolMenuButton* m_toolButton17; 39 | Shift::ToolMenuButton* m_toolButton18; 40 | Shift::ToolMenuButton* m_toolButton19; 41 | Shift::ToolMenuButton* m_toolButton20; 42 | Shift::ToolMenuButton* m_toolButton21; 43 | Shift::ToolMenuButton* m_toolButton22; 44 | Shift::ToolMenuButton* m_toolButton23; 45 | Shift::ToolMenuButton* m_toolButton24; 46 | Shift::ToolMenuButton* m_toolButton25; 47 | Shift::ToolMenuButton* m_toolButton26; 48 | Shift::ToolMenuButton* m_toolButton27; 49 | 50 | QMenu* m_menu1; 51 | QMenu* m_menu2; 52 | QMenu* m_menu3; 53 | QMenu* m_menu4; 54 | QMenu* m_menu5; 55 | QMenu* m_menu6; 56 | QMenu* m_menu7; 57 | QMenu* m_menu8; 58 | QMenu* m_menu9; 59 | QMenu* m_menu10; 60 | QMenu* m_menu11; 61 | QMenu* m_menu12; 62 | QMenu* m_menu13; 63 | QMenu* m_menu14; 64 | QMenu* m_menu15; 65 | QMenu* m_menu16; 66 | QMenu* m_menu17; 67 | 68 | private slots: 69 | void ToggleGrid(); 70 | }; 71 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftToolBox.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ShiftToolButton.h" 4 | #include 5 | #include 6 | #include 7 | 8 | namespace Shift 9 | { 10 | class ToolBox : public QTabWidget 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | Shift::ToolBox(QWidget* parent = nullptr); 16 | ~ToolBox(); 17 | 18 | private: 19 | QHBoxLayout* m_generalLayout; 20 | QWidget* m_generalWidget; 21 | Shift::ToolButton* m_toolButton28; 22 | Shift::ToolButton* m_toolButton29; 23 | Shift::ToolButton* m_toolButton30; 24 | Shift::ToolButton* m_toolButton31; 25 | Shift::ToolButton* m_toolButton32; 26 | Shift::ToolButton* m_toolButton33; 27 | Shift::ToolButton* m_toolButton34; 28 | QLabel* m_labelGeneral; 29 | QLabel* m_labelObjects; 30 | QLabel* m_labelDesign; 31 | QLabel* m_labelPhysics; 32 | QLabel* m_labelAI; 33 | QLabel* m_labelVFX; 34 | QLabel* m_labelCamera; 35 | QLabel* m_labelArt; 36 | QLabel* m_labelLighting; 37 | QLabel* m_labelAudio; 38 | 39 | private slots: 40 | void DoScreenShot(); 41 | void DoDebugGame(); 42 | void DoPlayGame(); 43 | void DoStopGame(); 44 | void DoMorph(); 45 | }; 46 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftToolButton.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftToolButton.h" 2 | 3 | Shift::ToolButton::ToolButton(QWidget* parent) : QToolButton(parent) 4 | { 5 | m_state = NOT_PRESSED; 6 | } 7 | 8 | Shift::ToolButton::~ToolButton() 9 | { 10 | } 11 | 12 | void Shift::ToolButton::OnClick() 13 | { 14 | m_state = m_state == NOT_PRESSED ? PRESSED : NOT_PRESSED; 15 | setDown(m_state == PRESSED); 16 | } 17 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftToolButton.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace Shift 6 | { 7 | class ToolButton : public QToolButton 8 | { 9 | enum State 10 | { 11 | NOT_PRESSED, 12 | PRESSED 13 | }; 14 | 15 | Q_OBJECT 16 | 17 | public: 18 | Shift::ToolButton(QWidget* parent = nullptr); 19 | ~ToolButton(); 20 | 21 | private slots: 22 | void OnClick(); 23 | 24 | private: 25 | State m_state; 26 | 27 | }; 28 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftToolMenuButton.cpp: -------------------------------------------------------------------------------- 1 | #include "ShiftToolMenuButton.h" 2 | #include 3 | #include 4 | Shift::ToolMenuButton::ToolMenuButton(QWidget* parent) : Shift::ToolButton(parent) 5 | { 6 | m_state = NOT_PRESSED; 7 | } 8 | 9 | Shift::ToolMenuButton::~ToolMenuButton() 10 | { 11 | } 12 | 13 | void Shift::ToolMenuButton::paintEvent(QPaintEvent* event) 14 | { 15 | Shift::ToolButton::paintEvent(event); 16 | 17 | QPainter painter(this); 18 | QPolygon p; 19 | QPen pen; 20 | pen.setColor(QColor(148, 148, 148)); 21 | p.append(QPoint(24, 18)); 22 | p.append(QPoint(19, 24)); 23 | p.append(QPoint(24, 24)); 24 | 25 | QLinearGradient gradient(0, 0, 0, 30); 26 | gradient.setColorAt(0, QColor(197, 197, 197)); 27 | gradient.setColorAt(1, QColor(188, 188, 188)); 28 | 29 | painter.setBrush(gradient); 30 | painter.setPen(pen); 31 | 32 | painter.drawPolygon(p); 33 | } 34 | 35 | void Shift::ToolMenuButton::OnClick() 36 | { 37 | m_state = m_state == NOT_PRESSED ? PRESSED : NOT_PRESSED; 38 | setDown(m_state == PRESSED); 39 | } 40 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftToolMenuButton.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ShiftToolButton.h" 4 | 5 | #include 6 | 7 | namespace Shift 8 | { 9 | class ToolMenuButton : public Shift::ToolButton 10 | { 11 | enum State 12 | { 13 | NOT_PRESSED, 14 | PRESSED 15 | }; 16 | 17 | Q_OBJECT 18 | 19 | public: 20 | Shift::ToolMenuButton(QWidget* parent = nullptr); 21 | ~ToolMenuButton(); 22 | 23 | protected: 24 | void paintEvent(QPaintEvent* event); 25 | 26 | private slots: 27 | void OnClick(); 28 | 29 | private: 30 | State m_state; 31 | 32 | }; 33 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftUnitPropertiesPane.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace Shift 10 | { 11 | class UnitPropertiesPane : public QVBoxLayout 12 | { 13 | Q_OBJECT 14 | 15 | public: 16 | UnitPropertiesPane(QWidget* parent = nullptr); 17 | ~UnitPropertiesPane(); 18 | void update(); 19 | void destroy(); 20 | 21 | private: 22 | QLabel* m_backColourSpectralLabel; 23 | 24 | QLabel* m_backColourMaterialLabel; 25 | 26 | QSpinBox* m_backColorSpectralR; 27 | QSpinBox* m_backColorSpectralG; 28 | QSpinBox* m_backColorSpectralB; 29 | 30 | QSpinBox* m_backColorMaterialR; 31 | QSpinBox* m_backColorMaterialG; 32 | QSpinBox* m_backColorMaterialB; 33 | 34 | private slots: 35 | void UpdateSpectralBackColorR(); 36 | void UpdateSpectralBackColorG(); 37 | void UpdateSpectralBackColorB(); 38 | 39 | void UpdateMaterialBackColorR(); 40 | void UpdateMaterialBackColorG(); 41 | void UpdateMaterialBackColorB(); 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftWindow.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include "ShiftMenuBar.h" 8 | #include "ShiftToolBar.h" 9 | #include "ShiftToolBox.h" 10 | #include "ShiftLeftPane.h" 11 | #include "ShiftCenterPane.h" 12 | #include "ShiftRightPane.h" 13 | #include "ShiftBottomPane.h" 14 | #include "ShiftPanes.h" 15 | 16 | #undef flush 17 | 18 | QT_BEGIN_NAMESPACE 19 | namespace Ui { class ShiftWindow; } 20 | QT_END_NAMESPACE 21 | 22 | class ShiftWindow : public QMainWindow 23 | { 24 | Q_OBJECT 25 | 26 | public: 27 | ShiftWindow(QWidget* parent = nullptr); 28 | ~ShiftWindow(); 29 | 30 | Ui::ShiftWindow* getUI() 31 | { 32 | return ui; 33 | } 34 | 35 | Shift::Panes* getPanes() 36 | { 37 | return &m_panes; 38 | } 39 | 40 | private: 41 | Ui::ShiftWindow* ui; 42 | void DoUserInterface(); 43 | void DoMenuBar(); 44 | void DoToolBar(); 45 | void DoToolBox(); 46 | void DoLeftPane(); 47 | void DoCenterPane(); 48 | void DoRightPane(); 49 | void DoBottomPane(); 50 | 51 | Shift::Panes m_panes; 52 | }; 53 | 54 | extern class ShiftWindow* g_ShiftWindow; -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftEditor/UserInterface/ShiftWindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ShiftWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1280 10 | 720 11 | 12 | 13 | 14 | Shift Editor (D3D11) 15 | 16 | 17 | 18 | 19 | Open 20 | 21 | 22 | 23 | 24 | Save 25 | 26 | 27 | 28 | 29 | Close 30 | 31 | 32 | 33 | 34 | 35 | :/Dark/Toolbar1.png:/Dark/Toolbar1.png 36 | 37 | 38 | Mouse 39 | 40 | 41 | 42 | 43 | 44 | :/Dark/Toolbar2.png:/Dark/Toolbar2.png 45 | 46 | 47 | Translate 48 | 49 | 50 | 51 | 52 | 53 | :/Dark/Toolbar3.png:/Dark/Toolbar3.png 54 | 55 | 56 | Rotate 57 | 58 | 59 | 60 | 61 | 62 | :/Dark/Toolbar4.png:/Dark/Toolbar4.png 63 | 64 | 65 | Scale 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.5) 2 | 3 | project (ShiftGlyph_${TARGET_ARCH}) 4 | 5 | #Recursively locate the source files for GAMEWAD_Unpack. 6 | file(GLOB_RECURSE TOOL_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.CPP ${CMAKE_CURRENT_SOURCE_DIR}/*.C ${CMAKE_CURRENT_SOURCE_DIR}/*.H ${CMAKE_CURRENT_SOURCE_DIR}/*.CUR ${CMAKE_CURRENT_SOURCE_DIR}/*.RC) 7 | 8 | add_executable( 9 | ${PROJECT_NAME} 10 | ${TOOL_SRCS} 11 | ${KAIN2_SRCS} 12 | ) 13 | 14 | set_target_properties( 15 | ${PROJECT_NAME} PROPERTIES OUTPUT_NAME "ShiftGlyph" 16 | ${PROJECT_NAME} PROPERTIES FOLDER "Tools/" 17 | ) 18 | 19 | #This will be a console application, alter linker subsystem accordingly or main method won't be found 20 | if(MSVC) 21 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 22 | set_target_properties( 23 | ${PROJECT_NAME} 24 | PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE" 25 | PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE" 26 | PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE" 27 | PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE" 28 | PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "$(TargetDir)" 29 | ) 30 | set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${ROOT_DIR}/Binaries/$(Configuration)") 31 | 32 | set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${ROOT_DIR}/Binaries") 33 | set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") 34 | set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "_${TARGET_ARCH}_Debug") 35 | set_target_properties(${PROJECT_NAME} PROPERTIES RELEASE_POSTFIX "_${TARGET_ARCH}_Release") 36 | endif(MSVC) -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/FILE.C: -------------------------------------------------------------------------------- 1 | #include "FILE.H" 2 | 3 | void FILE_Reserve(FILE* f, int size) 4 | { 5 | if (f != NULL) 6 | { 7 | char dummy = 0; 8 | fseek(f, size-1, SEEK_SET); 9 | fwrite(&dummy, sizeof(dummy), 1, f); 10 | } 11 | } 12 | 13 | FILE* FILE_OpenWrite(char* filePath) 14 | { 15 | return fopen(filePath, "wb+"); 16 | } 17 | 18 | FILE* FILE_OpenRead(char* filePath) 19 | { 20 | return fopen(filePath, "rb"); 21 | } 22 | 23 | void FILE_Close(FILE* f) 24 | { 25 | if (f != NULL) 26 | { 27 | fclose(f); 28 | f = NULL; 29 | } 30 | } 31 | 32 | long FILE_SeekEnd(FILE* f) 33 | { 34 | if (f != NULL) 35 | { 36 | fseek(f, 0, SEEK_END); 37 | return ftell(f); 38 | } 39 | } 40 | 41 | void FILE_SeekCur(FILE* f, long offset) 42 | { 43 | if (f != NULL) 44 | { 45 | fseek(f, offset-1, SEEK_CUR); 46 | char dummy = 0; 47 | fwrite(&dummy, sizeof(dummy), 1, f); 48 | } 49 | } 50 | 51 | long FILE_GetOffset(FILE* f) 52 | { 53 | if (f != NULL) 54 | { 55 | return ftell(f); 56 | } 57 | return -1; 58 | } 59 | 60 | void FILE_Seek(FILE* f, long offset, int origin) 61 | { 62 | if (f != NULL) 63 | { 64 | fseek(f, offset, origin); 65 | } 66 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/FILE.H: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern FILE* g_fileHandle; 6 | 7 | extern FILE* FILE_OpenRead(char* filePath); 8 | extern void FILE_Reserve(int size); 9 | extern FILE* FILE_OpenWrite(char* filePath); 10 | extern void FILE_Close(FILE* f); 11 | extern long FILE_SeekEnd(FILE* f); 12 | extern long FILE_GetOffset(FILE* f); 13 | extern void FILE_Seek(FILE* f, long offset, int origin); -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/FX.H: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gh0stBlade/KAIN2/e9fa662a02ab597af1e2b2b8e4d1a6af02c180ef/KAIN2/Tools/ShiftGlyph/FX.H -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/GLYPH.H: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct _GlyphTuneData 4 | { 5 | short glyph_size; 6 | short glyph_darkness; 7 | char glyph_costs[8]; 8 | short glyph_range[8]; 9 | long color_array[28]; 10 | }; -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/LOCALS.H: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | typedef enum language_t 4 | { 5 | language_default = -1, 6 | language_english = 0, 7 | language_french = 1, 8 | language_german = 2, 9 | language_italian = 3, 10 | language_spanish = 4, 11 | language_num_states = 5, 12 | }language_t; 13 | 14 | struct LocalizationHeader 15 | { 16 | enum language_t language; 17 | int numXAfiles; 18 | int XATableOffset; 19 | int numStrings; 20 | }; -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/MAIN.C: -------------------------------------------------------------------------------- 1 | #include "UPGRADE.H" 2 | 3 | int main(int argc, char* argv[]) 4 | { 5 | if (argc == 2) 6 | { 7 | UPGRADE_OpenDRM(argv[1]); 8 | } 9 | 10 | return 0; 11 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/SOUND.H: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct _AadDynSfxFileHdr64 4 | { 5 | unsigned long snfID; 6 | unsigned short snfVersion; 7 | unsigned short uniqueID; 8 | unsigned short handle; 9 | unsigned short numSfxInFile; 10 | union 11 | { 12 | struct _AadDynSfxFileHdr* prevDynSfxFile; 13 | long long prevDynSfxFile_; 14 | }; 15 | union 16 | { 17 | struct _AadDynSfxFileHdr* nextDynSfxFile; 18 | long long nextDynSfxFile_; 19 | }; 20 | }; 21 | 22 | struct _AadDynSfxFileHdr 23 | { 24 | unsigned long snfID; 25 | unsigned short snfVersion; 26 | unsigned short uniqueID; 27 | unsigned short handle; 28 | unsigned short numSfxInFile; 29 | struct _AadDynSfxFileHdr* prevDynSfxFile; 30 | struct _AadDynSfxFileHdr* nextDynSfxFile; 31 | }; -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftGlyph/UPGRADE.H: -------------------------------------------------------------------------------- 1 | #ifndef MIDI_H 2 | #define MIDI_H 3 | 4 | struct RedirectList 5 | { 6 | long numPointers; 7 | long* data; 8 | }; 9 | 10 | extern void UPGRADE_OpenDRM(char* drmFilePath); 11 | 12 | #endif -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftList/BIGFILE.H: -------------------------------------------------------------------------------- 1 | #ifndef BIGFILE_H 2 | #define BIGFILE_H 3 | 4 | struct BigFileEntry 5 | { 6 | unsigned int m_hash; 7 | unsigned int m_size; 8 | unsigned int m_offset; 9 | unsigned int m_checksum; 10 | }; 11 | 12 | struct BigFileEntryHeader 13 | { 14 | unsigned int m_numFiles; 15 | }; 16 | 17 | struct BigFileDirectory 18 | { 19 | unsigned int m_hash; 20 | unsigned int m_offset; 21 | }; 22 | 23 | struct BigFileDirectoryHeader 24 | { 25 | unsigned int m_numSubDirectories; 26 | }; 27 | 28 | extern void BIGFILE_Open(char* filePath); 29 | 30 | #endif -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftList/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.5) 2 | 3 | project (ShiftList_${TARGET_ARCH}) 4 | 5 | #Recursively locate the source files for GAMEWAD_Unpack. 6 | file(GLOB_RECURSE TOOL_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.CPP ${CMAKE_CURRENT_SOURCE_DIR}/*.C ${CMAKE_CURRENT_SOURCE_DIR}/*.H ${CMAKE_CURRENT_SOURCE_DIR}/*.CUR ${CMAKE_CURRENT_SOURCE_DIR}/*.RC) 7 | 8 | add_executable( 9 | ${PROJECT_NAME} 10 | ${TOOL_SRCS} 11 | ) 12 | 13 | set_target_properties( 14 | ${PROJECT_NAME} PROPERTIES OUTPUT_NAME "ShiftList" 15 | ${PROJECT_NAME} PROPERTIES FOLDER "Tools/" 16 | ) 17 | 18 | #This will be a console application, alter linker subsystem accordingly or main method won't be found 19 | if(MSVC) 20 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 21 | set_target_properties( 22 | ${PROJECT_NAME} 23 | PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE" 24 | PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE" 25 | PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE" 26 | PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE" 27 | PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "$(TargetDir)" 28 | ) 29 | set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${ROOT_DIR}/Binaries/$(Configuration)") 30 | 31 | set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${ROOT_DIR}/Binaries") 32 | set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") 33 | set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "_${TARGET_ARCH}_Debug") 34 | set_target_properties(${PROJECT_NAME} PROPERTIES RELEASE_POSTFIX "_${TARGET_ARCH}_Release") 35 | endif(MSVC) -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftList/MAIN.C: -------------------------------------------------------------------------------- 1 | #include "BIGFILE.H" 2 | 3 | int main(int argc, char* argv[]) 4 | { 5 | if (argc == 2) 6 | { 7 | BIGFILE_Open(argv[1]); 8 | } 9 | 10 | return 0; 11 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftMidi/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required (VERSION 3.5) 2 | 3 | project (ShiftMidi_${TARGET_ARCH}) 4 | 5 | #Recursively locate the source files for GAMEWAD_Unpack. 6 | file(GLOB_RECURSE TOOL_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.CPP ${CMAKE_CURRENT_SOURCE_DIR}/*.C ${CMAKE_CURRENT_SOURCE_DIR}/*.H ${CMAKE_CURRENT_SOURCE_DIR}/*.CUR ${CMAKE_CURRENT_SOURCE_DIR}/*.RC) 7 | 8 | add_executable( 9 | ${PROJECT_NAME} 10 | ${TOOL_SRCS} 11 | ) 12 | 13 | set_target_properties( 14 | ${PROJECT_NAME} PROPERTIES OUTPUT_NAME "ShiftMidi" 15 | ${PROJECT_NAME} PROPERTIES FOLDER "Tools/" 16 | ) 17 | 18 | #This will be a console application, alter linker subsystem accordingly or main method won't be found 19 | if(MSVC) 20 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 21 | set_target_properties( 22 | ${PROJECT_NAME} 23 | PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE" 24 | PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE" 25 | PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE" 26 | PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE" 27 | PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "$(TargetDir)" 28 | ) 29 | set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${ROOT_DIR}/Binaries/$(Configuration)") 30 | 31 | set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${ROOT_DIR}/Binaries") 32 | set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") 33 | set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "_${TARGET_ARCH}_Debug") 34 | set_target_properties(${PROJECT_NAME} PROPERTIES RELEASE_POSTFIX "_${TARGET_ARCH}_Release") 35 | endif(MSVC) -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftMidi/MAIN.C: -------------------------------------------------------------------------------- 1 | #include "MIDI.H" 2 | 3 | int main(int argc, char* argv[]) 4 | { 5 | if (argc == 2) 6 | { 7 | MIDI_Open(argv[1]); 8 | } 9 | 10 | return 0; 11 | } -------------------------------------------------------------------------------- /KAIN2/Tools/ShiftMidi/MIDI.H: -------------------------------------------------------------------------------- 1 | #ifndef MIDI_H 2 | #define MIDI_H 3 | 4 | //#define AKUJI 5 | //#define KAIN2_ALPHA 6 | 7 | struct AadSoundBankHdr 8 | { 9 | #if defined(AKUJI) 10 | unsigned long bankID; 11 | unsigned short headerSize; 12 | unsigned char unknown; 13 | unsigned char numPrograms; 14 | unsigned short numTones; 15 | unsigned short numWaves; 16 | unsigned short numSequences; 17 | unsigned short numLabels; 18 | unsigned short reverbMode; 19 | unsigned short reverbDepth; 20 | unsigned short unknown3[19]; 21 | #elif defined(KAIN2_ALPHA) 22 | unsigned long bankID; 23 | unsigned long headerSize; 24 | unsigned short bankVersion; 25 | unsigned char numBanks; 26 | unsigned char numPrograms; 27 | unsigned short numTones; 28 | unsigned short numWaves; 29 | unsigned char numSequences; 30 | unsigned char numPitchMaps; 31 | unsigned short numLabels; 32 | unsigned char reverbMode; 33 | unsigned char unused1; 34 | short reverbDepth; 35 | unsigned short objectID; 36 | unsigned short unused2; 37 | unsigned long unused3; 38 | unsigned long unused4; 39 | unsigned long unused5; 40 | unsigned long unused6; 41 | unsigned long unused7; 42 | unsigned long unused8; 43 | unsigned long unused9; 44 | unsigned long unused10; 45 | unsigned long unused11; 46 | unsigned long unused12; 47 | unsigned long unused13; 48 | unsigned long unused14; 49 | unsigned long unused15; 50 | unsigned char baseProgramTbl[16]; 51 | unsigned short baseToneTbl[16]; 52 | #else 53 | unsigned long bankID; 54 | unsigned long headerSize; 55 | int bankVersion; 56 | int numPrograms; 57 | int numTones; 58 | int numWaves; 59 | int numSequences; 60 | int numLabels; 61 | int reverbMode; 62 | int reverbDepth; 63 | #endif 64 | }; 65 | 66 | struct AadSeqEvent 67 | { 68 | unsigned long deltaTime; 69 | unsigned char track; 70 | unsigned char statusByte; 71 | char dataByte[6]; 72 | }; 73 | 74 | struct AadSequenceHdr 75 | { 76 | #if defined(AKUJI)|| defined(KAIN2_ALPHA) 77 | unsigned long sequenceID; 78 | unsigned long quarterNoteTime; 79 | unsigned short ppqn; 80 | unsigned short version; 81 | #else 82 | unsigned long sequenceID; 83 | unsigned long quarterNoteTime; 84 | unsigned short ppqn; 85 | unsigned short version; 86 | unsigned short numTracks; 87 | unsigned short unused; 88 | #endif 89 | }; 90 | 91 | struct AadProgramAtr 92 | { 93 | unsigned short numTones; 94 | unsigned short firstTone; 95 | unsigned char volume; 96 | unsigned char panPosition; 97 | unsigned short unused; 98 | }; 99 | 100 | struct AadToneAtr 101 | { 102 | unsigned char priority; 103 | unsigned char parentProgram; 104 | unsigned char volume; 105 | unsigned char panPosition; 106 | unsigned char centerNote; 107 | char centerFine; 108 | unsigned char minNote; 109 | unsigned char maxNote; 110 | unsigned char mode; 111 | unsigned char pitchBendMax; 112 | unsigned short adsr1; 113 | unsigned short adsr2; 114 | short waveIndex; 115 | }; 116 | 117 | extern void MIDI_Open(char* midiFilePath); 118 | 119 | #endif -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Legacy of Kain: Soul Reaver Decompile 2 | 3 | 4 | 5 | Live WebGL Demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | # Technology Used (Libraries): 14 | 1. Valkyrie Emulator – Custom technology created to port PS1 games easily to PC. 15 | 2. SDL2 16 | 17 | # Supported Platforms: 18 | Windows 7-11, Linux, Mac (64-bit), UWP, Xbox One/Series X(UWP), Web (Emscripten), Android. There are plans to support more platforms than what is currently listed. 19 | 20 | # Project Scope: 21 | We want to achieve the same functionality as the PlayStation version of Soul Reaver by decompiling the code and making a modern port of the game as the original source was lost. This is achieved by translating MIPS r3000a ASM to C. 22 | 23 | In addition, there should be a video settings menu where different rendering APIs can be selected (D3D9, D3D11, D3D12, OpenGL, Vulkan etc.) intoduced at a later point. 24 | Main advantages from the original pc port are: the restoration of the dynamic music system, potential for adding new levels, touchscreen support, multiplatform, full controller support, achievements, etc. 25 | 26 | There may be plans to bring an "Definitive Edition" of Soul Reaver. This will be by including certain enhancements such as removing the software renderer in the future and include a full hardware rendered version of the game. 27 | 28 | # Compiling: 29 | 30 | Please visit here for basic setup, build instructions and contribution guidelines. 31 | 32 | Current estimate for completion is between 3-4 years. Volunteers are welcome! 33 | Contact us on the Discord server channel https://discord.gg/KYSx8Q7 #kain2 34 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 1.0.{build} 2 | 3 | branches: 4 | only: 5 | - main 6 | 7 | skip_tags: true 8 | 9 | image: Visual Studio 2022 10 | 11 | configuration: 12 | - Debug 13 | - Release 14 | 15 | clone_folder: c:/projects/KAIN2 16 | 17 | build: 18 | project: c:/projects/KAIN2/Build/Build_Win32/Soul Reaver.sln 19 | verbosity: minimal 20 | 21 | platform: 22 | - Win32 23 | #- x64 24 | 25 | before_build: 26 | - cmd: cd %clone_folder% 27 | - ps: $env:GIT_COMMIT_COUNT = $(git rev-list --count HEAD) 28 | - cmd: git submodule update --init --recursive 29 | - cmd: cd External 30 | - cmd: cd libValkyrie 31 | - cmd: cd Platform 32 | - cmd: cd Win32 33 | #- cmd: cd Win64 34 | - cmd: Generate-Project-Files.bat 35 | 36 | artifacts: 37 | - path: Binaries/%configuration%/*.zip 38 | name: Binaries 39 | 40 | after_build: 41 | - cmd: cd ../ 42 | - cmd: cd ../ 43 | - cmd: cd Binaries 44 | - cmd: cd %configuration% 45 | - 7z a KAIN2-B%GIT_COMMIT_COUNT%-Win32-%configuration%.zip 46 | 47 | deploy: 48 | release: B$(GIT_COMMIT_COUNT) 49 | description: 'Auto build B$(GIT_COMMIT_COUNT)' 50 | provider: GitHub 51 | auth_token: 52 | secure: hLaU+617bEqExNi+kqicDsNM11QyKeMGYCSuchk7QCjHckEGZl8lmgON8tPsqztp 53 | artifact: /.*\.zip/ 54 | draft: false 55 | prerelease: true 56 | on: 57 | branch: main 58 | --------------------------------------------------------------------------------