source: Daodan/src/Daodan_Cheater.c @ 472

Last change on this file since 472 was 472, checked in by gumby, 11 years ago

Changed Kangaroo cheat description. Feel free to refine the Easter Egg more, or delete it completely...
http://oni.bungie.org/community/forum/viewtopic.php?pid=20621#p20621

File size: 10.4 KB
Line 
1#include <string.h>
2#include <stdbool.h>
3
4#include "Oni.h"
5#include "Oni_Character.h"
6
7#include "Daodan.h"
8#include "Daodan_Cheater.h"
9
10oniCheatCode DDr_CheatTable[] = {
11        { "shapeshifter",   "Change Characters Enabled",       "Change Characters Disabled", cheat_shapeshifter   },
12        { "liveforever",    "Invincibility Enabled",           "Invincibility Disabled",     cheat_liveforever    },
13        { "touchofdeath",   "Omnipotence Enabled",             "Omnipotence Disabled",       cheat_touchofdeath   },
14        { "canttouchthis",  "Unstoppable Enabled",             "Unstoppable Disabled",       cheat_canttouchthis  },
15        { "fatloot",        "Fat Loot Received",               NULL,                         cheat_fatloot        },
16        { "glassworld",     "Glass Furniture Enabled",         "Glass Furniture Disabled",   cheat_glassworld     },
17        { "winlevel",       "Instantly Win Level",             NULL,                         cheat_winlevel       },
18        { "loselevel",      "Instantly Lose Level",            NULL,                         cheat_loselevel      },
19        { "bighead",        "Big Head Enabled",                "Big Head Disabled",          cheat_bighead        },
20        { "minime",         "Mini Mode Enabled",               "Mini Mode Disabled",         cheat_minime         },
21        { "superammo",      "Super Ammo Mode Enabled",         "Super Ammo Mode Disabled",   cheat_superammo      },
22        { "thedayismine",   "Developer Access Enabled",        "Developer Access Disabled",  cheat_thedayismine   },
23        { "reservoirdogs",  "Last Man Standing Enabled",       "Last Man Standing Disabled", cheat_reservoirdogs  },
24        { "roughjustice",   "Gatling Guns Enabled",            "Gatling Guns Disabled",      cheat_roughjustice   },
25        { "chenille",       "Daodan Power Enabled",            "Daodan Power Disabled",      cheat_chenille       },
26        { "behemoth",       "Godzilla Mode Enabled",           "Godzilla Mode Disabled",     cheat_behemoth       },
27        { "elderrune",      "Regeneration Enabled",            "Regeneration Disabled",      cheat_elderrune      },
28        { "moonshadow",     "Phase Cloak Enabled",             "Phase Cloak Disabled",       cheat_moonshadow     },
29        { "munitionfrenzy", "Weapons Locker Created",          NULL,                         cheat_munitionfrenzy },
30        { "fistsoflegend",  "Fists Of Legend Enabled",         "Fists Of Legend Disabled",   cheat_fistsoflegend  },
31        { "killmequick",    "Ultra Mode Enabled",              "Ultra Mode Disabled",        cheat_killmequick    },
32        { "carousel",       "Slow Motion Enabled",             "Slow Motion Disabled",       cheat_carousel       },
33        { "bigbadboss",     "Boss Shield Enabled",             "Boss Shield Disabled",       cheat_bigbadboss     },
34        { "bulletproof",    "Force Field Enabled",             "Force Field Disabled",       cheat_bulletproof    },
35        { "kangaroo",       "Alex Okita Mode Enabled",         "Alex Okita Mode Disabled",       cheat_kangaroo       },
36        { "himynameisalex", "Kangaroo Jump Enabled",               "Kangaroo Jump Disabled",     cheat_kangaroo           },
37        { "marypoppins",    "Jet Pack Mode Enabled",           "Jet Pack Mode Disabled",     cheat_marypoppins    },
38        { "buddha",         "Unkillable Enabled",              "Unkillable Disabled",        cheat_buddha         },
39        { "shinobi",        "Ninja Mode Enabled (good luck!)", "Ninja Mode Disabled",        cheat_shinobi        },
40        { "x",              "Developer Access Enabled",        "Developer Access Disabled",  cheat_x              },
41        { "testcheat",      "Testing...",                      "",                           cheat_testcheat      },
42        { "tellmetheversion","Daodan Version ???",                         "",                                                   cheat_tellmetheversion},
43        {0}
44};
45
46// Just copied all these defines from the old daodan, they were originaly from SFeLi's code.
47
48#define GSA_camera        (0x00000080)
49#define GSA_player        (0x000000AC)
50#define GSA_carousel      (0x00000104) /* char */
51#define GSA_slowmotimer   (0x00000108)
52#define GSA_splashscreen  (0x00000118) /* char */
53
54#define CHR_flags         (0x00000004)
55#define CHR_flags2        (0x00000008)
56#define CHR_oncc          (0x0000000C)
57#define CHR_team          (0x00000012) /* short */
58#define CHR_name          (0x00000014) /* char[32] */
59#define CHR_scalemodel    (0x00000034)
60#define CHR_weapon1       (0x00000194)
61#define CHR_weapon2       (0x00000198)
62#define CHR_weapon3       (0x0000019C)
63#define CHR_shield_curr   (0x000001B6) /* short */
64#define CHR_shield        (0x000001B8) /* short */
65#define CHR_phasecloak    (0x000001BA) /* short */
66#define CHR_stats_kills   (0x00001670)
67#define CHR_stats_damage  (0x00001674)
68
69#define ONCC_jet_accel    (0x00000010) /* float */
70#define ONCC_jet_timer    (0x00000016) /* short */
71#define ONCC_height1      (0x00000018) /* float */
72#define ONCC_height2      (0x0000001C) /* float */
73#define ONCC_bodysize_min (0x00000C58) /* float */
74#define ONCC_bodysize_max (0x00000C8C) /* float */
75
76#define kangaroo_h     (60)
77#define kangaroo_jp    (0.06)
78#define marypoppins_jp (0.14)
79
80uint16_t cheat_oldshield = 0;
81int32_t cheat_oldhealth = 1;
82int32_t cheat_oldmaxhealth = 1;
83float cheat_oldjet_accel = 0.03f;
84uint16_t cheat_oldjet_timer = 20;
85float cheat_oldheight1 = 45;
86float cheat_oldheight2 = 135;
87bool inc_fallingframes = true;
88
89uint8_t ONICALL DDrCheater(uint32_t cheat)
90{
91        switch (cheat)
92        {
93                case cheat_bigbadboss:
94                {
95                        char* player = *((char**)(ONgGameState + GSA_player));
96                        if (*(unsigned int*)(player + CHR_flags) & chr_bossshield)
97                        {
98                                *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) & ~chr_bossshield;
99                                return 0;
100                        }
101                        else
102                        {
103                                *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) | chr_bossshield;
104                                return 1;
105                        }
106                }
107                case cheat_bulletproof:
108                {
109                        char* player = *((char**)(ONgGameState + GSA_player));
110                        if (*(unsigned int*)(player + CHR_flags) & chr_weaponimmune)
111                        {
112                                *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) & ~chr_weaponimmune;
113                                *(unsigned short*)(player + CHR_shield) = cheat_oldshield;
114                                return 0;
115                        }
116                        else
117                        {
118                                *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) | chr_weaponimmune;
119                                cheat_oldshield = *(unsigned short*)(player + CHR_shield);
120                                *(unsigned short*)(player + CHR_shield) = 100;
121                                return 1;
122                        }
123                }
124                case cheat_kangaroo:
125                {
126                        char* player = *((char**)(ONgGameState + GSA_player));
127                        char* oncc = *(char**)(player + CHR_oncc);
128                        if (!inc_fallingframes)
129                                inc_fallingframes = true;
130                        if (*(unsigned int*)(oncc + ONCC_jet_timer) == kangaroo_h)
131                        {
132                                *(float*)(oncc + ONCC_jet_accel) = cheat_oldjet_accel;
133                                *(unsigned short*)(oncc + ONCC_jet_timer) = cheat_oldjet_timer;
134                                *(float*)(oncc + ONCC_height1) = cheat_oldheight1;
135                                *(float*)(oncc + ONCC_height2) = cheat_oldheight2;
136                                return 0;
137                        }
138                        else if (*(unsigned int*)(oncc + ONCC_jet_timer) == 0xFFFF)
139                        {
140                                *(float*)(oncc + ONCC_jet_accel) = kangaroo_jp;
141                                *(unsigned short*)(oncc + ONCC_jet_timer) = kangaroo_h;
142                                *(float*)(oncc + ONCC_height1) = 0x7f800000;
143                                *(float*)(oncc + ONCC_height2) = 0x7f800000;
144                                return 1;
145                        }
146                        else
147                        {
148                                cheat_oldjet_accel = *(float*)(oncc + ONCC_jet_accel);
149                                cheat_oldjet_timer = *(unsigned short*)(oncc + ONCC_jet_timer);
150                                cheat_oldheight1 = *(float*)(oncc + ONCC_height1);
151                                cheat_oldheight2 = *(float*)(oncc + ONCC_height2);
152                                *(float*)(oncc + ONCC_jet_accel) = kangaroo_jp;
153                                *(unsigned short*)(oncc + ONCC_jet_timer) = kangaroo_h;
154                                *(float*)(oncc + ONCC_height1) = 0x7f800000;
155                                *(float*)(oncc + ONCC_height2) = 0x7f800000;
156                                return 1;
157                        }
158                }
159                case cheat_marypoppins:
160                {
161                        char* player = *((char**)(ONgGameState + GSA_player));
162                        char* oncc = *(char**)(player + CHR_oncc);
163                        if (!inc_fallingframes)
164                        {
165                                inc_fallingframes = true;
166                                if (*(unsigned int*)(oncc + ONCC_jet_timer) == 0xFFFF)
167                                {
168                                        *(float*)(oncc + ONCC_jet_accel) = cheat_oldjet_accel;
169                                        *(unsigned short*)(oncc + ONCC_jet_timer) = cheat_oldjet_timer;
170                                        *(float*)(oncc + ONCC_height1) = cheat_oldheight1;
171                                        *(float*)(oncc + ONCC_height2) = cheat_oldheight2;
172                                }
173                                return 0;
174                        }
175                        else if (*(unsigned int*)(oncc + ONCC_jet_timer) == kangaroo_h)
176                        {
177                                *(float*)(oncc + ONCC_jet_accel) = marypoppins_jp;
178                                *(unsigned short*)(oncc + ONCC_jet_timer) = 0xFFFF;
179                                *(float*)(oncc + ONCC_height1) = 0x7f800000;
180                                *(float*)(oncc + ONCC_height2) = 0x7f800000;
181                                inc_fallingframes = false;
182                                return 1;
183                        }
184                        else
185                        {
186                                cheat_oldjet_accel = *(float*)(oncc + ONCC_jet_accel);
187                                cheat_oldjet_timer = *(unsigned short*)(oncc + ONCC_jet_timer);
188                                cheat_oldheight1 = *(float*)(oncc + ONCC_height1);
189                                cheat_oldheight2 = *(float*)(oncc + ONCC_height2);
190                                *(float*)(oncc + ONCC_jet_accel) = marypoppins_jp;
191                                *(unsigned short*)(oncc + ONCC_jet_timer) = 0xFFFF;
192                                *(float*)(oncc + ONCC_height1) = 0x7f800000;
193                                *(float*)(oncc + ONCC_height2) = 0x7f800000;
194                                inc_fallingframes = false;
195                                return 1;
196                        }
197                }
198                case cheat_buddha:
199                {
200                        char* player = *((char**)(ONgGameState + GSA_player));
201                        if (*(unsigned int*)(player + CHR_flags) & chr_unkillable)
202                        {
203                                *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) & ~chr_unkillable;
204                                return 0;
205                        }
206                        else
207                        {
208                                *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) | chr_unkillable;
209                                return 1;
210                        }
211                }
212                case cheat_shinobi:
213                {
214                        Character* player = (Character*)*((void**)(ONgGameState + GSA_player));
215                        if (player->MaxHealth == 1)
216                        {
217                                player->Health = cheat_oldhealth;
218                                player->MaxHealth = cheat_oldmaxhealth;
219                                player->Flags = player->Flags & ~(chr_bossshield | chr_weaponimmune);
220                                return 0;
221                        }
222                        else
223                        {
224                                cheat_oldhealth = player->Health;
225                                cheat_oldmaxhealth = player->MaxHealth;
226                                player->Health = 1;
227                                player->MaxHealth = 1;
228                                player->Flags = player->Flags | chr_bossshield | chr_weaponimmune;
229                                return 1;
230                        }
231                       
232                }
233                case cheat_testcheat:
234                {
235                        char* player = *((char**)(ONgGameState + GSA_player));
236                        *(unsigned int*)(player + CHR_flags) = *(unsigned int*)(player + CHR_flags) | chr_noncombatant;
237                        return 1;
238                }
239                case cheat_tellmetheversion:
240                {
241                        return 1;
242                }
243                case cheat_x:
244                        return ONrCheater(cheat_thedayismine);
245                default:
246                        return ONrCheater(cheat);
247        }
248}
249
250void ONICALL DDrCheater_LevelLoad()
251{
252        inc_fallingframes = true;
253}
254
255__stdcall void FallingFrames(void* Ebp)
256{
257        if (inc_fallingframes)
258                ++*((unsigned int*)(Ebp + 0xf6));
259}
Note: See TracBrowser for help on using the repository browser.