123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /****************************************************************************
- * 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 overworld.c
- * @author Sturmvogel
- * @date 15 dec 2016
- * @brief Routines to work with the new overworld npc table
- */
-
- /* === INCLUDES === */
- #include <game_engine.h>
- #include <npc.h>
-
- /* === DEFINES === */
- #define OW_REPLACE_VAR 0x500A
- #define OW_REPLACE_TO_VAR 0x500B
-
- /* === PROTOTYPES === */
- /**
- * @brief get the npc type struct by given 16 bit npc id
- * @param npc_id short npc id
- * @return pointer to corresponding npc_type structure
- */
- struct npc_type *npc_get_type(u16 npc_id);
-
- /* === EXTERN STATICS ===*/
- struct npc_type **ow_main_table;
- struct npc_type **ow_second_table;
- struct npc_type **ow_third_table;
-
- /* === IMPLEMENTATIONS === */
- struct npc_type *npc_get_type(u16 npc_id)
- {
-
- /* Not possible in a global scope because of gcc cow magic */
- struct npc_type **npc_tables[3] = {ow_main_table, ow_second_table, ow_third_table};
- //struct npc_type** npc_tables[] = {ow_main_table, ow_second_table, ow_third_table};
- u8 table_id = npc_id >> 8;
- if (table_id > 2)
- npc_id = (u8)npc_id;
-
- u16 replace_ow = var_get(OW_REPLACE_VAR);
- if (replace_ow > 0 && replace_ow - 1 == npc_id)
- {
- npc_id = var_get(OW_REPLACE_TO_VAR);
- }
- u8 table = (npc_id >> 8);
- return (npc_tables[table][npc_id & 0xFF]);
- }
|