@@ -569,6 +569,9 @@ void CGameSA::SetMinuteDuration ( unsigned long ulTime )
569
569
570
570
bool CGameSA::IsCheatEnabled ( const char * szCheatName )
571
571
{
572
+ if (!strcmp ( szCheatName, PROP_RANDOM_FOLIAGE ))
573
+ return IsRandomFoliageEnabled ();
574
+
572
575
if ( !strcmp ( szCheatName, PROP_SNIPER_MOON ) )
573
576
return IsMoonEasterEggEnabled ();
574
577
@@ -580,6 +583,12 @@ bool CGameSA::IsCheatEnabled ( const char* szCheatName )
580
583
581
584
bool CGameSA::SetCheatEnabled ( const char * szCheatName, bool bEnable )
582
585
{
586
+ if (!strcmp ( szCheatName, PROP_RANDOM_FOLIAGE ))
587
+ {
588
+ SetRandomFoliageEnabled ( bEnable );
589
+ return true ;
590
+ }
591
+
583
592
if ( !strcmp ( szCheatName, PROP_SNIPER_MOON ) )
584
593
{
585
594
SetMoonEasterEggEnabled ( bEnable );
@@ -598,6 +607,8 @@ bool CGameSA::SetCheatEnabled ( const char* szCheatName, bool bEnable )
598
607
599
608
void CGameSA::ResetCheats ()
600
609
{
610
+ SetRandomFoliageEnabled ( true );
611
+
601
612
SetMoonEasterEggEnabled ( false );
602
613
603
614
std::map < std::string, SCheatSA* >::iterator it;
@@ -610,6 +621,19 @@ void CGameSA::ResetCheats ()
610
621
}
611
622
}
612
623
624
+ bool CGameSA::IsRandomFoliageEnabled ()
625
+ {
626
+ return *(unsigned char *)0x5DD01B == 0x74 ;
627
+ }
628
+
629
+ void CGameSA::SetRandomFoliageEnabled ( bool bEnabled )
630
+ {
631
+ // 0xEB skip random foliage generation
632
+ MemPut < BYTE > ( 0x5DD01B , bEnabled ? 0x74 : 0xEB );
633
+ // 0x74 destroy random foliage loaded
634
+ MemPut < BYTE > ( 0x5DC536 , bEnabled ? 0x75 : 0x74 );
635
+ }
636
+
613
637
bool CGameSA::IsMoonEasterEggEnabled ()
614
638
{
615
639
return *(unsigned char *)0x73ABCF == 0x75 ;
0 commit comments