00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifdef HAVE_CONFIG_H
00026 #include <config.h>
00027 #endif
00028
00029 #include <wx/wxprec.h>
00030
00031 #ifndef WX_PRECOMP
00032 #include <wx/wx.h>
00033 #endif
00034
00035 #include <wx/xrc/xmlres.h>
00036
00037 #include "AppConstants.hh"
00038 #include "exceptions/InvalidPasswordException.hh"
00039 #include "res/icon32x32.xpm"
00040 #include "view/MPGFrame.hh"
00041 #include "view/PasswordPanel.hh"
00042
00043 using namespace mpg;
00044
00045 BEGIN_EVENT_TABLE(MPGFrame, wxFrame)
00046 EVT_BUTTON(XRCID("IDB_CHECKSUM"), MPGFrame::onFixChecksum)
00047
00048 EVT_CHECKBOX(XRCID("IDC_ITEMS_MARUMARI"), MPGFrame::onItemChanged)
00049 EVT_CHECKBOX(XRCID("IDC_ITEMS_LONGBEAM"), MPGFrame::onItemChanged)
00050 EVT_CHECKBOX(XRCID("IDC_ITEMS_WAVEBEAM"), MPGFrame::onItemChanged)
00051 EVT_CHECKBOX(XRCID("IDC_ITEMS_ICEBEAM"), MPGFrame::onItemChanged)
00052 EVT_CHECKBOX(XRCID("IDC_ITEMS_BOMBS"), MPGFrame::onItemChanged)
00053 EVT_CHECKBOX(XRCID("IDC_ITEMS_HIGHJUMPBOOTS"), MPGFrame::onItemChanged)
00054 EVT_CHECKBOX(XRCID("IDC_ITEMS_SCREWATTACK"), MPGFrame::onItemChanged)
00055 EVT_CHECKBOX(XRCID("IDC_ITEMS_VARIA"), MPGFrame::onItemChanged)
00056
00057 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_BS1"), MPGFrame::onMissileContainerChanged)
00058 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_BS2"), MPGFrame::onMissileContainerChanged)
00059
00060 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL1"), MPGFrame::onMissileContainerChanged)
00061 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL2"), MPGFrame::onMissileContainerChanged)
00062 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL3"), MPGFrame::onMissileContainerChanged)
00063 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL4"), MPGFrame::onMissileContainerChanged)
00064
00065 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF1"), MPGFrame::onMissileContainerChanged)
00066 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF2"), MPGFrame::onMissileContainerChanged)
00067 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF3"), MPGFrame::onMissileContainerChanged)
00068 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF4"), MPGFrame::onMissileContainerChanged)
00069 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF5"), MPGFrame::onMissileContainerChanged)
00070 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF6"), MPGFrame::onMissileContainerChanged)
00071 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF7"), MPGFrame::onMissileContainerChanged)
00072 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF8"), MPGFrame::onMissileContainerChanged)
00073 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF9"), MPGFrame::onMissileContainerChanged)
00074 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF10"),
00075 MPGFrame::onMissileContainerChanged)
00076 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF11"),
00077 MPGFrame::onMissileContainerChanged)
00078 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF12"),
00079 MPGFrame::onMissileContainerChanged)
00080
00081 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_RL1"), MPGFrame::onMissileContainerChanged)
00082 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_RL2"), MPGFrame::onMissileContainerChanged)
00083 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_RL3"), MPGFrame::onMissileContainerChanged)
00084
00085 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_BS1"), MPGFrame::onEnergyTankChanged)
00086 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_BS2"), MPGFrame::onEnergyTankChanged)
00087 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_BS3"), MPGFrame::onEnergyTankChanged)
00088
00089 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_NF"), MPGFrame::onEnergyTankChanged)
00090
00091 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_KL"), MPGFrame::onEnergyTankChanged)
00092 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_KL_KRAID"), MPGFrame::onEnergyTankChanged)
00093
00094 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_RL"), MPGFrame::onEnergyTankChanged)
00095 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_RL_RIDLEY"), MPGFrame::onEnergyTankChanged)
00096
00097 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_LONGBEAM"), MPGFrame::onDoorChanged)
00098 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_TOURIANBRIDGE"),
00099 MPGFrame::onDoorChanged)
00100 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_BOMBS"), MPGFrame::onDoorChanged)
00101 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_ICEBEAM"), MPGFrame::onDoorChanged)
00102 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_VARIA"), MPGFrame::onDoorChanged)
00103
00104 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL1"), MPGFrame::onDoorChanged)
00105 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL2"), MPGFrame::onDoorChanged)
00106 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL3"), MPGFrame::onDoorChanged)
00107 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL4"), MPGFrame::onDoorChanged)
00108 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL_KRAID"), MPGFrame::onDoorChanged)
00109
00110 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_HIGHJUMPBOOTS"),
00111 MPGFrame::onDoorChanged)
00112 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_SCREWATTACK"),
00113 MPGFrame::onDoorChanged)
00114 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_WAVEBEAM"), MPGFrame::onDoorChanged)
00115 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_ICEBEAM"), MPGFrame::onDoorChanged)
00116
00117 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_RL"), MPGFrame::onDoorChanged)
00118 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_RL_RIDLEY"), MPGFrame::onDoorChanged)
00119
00120 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_T1"), MPGFrame::onDoorChanged)
00121 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_T2"), MPGFrame::onDoorChanged)
00122 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_T3"), MPGFrame::onDoorChanged)
00123
00124 EVT_CHECKBOX(XRCID("IDC_MISC_STATUE_KRAID"), MPGFrame::onStatueChanged)
00125 EVT_CHECKBOX(XRCID("IDC_MISC_STATUE_RIDLEY"), MPGFrame::onStatueChanged)
00126
00127 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE1"), MPGFrame::onZebetiteChanged)
00128 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE2"), MPGFrame::onZebetiteChanged)
00129 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE3"), MPGFrame::onZebetiteChanged)
00130 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE4"), MPGFrame::onZebetiteChanged)
00131 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE5"), MPGFrame::onZebetiteChanged)
00132
00133 EVT_CHECKBOX(XRCID("IDC_MISC_BOSS_KRAID"), MPGFrame::onBossChanged)
00134 EVT_CHECKBOX(XRCID("IDC_MISC_BOSS_RIDLEY"), MPGFrame::onBossChanged)
00135 EVT_CHECKBOX(XRCID("IDC_MISC_BOSS_MOTHERBRAIN"), MPGFrame::onBossChanged)
00136
00137 EVT_CHECKLISTBOX(XRCID("IDCLB_RAW_BITS"), MPGFrame::onRawBitChanged)
00138
00139 EVT_MENU(wxID_EXIT, MPGFrame::onFileExit)
00140
00141 EVT_MENU(XRCID("IDM_PASSWORD_PERFECTGAME"),
00142 MPGFrame::onPasswordPerfectGame)
00143 EVT_MENU(XRCID("IDM_PASSWORD_DEBUGPASSWORD"),
00144 MPGFrame::onPasswordDebugPassword)
00145 EVT_MENU(XRCID("IDM_PASSWORD_RESET"), MPGFrame::onPasswordReset)
00146
00147 EVT_MENU(XRCID("IDM_PASSWORD_ENDING1"), MPGFrame::onPasswordEnding)
00148 EVT_MENU(XRCID("IDM_PASSWORD_ENDING2"), MPGFrame::onPasswordEnding)
00149 EVT_MENU(XRCID("IDM_PASSWORD_ENDING3"), MPGFrame::onPasswordEnding)
00150 EVT_MENU(XRCID("IDM_PASSWORD_ENDING4"), MPGFrame::onPasswordEnding)
00151 EVT_MENU(XRCID("IDM_PASSWORD_ENDING5"), MPGFrame::onPasswordEnding)
00152
00153 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_MISSILES"),
00154 MPGFrame::onPasswordGiveMissiles)
00155 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_ITEMS"), MPGFrame::onPasswordGiveItems)
00156 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_MC"),
00157 MPGFrame::onPasswordGiveMissileContainers)
00158 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_ET"),
00159 MPGFrame::onPasswordGiveEnergyTanks)
00160 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_DOORS"), MPGFrame::onPasswordGiveDoors)
00161 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_STATUES"),
00162 MPGFrame::onPasswordGiveStatues)
00163 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_ZEBETITES"),
00164 MPGFrame::onPasswordGiveZebetites)
00165 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_BOSSES"), MPGFrame::onPasswordGiveBosses)
00166
00167 EVT_MENU(XRCID("IDM_GAME_NTSC"), MPGFrame::onGameChanged)
00168 EVT_MENU(XRCID("IDM_GAME_PAL"), MPGFrame::onGameChanged)
00169
00170 EVT_MENU(wxID_ABOUT, MPGFrame::onHelpAbout)
00171
00172 EVT_RADIOBOX(XRCID("IDRB_MISC_START"), MPGFrame::onStartLocationChanged)
00173 EVT_RADIOBOX(XRCID("IDRB_MISC_ARMOR"), MPGFrame::onArmorChanged)
00174
00175 EVT_TEXT(XRCID("IDSC_ITEMS_MISSILES"), MPGFrame::onMissilesTextChanged)
00176 EVT_TEXT(XRCID("IDT_MISC_GAMETIME"), MPGFrame::onGameTimeChanged)
00177 EVT_TEXT(XRCID("IDSC_RAW_SHIFT"), MPGFrame::onShiftTextChanged)
00178 EVT_TEXT(XRCID("IDT_PASSWORD"), MPGFrame::onPasswordChanged)
00179 END_EVENT_TABLE()
00180
00181 MPGFrame::MPGFrame() : fixChecksumButton(NULL),
00182 ignoreTextEvent(true),
00183 pal(false) {
00184 SetParent(NULL);
00185
00186 CreateControls();
00187 GetSizer()->SetSizeHints(this);
00188 Centre();
00189 }
00190
00191 void MPGFrame::CreateControls() {
00192 wxXmlResource::Get()->LoadFrame(this, GetParent(), wxT("IDF_MPG"));
00193 SetIcon(wxIcon(icon32x32_xpm));
00194
00195 XRCCTRL(*this, "IDP_PASSWORD", PasswordPanel)->setPassword(&password);
00196 XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl)->SetMaxLength(27);
00197
00198 wxTextCtrl *gameTime = XRCCTRL(*this, "IDT_MISC_GAMETIME", wxTextCtrl);
00199 gameTime->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
00200 gameTime->SetMaxLength(10);
00201
00202 fixChecksumButton = XRCCTRL(*this, "IDB_CHECKSUM", wxButton);
00203
00204 updateTextCtrlSizes();
00205
00206 ignoreTextEvent = false;
00207 }
00208
00209 wxString MPGFrame::getUnifiedPassword() const {
00210 wxString temp = XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl)->GetValue();
00211
00212 if (temp.Length() != 27) {
00213 return wxEmptyString;
00214 }
00215
00216 return wxString(temp.Mid(0, 6) + temp.Mid(7, 6) +
00217 temp.Mid(14, 6) + temp.Mid(21));
00218 }
00219
00220 void MPGFrame::updateControls() {
00221
00222 XRCCTRL(*this, "IDC_ITEMS_MARUMARI",
00223 wxCheckBox)->SetValue(password.getBit(MARUMARI) &&
00224 password.getBit(MARUMARI_TAKEN));
00225 XRCCTRL(*this, "IDC_ITEMS_LONGBEAM",
00226 wxCheckBox)->SetValue(password.getBit(LONGBEAM));
00227 XRCCTRL(*this, "IDC_ITEMS_WAVEBEAM",
00228 wxCheckBox)->SetValue(password.getBit(WAVEBEAM));
00229 XRCCTRL(*this, "IDC_ITEMS_ICEBEAM",
00230 wxCheckBox)->SetValue(password.getBit(ICEBEAM));
00231 XRCCTRL(*this, "IDC_ITEMS_BOMBS",
00232 wxCheckBox)->SetValue(password.getBit(BOMBS) &&
00233 password.getBit(BOMBS_TAKEN));
00234 XRCCTRL(*this, "IDC_ITEMS_HIGHJUMPBOOTS",
00235 wxCheckBox)->SetValue(password.getBit(HIGHJUMPBOOTS) &&
00236 password.getBit(HIGHJUMPBOOTS_TAKEN));
00237 XRCCTRL(*this, "IDC_ITEMS_SCREWATTACK",
00238 wxCheckBox)->SetValue(password.getBit(SCREWATTACK) &&
00239 password.getBit(SCREWATTACK_TAKEN));
00240 XRCCTRL(*this, "IDC_ITEMS_VARIA",
00241 wxCheckBox)->SetValue(password.getBit(VARIA) &&
00242 password.getBit(VARIA_TAKEN));
00243
00244
00245 XRCCTRL(*this, "IDC_ITEMS_MC_BS1",
00246 wxCheckBox)->SetValue(password.getBit(MISSILE_BS1));
00247 XRCCTRL(*this, "IDC_ITEMS_MC_BS2",
00248 wxCheckBox)->SetValue(password.getBit(MISSILE_BS2));
00249
00250 XRCCTRL(*this, "IDC_ITEMS_MC_KL1",
00251 wxCheckBox)->SetValue(password.getBit(MISSILE_KL1));
00252 XRCCTRL(*this, "IDC_ITEMS_MC_KL2",
00253 wxCheckBox)->SetValue(password.getBit(MISSILE_KL2));
00254 XRCCTRL(*this, "IDC_ITEMS_MC_KL3",
00255 wxCheckBox)->SetValue(password.getBit(MISSILE_KL3));
00256 XRCCTRL(*this, "IDC_ITEMS_MC_KL4",
00257 wxCheckBox)->SetValue(password.getBit(MISSILE_KL4));
00258
00259 XRCCTRL(*this, "IDC_ITEMS_MC_NF1",
00260 wxCheckBox)->SetValue(password.getBit(MISSILE_NF1));
00261 XRCCTRL(*this, "IDC_ITEMS_MC_NF2",
00262 wxCheckBox)->SetValue(password.getBit(MISSILE_NF2));
00263 XRCCTRL(*this, "IDC_ITEMS_MC_NF3",
00264 wxCheckBox)->SetValue(password.getBit(MISSILE_NF3));
00265 XRCCTRL(*this, "IDC_ITEMS_MC_NF4",
00266 wxCheckBox)->SetValue(password.getBit(MISSILE_NF4));
00267 XRCCTRL(*this, "IDC_ITEMS_MC_NF5",
00268 wxCheckBox)->SetValue(password.getBit(MISSILE_NF5));
00269 XRCCTRL(*this, "IDC_ITEMS_MC_NF6",
00270 wxCheckBox)->SetValue(password.getBit(MISSILE_NF6));
00271 XRCCTRL(*this, "IDC_ITEMS_MC_NF7",
00272 wxCheckBox)->SetValue(password.getBit(MISSILE_NF7));
00273 XRCCTRL(*this, "IDC_ITEMS_MC_NF8",
00274 wxCheckBox)->SetValue(password.getBit(MISSILE_NF8));
00275 XRCCTRL(*this, "IDC_ITEMS_MC_NF9",
00276 wxCheckBox)->SetValue(password.getBit(MISSILE_NF9));
00277 XRCCTRL(*this, "IDC_ITEMS_MC_NF10",
00278 wxCheckBox)->SetValue(password.getBit(MISSILE_NF10));
00279 XRCCTRL(*this, "IDC_ITEMS_MC_NF11",
00280 wxCheckBox)->SetValue(password.getBit(MISSILE_NF11));
00281 XRCCTRL(*this, "IDC_ITEMS_MC_NF12",
00282 wxCheckBox)->SetValue(password.getBit(MISSILE_NF12));
00283
00284 XRCCTRL(*this, "IDC_ITEMS_MC_RL1",
00285 wxCheckBox)->SetValue(password.getBit(MISSILE_RL1));
00286 XRCCTRL(*this, "IDC_ITEMS_MC_RL2",
00287 wxCheckBox)->SetValue(password.getBit(MISSILE_RL2));
00288 XRCCTRL(*this, "IDC_ITEMS_MC_RL3",
00289 wxCheckBox)->SetValue(password.getBit(MISSILE_RL3));
00290
00291
00292 XRCCTRL(*this, "IDC_ITEMS_ET_BS1",
00293 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_BS1));
00294 XRCCTRL(*this, "IDC_ITEMS_ET_BS2",
00295 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_BS2));
00296 XRCCTRL(*this, "IDC_ITEMS_ET_BS3",
00297 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_BS3));
00298
00299 XRCCTRL(*this, "IDC_ITEMS_ET_NF",
00300 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_NF));
00301
00302 XRCCTRL(*this, "IDC_ITEMS_ET_KL",
00303 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_KL));
00304 XRCCTRL(*this, "IDC_ITEMS_ET_KL_KRAID",
00305 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_KL_KRAID));
00306
00307 XRCCTRL(*this, "IDC_ITEMS_ET_RL",
00308 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_RL));
00309 XRCCTRL(*this, "IDC_ITEMS_ET_RL_RIDLEY",
00310 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_RL_RIDLEY));
00311
00312
00313 XRCCTRL(*this, "IDC_MISC_DOORS_BS_LONGBEAM",
00314 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_LONGBEAM));
00315 XRCCTRL(*this, "IDC_MISC_DOORS_BS_TOURIANBRIDGE",
00316 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_TOURIANBRIDGE));
00317 XRCCTRL(*this, "IDC_MISC_DOORS_BS_BOMBS",
00318 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_BOMBS));
00319 XRCCTRL(*this, "IDC_MISC_DOORS_BS_ICEBEAM",
00320 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_ICEBEAM));
00321 XRCCTRL(*this, "IDC_MISC_DOORS_BS_VARIA",
00322 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_VARIA));
00323
00324 XRCCTRL(*this, "IDC_MISC_DOORS_KL1",
00325 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL1));
00326 XRCCTRL(*this, "IDC_MISC_DOORS_KL2",
00327 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL2));
00328 XRCCTRL(*this, "IDC_MISC_DOORS_KL3",
00329 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL3));
00330 XRCCTRL(*this, "IDC_MISC_DOORS_KL4",
00331 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL4));
00332 XRCCTRL(*this, "IDC_MISC_DOORS_KL_KRAID",
00333 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL_KRAID));
00334
00335 XRCCTRL(*this, "IDC_MISC_DOORS_NF_HIGHJUMPBOOTS",
00336 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_HIGHJUMPBOOTS));
00337 XRCCTRL(*this, "IDC_MISC_DOORS_NF_SCREWATTACK",
00338 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_SCREWATTACK));
00339 XRCCTRL(*this, "IDC_MISC_DOORS_NF_WAVEBEAM",
00340 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_WAVEBEAM));
00341 XRCCTRL(*this, "IDC_MISC_DOORS_NF_ICEBEAM",
00342 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_ICEBEAM));
00343
00344 XRCCTRL(*this, "IDC_MISC_DOORS_RL",
00345 wxCheckBox)->SetValue(password.getBit(REDDOOR_RL));
00346 XRCCTRL(*this, "IDC_MISC_DOORS_RL_RIDLEY",
00347 wxCheckBox)->SetValue(password.getBit(REDDOOR_RL_RIDLEY));
00348
00349 XRCCTRL(*this, "IDC_MISC_DOORS_T1",
00350 wxCheckBox)->SetValue(password.getBit(REDDOOR_T1));
00351 XRCCTRL(*this, "IDC_MISC_DOORS_T2",
00352 wxCheckBox)->SetValue(password.getBit(REDDOOR_T2));
00353 XRCCTRL(*this, "IDC_MISC_DOORS_T3",
00354 wxCheckBox)->SetValue(password.getBit(REDDOOR_T3));
00355
00356
00357 XRCCTRL(*this, "IDC_MISC_STATUE_KRAID",
00358 wxCheckBox)->SetValue(password.getBit(KRAID_STATUE));
00359 XRCCTRL(*this, "IDC_MISC_STATUE_RIDLEY",
00360 wxCheckBox)->SetValue(password.getBit(RIDLEY_STATUE));
00361
00362
00363 XRCCTRL(*this, "IDC_MISC_ZEBETITE1",
00364 wxCheckBox)->SetValue(password.getBit(ZEBETITE1));
00365 XRCCTRL(*this, "IDC_MISC_ZEBETITE2",
00366 wxCheckBox)->SetValue(password.getBit(ZEBETITE2));
00367 XRCCTRL(*this, "IDC_MISC_ZEBETITE3",
00368 wxCheckBox)->SetValue(password.getBit(ZEBETITE3));
00369 XRCCTRL(*this, "IDC_MISC_ZEBETITE4",
00370 wxCheckBox)->SetValue(password.getBit(ZEBETITE4));
00371 XRCCTRL(*this, "IDC_MISC_ZEBETITE5",
00372 wxCheckBox)->SetValue(password.getBit(ZEBETITE5));
00373
00374
00375 XRCCTRL(*this, "IDC_MISC_BOSS_KRAID",
00376 wxCheckBox)->SetValue(password.getBit(KRAID));
00377 XRCCTRL(*this, "IDC_MISC_BOSS_RIDLEY",
00378 wxCheckBox)->SetValue(password.getBit(RIDLEY));
00379 XRCCTRL(*this, "IDC_MISC_BOSS_MOTHERBRAIN",
00380 wxCheckBox)->SetValue(password.getBit(MOTHERBRAIN));
00381
00382
00383 XRCCTRL(*this, "IDRB_MISC_ARMOR",
00384 wxRadioBox)->SetSelection(password.getBit(SWIMSUIT) ? 1 : 0);
00385
00386
00387 unsigned long value = static_cast<unsigned long>(password.getGameTime());
00388
00389 ignoreTextEvent = true;
00390 XRCCTRL(*this, "IDSC_ITEMS_MISSILES",
00391 wxSpinCtrl)->SetValue(password.getMissiles());
00392 XRCCTRL(*this, "IDT_MISC_GAMETIME",
00393 wxTextCtrl)->SetValue(wxString::Format(wxT("%lu"), value));
00394 XRCCTRL(*this, "IDSC_RAW_SHIFT",
00395 wxSpinCtrl)->SetValue(password.getShift());
00396 ignoreTextEvent = false;
00397
00398
00399 updateRealTime();
00400
00401
00402 updateStartLocation();
00403
00404
00405 for (int i = 0; i < PASSWORD_BITS; ++i) {
00406 XRCCTRL(*this, "IDCLB_RAW_BITS",
00407 wxCheckListBox)->Check(i, password.getBit(i));
00408 }
00409
00410
00411 if (password.getBit(RESET)) {
00412 wxMessageBox(wxT("This password is invalid: reset bit is set"),
00413 wxT("Warning: Invalid Password"),
00414 wxICON_EXCLAMATION | wxOK);
00415 }
00416 }
00417
00418 void MPGFrame::updatePasswordText() {
00419 wxTextCtrl *ctrl = XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl);
00420 wxString text;
00421
00422
00423 for (unsigned int i = 0; i < PASSWORD_LENGTH; ++i) {
00424 if ((i > 0) && ((i % 6) == 0)) {
00425 text += wxT(' ');
00426 }
00427
00428 text += password.getEncoded()[i];
00429 }
00430
00431 ignoreTextEvent = true;
00432 ctrl->SetValue(text);
00433 ignoreTextEvent = false;
00434
00435 XRCCTRL(*this, "IDP_PASSWORD", PasswordPanel)->Refresh(false);
00436
00437
00438 if (password.getEncoded().StartsWith(wxT("NARPASSWORD00000"))) {
00439 wxMessageBox(wxT("This password triggers debug mode.\n"
00440 "Because it is Hard Coded, any change will disable "
00441 "debug mode effects."),
00442 wxT("Debug Password"), wxICON_EXCLAMATION | wxOK);
00443 }
00444 }
00445
00446 void MPGFrame::updateRawGameTime(wxUint32 value) {
00447 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
00448
00449 for (int i = 0; i < 32; ++i) {
00450 ctrl->Check(GAMETIME + i, (value & (1 << i)));
00451 }
00452 }
00453
00454 void MPGFrame::updateRawMissiles(unsigned char value) {
00455 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
00456
00457 for (int i = 0; i < 8; ++i) {
00458 ctrl->Check(MISSILES + i, (value & (1 << i)));
00459 }
00460 }
00461
00462 void MPGFrame::updateRealTime() {
00463 wxUint32 ticks = password.getGameTime();
00464 unsigned char lsb = (ticks & 0xFF);
00465
00466 if (lsb >= 0xD0) {
00467 lsb = 0xCF;
00468 }
00469
00470 ticks = (((ticks & 0xFFFFFF00) >> 8) * 0xD0) + lsb;
00471
00472 double factor = (pal ? (256.0 / 50.0) : (256.0 / 60.0));
00473 double time = ticks * factor;
00474
00475 int hours = static_cast<int>(time / 3600);
00476 int minutes = static_cast<int>(fmod(time / 60, 60));
00477 int seconds = static_cast<int>(fmod(time, 60));
00478
00479 XRCCTRL(*this, "IDST_MISC_GAMETIME",
00480 wxStaticText)->SetLabel(wxString::Format("Approx %d Hr %d Min %d Sec",
00481 hours, minutes, seconds));
00482 }
00483
00484 void MPGFrame::updateStartLocation() {
00485 bool nf = password.getBit(START_NF);
00486 bool kl = password.getBit(START_KL);
00487 bool rl = password.getBit(START_RL);
00488
00489 wxRadioBox *ctrl = XRCCTRL(*this, "IDRB_MISC_START", wxRadioBox);
00490
00491 if (!nf && !kl && !rl) {
00492
00493 ctrl->SetSelection(BRINSTAR);
00494 } else if (!nf && kl && !rl) {
00495
00496 ctrl->SetSelection(KRAIDSLAIR);
00497 } else if (nf && !kl && !rl) {
00498
00499 ctrl->SetSelection(NORFAIR);
00500 } else if (!nf && !kl && rl) {
00501
00502 ctrl->SetSelection(RIDLEYSLAIR);
00503 } else if (nf && kl && !rl) {
00504
00505 ctrl->SetSelection(TOURIAN);
00506 } else {
00507
00508 wxMessageBox(wxT("This password has an invalid start location."),
00509 wxT("Warning: Invalid Password"),
00510 wxICON_EXCLAMATION | wxOK);
00511 }
00512 }
00513
00514 void MPGFrame::updateTextCtrlSizes() {
00515 wxClientDC dc(this);
00516 wxTextCtrl *ctrl;
00517 wxCoord width, height;
00518
00519 ctrl = XRCCTRL(*this, "IDT_MISC_GAMETIME", wxTextCtrl);
00520 dc.SetFont(ctrl->GetFont());
00521 dc.GetTextExtent(wxT("04294967296"), &width, &height);
00522
00523 wxSize size(width + 15, height + 5);
00524 ctrl->SetSize(size);
00525 ctrl->SetMinSize(size);
00526 ctrl->SetMaxSize(size);
00527
00528 ctrl = XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl);
00529 dc.SetFont(ctrl->GetFont());
00530 dc.GetTextExtent(ctrl->GetValue(), &width, &height);
00531
00532 size = wxSize(width + 15, height + 5);
00533 ctrl->SetSize(size);
00534 ctrl->SetMinSize(size);
00535 ctrl->SetMaxSize(size);
00536 }
00537
00538 void MPGFrame::onArmorChanged(wxCommandEvent &event) {
00539 wxRadioBox *ptr = dynamic_cast<wxRadioBox *>(event.GetEventObject());
00540 bool state = (ptr->GetSelection() == 1);
00541
00542 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(SWIMSUIT, state);
00543 password.setBit(SWIMSUIT, state);
00544
00545 updatePasswordText();
00546 }
00547
00548 void MPGFrame::onBossChanged(wxCommandEvent &event) {
00549 int id = event.GetId();
00550 bool state = event.IsChecked();
00551 int bit;
00552
00553 if (id == XRCID("IDC_MISC_BOSS_KRAID")) {
00554 bit = KRAID;
00555 } else if (id == XRCID("IDC_MISC_BOSS_RIDLEY")) {
00556 bit = RIDLEY;
00557 } else {
00558 bit = MOTHERBRAIN;
00559 }
00560
00561 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00562 password.setBit(bit, state);
00563
00564 updatePasswordText();
00565 }
00566
00567 void MPGFrame::onDoorChanged(wxCommandEvent &event) {
00568 int id = event.GetId();
00569 bool state = event.IsChecked();
00570 int bit;
00571
00572 if (id == XRCID("IDC_MISC_DOORS_BS_LONGBEAM")) {
00573 bit = REDDOOR_BS_LONGBEAM;
00574 } else if (id == XRCID("IDC_MISC_DOORS_BS_TOURIANBRIDGE")) {
00575 bit = REDDOOR_BS_TOURIANBRIDGE;
00576 } else if (id == XRCID("IDC_MISC_DOORS_BS_BOMBS")) {
00577 bit = REDDOOR_BS_BOMBS;
00578 } else if (id == XRCID("IDC_MISC_DOORS_BS_ICEBEAM")) {
00579 bit = REDDOOR_BS_ICEBEAM;
00580 } else if (id == XRCID("IDC_MISC_DOORS_BS_VARIA")) {
00581 bit = REDDOOR_BS_VARIA;
00582 } else if (id == XRCID("IDC_MISC_DOORS_KL1")) {
00583 bit = REDDOOR_KL1;
00584 } else if (id == XRCID("IDC_MISC_DOORS_KL2")) {
00585 bit = REDDOOR_KL2;
00586 } else if (id == XRCID("IDC_MISC_DOORS_KL3")) {
00587 bit = REDDOOR_KL3;
00588 } else if (id == XRCID("IDC_MISC_DOORS_KL4")) {
00589 bit = REDDOOR_KL4;
00590 } else if (id == XRCID("IDC_MISC_DOORS_KL_KRAID")) {
00591 bit = REDDOOR_KL_KRAID;
00592 } else if (id == XRCID("IDC_MISC_DOORS_NF_HIGHJUMPBOOTS")) {
00593 bit = REDDOOR_NF_HIGHJUMPBOOTS;
00594 } else if (id == XRCID("IDC_MISC_DOORS_NF_SCREWATTACK")) {
00595 bit = REDDOOR_NF_SCREWATTACK;
00596 } else if (id == XRCID("IDC_MISC_DOORS_NF_WAVEBEAM")) {
00597 bit = REDDOOR_NF_WAVEBEAM;
00598 } else if (id == XRCID("IDC_MISC_DOORS_NF_ICEBEAM")) {
00599 bit = REDDOOR_NF_ICEBEAM;
00600 } else if (id == XRCID("IDC_MISC_DOORS_RL")) {
00601 bit = REDDOOR_RL;
00602 } else if (id == XRCID("IDC_MISC_DOORS_RL_RIDLEY")) {
00603 bit = REDDOOR_RL_RIDLEY;
00604 } else if (id == XRCID("IDC_MISC_DOORS_T1")) {
00605 bit = REDDOOR_T1;
00606 } else if (id == XRCID("IDC_MISC_DOORS_T2")) {
00607 bit = REDDOOR_T2;
00608 } else {
00609 bit = REDDOOR_T3;
00610 }
00611
00612 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00613 password.setBit(bit, state);
00614
00615 updatePasswordText();
00616 }
00617
00618 void MPGFrame::onEnergyTankChanged(wxCommandEvent &event) {
00619 int id = event.GetId();
00620 bool state = event.IsChecked();
00621 int bit;
00622
00623 if (id == XRCID("IDC_ITEMS_ET_BS1")) {
00624 bit = ENERGYTANK_BS1;
00625 } else if (id == XRCID("IDC_ITEMS_ET_BS2")) {
00626 bit = ENERGYTANK_BS2;
00627 } else if (id == XRCID("IDC_ITEMS_ET_BS3")) {
00628 bit = ENERGYTANK_BS3;
00629 } else if (id == XRCID("IDC_ITEMS_ET_NF")) {
00630 bit = ENERGYTANK_NF;
00631 } else if (id == XRCID("IDC_ITEMS_ET_KL")) {
00632 bit = ENERGYTANK_KL;
00633 } else if (id == XRCID("IDC_ITEMS_ET_KL_KRAID")) {
00634 bit = ENERGYTANK_KL_KRAID;
00635 } else if (id == XRCID("IDC_ITEMS_ET_RL")) {
00636 bit = ENERGYTANK_RL;
00637 } else {
00638 bit = ENERGYTANK_RL_RIDLEY;
00639 }
00640
00641 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00642 password.setBit(bit, state);
00643
00644 updatePasswordText();
00645 }
00646
00647 void MPGFrame::onFixChecksum(wxCommandEvent &) {
00648 password = Password(getUnifiedPassword(), true);
00649 updatePasswordText();
00650 updateControls();
00651 }
00652
00653 void MPGFrame::onGameChanged(wxCommandEvent &event) {
00654 pal = (event.GetId() == XRCID("IDM_GAME_PAL"));
00655
00656 updateRealTime();
00657 }
00658
00659 void MPGFrame::onGameTimeChanged(wxCommandEvent &event) {
00660 if (ignoreTextEvent) {
00661 return;
00662 }
00663
00664 unsigned long value;
00665
00666 if (event.GetString().ToULong(&value)) {
00667 wxUint32 ticks = static_cast<wxUint32>(value);
00668
00669 updateRawGameTime(ticks);
00670 password.setGameTime(ticks);
00671
00672 updateRealTime();
00673 updatePasswordText();
00674 }
00675 }
00676
00677 void MPGFrame::onHelpAbout(wxCommandEvent &) {
00678 wxString message = APP_NAME + wxT(' ') + APP_VERSION + wxT('\n') +
00679 APP_COPYRIGHT + wxT('\n') + APP_URL;
00680 wxString title = wxT("About ") + APP_NAME + wxT("...");
00681
00682 wxMessageBox(message, title, wxICON_INFORMATION | wxOK);
00683 }
00684
00685 void MPGFrame::onItemChanged(wxCommandEvent &event) {
00686 int id = event.GetId();
00687 bool state = event.IsChecked();
00688 int b1, b2 = -1;
00689 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
00690
00691 if (id == XRCID("IDC_ITEMS_MARUMARI")) {
00692 b1 = MARUMARI;
00693 b2 = MARUMARI_TAKEN;
00694 } else if (id == XRCID("IDC_ITEMS_LONGBEAM")) {
00695 b1 = LONGBEAM;
00696 } else if (id == XRCID("IDC_ITEMS_WAVEBEAM")) {
00697 b1 = WAVEBEAM;
00698
00699
00700 XRCCTRL(*this, "IDC_ITEMS_ICEBEAM", wxCheckBox)->SetValue(false);
00701 ctrl->Check(ICEBEAM, false);
00702 password.setBit(ICEBEAM, false);
00703 } else if (id == XRCID("IDC_ITEMS_ICEBEAM")) {
00704 b1 = ICEBEAM;
00705
00706
00707 XRCCTRL(*this, "IDC_ITEMS_WAVEBEAM", wxCheckBox)->SetValue(false);
00708 ctrl->Check(WAVEBEAM, false);
00709 password.setBit(WAVEBEAM, false);
00710 } else if (id == XRCID("IDC_ITEMS_BOMBS")) {
00711 b1 = BOMBS;
00712 b2 = BOMBS_TAKEN;
00713 } else if (id == XRCID("IDC_ITEMS_HIGHJUMPBOOTS")) {
00714 b1 = HIGHJUMPBOOTS;
00715 b2 = HIGHJUMPBOOTS_TAKEN;
00716 } else if (id == XRCID("IDC_ITEMS_SCREWATTACK")) {
00717 b1 = SCREWATTACK;
00718 b2 = SCREWATTACK_TAKEN;
00719 } else {
00720 b1 = VARIA;
00721 b2 = VARIA_TAKEN;
00722 }
00723
00724 ctrl->Check(b1, state);
00725 password.setBit(b1, state);
00726
00727 if (b2 != -1) {
00728 ctrl->Check(b2, state);
00729 password.setBit(b2, state);
00730 }
00731
00732 updatePasswordText();
00733 }
00734
00735 void MPGFrame::onMissileContainerChanged(wxCommandEvent &event) {
00736 int id = event.GetId();
00737 bool state = event.IsChecked();
00738 int bit;
00739
00740 if (id == XRCID("IDC_ITEMS_MC_BS1")) {
00741 bit = MISSILE_BS1;
00742 } else if (id == XRCID("IDC_ITEMS_MC_BS2")) {
00743 bit = MISSILE_BS2;
00744 } else if (id == XRCID("IDC_ITEMS_MC_KL1")) {
00745 bit = MISSILE_KL1;
00746 } else if (id == XRCID("IDC_ITEMS_MC_KL2")) {
00747 bit = MISSILE_KL2;
00748 } else if (id == XRCID("IDC_ITEMS_MC_KL3")) {
00749 bit = MISSILE_KL3;
00750 } else if (id == XRCID("IDC_ITEMS_MC_KL4")) {
00751 bit = MISSILE_KL4;
00752 } else if (id == XRCID("IDC_ITEMS_MC_NF1")) {
00753 bit = MISSILE_NF1;
00754 } else if (id == XRCID("IDC_ITEMS_MC_NF2")) {
00755 bit = MISSILE_NF2;
00756 } else if (id == XRCID("IDC_ITEMS_MC_NF3")) {
00757 bit = MISSILE_NF3;
00758 } else if (id == XRCID("IDC_ITEMS_MC_NF4")) {
00759 bit = MISSILE_NF4;
00760 } else if (id == XRCID("IDC_ITEMS_MC_NF5")) {
00761 bit = MISSILE_NF5;
00762 } else if (id == XRCID("IDC_ITEMS_MC_NF6")) {
00763 bit = MISSILE_NF6;
00764 } else if (id == XRCID("IDC_ITEMS_MC_NF7")) {
00765 bit = MISSILE_NF7;
00766 } else if (id == XRCID("IDC_ITEMS_MC_NF8")) {
00767 bit = MISSILE_NF8;
00768 } else if (id == XRCID("IDC_ITEMS_MC_NF9")) {
00769 bit = MISSILE_NF9;
00770 } else if (id == XRCID("IDC_ITEMS_MC_NF10")) {
00771 bit = MISSILE_NF10;
00772 } else if (id == XRCID("IDC_ITEMS_MC_NF11")) {
00773 bit = MISSILE_NF11;
00774 } else if (id == XRCID("IDC_ITEMS_MC_NF12")) {
00775 bit = MISSILE_NF12;
00776 } else if (id == XRCID("IDC_ITEMS_MC_RL1")) {
00777 bit = MISSILE_RL1;
00778 } else if (id == XRCID("IDC_ITEMS_MC_RL2")) {
00779 bit = MISSILE_RL2;
00780 } else {
00781 bit = MISSILE_RL3;
00782 }
00783
00784 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00785 password.setBit(bit, state);
00786
00787 updatePasswordText();
00788 }
00789
00790 void MPGFrame::onMissilesTextChanged(wxCommandEvent &) {
00791 if (ignoreTextEvent) {
00792 return;
00793 }
00794
00795 wxSpinCtrl *ctrl = XRCCTRL(*this, "IDSC_ITEMS_MISSILES", wxSpinCtrl);
00796 unsigned char value = static_cast<unsigned char>(ctrl->GetValue());
00797
00798 password.setMissiles(value);
00799
00800 updateRawMissiles(value);
00801 updatePasswordText();
00802 }
00803
00804 void MPGFrame::onPasswordChanged(wxCommandEvent &) {
00805 if (fixChecksumButton) {
00806 fixChecksumButton->Enable(false);
00807 }
00808
00809 if (ignoreTextEvent) {
00810 return;
00811 }
00812
00813 wxString value = getUnifiedPassword();
00814
00815 try {
00816 password = Password(value);
00817
00818 updatePasswordText();
00819 updateControls();
00820 } catch (InvalidPasswordException &e) {
00821 if (e.getError() == INVALID_CHECKSUM) {
00822 fixChecksumButton->Enable(true);
00823 }
00824 }
00825 }
00826
00827 void MPGFrame::onPasswordDebugPassword(wxCommandEvent &) {
00828 wxMessageBox(wxT("The debug password is NARPAS SWORD0 000000 000000\n"
00829 "It is Hard Coded and cannot be edited."),
00830 wxT("Debug Password"), wxICON_INFORMATION | wxOK);
00831 }
00832
00833 void MPGFrame::onPasswordEnding(wxCommandEvent &event) {
00834 wxTextCtrl *ctrl = XRCCTRL(*this, "IDT_MISC_GAMETIME", wxTextCtrl);
00835 int id = event.GetId();
00836
00837 if (id == XRCID("IDM_PASSWORD_ENDING1")) {
00838 ctrl->SetValue(wxT("0"));
00839 } else if (id == XRCID("IDM_PASSWORD_ENDING2")) {
00840 ctrl->SetValue(wxT("1024"));
00841 } else if (id == XRCID("IDM_PASSWORD_ENDING3")) {
00842 ctrl->SetValue(wxT("2560"));
00843 } else if (id == XRCID("IDM_PASSWORD_ENDING4")) {
00844 ctrl->SetValue(wxT("5632"));
00845 } else {
00846 ctrl->SetValue(wxT("31232"));
00847 }
00848 }
00849
00850 void MPGFrame::onPasswordGiveBosses(wxCommandEvent &) {
00851 password.setBit(KRAID);
00852 password.setBit(RIDLEY);
00853 password.setBit(MOTHERBRAIN);
00854
00855 updatePasswordText();
00856 updateControls();
00857 }
00858
00859 void MPGFrame::onPasswordGiveDoors(wxCommandEvent &) {
00860 password.setBit(REDDOOR_BS_LONGBEAM);
00861 password.setBit(REDDOOR_BS_TOURIANBRIDGE);
00862 password.setBit(REDDOOR_BS_BOMBS);
00863 password.setBit(REDDOOR_BS_ICEBEAM);
00864 password.setBit(REDDOOR_BS_VARIA);
00865
00866 password.setBit(REDDOOR_KL1);
00867 password.setBit(REDDOOR_KL2);
00868 password.setBit(REDDOOR_KL3);
00869 password.setBit(REDDOOR_KL4);
00870 password.setBit(REDDOOR_KL_KRAID);
00871
00872 password.setBit(REDDOOR_NF_HIGHJUMPBOOTS);
00873 password.setBit(REDDOOR_NF_SCREWATTACK);
00874 password.setBit(REDDOOR_NF_WAVEBEAM);
00875 password.setBit(REDDOOR_NF_ICEBEAM);
00876
00877 password.setBit(REDDOOR_RL);
00878 password.setBit(REDDOOR_RL_RIDLEY);
00879
00880 password.setBit(REDDOOR_T1);
00881 password.setBit(REDDOOR_T2);
00882 password.setBit(REDDOOR_T3);
00883
00884 updatePasswordText();
00885 updateControls();
00886 }
00887
00888 void MPGFrame::onPasswordGiveEnergyTanks(wxCommandEvent &) {
00889 password.setBit(ENERGYTANK_BS1);
00890 password.setBit(ENERGYTANK_BS2);
00891 password.setBit(ENERGYTANK_BS3);
00892
00893 password.setBit(ENERGYTANK_NF);
00894
00895 password.setBit(ENERGYTANK_KL);
00896 password.setBit(ENERGYTANK_KL_KRAID);
00897
00898 password.setBit(ENERGYTANK_RL);
00899 password.setBit(ENERGYTANK_RL_RIDLEY);
00900
00901 updatePasswordText();
00902 updateControls();
00903 }
00904
00905 void MPGFrame::onPasswordGiveItems(wxCommandEvent &) {
00906 password.setBit(MARUMARI);
00907 password.setBit(MARUMARI_TAKEN);
00908
00909 password.setBit(LONGBEAM);
00910 password.setBit(WAVEBEAM, false);
00911 password.setBit(ICEBEAM);
00912
00913 password.setBit(BOMBS);
00914 password.setBit(BOMBS_TAKEN);
00915
00916 password.setBit(HIGHJUMPBOOTS);
00917 password.setBit(HIGHJUMPBOOTS_TAKEN);
00918
00919 password.setBit(SCREWATTACK);
00920 password.setBit(SCREWATTACK_TAKEN);
00921
00922 password.setBit(VARIA);
00923 password.setBit(VARIA_TAKEN);
00924
00925 updatePasswordText();
00926 updateControls();
00927 }
00928
00929 void MPGFrame::onPasswordGiveMissiles(wxCommandEvent &) {
00930 int count = 0;
00931
00932 if (password.getBit(MISSILE_BS1)) ++count;
00933 if (password.getBit(MISSILE_BS2)) ++count;
00934 if (password.getBit(MISSILE_KL1)) ++count;
00935 if (password.getBit(MISSILE_KL2)) ++count;
00936 if (password.getBit(MISSILE_KL3)) ++count;
00937 if (password.getBit(MISSILE_KL4)) ++count;
00938 if (password.getBit(MISSILE_NF1)) ++count;
00939 if (password.getBit(MISSILE_NF2)) ++count;
00940 if (password.getBit(MISSILE_NF3)) ++count;
00941 if (password.getBit(MISSILE_NF4)) ++count;
00942 if (password.getBit(MISSILE_NF5)) ++count;
00943 if (password.getBit(MISSILE_NF6)) ++count;
00944 if (password.getBit(MISSILE_NF7)) ++count;
00945 if (password.getBit(MISSILE_NF8)) ++count;
00946 if (password.getBit(MISSILE_NF9)) ++count;
00947 if (password.getBit(MISSILE_NF10)) ++count;
00948 if (password.getBit(MISSILE_NF11)) ++count;
00949 if (password.getBit(MISSILE_NF12)) ++count;
00950 if (password.getBit(MISSILE_RL1)) ++count;
00951 if (password.getBit(MISSILE_RL2)) ++count;
00952 if (password.getBit(MISSILE_RL3)) ++count;
00953 if (password.getBit(KRAID) || password.getBit(KRAID_STATUE)) count += 15;
00954 if (password.getBit(RIDLEY) || password.getBit(RIDLEY_STATUE)) count += 15;
00955
00956 XRCCTRL(*this, "IDSC_ITEMS_MISSILES", wxSpinCtrl)->SetValue(count *= 5);
00957
00958 #ifndef __WXMSW__
00959
00960
00961 password.setMissiles(count);
00962
00963 updateRawMissiles(count);
00964 updatePasswordText();
00965 #endif
00966 }
00967
00968 void MPGFrame::onPasswordGiveMissileContainers(wxCommandEvent &) {
00969 password.setBit(MISSILE_BS1);
00970 password.setBit(MISSILE_BS2);
00971
00972 password.setBit(MISSILE_KL1);
00973 password.setBit(MISSILE_KL2);
00974 password.setBit(MISSILE_KL3);
00975 password.setBit(MISSILE_KL4);
00976
00977 password.setBit(MISSILE_NF1);
00978 password.setBit(MISSILE_NF2);
00979 password.setBit(MISSILE_NF3);
00980 password.setBit(MISSILE_NF4);
00981 password.setBit(MISSILE_NF5);
00982 password.setBit(MISSILE_NF6);
00983 password.setBit(MISSILE_NF7);
00984 password.setBit(MISSILE_NF8);
00985 password.setBit(MISSILE_NF9);
00986 password.setBit(MISSILE_NF10);
00987 password.setBit(MISSILE_NF11);
00988 password.setBit(MISSILE_NF12);
00989
00990 password.setBit(MISSILE_RL1);
00991 password.setBit(MISSILE_RL2);
00992 password.setBit(MISSILE_RL3);
00993
00994 updatePasswordText();
00995 updateControls();
00996 }
00997
00998 void MPGFrame::onPasswordGiveStatues(wxCommandEvent &) {
00999 password.setBit(KRAID_STATUE);
01000 password.setBit(RIDLEY_STATUE);
01001
01002 updatePasswordText();
01003 updateControls();
01004 }
01005
01006 void MPGFrame::onPasswordGiveZebetites(wxCommandEvent &) {
01007 password.setBit(ZEBETITE1);
01008 password.setBit(ZEBETITE2);
01009 password.setBit(ZEBETITE3);
01010 password.setBit(ZEBETITE4);
01011 password.setBit(ZEBETITE5);
01012
01013 updatePasswordText();
01014 updateControls();
01015 }
01016
01017 void MPGFrame::onPasswordPerfectGame(wxCommandEvent &) {
01018 password = Password();
01019
01020
01021 password.setMissiles(MAX_MISSILES);
01022
01023
01024 password.setBit(START_NF);
01025 password.setBit(START_KL);
01026
01027
01028 password.setBit(KRAID_STATUE);
01029 password.setBit(RIDLEY_STATUE);
01030
01031
01032 password.setBit(SWIMSUIT);
01033
01034
01035 password.setBit(KRAID);
01036 password.setBit(RIDLEY);
01037
01038
01039 wxCommandEvent event1(wxEVT_COMMAND_MENU_SELECTED,
01040 XRCID("IDM_PASSWORD_GIVE_ITEMS"));
01041 GetEventHandler()->AddPendingEvent(event1);
01042
01043
01044 wxCommandEvent event2(wxEVT_COMMAND_MENU_SELECTED,
01045 XRCID("IDM_PASSWORD_GIVE_MC"));
01046 GetEventHandler()->AddPendingEvent(event2);
01047
01048
01049 wxCommandEvent event3(wxEVT_COMMAND_MENU_SELECTED,
01050 XRCID("IDM_PASSWORD_GIVE_ET"));
01051 GetEventHandler()->AddPendingEvent(event3);
01052
01053
01054 wxCommandEvent event4(wxEVT_COMMAND_MENU_SELECTED,
01055 XRCID("IDM_PASSWORD_GIVE_DOORS"));
01056 GetEventHandler()->AddPendingEvent(event4);
01057
01058
01059 wxCommandEvent event5(wxEVT_COMMAND_MENU_SELECTED,
01060 XRCID("IDM_PASSWORD_GIVE_ZEBETITES"));
01061 GetEventHandler()->AddPendingEvent(event5);
01062 }
01063
01064 void MPGFrame::onPasswordReset(wxCommandEvent &) {
01065 int answer = wxMessageBox(wxT("Really Reset Password?"),
01066 wxT("Confirm: Reset Password"),
01067 wxYES_NO | wxICON_QUESTION);
01068
01069 if (answer == wxYES) {
01070 password = Password();
01071
01072 updatePasswordText();
01073 updateControls();
01074 }
01075 }
01076
01077 void MPGFrame::onRawBitChanged(wxCommandEvent &event) {
01078 wxCheckListBox *ptr =
01079 dynamic_cast<wxCheckListBox *>(event.GetEventObject());
01080 int bit = event.GetSelection();
01081 bool state = ptr->IsChecked(bit);
01082
01083 password.setBit(bit, state);
01084
01085 switch (bit) {
01086 case MARUMARI:
01087 case MARUMARI_TAKEN:
01088
01089 state = password.getBit(MARUMARI) &&
01090 password.getBit(MARUMARI_TAKEN);
01091 XRCCTRL(*this, "IDC_ITEMS_MARUMARI", wxCheckBox)->SetValue(state);
01092 break;
01093
01094 case MISSILE_BS1:
01095 XRCCTRL(*this, "IDC_ITEMS_MC_BS1", wxCheckBox)->SetValue(state);
01096 break;
01097
01098 case REDDOOR_BS_LONGBEAM:
01099 XRCCTRL(*this, "IDC_MISC_DOORS_BS_LONGBEAM",
01100 wxCheckBox)->SetValue(state);
01101 break;
01102
01103 case REDDOOR_BS_TOURIANBRIDGE:
01104 XRCCTRL(*this, "IDC_MISC_DOORS_BS_TOURIANBRIDGE",
01105 wxCheckBox)->SetValue(state);
01106 break;
01107
01108 case ENERGYTANK_BS1:
01109 XRCCTRL(*this, "IDC_ITEMS_ET_BS1", wxCheckBox)->SetValue(state);
01110 break;
01111
01112 case REDDOOR_BS_BOMBS:
01113 XRCCTRL(*this, "IDC_MISC_DOORS_BS_BOMBS",
01114 wxCheckBox)->SetValue(state);
01115 break;
01116
01117 case BOMBS:
01118 case BOMBS_TAKEN:
01119
01120 state = password.getBit(BOMBS) && password.getBit(BOMBS_TAKEN);
01121 XRCCTRL(*this, "IDC_ITEMS_BOMBS", wxCheckBox)->SetValue(state);
01122 break;
01123
01124 case REDDOOR_BS_ICEBEAM:
01125 XRCCTRL(*this, "IDC_MISC_DOORS_BS_ICEBEAM",
01126 wxCheckBox)->SetValue(state);
01127 break;
01128
01129 case MISSILE_BS2:
01130 XRCCTRL(*this, "IDC_ITEMS_MC_BS2", wxCheckBox)->SetValue(state);
01131 break;
01132
01133 case ENERGYTANK_BS2:
01134 XRCCTRL(*this, "IDC_ITEMS_ET_BS2", wxCheckBox)->SetValue(state);
01135 break;
01136
01137 case REDDOOR_BS_VARIA:
01138 XRCCTRL(*this, "IDC_MISC_DOORS_BS_VARIA",
01139 wxCheckBox)->SetValue(state);
01140 break;
01141
01142 case VARIA:
01143 case VARIA_TAKEN:
01144
01145 state = password.getBit(VARIA) && password.getBit(VARIA_TAKEN);
01146 XRCCTRL(*this, "IDC_ITEMS_VARIA", wxCheckBox)->SetValue(state);
01147 break;
01148
01149 case ENERGYTANK_BS3:
01150 XRCCTRL(*this, "IDC_ITEMS_ET_BS3", wxCheckBox)->SetValue(state);
01151 break;
01152
01153 case MISSILE_NF1:
01154 XRCCTRL(*this, "IDC_ITEMS_MC_NF1", wxCheckBox)->SetValue(state);
01155 break;
01156
01157 case MISSILE_NF2:
01158 XRCCTRL(*this, "IDC_ITEMS_MC_NF2", wxCheckBox)->SetValue(state);
01159 break;
01160
01161 case REDDOOR_NF_ICEBEAM:
01162 XRCCTRL(*this, "IDC_MISC_DOORS_NF_ICEBEAM",
01163 wxCheckBox)->SetValue(state);
01164 break;
01165
01166 case MISSILE_NF3:
01167 XRCCTRL(*this, "IDC_ITEMS_MC_NF3", wxCheckBox)->SetValue(state);
01168 break;
01169
01170 case MISSILE_NF4:
01171 XRCCTRL(*this, "IDC_ITEMS_MC_NF4", wxCheckBox)->SetValue(state);
01172 break;
01173
01174 case MISSILE_NF5:
01175 XRCCTRL(*this, "IDC_ITEMS_MC_NF5", wxCheckBox)->SetValue(state);
01176 break;
01177
01178 case MISSILE_NF6:
01179 XRCCTRL(*this, "IDC_ITEMS_MC_NF6", wxCheckBox)->SetValue(state);
01180 break;
01181
01182 case MISSILE_NF7:
01183 XRCCTRL(*this, "IDC_ITEMS_MC_NF7", wxCheckBox)->SetValue(state);
01184 break;
01185
01186 case MISSILE_NF8:
01187 XRCCTRL(*this, "IDC_ITEMS_MC_NF8", wxCheckBox)->SetValue(state);
01188 break;
01189
01190 case MISSILE_NF9:
01191 XRCCTRL(*this, "IDC_ITEMS_MC_NF9", wxCheckBox)->SetValue(state);
01192 break;
01193
01194 case REDDOOR_NF_HIGHJUMPBOOTS:
01195 XRCCTRL(*this, "IDC_MISC_DOORS_NF_HIGHJUMPBOOTS",
01196 wxCheckBox)->SetValue(state);
01197 break;
01198
01199 case HIGHJUMPBOOTS:
01200 case HIGHJUMPBOOTS_TAKEN:
01201
01202 state = password.getBit(HIGHJUMPBOOTS) &&
01203 password.getBit(HIGHJUMPBOOTS_TAKEN);
01204 XRCCTRL(*this, "IDC_ITEMS_HIGHJUMPBOOTS",
01205 wxCheckBox)->SetValue(state);
01206 break;
01207
01208 case REDDOOR_NF_SCREWATTACK:
01209 XRCCTRL(*this, "IDC_MISC_DOORS_NF_SCREWATTACK",
01210 wxCheckBox)->SetValue(state);
01211 break;
01212
01213 case SCREWATTACK:
01214 case SCREWATTACK_TAKEN:
01215
01216 state = password.getBit(SCREWATTACK) &&
01217 password.getBit(SCREWATTACK_TAKEN);
01218 XRCCTRL(*this, "IDC_ITEMS_SCREWATTACK",
01219 wxCheckBox)->SetValue(state);
01220 break;
01221
01222 case MISSILE_NF10:
01223 XRCCTRL(*this, "IDC_ITEMS_MC_NF10", wxCheckBox)->SetValue(state);
01224 break;
01225
01226 case MISSILE_NF11:
01227 XRCCTRL(*this, "IDC_ITEMS_MC_NF11", wxCheckBox)->SetValue(state);
01228 break;
01229
01230 case REDDOOR_NF_WAVEBEAM:
01231 XRCCTRL(*this, "IDC_MISC_DOORS_NF_WAVEBEAM",
01232 wxCheckBox)->SetValue(state);
01233 break;
01234
01235 case ENERGYTANK_NF:
01236 XRCCTRL(*this, "IDC_ITEMS_ET_NF", wxCheckBox)->SetValue(state);
01237 break;
01238
01239 case MISSILE_NF12:
01240 XRCCTRL(*this, "IDC_ITEMS_MC_NF12", wxCheckBox)->SetValue(state);
01241 break;
01242
01243 case REDDOOR_KL1:
01244 XRCCTRL(*this, "IDC_MISC_DOORS_KL1", wxCheckBox)->SetValue(state);
01245 break;
01246
01247 case MISSILE_KL1:
01248 XRCCTRL(*this, "IDC_ITEMS_MC_KL1", wxCheckBox)->SetValue(state);
01249 break;
01250
01251 case MISSILE_KL2:
01252 XRCCTRL(*this, "IDC_ITEMS_MC_KL2", wxCheckBox)->SetValue(state);
01253 break;
01254
01255 case REDDOOR_KL2:
01256 XRCCTRL(*this, "IDC_MISC_DOORS_KL2", wxCheckBox)->SetValue(state);
01257 break;
01258
01259 case ENERGYTANK_KL:
01260 XRCCTRL(*this, "IDC_ITEMS_ET_KL", wxCheckBox)->SetValue(state);
01261 break;
01262
01263 case REDDOOR_KL3:
01264 XRCCTRL(*this, "IDC_MISC_DOORS_KL3", wxCheckBox)->SetValue(state);
01265 break;
01266
01267 case REDDOOR_KL4:
01268 XRCCTRL(*this, "IDC_MISC_DOORS_KL4", wxCheckBox)->SetValue(state);
01269 break;
01270
01271 case MISSILE_KL3:
01272 XRCCTRL(*this, "IDC_ITEMS_MC_KL3", wxCheckBox)->SetValue(state);
01273 break;
01274
01275 case MISSILE_KL4:
01276 XRCCTRL(*this, "IDC_ITEMS_MC_KL4", wxCheckBox)->SetValue(state);
01277 break;
01278
01279 case REDDOOR_KL_KRAID:
01280 XRCCTRL(*this, "IDC_MISC_DOORS_KL_KRAID",
01281 wxCheckBox)->SetValue(state);
01282 break;
01283
01284 case ENERGYTANK_KL_KRAID:
01285 XRCCTRL(*this, "IDC_ITEMS_ET_KL_KRAID",
01286 wxCheckBox)->SetValue(state);
01287 break;
01288
01289 case MISSILE_RL1:
01290 XRCCTRL(*this, "IDC_ITEMS_MC_RL1", wxCheckBox)->SetValue(state);
01291 break;
01292
01293 case REDDOOR_RL:
01294 XRCCTRL(*this, "IDC_MISC_DOORS_RL", wxCheckBox)->SetValue(state);
01295 break;
01296
01297 case ENERGYTANK_RL:
01298 XRCCTRL(*this, "IDC_ITEMS_ET_RL", wxCheckBox)->SetValue(state);
01299 break;
01300
01301 case MISSILE_RL2:
01302 XRCCTRL(*this, "IDC_ITEMS_MC_RL2", wxCheckBox)->SetValue(state);
01303 break;
01304
01305 case REDDOOR_RL_RIDLEY:
01306 XRCCTRL(*this, "IDC_MISC_DOORS_RL_RIDLEY",
01307 wxCheckBox)->SetValue(state);
01308 break;
01309
01310 case ENERGYTANK_RL_RIDLEY:
01311 XRCCTRL(*this, "IDC_ITEMS_ET_RL_RIDLEY",
01312 wxCheckBox)->SetValue(state);
01313 break;
01314
01315 case MISSILE_RL3:
01316 XRCCTRL(*this, "IDC_ITEMS_MC_RL3", wxCheckBox)->SetValue(state);
01317 break;
01318
01319 case REDDOOR_T1:
01320 XRCCTRL(*this, "IDC_MISC_DOORS_T1", wxCheckBox)->SetValue(state);
01321 break;
01322
01323 case REDDOOR_T2:
01324 XRCCTRL(*this, "IDC_MISC_DOORS_T2", wxCheckBox)->SetValue(state);
01325 break;
01326
01327 case REDDOOR_T3:
01328 XRCCTRL(*this, "IDC_MISC_DOORS_T3", wxCheckBox)->SetValue(state);
01329 break;
01330
01331 case ZEBETITE1:
01332 XRCCTRL(*this, "IDC_MISC_ZEBETITE1", wxCheckBox)->SetValue(state);
01333 break;
01334
01335 case ZEBETITE2:
01336 XRCCTRL(*this, "IDC_MISC_ZEBETITE2", wxCheckBox)->SetValue(state);
01337 break;
01338
01339 case ZEBETITE3:
01340 XRCCTRL(*this, "IDC_MISC_ZEBETITE3", wxCheckBox)->SetValue(state);
01341 break;
01342
01343 case ZEBETITE4:
01344 XRCCTRL(*this, "IDC_MISC_ZEBETITE4", wxCheckBox)->SetValue(state);
01345 break;
01346
01347 case ZEBETITE5:
01348 XRCCTRL(*this, "IDC_MISC_ZEBETITE5", wxCheckBox)->SetValue(state);
01349 break;
01350
01351 case MOTHERBRAIN:
01352 XRCCTRL(*this, "IDC_MISC_BOSS_MOTHERBRAIN",
01353 wxCheckBox)->SetValue(state);
01354 break;
01355
01356 case START_NF:
01357 case START_KL:
01358 case START_RL:
01359 updateStartLocation();
01360 break;
01361
01362 case RESET:
01363 if (state) {
01364 wxMessageBox(wxT("This bit will produce an invalid password."),
01365 wxT("Warning: Invalid Password"),
01366 wxICON_EXCLAMATION | wxOK);
01367 }
01368
01369 break;
01370
01371 case SWIMSUIT:
01372 XRCCTRL(*this, "IDRB_MISC_ARMOR",
01373 wxRadioBox)->SetSelection(state ? 1 : 0);
01374 break;
01375
01376 case LONGBEAM:
01377 XRCCTRL(*this, "IDC_ITEMS_LONGBEAM", wxCheckBox)->SetValue(state);
01378 break;
01379
01380 case WAVEBEAM:
01381 XRCCTRL(*this, "IDC_ITEMS_WAVEBEAM", wxCheckBox)->SetValue(state);
01382 break;
01383
01384 case ICEBEAM:
01385 XRCCTRL(*this, "IDC_ITEMS_ICEBEAM", wxCheckBox)->SetValue(state);
01386 break;
01387
01388 case MISSILES:
01389 case MISSILES + 1:
01390 case MISSILES + 2:
01391 case MISSILES + 3:
01392 case MISSILES + 4:
01393 case MISSILES + 5:
01394 case MISSILES + 6:
01395 case MISSILES + 7:
01396 ignoreTextEvent = true;
01397 XRCCTRL(*this, "IDSC_ITEMS_MISSILES",
01398 wxSpinCtrl)->SetValue(password.getMissiles());
01399 ignoreTextEvent = false;
01400
01401 break;
01402
01403 case GAMETIME:
01404 case GAMETIME + 1:
01405 case GAMETIME + 2:
01406 case GAMETIME + 3:
01407 case GAMETIME + 4:
01408 case GAMETIME + 5:
01409 case GAMETIME + 6:
01410 case GAMETIME + 7:
01411 case GAMETIME + 8:
01412 case GAMETIME + 9:
01413 case GAMETIME + 10:
01414 case GAMETIME + 11:
01415 case GAMETIME + 12:
01416 case GAMETIME + 13:
01417 case GAMETIME + 14:
01418 case GAMETIME + 15:
01419 case GAMETIME + 16:
01420 case GAMETIME + 17:
01421 case GAMETIME + 18:
01422 case GAMETIME + 19:
01423 case GAMETIME + 20:
01424 case GAMETIME + 21:
01425 case GAMETIME + 22:
01426 case GAMETIME + 23:
01427 case GAMETIME + 24:
01428 case GAMETIME + 25:
01429 case GAMETIME + 26:
01430 case GAMETIME + 27:
01431 case GAMETIME + 28:
01432 case GAMETIME + 29:
01433 case GAMETIME + 30:
01434 case GAMETIME + 31:
01435 {
01436 unsigned long value =
01437 static_cast<unsigned long>(password.getGameTime());
01438
01439 ignoreTextEvent = true;
01440 XRCCTRL(*this, "IDT_MISC_GAMETIME",
01441 wxTextCtrl)->SetValue(wxString::Format(wxT("%lu"),
01442 value));
01443 ignoreTextEvent = false;
01444
01445
01446 updateRealTime();
01447 }
01448
01449 break;
01450
01451 case RIDLEY:
01452 XRCCTRL(*this, "IDC_MISC_BOSS_RIDLEY", wxCheckBox)->SetValue(state);
01453 break;
01454
01455 case RIDLEY_STATUE:
01456 XRCCTRL(*this, "IDC_MISC_STATUE_RIDLEY",
01457 wxCheckBox)->SetValue(state);
01458 break;
01459
01460 case KRAID:
01461 XRCCTRL(*this, "IDC_MISC_BOSS_KRAID", wxCheckBox)->SetValue(state);
01462 break;
01463
01464 case KRAID_STATUE:
01465 XRCCTRL(*this, "IDC_MISC_STATUE_KRAID",
01466 wxCheckBox)->SetValue(state);
01467 break;
01468
01469 default:
01470
01471 break;
01472 }
01473
01474 updatePasswordText();
01475 }
01476
01477 void MPGFrame::onShiftTextChanged(wxCommandEvent &) {
01478 if (ignoreTextEvent) {
01479 return;
01480 }
01481
01482 wxSpinCtrl *ctrl = XRCCTRL(*this, "IDSC_RAW_SHIFT", wxSpinCtrl);
01483 unsigned char value = static_cast<unsigned char>(ctrl->GetValue());
01484
01485 password.setShift(value);
01486
01487 updatePasswordText();
01488 }
01489
01490 void MPGFrame::onStartLocationChanged(wxCommandEvent &event) {
01491 wxRadioBox *ptr = dynamic_cast<wxRadioBox *>(event.GetEventObject());
01492 int location = ptr->GetSelection();
01493 bool nf, kl, rl;
01494
01495 switch (location) {
01496 case 0:
01497
01498 nf = false;
01499 kl = false;
01500 rl = false;
01501 break;
01502
01503 case 1:
01504
01505 nf = false;
01506 kl = true;
01507 rl = false;
01508 break;
01509
01510 case 2:
01511
01512 nf = true;
01513 kl = false;
01514 rl = false;
01515 break;
01516
01517 case 3:
01518
01519 nf = false;
01520 kl = false;
01521 rl = true;
01522 break;
01523
01524 default:
01525
01526 nf = true;
01527 kl = true;
01528 rl = false;
01529 break;
01530 };
01531
01532 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
01533 ctrl->Check(START_NF, nf);
01534 ctrl->Check(START_KL, kl);
01535 ctrl->Check(START_RL, rl);
01536
01537 password.setBit(START_NF, nf);
01538 password.setBit(START_KL, kl);
01539 password.setBit(START_RL, rl);
01540
01541 updatePasswordText();
01542 }
01543
01544 void MPGFrame::onStatueChanged(wxCommandEvent &event) {
01545 int id = event.GetId();
01546 bool state = event.IsChecked();
01547 int bit;
01548
01549 if (id == XRCID("IDC_MISC_STATUE_KRAID")) {
01550 bit = KRAID_STATUE;
01551 } else {
01552 bit = RIDLEY_STATUE;
01553 }
01554
01555 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
01556 password.setBit(bit, state);
01557
01558 updatePasswordText();
01559 }
01560
01561 void MPGFrame::onZebetiteChanged(wxCommandEvent &event) {
01562 int id = event.GetId();
01563 bool state = event.IsChecked();
01564 int bit;
01565
01566 if (id == XRCID("IDC_MISC_ZEBETITE1")) {
01567 bit = ZEBETITE1;
01568 } else if (id == XRCID("IDC_MISC_ZEBETITE2")) {
01569 bit = ZEBETITE2;
01570 } else if (id == XRCID("IDC_MISC_ZEBETITE3")) {
01571 bit = ZEBETITE3;
01572 } else if (id == XRCID("IDC_MISC_ZEBETITE4")) {
01573 bit = ZEBETITE4;
01574 } else {
01575 bit = ZEBETITE5;
01576 }
01577
01578 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
01579 password.setBit(bit, state);
01580
01581 updatePasswordText();
01582 }
01583
01584 IMPLEMENT_CLASS(MPGFrame, wxFrame)
01585