Skip to content

Commit 92cea0c

Browse files
Merge pull request #26 from PiKeyAr/master
Various fixes
2 parents 7f5dff6 + 3aab837 commit 92cea0c

1 file changed

Lines changed: 106 additions & 57 deletions

File tree

SA1_Chars/SA1_Chars.cpp

Lines changed: 106 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "MetalSonic.h"
2323

2424
#define ReplacePVM(a) helperFunctions.ReplaceFile("system\\" a ".PVM", "system\\" a "_DC.PVM");
25+
NJS_MATERIAL *TemporaryMaterialArray[] = { nullptr };
2526

2627
//Customization Options
2728
enum MSHoverBehavior { Normal, Swap, Always };
@@ -54,8 +55,19 @@ DataArray(WeldInfo, BigWeldInfo, 0x03C55500, 0x11);
5455
DataArray(WeldInfo, MetalSonicWeldInfo, 0x03C55D68, 8);
5556
DataArray(WeldInfo, TikalWeldInfo, 0x038F3AB8, 14);
5657
DataArray(WeldInfo, EggmanWeldInfo, 0x038F3F28, 15);
58+
FunctionPointer(void, PlaySonicIdleVoice, (int a1), 0x442360);
5759

5860
//Replacement Functions
61+
62+
void PlaySonicIdleVoice_r(int a1)
63+
{
64+
if (MetalSonicFlag)
65+
{
66+
PlayVoice(2044 + rand() % 5);
67+
}
68+
else PlaySonicIdleVoice(a1);
69+
}
70+
5971
void __cdecl Sonic_MorphStretchyFeet_c(CharObj2* a1)
6072
{
6173
float a4; // ST10_4@3
@@ -2368,9 +2380,7 @@ static void __declspec(naked) Sonic_Run1Ani_origasm()
23682380

23692381
//Lantern API Fixes
23702382
NJS_MATERIAL* Specular0[] = {
2371-
//Tails fixes red
2372-
&matlist_02F37A50[9],
2373-
//Gamma Material Fixes
2383+
//Part of Gamma's laser scope
23742384
materials_0020B9B8[0],
23752385
materials_0020B9B8[1],
23762386
materials_0020B9B8[2],
@@ -2417,7 +2427,7 @@ NJS_MATERIAL* Specular0[] = {
24172427
};
24182428

24192429
NJS_MATERIAL* Specular1[] = {
2420-
//Gamma Material Fixes
2430+
//Gamma's Jet Booster and Laser Scope
24212431
materials_0020ABF0[0],
24222432
materials_0020ABF0[1],
24232433
materials_0020ABF0[2],
@@ -2461,32 +2471,6 @@ NJS_MATERIAL* Specular1[] = {
24612471
//Tornado 2 Changed (Event)
24622472
&material_8D4714ACE7FAE0BE986[0],
24632473
&material_8D4714ACE7FAE0BE986[1],
2464-
2465-
//Tails' plane when Sonic sees him crash (Event)
2466-
((NJS_MATERIAL*)0x03176DC0),
2467-
((NJS_MATERIAL*)0x03176DD4),
2468-
((NJS_MATERIAL*)0x03176DE8),
2469-
((NJS_MATERIAL*)0x03176DFC),
2470-
((NJS_MATERIAL*)0x03176E10),
2471-
((NJS_MATERIAL*)0x03176E24),
2472-
((NJS_MATERIAL*)0x03176E38),
2473-
((NJS_MATERIAL*)0x03176E4C),
2474-
((NJS_MATERIAL*)0x03176E60),
2475-
((NJS_MATERIAL*)0x03176E74),
2476-
((NJS_MATERIAL*)0x03176E88),
2477-
((NJS_MATERIAL*)0x03176E9C),
2478-
((NJS_MATERIAL*)0x03176EB0),
2479-
((NJS_MATERIAL*)0x03176EC4),
2480-
((NJS_MATERIAL*)0x03176ED8),
2481-
((NJS_MATERIAL*)0x03176EEC),
2482-
((NJS_MATERIAL*)0x03176F00),
2483-
((NJS_MATERIAL*)0x03176F14),
2484-
((NJS_MATERIAL*)0x0317661C),
2485-
((NJS_MATERIAL*)0x03176630),
2486-
((NJS_MATERIAL*)0x03175E90),
2487-
((NJS_MATERIAL*)0x03175EA4),
2488-
((NJS_MATERIAL*)0x03175EB8),
2489-
((NJS_MATERIAL*)0x03175ECC),
24902474
};
24912475

24922476
NJS_MATERIAL* Specular2[] = {
@@ -2991,6 +2975,33 @@ NJS_MATERIAL* Specular3[] = {
29912975
//Tornado 2 Change
29922976
&material_8D4714ACE7FAE0BE986[0],
29932977
&material_8D4714ACE7FAE0BE986[1],
2978+
2979+
//EV Eggmobile 0
2980+
&matlist_0006D138[0],
2981+
&matlist_0006D138[1],
2982+
&matlist_0006D138[2],
2983+
&matlist_0006D138[3],
2984+
&matlist_0006D138[4],
2985+
&matlist_0006D138[5],
2986+
&matlist_0006D138[6],
2987+
&matlist_0006D138[7],
2988+
&matlist_0006D138[8],
2989+
&matlist_0006D138[9],
2990+
&matlist_0006D138[10],
2991+
&matlist_0006D138[11],
2992+
&matlist_0006D138[12],
2993+
&matlist_0006D138[13],
2994+
&matlist_0006D138[14],
2995+
&matlist_0006D138[15],
2996+
&matlist_0006D138[16],
2997+
&matlist_0006D138[17],
2998+
&matlist_0006D138[18],
2999+
&matlist_0006D138[19],
3000+
&matlist_0006D138[20],
3001+
&matlist_0006D138[21],
3002+
&matlist_0006D138[22],
3003+
&matlist_0006D138[23],
3004+
&matlist_0006D138[24],
29943005
};
29953006

29963007
NJS_MATERIAL* TailsBody[] = {
@@ -3268,18 +3279,48 @@ bool ForceDiffuse2Specular2(NJS_MATERIAL* material, Uint32 flags)
32683279
{
32693280
set_diffuse(2, false);
32703281
set_specular(2, false);
3271-
use_default_diffuse(true);
32723282
return true;
32733283
}
32743284

32753285
bool ForceDiffuse2Specular3(NJS_MATERIAL* material, Uint32 flags)
32763286
{
32773287
set_diffuse(2, false);
32783288
set_specular(3, false);
3279-
use_default_diffuse(true);
32803289
return true;
32813290
}
32823291

3292+
void RemoveMaterialColors(NJS_OBJECT *obj)
3293+
{
3294+
if (obj->basicdxmodel)
3295+
{
3296+
for (int q = 0; q < obj->basicdxmodel->nbMat; ++q)
3297+
{
3298+
obj->basicdxmodel->mats[q].diffuse.argb.r = 0xFF;
3299+
obj->basicdxmodel->mats[q].diffuse.argb.g = 0xFF;
3300+
obj->basicdxmodel->mats[q].diffuse.argb.b = 0xFF;
3301+
}
3302+
}
3303+
if (obj->child) RemoveMaterialColors(obj->child);
3304+
if (obj->sibling) RemoveMaterialColors(obj->sibling);
3305+
}
3306+
3307+
void ForceDiffuse2Specular2_Object(NJS_OBJECT *obj)
3308+
{
3309+
if (obj->basicdxmodel)
3310+
{
3311+
for (int q = 0; q < obj->basicdxmodel->nbMat; ++q)
3312+
{
3313+
if (!(obj->basicdxmodel->mats[q].attrflags & NJD_FLAG_IGNORE_LIGHT))
3314+
{
3315+
TemporaryMaterialArray[0] = &obj->basicdxmodel->mats[q];
3316+
material_register(TemporaryMaterialArray, 1, ForceDiffuse2Specular2);
3317+
}
3318+
}
3319+
}
3320+
if (obj->child) ForceDiffuse2Specular2_Object(obj->child);
3321+
if (obj->sibling) ForceDiffuse2Specular2_Object(obj->sibling);
3322+
}
3323+
32833324
//Character Init Functions
32843325
void Init_Sonic()
32853326
{
@@ -3469,7 +3510,7 @@ void Init_Sonic()
34693510
SONIC_ACTIONS[139]->object = &object_0062DE88;
34703511
SONIC_ACTIONS[140]->object = &object_0062DE88;
34713512
SONIC_ACTIONS[141]->object = &object_0062DE88;
3472-
SONIC_ACTIONS[142]->object = &object_0062FE6C;
3513+
SONIC_ACTIONS[142]->object = &object_0062FE6C; //Super Sonic jumpball
34733514
SONIC_ACTIONS[143]->object = &object_0062DE88;
34743515
SONIC_ACTIONS[144]->object = &object_0062DE88;
34753516
SONIC_ACTIONS[145]->object = &object_0056AF50;
@@ -3699,19 +3740,12 @@ void Init_Miles()
36993740
WriteJump((void*)0x007C6D80, InitTailsWeldInfo_mod);
37003741
WriteJump((void*)0x007C7560, InitNPCTailsWeldInfo_mod);
37013742
//Material fixes for the cutscene where Sonic sees Tails crash
3702-
((NJS_MATERIAL*)0x03171BD0)->diffuse.color = 0xFFB2B2B2;
3703-
((NJS_MATERIAL*)0x03171BE4)->diffuse.color = 0xFFB2B2B2;
3704-
((NJS_MATERIAL*)0x03171BF8)->diffuse.color = 0xFFB2B2B2;
3705-
((NJS_MATERIAL*)0x03171C0C)->diffuse.color = 0xFFB2B2B2;
3706-
((NJS_MATERIAL*)0x03171C20)->diffuse.color = 0xFFB2B2B2;
3707-
((NJS_MATERIAL*)0x03171C34)->diffuse.color = 0xFFB2B2B2;
3708-
((NJS_MATERIAL*)0x03171C48)->diffuse.color = 0xFFB2B2B2;
3709-
((NJS_MATERIAL*)0x03171C5C)->diffuse.color = 0xFFB2B2B2;
3710-
((NJS_MATERIAL*)0x03171C70)->diffuse.color = 0xFFB2B2B2;
3711-
((NJS_MATERIAL*)0x03171A48)->diffuse.color = 0xFFB2B2B2;
3712-
((NJS_MATERIAL*)0x031718C4)->diffuse.color = 0xFFB2B2B2;
3713-
((NJS_OBJECT*)0x317178C)->basicdxmodel->mats[1].attrflags &= ~NJD_FLAG_USE_ALPHA;
3714-
((NJS_OBJECT*)0x31708E4)->basicdxmodel->mats[1].attrflags &= ~NJD_FLAG_USE_ALPHA;
3743+
RemoveMaterialColors((NJS_OBJECT*)0x3175528); //Tails' model
3744+
((NJS_OBJECT*)0x317178C)->basicdxmodel->mats[1].attrflags &= ~NJD_FLAG_USE_ALPHA; //Unnecessary alpha in Tails' arm
3745+
((NJS_OBJECT*)0x31708E4)->basicdxmodel->mats[1].attrflags &= ~NJD_FLAG_USE_ALPHA; //Unnecessary alpha in Tails' arm
3746+
((NJS_OBJECT*)0x31793C0)->basicdxmodel->mats[3].attrflags &= ~NJD_FLAG_IGNORE_SPECULAR; //Plane
3747+
((NJS_OBJECT*)0x31793C0)->basicdxmodel->mats[5].attrflags &= ~NJD_FLAG_IGNORE_SPECULAR; //Plane
3748+
((NJS_OBJECT*)0x31793C0)->basicdxmodel->mats[9].attrflags &= ~NJD_FLAG_IGNORE_SPECULAR; //Plane
37153749
//Tails Upgrades
37163750
WriteData((NJS_OBJECT**)0x03342074, &EV_TailsProtoPlane);
37173751
WriteData((NJS_OBJECT**)0x03344EAC, &EV_TailsProtoPlane);
@@ -4255,6 +4289,7 @@ void Init_Metal()
42554289
SONIC_OBJECTS[69] = &object_0059C234;
42564290
SONIC_OBJECTS[70] = &object_0059E254;
42574291
WriteJump((void*)0x007D18F0, InitMetalSonicWeldInfo);
4292+
WriteCall((void*)0x491701, PlaySonicIdleVoice_r);
42584293
}
42594294

42604295
extern "C"
@@ -4269,17 +4304,6 @@ extern "C"
42694304
HMODULE adv02dll = GetModuleHandle(L"ADV02MODELS");
42704305
HMODULE adv03dll = GetModuleHandle(L"ADV03MODELS");
42714306

4272-
//Lantern API Export
4273-
HMODULE Lantern = GetModuleHandle(L"sadx-dc-lighting");
4274-
if (Lantern != nullptr)
4275-
{
4276-
material_register(Specular0, LengthOfArray(Specular0), &ForceDiffuse0Specular0);
4277-
material_register(Specular1, LengthOfArray(Specular1), &ForceDiffuse0Specular1);
4278-
material_register(Specular2, LengthOfArray(Specular2), &ForceDiffuse2Specular2);
4279-
material_register(Specular3, LengthOfArray(Specular3), &ForceDiffuse2Specular3);
4280-
material_register(TailsBody, LengthOfArray(TailsBody), &ForceDiffuse0Specular0_Tails);
4281-
material_register(TailsShoes, LengthOfArray(TailsShoes), &ForceDiffuse0Specular1_Tails);
4282-
}
42834307

42844308
//Ini Configuration
42854309
const IniFile *config = new IniFile(std::string(path) + "\\config.ini");
@@ -4488,6 +4512,31 @@ extern "C"
44884512
ReplacePVM("EV_TR1_WITH_SONIC", "EV_TR1_WITH_SONIC_DC");
44894513
ReplacePVM("EV_TR2BEFORE_WITH_SONIC", "EV_TR2BEFORE_WITH_SONIC_DC");
44904514
ReplacePVM("EV_TR2CHANGE_WITH_SONIC", "EV_TR2CHANGE_WITH_SONIC_DC");
4515+
4516+
//Lantern API Export
4517+
HMODULE Lantern = GetModuleHandle(L"sadx-dc-lighting");
4518+
if (Lantern != nullptr)
4519+
{
4520+
material_register(Specular0, LengthOfArray(Specular0), &ForceDiffuse0Specular0);
4521+
material_register(Specular1, LengthOfArray(Specular1), &ForceDiffuse0Specular1);
4522+
material_register(Specular2, LengthOfArray(Specular2), &ForceDiffuse2Specular2);
4523+
material_register(Specular3, LengthOfArray(Specular3), &ForceDiffuse2Specular3);
4524+
material_register(TailsBody, LengthOfArray(TailsBody), &ForceDiffuse0Specular0_Tails);
4525+
material_register(TailsShoes, LengthOfArray(TailsShoes), &ForceDiffuse0Specular1_Tails);
4526+
if (EnableSonic)
4527+
{
4528+
ForceDiffuse2Specular2_Object(&object_0062FE6C); //Super Sonic jumpball
4529+
if (EnableExtras)
4530+
{
4531+
ForceDiffuse2Specular2_Object(&object_LShoeSpin); //Sonic jumpball with LS shoes
4532+
ForceDiffuse2Specular2_Object(&object_SShoeHeelL); //Super Sonic Left Heel
4533+
ForceDiffuse2Specular2_Object(&object_SShoeToeL); //Super Sonic Left Toe
4534+
ForceDiffuse2Specular2_Object(&object_SShoeHeelR); //Super Sonic Right Heel
4535+
ForceDiffuse2Specular2_Object(&object_SShoeToeR); //Super Sonic Right Toe
4536+
ForceDiffuse2Specular2_Object(&object_SSCrystalRing); //Super Sonic arm with Crystal Ring
4537+
}
4538+
}
4539+
}
44914540
}
44924541
}
44934542

0 commit comments

Comments
 (0)