123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /****************************************************************************
- * Copyright (C) 2015-2016 by the SotS Team *
- * *
- * This file is part of Sovereign of the Skies. *
- * *
- * Sovereign of the Skies is free software: you can redistribute it *
- * and/or modify it *
- * under the terms of the GNU Lesser General Public License as published *
- * by the Free Software Foundation, either version 3 of the License, or *
- * (at your option) any later version provided you include a copy of the *
- * licence and this header. *
- * *
- * Sovereign of the Skies is distributed in the hope that it will be *
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with Sovereign of the Skies. *
- * If not, see <http://www.gnu.org/licenses/>. *
- ****************************************************************************/
-
- /**
- * @file custom_structs_malloc.c
- * @author Sturmvogel
- * @date 15 dec 2016
- * @brief Patch hacks for handling custom battle structures
- */
-
- /* === INCLUDE === */
-
- #include <battle_common.h>
- #include <battle_custom_structs.h>
- #include <battle_locations.h>
- #include <config/core.h>
- #include <constants/moves.h>
- #include <game_engine.h>
- #include <memory.h>
-
- /* === PROTOTYPES === */
-
- /**
- * @brief allocate the new battle struct memory
- */
- void malloc_battle_structs();
-
- /**
- * @brief free the new battle struct memory
- */
- void free_battle_structs();
-
- /**
- * @brief handle switch in uptates on structures
- */
- void battle_switch_in();
-
- /* === IMPLEMENTATIONS === */
-
- void malloc_battle_structs() {
- custom_battle_elements.ptr = (struct custom_battle_struct *)malloc(sizeof(struct custom_battle_struct));
- }
-
- void free_battle_structs() {
- free(custom_battle_elements.ptr);
- custom_battle_elements.ptr = 0;
- flag_clear(FLAG_DEOXYS_AURA);
- flag_clear(FLAG_SKIP_BATTLE_MUSIC);
- }
-
- // hijack switch in command, clean up battle structs and carry over baton pass
- void battle_switch_in() {
- struct bank_affecting *current_bank_affecting = &custom_battle_elements.ptr->bank_affecting[battle_active_bank];
- // copy of the old structure to carry over baton pass effects
- struct bank_affecting prev_bank_affecting = custom_battle_elements.ptr->bank_affecting[battle_active_bank];
- memset(current_bank_affecting, 0, sizeof(struct bank_affecting));
- // handle type 3 if needed
- current_bank_affecting->just_switched_in = 1;
- current_bank_affecting->wish_hp = prev_bank_affecting.wish_hp;
- if (battle_executed_move == MOVE_BATON_PASS) {
- current_bank_affecting->aqua_ring = prev_bank_affecting.aqua_ring;
- current_bank_affecting->embargo = prev_bank_affecting.embargo;
- current_bank_affecting->powertrick = prev_bank_affecting.powertrick;
- current_bank_affecting->gastro_acided = prev_bank_affecting.gastro_acided;
- current_bank_affecting->heal_block = prev_bank_affecting.heal_block;
-
- if (prev_bank_affecting.powertrick) {
- // carry over switched stats of power trick
- u16 *atk = &battle_participants[battle_active_bank].atk;
- u16 *def = &battle_participants[battle_active_bank].def;
- u16 switch_var = *atk;
- *atk = *def;
- *def = switch_var;
- }
- }
-
- struct side_affecting *active_side =
- &custom_battle_elements.ptr->side_affecting[get_side_from_bank(battle_active_bank)];
- active_side->stealth_rock_done = 0;
- active_side->sticky_web_done = 0;
- active_side->toxic_spikes_done = 0;
- active_side->lunardance_done = 0;
-
- return;
- }
|