liblcf
Loading...
Searching...
No Matches
rpg_fixup.cpp
Go to the documentation of this file.
1/*
2 * This file is part of liblcf. Copyright (c) 2020 liblcf authors.
3 * https://github.com/EasyRPG/liblcf - https://easyrpg.org
4 *
5 * liblcf is Free/Libre Open Source Software, released under the MIT License.
6 * For the full copyright and license information, please view the COPYING
7 * file that was distributed with this source code.
8 */
9
10#include "lcf_options.h"
11#include "rpg_actor.h"
12#include "rpg_mapinfo.h"
13#include "rpg_system.h"
14#include "rpg_save.h"
15#include "rpg_savemapinfo.h"
16#include "data.h"
17
18
19template <typename T, typename U>
20static void FixInt(T& val, U def) {
21 if (val < 0) {
22 val = def;
23 }
24};
25
26template <typename T, typename U>
27void UnFixInt(T& val, U def) {
28 if (val == def) {
29 val = -1;
30 }
31};
32
33void RPG::SaveActor::Fixup(int actor_id) {
34 ID = actor_id;
35
36 const RPG::Actor& actor = Data::actors[actor_id - 1];
37
38 if (name == "\x1") {
39 name = actor.name;
40 }
41 if (title == "\x1") {
42 title = actor.title;
43 }
44 if (sprite_name.empty()) {
47 transparency = actor.transparent ? 3 : 0;
48 }
49 if (face_name.empty()) {
50 face_name = actor.face_name;
51 face_id = actor.face_index;
52 }
53
54 if (status.size() < Data::states.size()) {
55 status.resize(Data::states.size());
56 }
57}
58
60 const RPG::Actor& actor = Data::actors[ID - 1];
61
62 if (name == actor.name) {
63 name = "\x1";
64 }
65 if (title == actor.title) {
66 title = "\x1";
67 }
68 if (sprite_name == actor.character_name
69 && sprite_id == actor.character_index
70 && transparency == (actor.transparent ? 3 : 0)) {
71 sprite_name.clear();
72 sprite_id = 0;
73 transparency = 0;
74 }
75 if (face_name == actor.face_name && face_id == actor.face_index) {
76 face_name.clear();
77 face_id = 0;
78 }
79}
80
82 const RPG::System& system = Data::system;
83
84 switches.reserve(Data::switches.size());
85 variables.reserve(Data::variables.size());
86 if (battle_music.name.empty()) {
87 battle_music = system.battle_music;
88 }
89 if (battle_end_music.name.empty()) {
90 battle_end_music = system.battle_end_music;
91 }
92 if (inn_music.name.empty()) {
93 inn_music = system.inn_music;
94 }
95 if (title_music.name.empty()) {
96 title_music = system.title_music;
97 }
98 if (boat_music.name.empty()) {
99 boat_music = system.boat_music;
100 }
101 if (ship_music.name.empty()) {
102 ship_music = system.ship_music;
103 }
104 if (airship_music.name.empty()) {
105 airship_music = system.airship_music;
106 }
107 if (gameover_music.name.empty()) {
108 gameover_music = system.gameover_music;
109 }
110 if (cursor_se.name.empty()) {
111 cursor_se = system.cursor_se;
112 }
113 if (decision_se.name.empty()) {
114 decision_se = system.decision_se;
115 }
116 if (cancel_se.name.empty()) {
117 cancel_se = system.cancel_se;
118 }
119 if (buzzer_se.name.empty()) {
120 buzzer_se = system.buzzer_se;
121 }
122 if (battle_se.name.empty()) {
123 battle_se = system.battle_se;
124 }
125 if (escape_se.name.empty()) {
126 escape_se = system.escape_se;
127 }
128 if (enemy_attack_se.name.empty()) {
129 enemy_attack_se = system.enemy_attack_se;
130 }
131 if (enemy_damaged_se.name.empty()) {
132 enemy_damaged_se = system.enemy_damaged_se;
133 }
134 if (actor_damaged_se.name.empty()) {
135 actor_damaged_se = system.actor_damaged_se;
136 }
137 if (dodge_se.name.empty()) {
138 dodge_se = system.dodge_se;
139 }
140 if (enemy_death_se.name.empty()) {
141 enemy_death_se = system.enemy_death_se;
142 }
143 if (item_se.name.empty()) {
144 item_se = system.item_se;
145 }
146}
147
149 const RPG::System& system = Data::system;
150
151 //TODO: Should be a C++14 polymorphic lambda
152 auto reset_se = [](RPG::Sound& s) {
153 s = {};
154 s.name.clear();
155 };
156
157 auto reset_bgm = [](RPG::Music& s) {
158 s = {};
159 s.name.clear();
160 };
161
162 if (battle_music == system.battle_music) {
163 reset_bgm(battle_music);
164 }
165 if (battle_end_music == system.battle_end_music) {
166 reset_bgm(battle_end_music);
167 }
168 if (inn_music == system.inn_music) {
169 reset_bgm(inn_music);
170 }
171 if (title_music == system.title_music) {
172 reset_bgm(title_music);
173 }
174 if (boat_music == system.boat_music) {
175 reset_bgm(boat_music);
176 }
177 if (ship_music == system.ship_music) {
178 reset_bgm(ship_music);
179 }
180 if (airship_music == system.airship_music) {
181 reset_bgm(airship_music);
182 }
183 if (gameover_music == system.gameover_music) {
184 reset_bgm(gameover_music);
185 }
186 if (cursor_se == system.cursor_se) {
187 reset_se(cursor_se);
188 }
189 if (decision_se == system.decision_se) {
190 reset_se(decision_se);
191 }
192 if (cancel_se == system.cancel_se) {
193 reset_se(cancel_se);
194 }
195 if (buzzer_se == system.buzzer_se) {
196 reset_se(buzzer_se);
197 }
198 if (battle_se == system.battle_se) {
199 reset_se(battle_se);
200 }
201 if (escape_se == system.escape_se) {
202 reset_se(escape_se);
203 }
204 if (enemy_attack_se == system.enemy_attack_se) {
205 reset_se(enemy_attack_se);
206 }
207 if (enemy_damaged_se == system.enemy_damaged_se) {
208 reset_se(enemy_damaged_se);
209 }
210 if (actor_damaged_se == system.actor_damaged_se) {
211 reset_se(actor_damaged_se);
212 }
213 if (dodge_se == system.dodge_se) {
214 reset_se(dodge_se);
215 }
216 if (enemy_death_se == system.enemy_death_se) {
217 reset_se(enemy_death_se);
218 }
219 if (item_se == system.item_se) {
220 reset_se(item_se);
221 }
222}
223
224
226 FixInt(chipset_id, map.chipset_id);
227}
228
230 FixInt(encounter_rate, map.encounter_steps);
231}
232
234 UnFixInt(chipset_id, map.chipset_id);
235}
236
238 UnFixInt(encounter_rate, map.encounter_steps);
239}
std::string character_name
Definition: rpg_actor.h:33
std::string name
Definition: rpg_actor.h:31
int32_t face_index
Definition: rpg_actor.h:41
bool transparent
Definition: rpg_actor.h:35
int32_t character_index
Definition: rpg_actor.h:34
std::string title
Definition: rpg_actor.h:32
std::string face_name
Definition: rpg_actor.h:40
int32_t chipset_id
Definition: rpg_map.h:62
int32_t encounter_steps
Definition: rpg_mapinfo.h:77
std::string face_name
Definition: rpg_saveactor.h:45
int32_t sprite_id
Definition: rpg_saveactor.h:43
std::vector< int16_t > status
Definition: rpg_saveactor.h:61
void Fixup(int actor_id)
Definition: rpg_fixup.cpp:33
std::string sprite_name
Definition: rpg_saveactor.h:42
void UnFixup()
Definition: rpg_fixup.cpp:59
std::string title
Definition: rpg_saveactor.h:41
std::string name
Definition: rpg_saveactor.h:40
int32_t transparency
Definition: rpg_saveactor.h:44
void Fixup(const RPG::Map &map)
Definition: rpg_fixup.cpp:225
void UnFixup(const RPG::Map &map)
Definition: rpg_fixup.cpp:233
Sound battle_se
Definition: rpg_system.h:202
Sound actor_damaged_se
Definition: rpg_system.h:206
Music boat_music
Definition: rpg_system.h:194
Music gameover_music
Definition: rpg_system.h:197
Music airship_music
Definition: rpg_system.h:196
Music inn_music
Definition: rpg_system.h:193
Music battle_end_music
Definition: rpg_system.h:192
Music battle_music
Definition: rpg_system.h:191
Music title_music
Definition: rpg_system.h:190
Sound escape_se
Definition: rpg_system.h:203
Sound dodge_se
Definition: rpg_system.h:207
Sound cancel_se
Definition: rpg_system.h:200
Sound enemy_death_se
Definition: rpg_system.h:208
Music ship_music
Definition: rpg_system.h:195
Sound enemy_attack_se
Definition: rpg_system.h:204
Sound cursor_se
Definition: rpg_system.h:198
Sound enemy_damaged_se
Definition: rpg_system.h:205
Sound decision_se
Definition: rpg_system.h:199
Sound item_se
Definition: rpg_system.h:209
Sound buzzer_se
Definition: rpg_system.h:201
std::vector< RPG::State > & states
Definition: data.cpp:23
std::vector< RPG::Switch > & switches
Definition: data.cpp:32
std::vector< RPG::Variable > & variables
Definition: data.cpp:33
std::vector< RPG::Actor > & actors
Definition: data.cpp:16
RPG::System & system
Definition: data.cpp:31
void UnFixInt(T &val, U def)
Definition: rpg_fixup.cpp:27
static void FixInt(T &val, U def)
Definition: rpg_fixup.cpp:20