/**************************************************************************** * 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 . * ****************************************************************************/ /** * @file game_engine.h * @author Sturmvogel * @date 15 dec 2016 * @brief Game Environment * * This header file contains methods to interact with the game environment, * misc. functions i.e. access to flags / variables and (encrypted) pokémon * data. */ #ifndef GAME_ENGINE_H #define GAME_ENGINE_H /* === INCLUDE === */ #include #include /* === EXTERN METHODS === */ /** * @brief get pointer of var * @param index variable to access * @return pointer to given variable storage */ extern u16 *var_access(u32 index); /** * @brief gets value of variable at index * @param index index to get varaible value from * @return value of VAR[index] */ extern u16 var_get(u16 index); /** * @brief sets variable at index to value * @param index unsigned index of the variable * @param value value to set the variable to * @return true on success, false otherwise */ extern u8 var_set(u16 index, u16 value); /** * @brief checks if flag is set * @param flag index of flag to check * @return flag status (bool) */ extern u8 flag_check(u32 flag); /** * @brief clears a flag * @param flag flag index to clear */ extern void flag_clear(u16 flag); /** * @brief sets a flag * @param flag flag index to set */ extern void flag_set(u16 flag); /** * @brief gets attribute of pokémon * @param poke_address address to pokémon structure * @param request request from the attribute request table * @param destination destination to write to (if not returned directly) * @return requested value (if not too big) */ extern u32 pokemon_get_attribute(struct pokemon* poke_address, u8 request, void* destination); struct move_data { u8 effect; u8 damage; u8 type; u8 accuracy; u8 pp; u8 effect_accuracy; u8 target; s8 priority; u8 flags; u8 arg1; u8 split; u8 arg3; }; extern struct move_data move_table[676]; /** * @brief sets attribute of pokémon * @param poke_address address to pokémon structure * @param request request from the attribute request table * @param new_value pointer to new value */ void pokemon_set_attribute(struct pokemon* poke_address, u8 request, void* new_value); /** * @brief gets the gender of the selected pokemon * @param poke_address address to pokémon structure * @return true if the pokémon is female, false otherwise */ extern u8 pokemon_get_gender(struct pokemon* poke_address); /** * @brief gets x12 value of item * @param item_id item to get value of * @return corresponding x12 value */ extern u8 item_get_x12(u16 item_id); /* TODO: Implement without macros */ #define pokemon_party_player ((struct pokemon*) 0x02024284) #endif /* GAME_ENGINE_H */