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
2728enum MSHoverBehavior { Normal, Swap, Always };
@@ -54,8 +55,19 @@ DataArray(WeldInfo, BigWeldInfo, 0x03C55500, 0x11);
5455DataArray (WeldInfo, MetalSonicWeldInfo, 0x03C55D68 , 8 );
5556DataArray (WeldInfo, TikalWeldInfo, 0x038F3AB8 , 14 );
5657DataArray (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+
5971void __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
23702382NJS_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
24192429NJS_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
24922476NJS_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
29963007NJS_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
32753285bool 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
32843325void 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
42604295extern " 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