diff --git a/configure.py b/configure.py index 113d46f7..7a7835bc 100644 --- a/configure.py +++ b/configure.py @@ -417,7 +417,7 @@ def MatchingFor(*versions): Object(NonMatching, "SB/Core/x/xCollide.cpp", extra_cflags=["-sym on"]), Object(Matching, "SB/Core/x/xCollideFast.cpp"), Object(Matching, "SB/Core/x/xColor.cpp"), - Object(Matching, "SB/Core/x/xCounter.cpp"), + Object(Matching, "SB/Core/x/xCounter.cpp", extra_cflags=["-sym on"]), Object(NonMatching, "SB/Core/x/xCutscene.cpp", extra_cflags=["-sym on"]), Object(NonMatching, "SB/Core/x/xDebug.cpp", extra_cflags=["-sym on"]), Object(Equivalent, "SB/Core/x/xEnt.cpp", extra_cflags=["-sym on"]), @@ -435,7 +435,7 @@ def MatchingFor(*versions): Object(NonMatching, "SB/Core/x/xHudFontMeter.cpp"), Object(NonMatching, "SB/Core/x/xHudMeter.cpp"), Object(Equivalent, "SB/Core/x/xHudModel.cpp", extra_cflags=["-sym on"]), - Object(NonMatching, "SB/Core/x/xHudUnitMeter.cpp"), + Object(NonMatching, "SB/Core/x/xHudUnitMeter.cpp", extra_cflags=["-sym on "]), Object(Matching, "SB/Core/x/xIni.cpp"), Object(NonMatching, "SB/Core/x/xMath.cpp"), Object(Matching, "SB/Core/x/xMath2.cpp"), @@ -498,7 +498,7 @@ def MatchingFor(*versions): Object(NonMatching, "SB/Game/zLasso.cpp"), Object(NonMatching, "SB/Game/zLight.cpp"), Object(Matching, "SB/Game/zLightEffect.cpp"), - Object(NonMatching, "SB/Game/zLightning.cpp"), + Object(NonMatching, "SB/Game/zLightning.cpp", extra_cflags=["-sym on"]), Object(NonMatching, "SB/Game/zLOD.cpp"), Object(NonMatching, "SB/Game/zMain.cpp"), Object(Equivalent, "SB/Game/zMenu.cpp"), diff --git a/src/SB/Core/x/xCounter.cpp b/src/SB/Core/x/xCounter.cpp index 69b79970..0a262e7e 100644 --- a/src/SB/Core/x/xCounter.cpp +++ b/src/SB/Core/x/xCounter.cpp @@ -152,9 +152,3 @@ int xCounterEventCB(xBase*, xBase* to, U32 toEvent, const F32*, xBase*) return 1; } - -// TODO: move to xDebug.cpp -inline void xDebugRemoveTweak(const char*) -{ - return; -} diff --git a/src/SB/Core/x/xDebug.h b/src/SB/Core/x/xDebug.h index 93e12066..9cb9e56b 100644 --- a/src/SB/Core/x/xDebug.h +++ b/src/SB/Core/x/xDebug.h @@ -95,9 +95,36 @@ void xDebugUpdate(); void xDebugExit(); void xDebugTimestampScreen(); -void xDebugAddTweak(const char*, F32*, F32, F32, const tweak_callback*, void*, U32); -void xDebugRemoveTweak(const char*); +inline void xDebugRemoveTweak(const char*) +{ +} + void xDebugUpdate(); +inline void xDebugAddTweak(const char*, F32*, F32, F32, const tweak_callback*, void*, U32) +{ +} + +inline void xDebugAddTweak(const char*, S16*, S16, S16, const tweak_callback*, void*, U32) +{ +} + +inline void xDebugAddTweak(const char*, U8*, U8, U8, const tweak_callback*, void*, U32) +{ +} + +inline void xDebugAddTweak(const char*, const char*, const tweak_callback*, void*, U32) +{ +} + + +inline void xDebugAddFlagTweak(const char*, U32*, U32, const tweak_callback*, void*, U32) +{ +} + +inline void xDebugAddSelectTweak(const char*, U32*, const char**, const U32*, U32, const tweak_callback*, + void*, U32) +{ +} #endif diff --git a/src/SB/Game/zFX.cpp b/src/SB/Game/zFX.cpp index d6b0d4c8..f9fbf36c 100644 --- a/src/SB/Game/zFX.cpp +++ b/src/SB/Game/zFX.cpp @@ -277,11 +277,6 @@ void zFXGooUpdate(F32 dt) } } -void xDebugAddTweak(const char* unk1, const char* unk2, const tweak_callback* unk3, void* unk4, - U32 unk5) -{ -} - xVec3& xVec3::up_normalize() { return safe_normalize(xVec3::m_UnitAxisY); diff --git a/src/SB/Game/zFX.h b/src/SB/Game/zFX.h index 5b181a1d..08b860f1 100644 --- a/src/SB/Game/zFX.h +++ b/src/SB/Game/zFX.h @@ -84,9 +84,6 @@ void update_poppers(F32 dt); void update_entrails(F32 dt); -void xDebugAddTweak(const char* unk1, const char* unk2, const tweak_callback* unk3, void* unk4, - U32 unk5); - xFXRing* zFXMuscleArmWave(const xVec3* pos); void zFX_SpawnBubbleTrail(const xVec3*, unsigned int); diff --git a/src/SB/Game/zLightning.cpp b/src/SB/Game/zLightning.cpp index d749b8b8..144a537a 100644 --- a/src/SB/Game/zLightning.cpp +++ b/src/SB/Game/zLightning.cpp @@ -1,77 +1,49 @@ #include "zLightning.h" -#include "zGlobals.h" #include "xDebug.h" +#include "zGlobals.h" +#include "xstransvc.h" #include #include -extern _tagLightningAdd gLightningTweakAddInfo; -extern zLightning* sLightning[0x30]; -extern RwRaster* sLightningRaster; -extern xVec3 sTweakStart; -extern xVec3 sTweakEnd; - -// Taken from zLightning.s -// Defining these here makes the stringBase0 offsets match in the later functions. -static char* str1 = "Line"; -static char* str2 = "Rotating"; -static char* str3 = "Zeus"; -static char* str4 = "Func"; -static char* str5 = "Lightning|\x01Type Info"; -static char* str6 = "Lightning|\x01Type Info|Setup Degrees"; -static char* str7 = "Lightning|\x01Type Info|Move Degrees"; -static char* str8 = "Lightning|\x01Type Info|Normal Offset"; -static char* str9 = "Lightning|\x01Type Info|Back Offset"; -static char* str10 = "Lightning|\x01Type Info|Side Offset"; -static char* str11 = "PAREMIT_EG_SPARK"; -static char* str12 = "LIGHTNING"; -static char* str13 = "Lightning|\x01\x01Go"; -static char* str14 = "Start Lightning"; -static char* str15 = "Lightning|\x01Globals|\x01\x01JerkFrequency"; -static char* str16 = "Lightning|\x01Globals|\x01\x02ShiftSpeed"; -static char* str17 = "Lightning|\x01Globals|\x01\x03MinPStep"; -static char* str18 = "Lightning|\x01Globals|\x01\x03MaxPStep"; -static char* str19 = "Lightning|\x01Globals|\x02\x01MinScale"; -static char* str20 = "Lightning|\x01Globals|\x02\x01MaxScale"; -static char* str21 = "Lightning|\x01Globals|\x02\x01ScalePerLength"; -static char* str22 = "Lightning|\x01Globals|\x02\x02MinSpan"; -static char* str23 = "Lightning|\x01Globals|\x02\x02SpanPerLength"; -static char* str24 = "Lightning|\x01Globals|\x02\x03SlopeRange"; -static char* str25 = "Lightning|\x01Globals|\x02\x03UVSpeed"; -static char* str26 = "Lightning|\x01Time"; -static char* str27 = "Lightning|\x01Total Points"; -static char* str28 = "Lightning|\x01Type"; -static char* str29 = "Lightning|\x02Flag|Rot Scalar"; -static char* str30 = "Lightning|\x02Flag|No Fade Out"; -static char* str31 = "Lightning|\x02Flag|Arc"; -static char* str32 = "Lightning|\x02Flag|Vertical Orientation"; -static char* str33 = "Lightning|\x02Flag|Taper Thickness At End"; -static char* str34 = "Lightning|\x02Flag|Taper Thickness At Start"; -static char* str35 = "Lightning|\x02Start|x"; -static char* str36 = "Lightning|\x02Start|y"; -static char* str37 = "Lightning|\x02Start|z"; -static char* str38 = "Lightning|\x03End|x"; -static char* str39 = "Lightning|\x03End|y"; -static char* str40 = "Lightning|\x03End|z"; -static char* str41 = "Lightning|\x04Color|\x01R"; -static char* str42 = "Lightning|\x04Color|\x02G"; -static char* str43 = "Lightning|\x04Color|\x03B"; -static char* str44 = "Lightning|\x04Color|\x04A"; -static char* str45 = "Lightning|Lengths|Rot Radius"; -static char* str46 = "Lightning|Lengths|Arc Height"; -static char* str47 = "Lightning|Lengths|Thickness"; -static char* str48 = "Lightning|Randomness|Rand Radius"; -static char* str49 = "X to test lightning\n"; -static char* str50 = " "; -static char* str51 = "1"; -static char* str52 = "0"; -static char* str53 = "-"; -static char* str54 = "\n"; - -void xDebugAddTweak(const char*, F32*, F32, F32, const tweak_callback*, void*, U32) -{ -} +#define NUM_LIGHTNING 48 + +_tagLightningAdd gLightningTweakAddInfo; + +static zLightning* sLightning[NUM_LIGHTNING]; +static xFuncPiece sLFuncX[10]; +static xFuncPiece sLFuncY[10]; +static xFuncPiece sLFuncZ[10]; +static xVec3 sLFuncVal[10]; +static xVec3 sLFuncSlope[10][2]; +static F32 sLFuncEnd[10]; +static xVec3 sTweakStart; +static xVec3 sTweakEnd; +static tweak_callback sLightningStartCB; +static tweak_callback sLightningChangeCB; +static xVec3 sPoint[5]; +static F32 sSize[5]; + +const char* lightning_type_names[4] = { "Line", "Rotating", "Zeus", "Func" }; +static zParEmitter* sSparkEmitter; +static RwRaster* sLightningRaster; +static F32 sLFuncJerkTime; +static F32 sLFuncUVOffset; + +static F32 sLFuncJerkFreq = 20.0f; +static F32 sLFuncShift = 15.0f; +static F32 sLFuncMaxPStep = 1.0f / 16.0f; +static F32 sLFuncMinPStep = 1.0f / 16.0f; +static F32 sLFuncMinScale = 3.0f / 10.0f; +static F32 sLFuncMaxScale = 1.0f; +static F32 sLFuncScalePerLength = 0.15f; +static F32 sLFuncMinSpan = 3.0f; +static F32 sLFuncSpanPerLength = 1.5f; +static F32 sLFuncSlopeRange = 2.0f; +static F32 sLFuncUVSpeed = 1.0f; + +static void lightningTweakStart(const tweak_info& t); void lightningTweakChangeType(const tweak_info& t) { @@ -98,6 +70,128 @@ void lightningTweakChangeType(const tweak_info& t) } } +void zLightningInit() +{ + for (S32 i = 0; i < NUM_LIGHTNING; i++) + { + sLightning[i] = NULL; + } + + zSceneFindObject(xStrHash("PAREMIT_EG_SPARK")); + RwTexture* tex = (RwTexture*)xSTFindAsset(xStrHash("LIGHTNING"), NULL); + if (tex != NULL) + { + sLightningRaster = tex->raster; + } + + for (S32 i = 0; i < 9; i++) + { + sLFuncX[i].next = &sLFuncX[i + 1]; + sLFuncY[i].next = &sLFuncY[i + 2]; + sLFuncZ[i].next = &sLFuncZ[i + 3]; + } + + sLFuncX[9].next = NULL; + sLFuncY[9].next = NULL; + sLFuncZ[9].next = NULL; + + for (S32 i = 0; i < 10; i++) { + xVec3Init(&sLFuncVal[i], 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f)); + xVec3Init(&sLFuncSlope[i][0], 2.0f * (2.0f * (xurand() - 0.5f)), 2.0f * (2.0f * (xurand() - 0.5f)), 2.0f * (2.0f * (xurand() - 0.5f))); + xVec3Init(&sLFuncSlope[i][1], 2.0f * (2.0f * (xurand() - 0.5f)), 2.0f * (2.0f * (xurand() - 0.5f)), 2.0f * (2.0f * (xurand() - 0.5f))); + + sLFuncEnd[i] = 0.25f * (xurand() - 0.5f) + (i + 1); + } + + sLFuncEnd[9] = 10.0f; + + for (S32 i = 0; i < 10; i++) + { + S32 j; + F32 prevEnd; + if (i == 0) + { + prevEnd = 0.0f; + j = 9; + } + else + { + j = i - 1; + prevEnd = sLFuncEnd[j]; + } + + xFuncPiece_EndPoints(&sLFuncX[i], prevEnd, sLFuncEnd[i], sLFuncVal[i].x, sLFuncVal[j].x); + xFuncPiece_EndPoints(&sLFuncY[i], prevEnd, sLFuncEnd[i], sLFuncVal[i].y, sLFuncVal[j].y); + xFuncPiece_EndPoints(&sLFuncZ[i], prevEnd, sLFuncEnd[i], sLFuncVal[i].z, sLFuncVal[j].z); + } + + sLFuncJerkTime = 0.0f; + + gLightningTweakAddInfo.type = 0x3; + gLightningTweakAddInfo.flags = 0x1428; + gLightningTweakAddInfo.time = 5.0f; + xVec3Init(&sTweakStart, -5.0f, 6.0f, 0.0f); + xVec3Init(&sTweakEnd, -5.0f, 2.0f, 0.0f); + gLightningTweakAddInfo.color.r = 0xC8; + gLightningTweakAddInfo.color.g = 0xC8; + gLightningTweakAddInfo.color.b = 0xC8; + gLightningTweakAddInfo.color.a = 0xC8; + gLightningTweakAddInfo.arc_height = 0.5f; + gLightningTweakAddInfo.rot_radius = 0.15f; + gLightningTweakAddInfo.thickness = 0.25f; + gLightningTweakAddInfo.rand_radius = 8.0f; + gLightningTweakAddInfo.move_degrees = -2500.0f; + gLightningTweakAddInfo.setup_degrees = 66.0f; + gLightningTweakAddInfo.total_points = 16; + gLightningTweakAddInfo.zeus_normal_offset = 0.75f; + gLightningTweakAddInfo.zeus_back_offset = 0.2f; + gLightningTweakAddInfo.zeus_side_offset = 0.0f; + + sLightningStartCB.on_change = &lightningTweakStart; + sLightningChangeCB.on_change = &lightningTweakChangeType; + + xDebugAddTweak("Lightning|\01\01Go", "Start Lightning", &sLightningStartCB, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\01\01JerkFrequency", &sLFuncJerkFreq, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\01\01ShiftSpeed", &sLFuncShift, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\01\02MinPStep", &sLFuncMinPStep, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\01\03MaxPStep", &sLFuncMaxPStep, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\01\03MinScale", &sLFuncMinScale, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\02\01MaxScale", &sLFuncMaxScale, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\02\01ScalePerLength", &sLFuncScalePerLength, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\02\02MinSpan", &sLFuncMinSpan, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\02\02SpanPerLength", &sLFuncSpanPerLength, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\02\03SlopeRange", &sLFuncSlopeRange, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Globals|\02\03UVSpeed", &sLFuncUVSpeed, -1000000000.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Time", &gLightningTweakAddInfo.time, 0.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\01Total Points", &gLightningTweakAddInfo.total_points, 2, 16, NULL, NULL, 0x2); + + xDebugAddSelectTweak("Lightning|\01Type", &gLightningTweakAddInfo.type, lightning_type_names, NULL, 4, &sLightningChangeCB, NULL, 0x2); + + tweak_info info; + lightningTweakChangeType((const tweak_info&)info); + + xDebugAddFlagTweak("Lightning|\02Flag|Rot Scalar", &gLightningTweakAddInfo.flags, 0x8, NULL, NULL, 0x2); + xDebugAddFlagTweak("Lightning|\02Flag|No Fade Out", &gLightningTweakAddInfo.flags, 0x1000, NULL, NULL, 0x2); + xDebugAddFlagTweak("Lightning|\02Flag|Arc", &gLightningTweakAddInfo.flags, 0x20, NULL, NULL, 0x2); + xDebugAddFlagTweak("Lightning|\02Flag|Vertical Orientation", &gLightningTweakAddInfo.flags, 0x200, NULL, NULL, 0x2); + xDebugAddFlagTweak("Lightning|\02Flag|Taper Thickness At End", &gLightningTweakAddInfo.flags, 0x400, NULL, NULL, 0x2); + xDebugAddFlagTweak("Lightning|\02Flag|Taper Thickness At Start", &gLightningTweakAddInfo.flags, 0x800, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\02Start|x", &sTweakStart.x, -50.0f, 50.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\02Start|y", &sTweakStart.y, -50.0f, 50.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\02Start|z", &sTweakStart.z, -50.0f, 50.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\03End|x", &sTweakEnd.x, -50.0f, 50.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\03End|y", &sTweakEnd.y, -50.0f, 50.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\03End|z", &sTweakEnd.z, -50.0f, 50.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\04Color|\01R", &gLightningTweakAddInfo.color.r, 0x0, 0xFF, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\04Color|\02G", &gLightningTweakAddInfo.color.g, 0x0, 0xFF, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\04Color|\03B", &gLightningTweakAddInfo.color.b, 0x0, 0xFF, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|\04Color|\04A", &gLightningTweakAddInfo.color.a, 0x0, 0xFF, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|Lengths|Rot Radius", &gLightningTweakAddInfo.rot_radius, -1000000000.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|Lengths|Arc Height", &gLightningTweakAddInfo.arc_height, -1000000000.0f, 1000000000.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|Lengths|Thickness", &gLightningTweakAddInfo.thickness, 0.0f, 100.0f, NULL, NULL, 0x2); + xDebugAddTweak("Lightning|Randomness|Rand Radius", &gLightningTweakAddInfo.rand_radius, 0.0f, 1000000000.0f, NULL, NULL, 0x2); +} + static void lightningTweakStart(const tweak_info& t) { xVec3 s, e; @@ -108,6 +202,67 @@ static void lightningTweakStart(const tweak_info& t) zLightningAdd(&gLightningTweakAddInfo); } +void zLightningUpdate(F32 dt) +{ + S32 i; + for (i = 0; i < NUM_LIGHTNING; i++) + { + if (sLightning[i] != NULL && sLightning[i]->flags & 0x1) + { + UpdateLightning(sLightning[i], dt); + } + } + + sLFuncUVOffset = 1.0f * dt + sLFuncUVOffset; + if (sLFuncUVOffset > 1.0f) + { + sLFuncUVOffset -= 1.0f; + } + + sLFuncJerkTime += 20.0f * dt; + if (!(sLFuncJerkTime > 1.0f)) + { + return; + } + + S32 picker = 9.0f * xurand(); + if (picker >= 9) + { + picker = 8; + } + if (picker < 0) + { + picker = 0; + } + + xVec3Init(&sLFuncVal[picker], 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f)); + xVec3Init(&sLFuncSlope[picker][0], 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f)); + xVec3Init(&sLFuncSlope[picker][1], 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f), 2.0f * (xurand() - 0.5f)); + + sLFuncEnd[picker] = 0.25f * (xurand() * 0.5f) + (picker + 1); + + for (S32 j = 0; j <= picker + 1; j++) + { + F32 prevEnd; + if (picker == 0) + { + i = 9; + prevEnd = 0.0f; + } + else + { + i = picker - 1; + prevEnd = sLFuncEnd[i]; + } + + xFuncPiece_EndPoints(&sLFuncX[j], prevEnd, sLFuncEnd[j], sLFuncVal[j].x, sLFuncVal[i].x); + xFuncPiece_EndPoints(&sLFuncY[j], prevEnd, sLFuncEnd[j], sLFuncVal[j].y, sLFuncVal[i].y); + xFuncPiece_EndPoints(&sLFuncZ[j], prevEnd, sLFuncEnd[j], sLFuncVal[j].z, sLFuncVal[i].z); + } + + sLFuncJerkTime = 0.0f; +} + void zLightningRender() { if (sLightningRaster != NULL) @@ -162,20 +317,3 @@ static zLightning* FindFreeLightning() return 0; } - -void xDebugAddTweak(const char*, S16*, S16, S16, const tweak_callback*, void*, U32) -{ -} - -void xDebugAddTweak(const char*, U8*, U8, U8, const tweak_callback*, void*, U32) -{ -} - -void xDebugAddFlagTweak(const char*, U32*, U32, const tweak_callback*, void*, U32) -{ -} - -void xDebugAddSelectTweak(const char*, U32*, const char**, const U32*, U32, const tweak_callback*, - void*, U32) -{ -} diff --git a/src/SB/Game/zLightning.h b/src/SB/Game/zLightning.h index ad8fb7c4..5399e8fd 100644 --- a/src/SB/Game/zLightning.h +++ b/src/SB/Game/zLightning.h @@ -88,6 +88,8 @@ struct zLightning F32 time_total; }; +extern _tagLightningAdd gLightningTweakAddInfo; + void lightningTweakChangeType(tweak_info& t); void lightningTweakStart(tweak_info& t); void zLightningInit(); @@ -100,15 +102,6 @@ void zLightningKill(zLightning* l); void RenderLightning(zLightning* l); void zLightningRender(); void zLightningModifyEndpoints(zLightning* l, xVec3* start, xVec3* end); -void xDebugAddTweak(char* name, U8* property, U8 param_3, U8 param_4, tweak_callback* callback, - void* param_6, U32 param_7); -void xDebugAddFlagTweak(char* name, U32* property, U32 param_3, tweak_callback* callback, - void* param_5, U32 param_6); -void xDebugAddSelectTweak(char* name, U32* param_2, char** param_3, U32* param_4, U32 param_5, - tweak_callback* callback, void* param_7, U32 param_8); -void xDebugAddTweak(char* name, S16* property, S16 param_3, S16 param_4, tweak_callback* callback, - void* param_6, U32 param_7); - void zLightningInit(); void zLightningUpdate(F32 seconds); void zLightningRender();