1 // Copyright (C) 2017, 2020 Ben Asselstine
2 //
3 // This program is free software; you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation; either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU Library General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16 // 02110-1301, USA.
17
18 #include "ScenarioMedia.h"
19 #include "defs.h"
20 #include "gui/image-helpers.h"
21 #include "xmlhelper.h"
22 #include "File.h"
23 #include "snd.h"
24 #include "tarfile.h"
25
26 ScenarioMedia* ScenarioMedia::d_instance = 0;
27
28 Glib::ustring ScenarioMedia::d_tag = "media";
29
getInstance()30 ScenarioMedia* ScenarioMedia::getInstance()
31 {
32 if (!d_instance)
33 d_instance = new ScenarioMedia();
34
35 return d_instance;
36 }
37
getInstance(XML_Helper * helper)38 ScenarioMedia* ScenarioMedia::getInstance(XML_Helper* helper)
39 {
40 if (d_instance)
41 deleteInstance();
42
43 d_instance = new ScenarioMedia(helper);
44 return d_instance;
45 }
46
deleteInstance()47 void ScenarioMedia::deleteInstance()
48 {
49 if (d_instance != 0)
50 delete d_instance;
51
52 d_instance = 0;
53 }
54
ScenarioMedia()55 ScenarioMedia::ScenarioMedia()
56 : d_next_turn_name(""), d_city_defeated_name(""), d_winning_name(""),
57 d_male_hero_name(""), d_female_hero_name(""), d_ruin_success_name(""),
58 d_ruin_defeat_name(""), d_parley_offered_name(""),
59 d_parley_refused_name(""), d_hero_newlevel_male_name(""),
60 d_hero_newlevel_female_name(""), d_small_medals_name(""),
61 d_big_medals_name(""), d_commentator_name (""), d_bless_name(""),
62 d_hero_name(""), d_battle_name(""), d_defeat_name(""), d_victory_name(""),
63 d_back_name (""), d_next_turn_image(0), d_city_defeated_image(0),
64 d_winning_image(0), d_male_hero_image(0), d_female_hero_image(0),
65 d_ruin_success_image(0), d_ruin_defeat_image(0), d_parley_offered_image(0),
66 d_parley_refused_image(0), d_hero_newlevel_male_image(0),
67 d_hero_newlevel_male_mask(0), d_hero_newlevel_female_image(0),
68 d_hero_newlevel_female_mask(0), d_commentator_image(0)
69 {
70 for (guint32 i = 0; i < MEDAL_TYPES; i++)
71 {
72 d_big_medal_images.push_back (NULL);
73 d_small_medal_images.push_back (NULL);
74 }
75 }
76
ScenarioMedia(XML_Helper * helper)77 ScenarioMedia::ScenarioMedia(XML_Helper *helper)
78 : d_next_turn_name(""), d_city_defeated_name(""), d_winning_name(""),
79 d_male_hero_name(""), d_female_hero_name(""), d_ruin_success_name(""),
80 d_ruin_defeat_name(""), d_parley_offered_name(""),
81 d_parley_refused_name(""), d_hero_newlevel_male_name(""),
82 d_hero_newlevel_female_name(""), d_small_medals_name(""),
83 d_big_medals_name(""), d_commentator_name(""), d_bless_name(""),
84 d_hero_name(""), d_battle_name(""), d_defeat_name(""), d_victory_name(""),
85 d_back_name (""), d_next_turn_image(0), d_city_defeated_image(0),
86 d_winning_image(0), d_male_hero_image(0), d_female_hero_image(0),
87 d_ruin_success_image(0), d_ruin_defeat_image(0), d_parley_offered_image(0),
88 d_parley_refused_image(0), d_hero_newlevel_male_image(0),
89 d_hero_newlevel_male_mask(0), d_hero_newlevel_female_image(0),
90 d_hero_newlevel_female_mask(0), d_commentator_image(0)
91 {
92 helper->getData(d_next_turn_name, "next_turn_image");
93 File::add_png_if_no_ext (d_next_turn_name);
94 helper->getData(d_city_defeated_name, "city_defeated_image");
95 File::add_png_if_no_ext (d_city_defeated_name);
96 helper->getData(d_winning_name, "winning_image");
97 File::add_png_if_no_ext (d_winning_name);
98 helper->getData(d_male_hero_name, "male_hero_image");
99 File::add_png_if_no_ext (d_male_hero_name);
100 helper->getData(d_female_hero_name, "female_hero_image");
101 File::add_png_if_no_ext (d_female_hero_name);
102 helper->getData(d_ruin_success_name, "ruin_success_image");
103 File::add_png_if_no_ext (d_ruin_success_name);
104 helper->getData(d_ruin_defeat_name, "ruin_defeat_image");
105 File::add_png_if_no_ext (d_ruin_defeat_name);
106 helper->getData(d_parley_offered_name, "parley_offered_image");
107 File::add_png_if_no_ext (d_parley_offered_name);
108 helper->getData(d_parley_refused_name, "parley_refused_image");
109 File::add_png_if_no_ext (d_parley_refused_name);
110 helper->getData(d_hero_newlevel_male_name, "hero_newlevel_male_image");
111 File::add_png_if_no_ext (d_hero_newlevel_male_name);
112 helper->getData(d_hero_newlevel_female_name,"hero_newlevel_female_image");
113 File::add_png_if_no_ext (d_hero_newlevel_female_name);
114 helper->getData(d_small_medals_name, "small_medals_image");
115 File::add_png_if_no_ext (d_small_medals_name);
116 helper->getData(d_big_medals_name, "big_medals_image");
117 File::add_png_if_no_ext (d_big_medals_name);
118 helper->getData(d_commentator_name, "commentator_image");
119 File::add_png_if_no_ext (d_commentator_name);
120 helper->getData(d_bless_name, "bless_sound");
121 helper->getData(d_hero_name,"d_hero_name");
122 helper->getData(d_battle_name,"d_battle_name");
123 helper->getData(d_defeat_name,"d_defeat_name");
124 helper->getData(d_victory_name,"d_victory_name");
125 helper->getData(d_back_name,"d_back_name");
126 }
127
anyValueSet() const128 bool ScenarioMedia::anyValueSet() const
129 {
130 if (d_next_turn_name != "" ||
131 d_city_defeated_name != "" ||
132 d_winning_name != "" ||
133 d_male_hero_name != "" ||
134 d_female_hero_name != "" ||
135 d_ruin_success_name != "" ||
136 d_ruin_defeat_name != "" ||
137 d_parley_offered_name != "" ||
138 d_parley_refused_name != "" ||
139 d_hero_newlevel_male_name != "" ||
140 d_hero_newlevel_female_name != "" ||
141 d_small_medals_name != "" ||
142 d_big_medals_name != "" ||
143 d_commentator_name != "" ||
144 d_bless_name != "" ||
145 d_hero_name != "" ||
146 d_battle_name != "" ||
147 d_defeat_name != "" ||
148 d_victory_name != "" ||
149 d_back_name != "")
150 return true;
151 return false;
152 }
153
save(XML_Helper * helper) const154 bool ScenarioMedia::save(XML_Helper* helper) const
155 {
156 if (!anyValueSet())
157 return true;
158 bool retval = true;
159 retval &= helper->openTag(ScenarioMedia::d_tag);
160 retval &= helper->saveData("next_turn_image", d_next_turn_name);
161 retval &= helper->saveData("city_defeated_image", d_city_defeated_name);
162 retval &= helper->saveData("winning_image", d_winning_name);
163 retval &= helper->saveData("male_hero_image", d_male_hero_name);
164 retval &= helper->saveData("female_hero_image", d_female_hero_name);
165 retval &= helper->saveData("ruin_success_image", d_ruin_success_name);
166 retval &= helper->saveData("ruin_defeat_image", d_ruin_defeat_name);
167 retval &= helper->saveData("parley_offered_image", d_parley_offered_name);
168 retval &= helper->saveData("parley_refused_image", d_parley_refused_name);
169 retval &= helper->saveData("hero_newlevel_male_image",
170 d_hero_newlevel_male_name);
171 retval &= helper->saveData("hero_newlevel_female_image",
172 d_hero_newlevel_female_name);
173 retval &= helper->saveData("small_medals_image", d_small_medals_name);
174 retval &= helper->saveData("big_medals_image", d_big_medals_name);
175 retval &= helper->saveData("commentator_image", d_commentator_name);
176 retval &= helper->saveData("bless_sound", d_bless_name);
177 retval &= helper->saveData("d_hero_name", d_hero_name);
178 retval &= helper->saveData("d_battle_name", d_battle_name);
179 retval &= helper->saveData("d_defeat_name", d_defeat_name);
180 retval &= helper->saveData("d_victory_name", d_victory_name);
181 retval &= helper->saveData("d_back_name", d_back_name);
182 retval &= helper->closeTag();
183 return retval;
184 }
185
~ScenarioMedia()186 ScenarioMedia::~ScenarioMedia()
187 {
188 uninstantiateImages();
189 for (auto i: d_musicMap)
190 {
191 MusicItem *m = dynamic_cast<MusicItem*>(i.second);
192 if (m)
193 {
194 File::erase (m->file);
195 delete m;
196 }
197 }
198 }
199
uninstantiateImages()200 void ScenarioMedia::uninstantiateImages()
201 {
202 if (d_next_turn_image)
203 delete d_next_turn_image;
204 d_next_turn_image = NULL;
205 if (d_city_defeated_image)
206 delete d_city_defeated_image;
207 d_city_defeated_image = NULL;
208 if (d_winning_image)
209 delete d_winning_image;
210 d_winning_image = NULL;
211 if (d_male_hero_image)
212 delete d_male_hero_image;
213 d_male_hero_image = NULL;
214 if (d_female_hero_image)
215 delete d_female_hero_image;
216 d_female_hero_image = NULL;
217 if (d_ruin_success_image)
218 delete d_ruin_success_image;
219 d_ruin_success_image = NULL;
220 if (d_ruin_defeat_image)
221 delete d_ruin_defeat_image;
222 d_ruin_defeat_image = NULL;
223 if (d_parley_offered_image)
224 delete d_parley_offered_image;
225 d_parley_offered_image = NULL;
226 if (d_parley_refused_image)
227 delete d_parley_refused_image;
228 d_parley_refused_image = NULL;
229 if (d_hero_newlevel_male_image)
230 delete d_hero_newlevel_male_image;
231 d_hero_newlevel_male_image = NULL;
232 if (d_hero_newlevel_male_mask)
233 delete d_hero_newlevel_male_mask;
234 d_hero_newlevel_male_mask = NULL;
235 if (d_hero_newlevel_female_image)
236 delete d_hero_newlevel_female_image;
237 d_hero_newlevel_female_image = NULL;
238 if (d_hero_newlevel_female_mask)
239 delete d_hero_newlevel_female_mask;
240 d_hero_newlevel_female_mask = NULL;
241 for (auto i : d_small_medal_images)
242 if (i)
243 delete i;
244 d_small_medal_images.clear();
245 for (auto i : d_big_medal_images)
246 if (i)
247 delete i;
248 d_big_medal_images.clear();
249 if (d_commentator_image)
250 delete d_commentator_image;
251 d_commentator_image = NULL;
252 }
253
instantiateImageRow(Tar_Helper & t,Glib::ustring name,int num,std::vector<PixMask * > & images,bool & broken)254 void ScenarioMedia::instantiateImageRow(Tar_Helper &t, Glib::ustring name, int num, std::vector<PixMask *>&images, bool &broken)
255 {
256 if (name != "")
257 {
258 Glib::ustring n = t.getFile (name, broken);
259 if (!broken)
260 images = disassemble_row(n, num, broken);
261 }
262 }
263
instantiateMaskedImage(Tar_Helper & t,Glib::ustring name,PixMask ** image,PixMask ** mask,bool & broken)264 void ScenarioMedia::instantiateMaskedImage(Tar_Helper &t, Glib::ustring name, PixMask **image, PixMask **mask, bool &broken)
265 {
266 if (name != "")
267 {
268 Glib::ustring n = t.getFile (name, broken);
269 if (!broken)
270 {
271 std::vector<PixMask* > half = disassemble_row(n, 2, broken);
272 if (!broken)
273 {
274 *image = half[0];
275 *mask = half[1];
276 }
277 }
278 if (broken)
279 return;
280 }
281 }
282
instantiateImage(Tar_Helper & t,Glib::ustring name,PixMask ** image,bool & broken)283 void ScenarioMedia::instantiateImage(Tar_Helper &t, Glib::ustring name, PixMask **image, bool &broken)
284 {
285 if (name != "")
286 {
287 Glib::ustring n = t.getFile (name, broken);
288 if (!broken)
289 {
290 PixMask *i = PixMask::create (n, broken);
291 if (!broken)
292 *image = i;
293 }
294 if (broken)
295 return;
296 }
297 }
298
copySound(Tar_Helper & t,Glib::ustring name,Glib::ustring piece,bool & broken)299 void ScenarioMedia::copySound(Tar_Helper &t, Glib::ustring name, Glib::ustring piece, bool &broken)
300 {
301 Glib::ustring n = t.getFile (name + ".ogg", broken);
302 if (!broken && n != "")
303 {
304 Glib::ustring tmpfile = File::get_tmp_file(".ogg");
305 File::copy (n, tmpfile);
306 MusicItem *item = new MusicItem();
307 if (item)
308 {
309 item->file = tmpfile;
310 item->background = false;
311 item->alias = "";
312 d_musicMap[piece] = item;
313 }
314 }
315 }
316
copySounds(Tar_Helper & t,bool & broken)317 void ScenarioMedia::copySounds(Tar_Helper &t, bool &broken)
318 {
319 Glib::ustring f = "";
320 copySound(t, d_bless_name, "bless", broken);
321 copySound(t, d_hero_name, "hero", broken);
322 copySound(t, d_battle_name, "battle", broken);
323 copySound(t, d_defeat_name, "defeat", broken);
324 copySound(t, d_victory_name, "victory", broken);
325
326 copySound(t, d_back_name, "back", broken);
327
328 MusicItem *back = getSoundEffect("back");
329 if (back)
330 {
331 back->background = true;
332 d_bgMap.push_back("back");
333 }
334 }
335
instantiateImages(Tar_Helper & t,bool & broken)336 void ScenarioMedia::instantiateImages(Tar_Helper &t, bool &broken)
337 {
338 instantiateImage (t, d_next_turn_name, &d_next_turn_image, broken);
339 if (!broken)
340 instantiateImage (t, d_city_defeated_name, &d_city_defeated_image, broken);
341 if (!broken)
342 instantiateImage (t, d_winning_name, &d_winning_image, broken);
343 if (!broken)
344 instantiateImage (t, d_male_hero_name, &d_male_hero_image, broken);
345 if (!broken)
346 instantiateImage (t, d_female_hero_name, &d_female_hero_image, broken);
347 if (!broken)
348 instantiateImage (t, d_ruin_success_name, &d_ruin_success_image, broken);
349 if (!broken)
350 instantiateImage (t, d_ruin_defeat_name, &d_ruin_defeat_image, broken);
351 if (!broken)
352 instantiateImage (t, d_parley_offered_name, &d_parley_offered_image,
353 broken);
354 if (!broken)
355 instantiateImage (t, d_parley_refused_name, &d_parley_refused_image,
356 broken);
357 if (!broken)
358 instantiateMaskedImage (t, d_hero_newlevel_male_name, &d_hero_newlevel_male_image, &d_hero_newlevel_male_mask, broken);
359 if (!broken)
360 instantiateMaskedImage (t, d_hero_newlevel_female_name, &d_hero_newlevel_female_image, &d_hero_newlevel_female_mask, broken);
361 if (!broken)
362 instantiateImageRow (t, d_small_medals_name, MEDAL_TYPES, d_small_medal_images, broken);
363 if (!broken)
364 instantiateImageRow (t, d_big_medals_name, MEDAL_TYPES, d_big_medal_images, broken);
365 if (!broken)
366 instantiateImage (t, d_commentator_name, &d_commentator_image, broken);
367 }
368
getSoundEffect(Glib::ustring n)369 MusicItem* ScenarioMedia::getSoundEffect(Glib::ustring n)
370 {
371 return d_musicMap[n];
372 }
373
getFilenames(std::list<Glib::ustring> & files)374 void ScenarioMedia::getFilenames(std::list<Glib::ustring> &files)
375 {
376 if (getNextTurnImageName() != "")
377 files.push_back (getNextTurnImageName());
378 if (getCityDefeatedImageName() != "")
379 files.push_back (getCityDefeatedImageName());
380 if (getWinningImageName() != "")
381 files.push_back (getWinningImageName());
382 if (getMaleHeroImageName() != "")
383 files.push_back (getMaleHeroImageName());
384 if (getFemaleHeroImageName() != "")
385 files.push_back (getFemaleHeroImageName());
386 if (getRuinSuccessImageName() != "")
387 files.push_back (getRuinSuccessImageName());
388 if (getRuinDefeatImageName() != "")
389 files.push_back (getRuinDefeatImageName());
390 if (getParleyOfferedImageName() != "")
391 files.push_back (getParleyOfferedImageName());
392 if (getParleyRefusedImageName() != "")
393 files.push_back (getParleyRefusedImageName());
394 if (getHeroNewLevelMaleImageName() != "")
395 files.push_back (getHeroNewLevelMaleImageName());
396 if (getHeroNewLevelFemaleImageName() != "")
397 files.push_back (getHeroNewLevelFemaleImageName());
398 if (getSmallMedalsImageName() != "")
399 files.push_back (getSmallMedalsImageName());
400 if (getBigMedalsImageName() != "")
401 files.push_back (getBigMedalsImageName());
402 if (getCommentatorImageName() != "")
403 files.push_back (getCommentatorImageName());
404 if (getBlessSoundName() != "")
405 files.push_back (getBlessSoundName() + ".ogg");
406 if (getHeroSoundName() != "")
407 files.push_back (getHeroSoundName() + ".ogg");
408 if (getBattleSoundName() != "")
409 files.push_back (getBattleSoundName() + ".ogg");
410 if (getDefeatSoundName() != "")
411 files.push_back (getDefeatSoundName() + ".ogg");
412 if (getVictorySoundName() != "")
413 files.push_back (getVictorySoundName() + ".ogg");
414 if (getBackSoundName() != "")
415 files.push_back (getBackSoundName() + ".ogg");
416 }
417
getDefaultNextTurnImageFilename()418 Glib::ustring ScenarioMedia::getDefaultNextTurnImageFilename()
419 {
420 return File::getVariousFile("ship.png");
421 }
422
getDefaultCityDefeatedImageFilename()423 Glib::ustring ScenarioMedia::getDefaultCityDefeatedImageFilename()
424 {
425 return File::getVariousFile("city_occupied.png");
426 }
427
getDefaultWinningImageFilename()428 Glib::ustring ScenarioMedia::getDefaultWinningImageFilename()
429 {
430 return File::getVariousFile("win.png");
431 }
432
getDefaultMaleHeroImageFilename()433 Glib::ustring ScenarioMedia::getDefaultMaleHeroImageFilename()
434 {
435 return File::getVariousFile("recruit_male.png");
436 }
437
getDefaultFemaleHeroImageFilename()438 Glib::ustring ScenarioMedia::getDefaultFemaleHeroImageFilename()
439 {
440 return File::getVariousFile("recruit_female.png");
441 }
442
getDefaultRuinSuccessImageFilename()443 Glib::ustring ScenarioMedia::getDefaultRuinSuccessImageFilename()
444 {
445 return File::getVariousFile("ruin_2.png");
446 }
447
getDefaultRuinDefeatImageFilename()448 Glib::ustring ScenarioMedia::getDefaultRuinDefeatImageFilename()
449 {
450 return File::getVariousFile("ruin_1.png");
451 }
452
getDefaultParleyOfferedImageFilename()453 Glib::ustring ScenarioMedia::getDefaultParleyOfferedImageFilename()
454 {
455 return File::getVariousFile("parley_offered.png");
456 }
457
getDefaultParleyRefusedImageFilename()458 Glib::ustring ScenarioMedia::getDefaultParleyRefusedImageFilename()
459 {
460 return File::getVariousFile("parley_refused.png");
461 }
462
getDefaultHeroNewLevelMaleImageFilename()463 Glib::ustring ScenarioMedia::getDefaultHeroNewLevelMaleImageFilename()
464 {
465 return File::getVariousFile("hero-newlevel-male.png");
466 }
467
getDefaultHeroNewLevelFemaleImageFilename()468 Glib::ustring ScenarioMedia::getDefaultHeroNewLevelFemaleImageFilename()
469 {
470 return File::getVariousFile("hero-newlevel-female.png");
471 }
472
getDefaultSmallMedalsImageFilename()473 Glib::ustring ScenarioMedia::getDefaultSmallMedalsImageFilename()
474 {
475 return File::getVariousFile("medals_mask.png");
476 }
477
getDefaultBigMedalsImageFilename()478 Glib::ustring ScenarioMedia::getDefaultBigMedalsImageFilename()
479 {
480 return File::getVariousFile("bigmedals.png");
481 }
482
getDefaultCommentatorImageFilename()483 Glib::ustring ScenarioMedia::getDefaultCommentatorImageFilename()
484 {
485 return File::getVariousFile("commentator.png");
486 }
487
getDefaultBlessSoundFilename()488 Glib::ustring ScenarioMedia::getDefaultBlessSoundFilename()
489 {
490 return Snd::getInstance()->getFile("bless");
491 }
492
getDefaultHeroSoundFilename()493 Glib::ustring ScenarioMedia::getDefaultHeroSoundFilename()
494 {
495 return Snd::getInstance()->getFile("hero");
496 }
497
getDefaultBattleSoundFilename()498 Glib::ustring ScenarioMedia::getDefaultBattleSoundFilename()
499 {
500 return Snd::getInstance()->getFile("battle");
501 }
502
getDefaultDefeatSoundFilename()503 Glib::ustring ScenarioMedia::getDefaultDefeatSoundFilename()
504 {
505 return Snd::getInstance()->getFile("defeat");
506 }
507
getDefaultVictorySoundFilename()508 Glib::ustring ScenarioMedia::getDefaultVictorySoundFilename()
509 {
510 return Snd::getInstance()->getFile("victory");
511 }
512
getDefaultBackSoundFilename()513 Glib::ustring ScenarioMedia::getDefaultBackSoundFilename()
514 {
515 return Snd::getInstance()->getFile("back");
516 }
517
clearNextTurnImage(bool clear_name)518 void ScenarioMedia::clearNextTurnImage(bool clear_name)
519 {
520 if (clear_name)
521 setNextTurnImageName ("");
522 PixMask *p = getNextTurnImage ();
523 if (p)
524 delete p;
525 setNextTurnImage (NULL);
526 }
527
clearCityDefeatedImage(bool clear_name)528 void ScenarioMedia::clearCityDefeatedImage(bool clear_name)
529 {
530 if (clear_name)
531 setCityDefeatedImageName ("");
532 PixMask *p = getCityDefeatedImage ();
533 if (p)
534 delete p;
535 setCityDefeatedImage (NULL);
536 }
537
clearWinningImage(bool clear_name)538 void ScenarioMedia::clearWinningImage(bool clear_name)
539 {
540 if (clear_name)
541 setWinningImageName ("");
542 PixMask *p = getWinningImage ();
543 if (p)
544 delete p;
545 setWinningImage (NULL);
546 }
547
clearMaleHeroImage(bool clear_name)548 void ScenarioMedia::clearMaleHeroImage(bool clear_name)
549 {
550 if (clear_name)
551 setMaleHeroImageName ("");
552 PixMask *p = getMaleHeroImage ();
553 if (p)
554 delete p;
555 setMaleHeroImage (NULL);
556 }
557
clearFemaleHeroImage(bool clear_name)558 void ScenarioMedia::clearFemaleHeroImage(bool clear_name)
559 {
560 if (clear_name)
561 setFemaleHeroImageName ("");
562 PixMask *p = getFemaleHeroImage ();
563 if (p)
564 delete p;
565 setFemaleHeroImage (NULL);
566 }
567
clearRuinSuccessImage(bool clear_name)568 void ScenarioMedia::clearRuinSuccessImage(bool clear_name)
569 {
570 if (clear_name)
571 setRuinSuccessImageName ("");
572 PixMask *p = getRuinSuccessImage ();
573 if (p)
574 delete p;
575 setRuinSuccessImage (NULL);
576 }
577
clearRuinDefeatImage(bool clear_name)578 void ScenarioMedia::clearRuinDefeatImage(bool clear_name)
579 {
580 if (clear_name)
581 setRuinDefeatImageName ("");
582 PixMask *p = getRuinDefeatImage ();
583 if (p)
584 delete p;
585 setRuinDefeatImage (NULL);
586 }
587
clearParleyOfferedImage(bool clear_name)588 void ScenarioMedia::clearParleyOfferedImage(bool clear_name)
589 {
590 if (clear_name)
591 setParleyOfferedImageName ("");
592 PixMask *p = getParleyOfferedImage ();
593 if (p)
594 delete p;
595 setParleyOfferedImage (NULL);
596 }
597
clearParleyRefusedImage(bool clear_name)598 void ScenarioMedia::clearParleyRefusedImage(bool clear_name)
599 {
600 if (clear_name)
601 setParleyRefusedImageName ("");
602 PixMask *p = getParleyRefusedImage ();
603 if (p)
604 delete p;
605 setParleyRefusedImage (NULL);
606 }
607
clearHeroNewLevelMaleImage(bool clear_name)608 void ScenarioMedia::clearHeroNewLevelMaleImage (bool clear_name)
609 {
610 if (clear_name)
611 setHeroNewLevelMaleImageName ("");
612 PixMask *p = getHeroNewLevelMaleImage ();
613 if (p)
614 delete p;
615 setHeroNewLevelMaleImage (NULL);
616
617 p = getHeroNewLevelMaleMask ();
618 if (p)
619 delete p;
620 setHeroNewLevelMaleMask (NULL);
621 }
622
clearHeroNewLevelFemaleImage(bool clear_name)623 void ScenarioMedia::clearHeroNewLevelFemaleImage (bool clear_name)
624 {
625 if (clear_name)
626 setHeroNewLevelFemaleImageName ("");
627 PixMask *p = getHeroNewLevelFemaleImage ();
628 if (p)
629 delete p;
630 setHeroNewLevelFemaleImage (NULL);
631
632 p = getHeroNewLevelFemaleMask ();
633 if (p)
634 delete p;
635 setHeroNewLevelFemaleMask (NULL);
636 }
637
clearSmallMedalImage(bool clear_name)638 void ScenarioMedia::clearSmallMedalImage(bool clear_name)
639 {
640 if (clear_name)
641 setSmallMedalsImageName ("");
642 for (guint32 i = 0; i < MEDAL_TYPES; i++)
643 {
644 PixMask *p = getSmallMedalImage (i);
645 if (p)
646 delete p;
647 setSmallMedalsImage (i, NULL);
648 }
649 }
650
clearBigMedalImage(bool clear_name)651 void ScenarioMedia::clearBigMedalImage(bool clear_name)
652 {
653 if (clear_name)
654 setBigMedalsImageName ("");
655 for (guint32 i = 0; i < MEDAL_TYPES; i++)
656 {
657 PixMask *p = getBigMedalImage (i);
658 if (p)
659 delete p;
660 setBigMedalsImage (i, NULL);
661 }
662 }
663
clearCommentatorImage(bool clear_name)664 void ScenarioMedia::clearCommentatorImage(bool clear_name)
665 {
666 if (clear_name)
667 setCommentatorImageName ("");
668 PixMask *p = getCommentatorImage ();
669 if (p)
670 delete p;
671 setCommentatorImage (NULL);
672 }
673
instantiateNextTurnImage(TarFile * t)674 bool ScenarioMedia::instantiateNextTurnImage(TarFile *t)
675 {
676 Glib::ustring imgname = getNextTurnImageName();
677 if (imgname.empty() == false)
678 {
679 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
680 if (filename.empty () == false)
681 {
682 bool broken = false;
683 PixMask *p = PixMask::create (filename, broken);
684 File::erase (filename);
685 if (!broken)
686 {
687 clearNextTurnImage (false);
688 setNextTurnImage (p);
689 }
690 else
691 return false;
692 }
693 else
694 return false;
695 }
696 return true;
697 }
698
instantiateCityDefeatedImage(TarFile * t)699 bool ScenarioMedia::instantiateCityDefeatedImage(TarFile *t)
700 {
701 Glib::ustring imgname = getCityDefeatedImageName();
702 if (imgname.empty() == false)
703 {
704 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
705 if (filename.empty () == false)
706 {
707 bool broken = false;
708 PixMask *p = PixMask::create (filename, broken);
709 File::erase (filename);
710 if (!broken)
711 {
712 clearCityDefeatedImage (false);
713 setCityDefeatedImage (p);
714 }
715 else
716 return false;
717 }
718 else
719 return false;
720 }
721 return true;
722 }
723
instantiateWinningImage(TarFile * t)724 bool ScenarioMedia::instantiateWinningImage(TarFile *t)
725 {
726 Glib::ustring imgname = getWinningImageName();
727 if (imgname.empty() == false)
728 {
729 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
730 if (filename.empty () == false)
731 {
732 bool broken = false;
733 PixMask *p = PixMask::create (filename, broken);
734 File::erase (filename);
735 if (!broken)
736 {
737 clearWinningImage (false);
738 setWinningImage (p);
739 }
740 else
741 return false;
742 }
743 else
744 return false;
745 }
746 return true;
747 }
748
instantiateMaleHeroImage(TarFile * t)749 bool ScenarioMedia::instantiateMaleHeroImage(TarFile *t)
750 {
751 Glib::ustring imgname = getMaleHeroImageName();
752 if (imgname.empty() == false)
753 {
754 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
755 if (filename.empty () == false)
756 {
757 bool broken = false;
758 PixMask *p = PixMask::create (filename, broken);
759 File::erase (filename);
760 if (!broken)
761 {
762 clearMaleHeroImage (false);
763 setMaleHeroImage (p);
764 }
765 else
766 return false;
767 }
768 else
769 return false;
770 }
771 return true;
772 }
773
instantiateFemaleHeroImage(TarFile * t)774 bool ScenarioMedia::instantiateFemaleHeroImage(TarFile *t)
775 {
776 Glib::ustring imgname = getFemaleHeroImageName();
777 if (imgname.empty() == false)
778 {
779 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
780 if (filename.empty () == false)
781 {
782 bool broken = false;
783 PixMask *p = PixMask::create (filename, broken);
784 File::erase (filename);
785 if (!broken)
786 {
787 clearFemaleHeroImage (false);
788 setFemaleHeroImage (p);
789 }
790 else
791 return false;
792 }
793 else
794 return false;
795 }
796 return true;
797 }
798
instantiateRuinSuccessImage(TarFile * t)799 bool ScenarioMedia::instantiateRuinSuccessImage(TarFile *t)
800 {
801 Glib::ustring imgname = getRuinSuccessImageName();
802 if (imgname.empty() == false)
803 {
804 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
805 if (filename.empty () == false)
806 {
807 bool broken = false;
808 PixMask *p = PixMask::create (filename, broken);
809 File::erase (filename);
810 if (!broken)
811 {
812 clearRuinSuccessImage (false);
813 setRuinSuccessImage (p);
814 }
815 else
816 return false;
817 }
818 else
819 return false;
820 }
821 return true;
822 }
823
instantiateRuinDefeatImage(TarFile * t)824 bool ScenarioMedia::instantiateRuinDefeatImage(TarFile *t)
825 {
826 Glib::ustring imgname = getRuinDefeatImageName();
827 if (imgname.empty() == false)
828 {
829 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
830 if (filename.empty () == false)
831 {
832 bool broken = false;
833 PixMask *p = PixMask::create (filename, broken);
834 File::erase (filename);
835 if (!broken)
836 {
837 clearRuinDefeatImage (false);
838 setRuinDefeatImage (p);
839 }
840 else
841 return false;
842 }
843 else
844 return false;
845 }
846 return true;
847 }
848
instantiateParleyOfferedImage(TarFile * t)849 bool ScenarioMedia::instantiateParleyOfferedImage(TarFile *t)
850 {
851 Glib::ustring imgname = getParleyOfferedImageName();
852 if (imgname.empty() == false)
853 {
854 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
855 if (filename.empty () == false)
856 {
857 bool broken = false;
858 PixMask *p = PixMask::create (filename, broken);
859 File::erase (filename);
860 if (!broken)
861 {
862 clearParleyOfferedImage (false);
863 setParleyOfferedImage (p);
864 }
865 else
866 return false;
867 }
868 else
869 return false;
870 }
871 return true;
872 }
873
instantiateParleyRefusedImage(TarFile * t)874 bool ScenarioMedia::instantiateParleyRefusedImage(TarFile *t)
875 {
876 Glib::ustring imgname = getParleyRefusedImageName();
877 if (imgname.empty() == false)
878 {
879 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
880 if (filename.empty () == false)
881 {
882 bool broken = false;
883 PixMask *p = PixMask::create (filename, broken);
884 File::erase (filename);
885 if (!broken)
886 {
887 clearParleyRefusedImage (false);
888 setParleyRefusedImage (p);
889 }
890 else
891 return false;
892 }
893 else
894 return false;
895 }
896 return true;
897 }
898
instantiateSmallMedalImage(TarFile * t)899 bool ScenarioMedia::instantiateSmallMedalImage(TarFile *t)
900 {
901 Glib::ustring imgname = getSmallMedalsImageName();
902 if (imgname.empty() == false)
903 {
904 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
905 if (filename.empty () == false)
906 {
907 bool broken = false;
908 std::vector<PixMask *> images =
909 disassemble_row(filename, MEDAL_TYPES, broken);
910 File::erase (filename);
911 if (!broken)
912 {
913 clearSmallMedalImage (false);
914 for (guint32 i = 0; i < MEDAL_TYPES; i++)
915 setSmallMedalsImage (i, images[i]);
916 }
917 }
918 else
919 return false;
920 }
921 return true;
922 }
923
instantiateBigMedalImage(TarFile * t)924 bool ScenarioMedia::instantiateBigMedalImage(TarFile *t)
925 {
926 Glib::ustring imgname = getBigMedalsImageName();
927 if (imgname.empty() == false)
928 {
929 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
930 if (filename.empty () == false)
931 {
932 bool broken = false;
933 std::vector<PixMask *> images =
934 disassemble_row(filename, MEDAL_TYPES, broken);
935 File::erase (filename);
936 if (!broken)
937 {
938 clearBigMedalImage (false);
939 for (guint32 i = 0; i < MEDAL_TYPES; i++)
940 setBigMedalsImage (i, images[i]);
941 }
942 }
943 else
944 return false;
945 }
946 return true;
947 }
948
instantiateHeroNewLevelMaleImage(TarFile * t)949 bool ScenarioMedia::instantiateHeroNewLevelMaleImage (TarFile *t)
950 {
951 bool broken = false;
952 Glib::ustring imgname = getHeroNewLevelMaleImageName ();
953
954 if (imgname.empty () == false)
955 {
956 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
957 if (filename.empty () == false)
958 {
959 std::vector<PixMask* > half = disassemble_row(filename, 2, broken);
960 File::erase (filename);
961 if (!broken)
962 {
963 clearHeroNewLevelMaleImage (false);
964 setHeroNewLevelMaleImage(half[0]);
965 setHeroNewLevelMaleMask (half[1]);
966 }
967 }
968 }
969 return broken;
970 }
971
instantiateHeroNewLevelFemaleImage(TarFile * t)972 bool ScenarioMedia::instantiateHeroNewLevelFemaleImage (TarFile *t)
973 {
974 bool broken = false;
975 Glib::ustring imgname = getHeroNewLevelFemaleImageName ();
976
977 if (imgname.empty () == false)
978 {
979 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
980 if (filename.empty () == false)
981 {
982 std::vector<PixMask* > half = disassemble_row(filename, 2, broken);
983 File::erase (filename);
984 if (!broken)
985 {
986 clearHeroNewLevelFemaleImage (false);
987 setHeroNewLevelFemaleImage(half[0]);
988 setHeroNewLevelFemaleMask (half[1]);
989 }
990 }
991 }
992 return broken;
993 }
994
instantiateCommentatorImage(TarFile * t)995 bool ScenarioMedia::instantiateCommentatorImage(TarFile *t)
996 {
997 Glib::ustring imgname = getCommentatorImageName();
998 if (imgname.empty() == false)
999 {
1000 Glib::ustring filename = t->getFileFromConfigurationFile(imgname);
1001 if (filename.empty () == false)
1002 {
1003 bool broken = false;
1004 PixMask *p = PixMask::create (filename, broken);
1005 File::erase (filename);
1006 if (!broken)
1007 {
1008 clearCommentatorImage (false);
1009 setCommentatorImage (p);
1010 }
1011 else
1012 return false;
1013 }
1014 else
1015 return false;
1016 }
1017 return true;
1018 }
1019