|
54 | 54 | ** These are the actual filename list for the theme sample files.
|
55 | 55 | */
|
56 | 56 | ThemeClass::ThemeControl ThemeClass::_themes[THEME_COUNT] = {
|
57 |
| - {"AIRSTRIK", TXT_THEME_AIRSTRIKE, 0, 200, false, false, false, true}, |
58 |
| - {"80MX226M", TXT_THEME_80MX, 0, 248, false, false, false, true}, |
59 |
| - {"CHRG226M", TXT_THEME_CHRG, 0, 256, true, false, false, true}, |
60 |
| - {"CREP226M", TXT_THEME_CREP, 0, 222, true, false, false, true}, |
61 |
| - {"DRIL226M", TXT_THEME_DRIL, 0, 272, true, false, false, true}, |
62 |
| - {"DRON226M", TXT_THEME_DRON, 0, 275, true, false, false, true}, |
63 |
| - {"FIST226M", TXT_THEME_FIST, 0, 212, true, false, false, true}, |
64 |
| - {"RECN226M", TXT_THEME_RECON, 0, 261, true, false, false, true}, |
65 |
| - {"VOIC226M", TXT_THEME_VOICE, 0, 306, true, false, false, true}, |
66 |
| - {"HEAVYG", TXT_THEME_HEAVYG, 0, 180, true, false, false, true}, |
67 |
| - {"J1", TXT_THEME_J1, 4, 187, true, false, false, true}, |
| 57 | + {"AIRSTRIK", TXT_THEME_AIRSTRIKE, 0, 200, false, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 58 | + {"80MX226M", TXT_THEME_80MX, 0, 248, false, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 59 | + {"CHRG226M", TXT_THEME_CHRG, 0, 256, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 60 | + {"CREP226M", TXT_THEME_CREP, 0, 222, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 61 | + {"DRIL226M", TXT_THEME_DRIL, 0, 272, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 62 | + {"DRON226M", TXT_THEME_DRON, 0, 275, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 63 | + {"FIST226M", TXT_THEME_FIST, 0, 212, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 64 | + {"RECN226M", TXT_THEME_RECON, 0, 261, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 65 | + {"VOIC226M", TXT_THEME_VOICE, 0, 306, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 66 | + {"HEAVYG", TXT_THEME_HEAVYG, 0, 180, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 67 | + {"J1", TXT_THEME_J1, 4, 187, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
68 | 68 | // {"J1", TXT_THEME_J1, 4, 187, false, false,false,true},
|
69 |
| - {"JDI_V2", TXT_THEME_JDI_V2, 5, 183, true, false, false, true}, |
70 |
| - {"RADIO", TXT_THEME_RADIO, 6, 183, true, false, false, true}, |
71 |
| - {"RAIN", TXT_THEME_RAIN, 7, 156, true, false, false, true}, |
72 |
| - {"AOI", TXT_THEME_AOI, 0, 168, true, true, false, true}, |
73 |
| - {"CCTHANG", TXT_THEME_CCTHANG, 12, 193, true, false, false, true}, |
74 |
| - {"DIE", TXT_THEME_DIE, 11, 162, false, false, false, true}, |
75 |
| - {"FWP", TXT_THEME_FWP, 10, 53, true, false, false, true}, |
76 |
| - {"IND", TXT_THEME_IND, 1, 175, true, false, false, true}, |
77 |
| - {"IND2", TXT_THEME_IND2, 1, 38, true, false, false, true}, |
78 |
| - {"JUSTDOIT", TXT_THEME_JUSTDOIT, 9, 142, true, false, false, true}, |
79 |
| - {"LINEFIRE", TXT_THEME_LINEFIRE, 8, 125, true, false, false, true}, |
80 |
| - {"MARCH", TXT_THEME_MARCH, 7, 157, true, false, false, true}, |
81 |
| - {"TARGET", TXT_THEME_TARGET, 0, 173, true, false, false, true}, |
82 |
| - {"NOMERCY", TXT_THEME_NOMERCY, 2, 204, true, false, false, true}, |
83 |
| - {"OTP", TXT_THEME_OTP, 3, 182, true, false, false, true}, |
84 |
| - {"PRP", TXT_THEME_PRP, 4, 211, true, false, false, true}, |
85 |
| - {"ROUT", TXT_THEME_ROUT, 12, 121, false, true, false, true}, |
86 |
| - {"HEART", TXT_THEME_HEART, 5, 206, false, true, false, true}, |
87 |
| - {"STOPTHEM", TXT_THEME_STOPTHEM, 0, 190, true, false, false, true}, |
88 |
| - {"TROUBLE", TXT_THEME_TROUBLE, 6, 191, true, true, false, true}, |
89 |
| - {"WARFARE", TXT_THEME_WARFARE, 0, 182, true, false, false, true}, |
90 |
| - {"BEFEARED", TXT_THEME_BEFEARED, 13, 164, false, true, false, true}, |
91 |
| - {"I_AM", TXT_THEME_IAM, 6, 161, false, false, false, true}, |
92 |
| - {"WIN1", TXT_THEME_WIN1, 0, 41, false, true, true, true}, |
93 |
| - {"MAP1", TXT_THEME_WIN1, 0, 61, false, false, true, true}, |
94 |
| - {"VALKYRIE", TXT_THEME_VALK, 0, 306, false, false, true, true}, |
| 69 | + {"JDI_V2", TXT_THEME_JDI_V2, 5, 183, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 70 | + {"RADIO", TXT_THEME_RADIO, 6, 183, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 71 | + {"RAIN", TXT_THEME_RAIN, 7, 156, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 72 | + {"AOI", TXT_THEME_AOI, 0, 168, true, true, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 73 | + {"CCTHANG", TXT_THEME_CCTHANG, 12, 193, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 74 | + {"DIE", TXT_THEME_DIE, 11, 162, false, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 75 | + {"FWP", TXT_THEME_FWP, 10, 53, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 76 | + {"IND", TXT_THEME_IND, 1, 175, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 77 | + {"IND2", TXT_THEME_IND2, 1, 38, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 78 | + {"JUSTDOIT", TXT_THEME_JUSTDOIT, 9, 142, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 79 | + {"LINEFIRE", TXT_THEME_LINEFIRE, 8, 125, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 80 | + {"MARCH", TXT_THEME_MARCH, 7, 157, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 81 | + {"TARGET", TXT_THEME_TARGET, 0, 173, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 82 | + {"NOMERCY", TXT_THEME_NOMERCY, 2, 204, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 83 | + {"OTP", TXT_THEME_OTP, 3, 182, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 84 | + {"PRP", TXT_THEME_PRP, 4, 211, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 85 | + {"ROUT", TXT_THEME_ROUT, 12, 121, false, true, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 86 | + {"HEART", TXT_THEME_HEART, 5, 206, false, true, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 87 | + {"STOPTHEM", TXT_THEME_STOPTHEM, 0, 190, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 88 | + {"TROUBLE", TXT_THEME_TROUBLE, 6, 191, true, true, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 89 | + {"WARFARE", TXT_THEME_WARFARE, 0, 182, true, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 90 | + {"BEFEARED", TXT_THEME_BEFEARED, 13, 164, false, true, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 91 | + {"I_AM", TXT_THEME_IAM, 6, 161, false, false, false, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 92 | + {"WIN1", TXT_THEME_WIN1, 0, 41, false, true, true, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 93 | + {"MAP1", TXT_THEME_WIN1, 0, 61, false, false, true, true, HOUSEF_GOOD | HOUSEF_BAD}, |
| 94 | + {"VALKYRIE", TXT_THEME_VALK, 0, 306, false, false, true, true, HOUSEF_GOOD | HOUSEF_BAD}, |
95 | 95 | };
|
96 | 96 |
|
97 | 97 | /***********************************************************************************************
|
@@ -467,12 +467,43 @@ bool ThemeClass::Is_Allowed(ThemeType index) const
|
467 | 467 | }
|
468 | 468 | }
|
469 | 469 |
|
470 |
| - return (_themes[index].Available |
471 |
| - && (_themes[index].Normal || |
472 |
| - // (index == THEME_MAP1 && ScenarioInit) || |
473 |
| - ((Special.IsVariation && _themes[index].Variation && index != THEME_WIN1) |
474 |
| - && (!Is_Demo() || (GameToPlay != GAME_NORMAL || _themes[index].Scenario <= (int)Scen.Scenario)) |
475 |
| - && (index != THEME_J1 || Special.IsJurassic)))); |
| 470 | + if ((unsigned)index >= THEME_COUNT) |
| 471 | + return (true); |
| 472 | + |
| 473 | + /* |
| 474 | + ** If the theme is not present, then it certainly isn't allowed. |
| 475 | + */ |
| 476 | + if (!_themes[index].Available) |
| 477 | + return (false); |
| 478 | + |
| 479 | + /* |
| 480 | + ** Only normal themes (playable during battle) are considered allowed. |
| 481 | + */ |
| 482 | + if (!_themes[index].Normal) |
| 483 | + return (false); |
| 484 | + |
| 485 | + /* |
| 486 | + ** If the theme is not allowed to be played by the player's house, then don't allow |
| 487 | + ** it. If the player's house hasn't yet been determined, then presume this test |
| 488 | + ** passes. |
| 489 | + */ |
| 490 | + if (PlayerPtr != NULL && ((1 << PlayerPtr->ActLike) & _themes[index].Owner) == 0) |
| 491 | + return (false); |
| 492 | + |
| 493 | + if (!Special.IsVariation || !_themes[index].Variation || index == THEME_WIN1) |
| 494 | + return (false); |
| 495 | + |
| 496 | + /* |
| 497 | + ** If the scenario doesn't allow this theme yet, then return the failure flag. The |
| 498 | + ** scenario check only makes sense for solo play. |
| 499 | + */ |
| 500 | + if (Is_Demo() || (GameToPlay == GAME_NORMAL && Scen.Scenario < _themes[index].Scenario)) |
| 501 | + return (false); |
| 502 | + |
| 503 | + /* |
| 504 | + ** Since all otehr tests passed, return if its not the special dino theme. |
| 505 | + */ |
| 506 | + return (index != THEME_J1 || Special.IsJurassic); |
476 | 507 | }
|
477 | 508 |
|
478 | 509 | /***********************************************************************************************
|
@@ -551,3 +582,32 @@ void ThemeClass::Scan(void)
|
551 | 582 | // }
|
552 | 583 | }
|
553 | 584 | }
|
| 585 | + |
| 586 | +/*********************************************************************************************** |
| 587 | + * ThemeClass::Set_Theme_Data -- Set the theme data for scenario and owner. * |
| 588 | + * * |
| 589 | + * This is an override function used to set a particular theme's initial scenario and * |
| 590 | + * owner values. Typically, the rules control file will be the source of calling this * |
| 591 | + * routine. * |
| 592 | + * * |
| 593 | + * INPUT: theme -- The theme to set these override values for. * |
| 594 | + * * |
| 595 | + * scenario -- The first scenario when this theme becomes available on the play list. * |
| 596 | + * * |
| 597 | + * owners -- A bitfield representing the owners allowed to play this song. * |
| 598 | + * * |
| 599 | + * OUTPUT: none * |
| 600 | + * * |
| 601 | + * WARNINGS: none * |
| 602 | + * * |
| 603 | + * HISTORY: * |
| 604 | + * 08/12/1996 JLB : Created. * |
| 605 | + *=============================================================================================*/ |
| 606 | +void ThemeClass::Set_Theme_Data(ThemeType theme, int scenario, int owners) |
| 607 | +{ |
| 608 | + if (theme != THEME_NONE) { |
| 609 | + _themes[theme].Normal = true; |
| 610 | + _themes[theme].Scenario = scenario; |
| 611 | + _themes[theme].Owner = owners; |
| 612 | + } |
| 613 | +} |
0 commit comments