// Command control vars bool Game_Interpreter::CommandControlVariables(RPG::EventCommand const& com) { // Code ControlVars int i, value = 0; Game_Actor* actor; Game_Character* character; switch (com.parameters[4]) { case 0: // Constant value = com.parameters[5]; break; case 1: // Var A ops B value = Game_Variables[com.parameters[5]]; break; case 2: // Number of var A ops B value = Game_Variables[Game_Variables[com.parameters[5]]]; break; case 3: // Random between range int a, b; a = max(com.parameters[5], com.parameters[6]); b = min(com.parameters[5], com.parameters[6]); value = rand() % (a-b+1)+b; break; case 4: // Items switch (com.parameters[6]) { case 0: // Number of items posessed value = Main_Data::game_party->GetItemCount(com.parameters[5]); break; case 1: // How often the item is equipped value = Main_Data::game_party->GetItemCount(com.parameters[5], true); break; } break; case 5: // Hero actor = Game_Actors::GetActor(com.parameters[5]); if (actor != NULL) { switch (com.parameters[6]) { case 0: // Level value = actor->GetLevel(); break; case 1: // Experience value = actor->GetExp(); break; case 2: // Current HP value = actor->GetHp(); break; case 3: // Current MP value = actor->GetSp(); break; case 4: // Max HP value = actor->GetMaxHp(); break; case 5: // Max MP value = actor->GetMaxSp(); break; case 6: // Attack value = actor->GetAtk(); break; case 7: // Defense value = actor->GetDef(); break; case 8: // Intelligence value = actor->GetSpi(); break; case 9: // Agility value = actor->GetAgi(); break; case 10: // Weapon ID value = actor->GetWeaponId(); break; case 11: // Shield ID value = actor->GetShieldId(); break; case 12: // Armor ID value = actor->GetArmorId(); break; case 13: // Helmet ID value = actor->GetHelmetId(); break; case 14: // Accesory ID value = actor->GetAccessoryId(); break; } } break; case 6: // Characters character = GetCharacter(com.parameters[5]); if (character != NULL) { switch (com.parameters[6]) { case 0: // Map ID value = character->GetMapId(); break; case 1: // X Coordinate value = character->GetX(); break; case 2: // Y Coordinate value = character->GetY(); break; case 3: // Orientation int dir; dir = character->GetSpriteDirection(); value = dir == 0 ? 8 : dir == 1 ? 6 : dir == 2 ? 2 : 4; break; case 4: // Screen X value = character->GetScreenX(); break; case 5: // Screen Y value = character->GetScreenY(); } } break; case 7: // More switch (com.parameters[5]) { case 0: // Gold value = Main_Data::game_party->GetGold(); break; case 1: value = Main_Data::game_party->GetTimer(Main_Data::game_party->Timer1); break; case 2: // Number of heroes in party value = Main_Data::game_party->GetActors().size(); break; case 3: // Number of saves value = Game_System::GetSaveCount(); break; case 4: // Number of battles value = Main_Data::game_party->GetBattleCount(); break; case 5: // Number of wins value = Main_Data::game_party->GetWinCount(); break; case 6: // Number of defeats value = Main_Data::game_party->GetDefeatCount(); break; case 7: // Number of escapes (aka run away) value = Main_Data::game_party->GetRunCount(); break; case 8: // TODO: MIDI play position break; case 9: value = Main_Data::game_party->GetTimer(Main_Data::game_party->Timer2); break; } break; default: ; } switch (com.parameters[0]) { case 0: case 1: // Single and Var range for (i = com.parameters[1]; i <= com.parameters[2]; i++) { switch (com.parameters[3]) { case 0: // Assignement Game_Variables[i] = value; break; case 1: // Addition Game_Variables[i] += value; break; case 2: // Subtraction Game_Variables[i] -= value; break; case 3: // Multiplication Game_Variables[i] *= value; break; case 4: // Division if (value != 0) { Game_Variables[i] /= value; } break; case 5: // Module if (value != 0) { Game_Variables[i] %= value; } else { Game_Variables[i] = 0; } } if (Game_Variables[i] > MaxSize) { Game_Variables[i] = MaxSize; } if (Game_Variables[i] < MinSize) { Game_Variables[i] = MinSize; } } break; case 2: int var_index = Game_Variables[com.parameters[1]]; switch (com.parameters[3]) { case 0: // Assignement Game_Variables[var_index] = value; break; case 1: // Addition Game_Variables[var_index] += value; break; case 2: // Subtraction Game_Variables[var_index] -= value; break; case 3: // Multiplication Game_Variables[var_index] *= value; break; case 4: // Division if (value != 0) { Game_Variables[var_index] /= value; } break; case 5: // Module if (value != 0) { Game_Variables[var_index] %= value; } } if (Game_Variables[var_index] > MaxSize) { Game_Variables[var_index] = MaxSize; } if (Game_Variables[var_index] < MinSize) { Game_Variables[var_index] = MinSize; } } Game_Map::SetNeedRefresh(true); return true; }