mirror of
https://github.com/shibbo/3dcomp.git
synced 2024-11-27 07:20:22 +00:00
Merge pull request #1 from LDAsuku/main
update scripts to work on non-windows and match some Collider & LiveActor functions
This commit is contained in:
commit
f9ee12f9ae
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@ compiler/*
|
||||
*.o
|
||||
.vscode/*
|
||||
.ninja_log
|
||||
.ninja_deps
|
||||
*.nso
|
||||
__pycache__/*
|
||||
build.ninja
|
||||
|
24
build.py
24
build.py
@ -18,7 +18,7 @@ if "-non-matching" in sys.argv:
|
||||
if "-clean" in sys.argv:
|
||||
subprocess.call("ninja -t clean", shell=True)
|
||||
|
||||
INCLUDE_DIRS = ["include", "lib\\ActionLibrary\\include", "lib\\agl\\include", "lib\\eui\\incldue", "lib\\nn\\include", "lib\\sead\\include", "compiler\\nx\\aarch64\\include", "compiler\\nx\\aarch64\\include\\c++" ]
|
||||
INCLUDE_DIRS = ["include", "lib/ActionLibrary/include", "lib/agl/include", "lib/eui/incldue", "lib/nn/include", "lib/sead/include", "compiler/nx/aarch64/include", "compiler/nx/aarch64/include/c++" ]
|
||||
LIBRARIES = [ "Game", "ActionLibrary", "agl", "eui", "nn", "sead"]
|
||||
|
||||
incdirs = ""
|
||||
@ -26,13 +26,19 @@ for dir in INCLUDE_DIRS:
|
||||
incdirs += f'-I {dir} '
|
||||
|
||||
COMPILER_CMD = f"-x c++ -O3 -fno-omit-frame-pointer -mno-implicit-float -fno-cxx-exceptions -fno-strict-aliasing -std=gnu++14 -fno-common -fno-short-enums -ffunction-sections -fdata-sections -fPIC -mcpu=cortex-a57+fp+simd+crypto+crc -g -Wall {nonmatching_str} {incdirs} -c "
|
||||
COMPILER_PATH = pathlib.Path("compiler\\nx\\aarch64\\bin\\clang++")
|
||||
OBJDUMP_PATH = pathlib.Path("compiler\\nx\\aarch64\\bin\\llvm-objdump")
|
||||
COMPILER_PATH = pathlib.Path("compiler/nx/aarch64/bin/clang++.exe")
|
||||
OBJDUMP_PATH = pathlib.Path("compiler/nx/aarch64/bin/llvm-objdump.exe")
|
||||
|
||||
isNotWindows = os.name != 'nt'
|
||||
|
||||
def genNinja(tasks):
|
||||
with open('build.ninja', 'w') as ninja_file:
|
||||
ninja_writer = Writer(ninja_file)
|
||||
ninja_writer.rule("compile", command=f'{COMPILER_PATH} {COMPILER_CMD} $in -o $out',description=f'Compiling $in')
|
||||
|
||||
cmd = f'{COMPILER_PATH} {COMPILER_CMD} $in -o $out'
|
||||
if isNotWindows:
|
||||
cmd = f'wine {cmd}'
|
||||
ninja_writer.rule("compile", command=cmd, description=f'Compiling $in')
|
||||
|
||||
for task in tasks:
|
||||
source_path, build_path = task
|
||||
@ -72,9 +78,13 @@ def generateMaps(path):
|
||||
objdump_tasks.append((source_path, build_path, map_path))
|
||||
|
||||
for task in objdump_tasks:
|
||||
source_path, build_path, map_path = task
|
||||
source_path, build_path, map_path = task
|
||||
|
||||
mapFileOutput = subprocess.check_output([OBJDUMP_PATH, build_path, "-t"]).decode("utf-8").replace("\r", "")
|
||||
cmd = [OBJDUMP_PATH, build_path, "-t"]
|
||||
if isNotWindows:
|
||||
cmd = ["wine"] + cmd
|
||||
|
||||
mapFileOutput = subprocess.check_output(cmd).decode("utf-8").replace("\r", "")
|
||||
lines = mapFileOutput.split("\n")
|
||||
|
||||
newOutput = []
|
||||
@ -99,4 +109,4 @@ def generateMaps(path):
|
||||
w.writelines(newOutput)
|
||||
|
||||
for lib in LIBRARIES:
|
||||
compileLibrary(lib, f"lib\\{lib}\\source")
|
||||
compileLibrary(lib, f"lib/{lib}/source")
|
||||
|
14
check.py
14
check.py
@ -4,6 +4,7 @@ from capstone import *
|
||||
from capstone.arm64 import *
|
||||
from elftools.elf.elffile import ELFFile
|
||||
import time
|
||||
import hashlib
|
||||
|
||||
LIBRARIES = ["ActionLibrary", "agl", "eui", "nn", "sead"]
|
||||
|
||||
@ -92,7 +93,14 @@ def getModule(map, sym):
|
||||
|
||||
def getFunctionData(functionAddr, functionSize):
|
||||
with open("fury.nso", "rb") as f:
|
||||
nso_file = nso.NSO(f.read())
|
||||
data = f.read()
|
||||
|
||||
digest = hashlib.sha256(data).hexdigest().upper()
|
||||
if digest != "80E48BC7BDF7AAA635E7B48C24F49C6A4D8AC19949FB1B9F66EADF2CFBA3BF85":
|
||||
print("fury.nso is not valid")
|
||||
sys.exit(1)
|
||||
|
||||
nso_file = nso.NSO(data)
|
||||
|
||||
return nso_file.getFunction(functionAddr, functionSize)
|
||||
|
||||
@ -119,7 +127,7 @@ path = getModule("map", sym)
|
||||
|
||||
if path == "":
|
||||
for lib in LIBRARIES:
|
||||
path = getModule(f"lib\\{lib}\\map", sym)
|
||||
path = getModule(f"lib/{lib}/map", sym)
|
||||
|
||||
if path != "":
|
||||
break
|
||||
@ -279,4 +287,4 @@ elif instr_equal == False and regs_equal == False:
|
||||
end = time.time()
|
||||
length = end - start
|
||||
|
||||
#print(f"length: {length}")
|
||||
#print(f"length: {length}")
|
||||
|
@ -51534,7 +51534,7 @@ _ZNK2al9LiveActor18getSceneCameraInfoEv=00000071008499A0=0000000C=true
|
||||
_ZThn56_NK2al9LiveActor18getSceneCameraInfoEv=00000071008499B0=0000000C=true
|
||||
_ZNK2al9LiveActor20getCameraDirector_RSEv=00000071008499C0=0000000C=true
|
||||
_ZThn64_NK2al9LiveActor20getCameraDirector_RSEv=00000071008499D0=0000000C=true
|
||||
_ZN2al9LiveActor14initPoseKeeperEPNS_19ActorPoseKeeperBaseE=00000071008499E0=00000008=false
|
||||
_ZN2al9LiveActor14initPoseKeeperEPNS_19ActorPoseKeeperBaseE=00000071008499E0=00000008=true
|
||||
_ZN2al9LiveActor15initExecuteInfoEPNS_16ActorExecuteInfoE=00000071008499F0=00000008=false
|
||||
_ZN2al9LiveActor15initModelKeeperEPNS_11ModelKeeperE=0000007100849A00=00000040=false
|
||||
_ZN2al9LiveActor16initActionKeeperEPKcS2_=0000007100849A40=00000034=false
|
||||
@ -51547,11 +51547,11 @@ _ZN2al9LiveActor19initOceanWaveKeeperEPNS_15OceanWaveKeeperE=0000007100849B60=00
|
||||
_ZN2al9LiveActor21initStageSwitchKeeperEv=0000007100849B70=00000030=false
|
||||
_ZThn32_N2al9LiveActor21initStageSwitchKeeperEv=0000007100849BA0=00000030=false
|
||||
_ZN2al9LiveActor14initRailKeeperERKNS_13ActorInitInfoE=0000007100849BD0=00000030=false
|
||||
_ZN2al9LiveActor12initColliderEffj=0000007100849C00=000000B8=false
|
||||
_ZN2al9LiveActor12initColliderEffj=0000007100849C00=000000B8=true
|
||||
_ZN2al9LiveActor16initShadowKeeperEPNS_12ShadowKeeperE=0000007100849CC0=00000008=false
|
||||
_ZN2al9LiveActor14initItemKeeperEi=0000007100849CD0=00000044=false
|
||||
_ZN2al9LiveActor15initScoreKeeperEv=0000007100849D20=00000030=false
|
||||
_ZN2al9LiveActor27initActorPrePassLightKeeperEPNS_23ActorPrePassLightKeeperE=0000007100849D50=00000008=false
|
||||
_ZN2al9LiveActor15initScoreKeeperEv=0000007100849D20=00000030=true
|
||||
_ZN2al9LiveActor27initActorPrePassLightKeeperEPNS_23ActorPrePassLightKeeperE=0000007100849D50=00000008=true
|
||||
_ZN2al9LiveActor18initSubActorKeeperEPNS_14SubActorKeeperE=0000007100849D60=0000000C=true
|
||||
_ZN2al9LiveActor13initSceneInfoEPNS_14ActorSceneInfoE=0000007100849D70=00000008=true
|
||||
_ZN2al9LiveActor18initActorAlphaCtrlEPNS_14ActorAlphaCtrlERKNS_13ActorInitInfoE=0000007100849D80=0000001C=false
|
||||
@ -58392,7 +58392,7 @@ _ZN2al12ViewInfoCtrl13initActorInfoEPNS_17ClippingActorInfoEPNS_11PlacementIdE=0
|
||||
_ZN2al12ViewInfoCtrl7endInitEv=00000071009544C0=00000030=false
|
||||
_ZN2al12ViewInfoCtrl6updateEv=00000071009544F0=00000160=false
|
||||
_ZNK2al12ViewInfoCtrl15tryFindViewInfoEPNS_11PlacementIdE=0000007100954650=00000070=false
|
||||
_ZN2al8ColliderC1EPNS_17CollisionDirectorEPKN4sead8Matrix34IfEEPKNS3_7Vector3IfEESB_ffj=00000071009546C0=00000134=false
|
||||
_ZN2al8ColliderC1EPNS_17CollisionDirectorEPKN4sead8Matrix34IfEEPKNS3_7Vector3IfEESB_ffj=00000071009546C0=00000134=true
|
||||
_ZN2al8Collider5clearEv=0000007100954800=00000024=false
|
||||
_ZN2al8Collider17setTriangleFilterEPKNS_18TriangleFilterBaseE=0000007100954830=00000008=false
|
||||
_ZN2al8Collider23setCollisionPartsFilterEPKNS_24CollisionPartsFilterBaseE=0000007100954840=00000008=false
|
||||
|
@ -12,49 +12,39 @@ namespace al {
|
||||
|
||||
class Collider : public IUseCollision {
|
||||
public:
|
||||
Collider(CollisionDirector*, const sead::Matrix34f*, const sead::Vector3f*, const sead::Vector3f*, f32, f32, u32);
|
||||
|
||||
virtual CollisionDirector* getCollisionDirector() const;
|
||||
|
||||
void onInvalidate();
|
||||
|
||||
CollisionDirector* mCollisionDirector; // 0x08
|
||||
TriangleFilterBase* mTriFilterBase; // 0x10
|
||||
CollisionPartsFilterBase* mColFilterBase; // 0x18
|
||||
void* _20;
|
||||
void* _28;
|
||||
void* _30;
|
||||
f32 mRadius; // 0x38
|
||||
f32 mOffsetY; // 0x3C
|
||||
void* _40;
|
||||
u32 _48;
|
||||
u32 mStoredPlaneNum; // 0x4C
|
||||
u8 _50[0x70 - 0x50];
|
||||
Triangle mFloor; // 0x70
|
||||
u32 _E0;
|
||||
sead::Vector3f mGroundPos; // 0xE4
|
||||
u8 _F0[0x110 - 0xF0];
|
||||
f32 _110;
|
||||
f32 _114;
|
||||
Triangle mWall; // 0x118
|
||||
u32 _188;
|
||||
sead::Vector3f mWallPos; // 0x18C
|
||||
u8 _198[0x1B8 - 0x198];
|
||||
f32 _1B8;
|
||||
f32 _1BC;
|
||||
Triangle mCeiling; // 0x1C0
|
||||
u32 _230;
|
||||
sead::Vector3f mCeilingPos; // 0x234
|
||||
u8 _240[0x260 - 0x240];
|
||||
f32 _260;
|
||||
u32 _264;
|
||||
u32 _268;
|
||||
u32 _26C;
|
||||
u32 _270;
|
||||
bool _274;
|
||||
CollisionDirector* mCollisionDirector = nullptr; // 0x08
|
||||
TriangleFilterBase* mTriFilterBase = nullptr; // 0x10
|
||||
CollisionPartsFilterBase* mColFilterBase = nullptr; // 0x18
|
||||
const sead::Matrix34f* mBaseMtx = nullptr; // 0x20
|
||||
const sead::Vector3f* mTrans = nullptr; // 0x28
|
||||
const sead::Vector3f* mGravity = nullptr; // 0x30
|
||||
f32 mRadius = 0.0f; // 0x38
|
||||
f32 mOffsetY = 0.0f; // 0x3C
|
||||
void* _40 = nullptr;
|
||||
u32 _48 = 0;
|
||||
u32 mStoredPlaneNum = 0; // 0x4C
|
||||
HitInfo *_50 = nullptr;
|
||||
sead::Vector3f _58;
|
||||
sead::Vector3f _64;
|
||||
HitInfo mFloor; // 0x70
|
||||
f32 _110 = 0.0f;
|
||||
HitInfo mWall; // 0x118
|
||||
f32 _1B8 = 0.0f;
|
||||
HitInfo mCeiling; // 0x1c0
|
||||
f32 _260 = 0.0f;
|
||||
u32 _264 = 0;
|
||||
sead::Vector3f _268;
|
||||
u8 _274;
|
||||
bool _275;
|
||||
bool _276;
|
||||
bool _277;
|
||||
sead::Vector3f _278;
|
||||
u32 _284;
|
||||
f32 _284;
|
||||
};
|
||||
};
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <math/seadVector.hpp>
|
||||
#include <types.hpp>
|
||||
|
||||
namespace al {
|
||||
class CollisionParts;
|
||||
@ -40,6 +41,16 @@ namespace al {
|
||||
sead::Vector3f mNormals[4]; // 0x18
|
||||
sead::Vector3f mPos[3]; // 0x48
|
||||
};
|
||||
|
||||
class HitInfo {
|
||||
public:
|
||||
HitInfo();
|
||||
|
||||
Triangle mTriangle; // 0x00
|
||||
u32 _6C;
|
||||
sead::Vector3f mPos; // 0x70
|
||||
u8 _7C[0x9C - 0x7C];
|
||||
};
|
||||
};
|
||||
|
||||
bool operator==(const al::Triangle &, const al::Triangle &);
|
||||
|
@ -188,7 +188,7 @@ namespace al {
|
||||
void initShadowKeeper(ShadowKeeper *);
|
||||
void initItemKeeper(s32);
|
||||
void initScoreKeeper();
|
||||
void initACtorPrePassLightKeeper(ActorPrePassLightKeeper *);
|
||||
void initActorPrePassLightKeeper(ActorPrePassLightKeeper *);
|
||||
void initSubActorKeeper(SubActorKeeper *);
|
||||
void initSceneInfo(ActorSceneInfo *);
|
||||
void initActorAlphaCtrl(ActorAlphaCtrl *, const ActorInitInfo &);
|
||||
|
39
lib/ActionLibrary/source/Library/Collision/Collider.cpp
Normal file
39
lib/ActionLibrary/source/Library/Collision/Collider.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
#include "Library/Collision/Collider.hpp"
|
||||
#include "Library/Collision/HitInfo.hpp"
|
||||
|
||||
namespace al {
|
||||
Collider::Collider(CollisionDirector *pCollisionDirector, const sead::Matrix34f *pBaseMtx, const sead::Vector3f *pTrans, const sead::Vector3f *pGravity, f32 radius, f32 offsetY, u32 numHitInfos) :
|
||||
mCollisionDirector(pCollisionDirector),
|
||||
mBaseMtx(pBaseMtx),
|
||||
mTrans(pTrans),
|
||||
mGravity(pGravity),
|
||||
mRadius(radius),
|
||||
mOffsetY(offsetY),
|
||||
_48(numHitInfos),
|
||||
_58(sead::Vector3f(0.0f, 0.0f, 0.0f)),
|
||||
_64(sead::Vector3f(0.0f, 0.0f, 0.0f)),
|
||||
_268(sead::Vector3f(0.0f, 1.0f, 0.0f)),
|
||||
_278(*pTrans),
|
||||
_284(radius)
|
||||
{
|
||||
|
||||
if (_48 == 0) {
|
||||
_50 = nullptr;
|
||||
}
|
||||
else {
|
||||
_50 = new HitInfo[_48]();
|
||||
}
|
||||
|
||||
mStoredPlaneNum = 0;
|
||||
|
||||
_110 = -99999.0f;
|
||||
_1B8 = -99999.0f;
|
||||
_260 = -99999.0f;
|
||||
|
||||
_58 = sead::Vector3f(0.0f, 0.0f, 0.0f);
|
||||
_64 = sead::Vector3f(0.0f, 0.0f, 0.0f);
|
||||
|
||||
_274 &= 0xc0;
|
||||
_274 |= 0x03;
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@
|
||||
#include "Library/Actor/ActorInitInfo.hpp"
|
||||
#include "Library/Actor/ActorPoseFunction.hpp"
|
||||
#include "Library/Actor/ActorPoseKeeperBase.hpp"
|
||||
#include "Library/Actor/ActorPoseUtil.hpp"
|
||||
#include "Library/Actor/ActorPrePassLightKeeper.hpp"
|
||||
#include "Library/Actor/ActorSceneInfo.hpp"
|
||||
#include "Library/Audio/AudioKeeper.hpp"
|
||||
@ -18,6 +19,7 @@
|
||||
#include "Library/Execute/ActorSystemFunction.hpp"
|
||||
#include "Library/HitSensor/HitSensorKeeper.hpp"
|
||||
#include "Library/LiveActor/LiveActor.hpp"
|
||||
#include "Library/Item/ActorScoreKeeper.hpp"
|
||||
#include "Library/LiveActor/ActorPoseUtil.hpp"
|
||||
#include "Library/LiveActor/LiveActorFlag.hpp"
|
||||
#include "Library/LiveActor/LiveActorUtil.hpp"
|
||||
@ -617,17 +619,30 @@ namespace al {
|
||||
return mActorSceneInfo->mCameraDirector;
|
||||
}
|
||||
|
||||
// al::LiveActor::initPoseKeeper
|
||||
void LiveActor::initPoseKeeper(ActorPoseKeeperBase *pPoseKeeper) {
|
||||
mActorPoseKeeper = pPoseKeeper;
|
||||
}
|
||||
|
||||
// al::LiveActor::initRailKeeper
|
||||
// al::LiveActor::initCollider
|
||||
|
||||
void LiveActor::initCollider(f32 radius, f32 offsetY, u32 numHitInfos) {
|
||||
mCollider = new Collider(getCollisionDirector(), getBaseMtx(), &al::getTrans(this), &al::getGravity(this), radius, offsetY, numHitInfos);
|
||||
mActorFlags->mIsNoCollide = false;
|
||||
}
|
||||
|
||||
void LiveActor::initShadowKeeper(ShadowKeeper* pShadowKeeper) {
|
||||
mShadowKeeper = pShadowKeeper;
|
||||
}
|
||||
|
||||
// al::LiveActor::initItemKeeper
|
||||
// al::LiveActor::initScoreKeepe
|
||||
// al::LiveActor::initActorPrePassLightKeeper
|
||||
|
||||
void LiveActor::initScoreKeeper() {
|
||||
mScoreKeeper = new ActorScoreKeeper();
|
||||
}
|
||||
|
||||
void LiveActor::initActorPrePassLightKeeper(ActorPrePassLightKeeper *pLightKeeper) {
|
||||
mLightKeeper = pLightKeeper;
|
||||
}
|
||||
|
||||
void LiveActor::initSubActorKeeper(SubActorKeeper *pSubActorKeeper) {
|
||||
mSubActorKeeper = pSubActorKeeper;
|
||||
|
Loading…
Reference in New Issue
Block a user