/**************************************************************************** * 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 load_text_special.c * @author Sturmvogel * @date 05 Jan 2016 * @brief special 0x69 0x6A * * Implements a new way to load text for more language compatability and code * interchangability. */ /* === INCLUDE === */ #include #include #include #include /* === PROTOTYPES === */ /** * @brief load text according to bank, map and text_id */ void sp_load_text_map(); /** * @brief load text according to bank, map, person id and text_id */ void sp_load_text_person(); /* === GLOBALS === */ char* str_invalid_text_ref; char***** text_lookup_table; void** loadpointer = (void**)((0x03000EB0 + 0x64)); /* === IMPLEMENTATIONS === */ void sp_load_text_map() { u8 bank = sav_one->location.bank; u8 map = sav_one->location.map; for(int i = 0; i<=bank;++i) { if(text_lookup_table[i] == (char****)(0xDEADBEEF)) { *loadpointer =str_invalid_text_ref; return; } } for(int i = 0; i<=map; ++i) { if(text_lookup_table[bank][i] == (char***)(0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } } if(text_lookup_table[bank][map][0] == (char**)(0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } u16 text_id = var_get(0x500C); for(int i = 0; i<= text_id; ++i) { if(text_lookup_table[bank][map][0][i] == (char*)(0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } } *loadpointer = text_lookup_table[bank][map][0][text_id]; return; } void sp_load_text_person() { u8 bank = sav_one->location.bank; u8 map = sav_one->location.map; for(int i = 0; i<= bank; ++i) { if(text_lookup_table[i] == (char****)(0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } } for(int i = 0; i<= map; ++i) { if(text_lookup_table[bank][i] == (char***) (0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } } u16 person_id = var_get(0x800F); // LASTTALKED for(int i = 0; i<= person_id; ++i) { if(text_lookup_table[bank][map][i] == (char**) (0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } } u16 text_id = var_get(0x500C); //TEXT_VAR for(int i = 0; i<= text_id; ++i) { if(text_lookup_table[bank][map][person_id][i] == (char*) (0xDEADBEEF)) { *loadpointer = str_invalid_text_ref; return; } } *loadpointer = text_lookup_table[bank][map][person_id][text_id]; return; }