@@ -2246,8 +2246,8 @@ void NDS_exec(s32 nb)
22462246 cheats->process (CHEAT_TYPE_INTERNAL);
22472247 CHEATS::ResetJitIfNeeded ();
22482248 }
2249- for ( auto & cheat : CommonSettings. gamehacks . flags . cheats )
2250- cheat-> Run ();
2249+
2250+ CommonSettings. gamehacks . execute ();
22512251
22522252 GDBSTUB_MUTEX_UNLOCK ();
22532253}
@@ -3469,44 +3469,44 @@ namespace
34693469{
34703470 struct rabbids_us : public GameHackCheat
34713471 {
3472- void Run () override
3472+ virtual void Run ()
34733473 {
34743474 if (0xe28dd02c == read32 (0x203cf18 ))
34753475 write32 (0x203cf18 , 0xeb0f0878 );
34763476 write32 (0x23ff100 , 0xe59d1000 );
3477- write (0x23ff104 , 48 , " \x01\x00\x51\xE3\x03\x00\x00\x1A\x10\x10\x8F\xE2\x1E\x00\x91\xE8\x00\x30\x81\xE5\x00\x40\x82\xE5\x2C\xD0\x8D\xE2\x1E\xFF\x2F\xE1\xC4\xD5\x18\x02\xCC\xD5\x18\x02\x21\x59\xA0\xE3\x00\x40\xA0\xE3 " );
3477+ write (0x23ff104 , 48 , ( char *) " \x01\x00\x51\xE3\x03\x00\x00\x1A\x10\x10\x8F\xE2\x1E\x00\x91\xE8\x00\x30\x81\xE5\x00\x40\x82\xE5\x2C\xD0\x8D\xE2\x1E\xFF\x2F\xE1\xC4\xD5\x18\x02\xCC\xD5\x18\x02\x21\x59\xA0\xE3\x00\x40\xA0\xE3 " );
34783478 }
34793479 };
34803480
34813481 struct rabbids_eu : public GameHackCheat
34823482 {
3483- void Run () override
3483+ virtual void Run ()
34843484 {
34853485 if (0xe28dd02c == read32 (0x203d108 ))
34863486 write32 (0x203d108 , 0xeb0efcbc );
34873487 write32 (0x23ff100 , 0xe59d1000 );
3488- write (0x23ff104 , 48 , " \x01\x00\x51\xE3\x03\x00\x00\x1A\x10\x10\x8F\xE2\x1E\x00\x91\xE8\x00\x30\x81\xE5\x00\x40\x82\xE5\x2C\xD0\x8D\xE2\x1E\xFF\x2F\xE1\x4C\xDA\x18\x02\x54\xDA\x18\x02\x21\x59\xA0\xE3\x00\x40\xA0\xE3 " );
3488+ write (0x23ff104 , 48 , ( char *) " \x01\x00\x51\xE3\x03\x00\x00\x1A\x10\x10\x8F\xE2\x1E\x00\x91\xE8\x00\x30\x81\xE5\x00\x40\x82\xE5\x2C\xD0\x8D\xE2\x1E\xFF\x2F\xE1\x4C\xDA\x18\x02\x54\xDA\x18\x02\x21\x59\xA0\xE3\x00\x40\xA0\xE3 " );
34893489 }
34903490 };
34913491}
34923492
3493- void GameHackCheat::write08 (uint32_t address, uint8_t value)
3493+ void GameHackCheat::write08 (u32 address, u8 value)
34943494{
34953495 _MMU_ARM9_write08 (address, value);
34963496}
34973497
3498- void GameHackCheat::write (uint32_t address, size_t sz, void * value)
3498+ void GameHackCheat::write (u32 address, size_t sz, void * value)
34993499{
35003500 for (size_t i = 0 ; i < sz; i++)
3501- write08 (address + i, ((uint8_t *)value)[i]);
3501+ write08 (address + ( u32 ) i, ((u8 *)value)[i]);
35023502}
35033503
3504- void GameHackCheat::write32 (uint32_t address, uint32_t value)
3504+ void GameHackCheat::write32 (u32 address, u32 value)
35053505{
35063506 _MMU_ARM9_write32 (address, value);
35073507}
35083508
3509- uint32_t GameHackCheat::read32 (uint32_t address)
3509+ u32 GameHackCheat::read32 (u32 address)
35103510{
35113511 return _MMU_ARM9_read32 (address);
35123512}
@@ -3520,11 +3520,36 @@ void TCommonSettings::GameHacks::apply()
35203520 flags.stylusjitter = gameInfo.IsCode (" YDM" ); // CSI: Dark Motives
35213521
35223522 // Rabbids Go Home
3523- if (gameInfo.IsCode (" VRGE" )) flags.cheats .emplace_back (new rabbids_us ());
3524- if (gameInfo.IsCode (" VRGV" )) flags.cheats .emplace_back (new rabbids_eu ());
3523+ if (gameInfo.IsCode (" VRGE" )) flags.cheats .push_back (new rabbids_us ());
3524+ if (gameInfo.IsCode (" VRGV" )) flags.cheats .push_back (new rabbids_eu ());
35253525}
35263526
35273527void TCommonSettings::GameHacks::clear ()
35283528{
3529- reconstruct (&flags);
3529+ flags.reset ();
3530+ }
3531+
3532+ void TCommonSettings::GameHacks::execute ()
3533+ {
3534+ const size_t cheatCount = flags.cheats .size ();
3535+
3536+ for (size_t i = 0 ; i < cheatCount; i++)
3537+ {
3538+ flags.cheats [i]->Run ();
3539+ }
3540+ }
3541+
3542+ void TCommonSettings::GameHacks::GameHacksFlags::reset ()
3543+ {
3544+ const size_t cheatCount = cheats.size ();
3545+
3546+ overclock = false ;
3547+ stylusjitter = false ;
3548+
3549+ for (int i = (int )cheatCount - 1 ; i > 0 ; i--)
3550+ {
3551+ delete cheats[i];
3552+ }
3553+
3554+ cheats.clear ();
35303555}
0 commit comments