22 #ifndef TWINE_SHARED_H 23 #define TWINE_SHARED_H 25 #include "common/scummsys.h" 27 #define NUM_GAME_FLAGS 255 30 #define NUMOFCOLORS 256 32 #define NUM_LOCATIONS 334 34 #define NUM_INVENTORY_ITEMS 28 38 #define GAMEFLAG_INVENTORY_DISABLED 70 40 #define GAMEFLAG_VIDEO_BAFFE 200 42 #define GAMEFLAG_VIDEO_BAFFE2 201 44 #define GAMEFLAG_VIDEO_BAFFE3 202 46 #define GAMEFLAG_VIDEO_BATEAU 203 48 #define GAMEFLAG_VIDEO_TEMPLE 204 50 #define GAMEFLAG_VIDEO_FLUTE2 205 52 #define GAMEFLAG_VIDEO_NAVETTE 206 54 #define GAMEFLAG_VIDEO_NEIGE2 207 56 #define GAMEFLAG_VIDEO_SURF 208 58 #define GAMEFLAG_VIDEO_BATEAU2 209 60 #define GAMEFLAG_VIDEO_CAPTURE 210 62 #define GAMEFLAG_VIDEO_VERSER 211 64 #define GAMEFLAG_VIDEO_VERSER2 212 66 #define GAMEFLAG_VIDEO_FORTRESS 213 68 #define GAMEFLAG_VIDEO_SENDEL2 214 70 #define GAMEFLAG_VIDEO_BAFFE5 215 72 #define GAMEFLAG_VIDEO_EXPLODE 216 74 #define GAMEFLAG_VIDEO_GLASS2 217 76 #define GAMEFLAG_VIDEO_SENDEL 218 78 #define GAMEFLAG_VIDEO_EXPLODE2 219 80 #define OWN_ACTOR_SCENE_INDEX 0 81 #define IS_HERO(x) ((x) == OWN_ACTOR_SCENE_INDEX) 85 #include "common/pack-start.h" 91 #include "common/pack-end.h" 92 STATIC_ASSERT(
sizeof(
I16Vec3) == 6,
"Unexpected pointTab size");
95 constexpr
IVec2() : x(0), y(0) {}
96 constexpr IVec2(int32 _x, int32 _y) : x(_x), y(_y) {}
100 inline IVec2& operator+=(
const IVec2 &other) {
106 inline IVec2& operator-=(
const IVec2 &other) {
114 constexpr
IVec3() : x(0), y(0), z(0) {}
115 constexpr IVec3(int32 _x, int32 _y, int32 _z) : x(_x), y(_y), z(_z) {}
120 inline IVec3 &operator=(
const I16Vec3& other) {
127 inline IVec3& operator+=(
const IVec3 &other) {
134 inline IVec3& operator-=(
const IVec3 &other) {
143 return IVec3{lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z};
147 return IVec3{lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z};
150 inline constexpr
IVec3 operator-(
const IVec3 &v) {
151 return IVec3{-v.x, -v.y, -v.z};
161 int32 getDistance2D(int32 x1, int32 z1, int32 x2, int32 z2);
162 int32 getDistance2D(
const IVec3 &v1,
const IVec3 &v2);
173 int32 getDistance3D(int32 x1, int32 y1, int32 z1, int32 x2, int32 y2, int32 z2);
174 int32 getDistance3D(
const IVec3 &v1,
const IVec3 &v2);
186 bool hasBoundingBox =
false;
189 enum class ActionType : uint8 {
197 ACTION_SAMPLE_FREQ = 7,
198 ACTION_THROW_EXTRA_BONUS = 8,
199 ACTION_THROW_MAGIC_BALL = 9,
200 ACTION_SAMPLE_REPEAT = 10,
201 ACTION_THROW_SEARCH = 11,
202 ACTION_THROW_ALPHA = 12,
203 ACTION_SAMPLE_STOP = 13,
205 ACTION_LEFT_STEP = 15,
206 ACTION_RIGHT_STEP = 16,
207 ACTION_HERO_HITTING = 17,
208 ACTION_THROW_3D = 18,
209 ACTION_THROW_3D_ALPHA = 19,
210 ACTION_THROW_3D_SEARCH = 20,
211 ACTION_THROW_3D_MAGIC = 21,
213 ACTION_SUPER_HIT = 22,
214 ACTION_THROW_OBJ_3D = 23,
218 ACTION_THROW_DART = 27,
220 ACTION_SAMPLE_MAGIC = 29,
221 ACTION_THROW_3D_CONQUE = 30,
222 ACTION_ZV_ANIMIT = 31,
225 ACTION_RENVOYABLE = 34,
226 ACTION_TRANSPARENT = 35,
228 ACTION_LEFT_JUMP = 37,
229 ACTION_RIGHT_JUMP = 38,
230 ACTION_NEW_SAMPLE = 39,
231 ACTION_IMPACT_3D = 40,
232 ACTION_THROW_MAGIC_EXTRA = 41,
233 ACTION_THROW_FOUDRE = 42
236 enum class ShapeType {
241 kStairsBottomLeft = 4,
242 kStairsBottomRight = 5,
243 kDoubleSideStairsTop1 = 6,
244 kDoubleSideStairsBottom1 = 7,
245 kDoubleSideStairsLeft1 = 8,
246 kDoubleSideStairsRight1 = 9,
247 kDoubleSideStairsTop2 = 10,
248 kDoubleSideStairsBottom2 = 11,
249 kDoubleSideStairsLeft2 = 12,
250 kDoubleSideStairsRight2 = 13,
256 enum class ControlMode {
274 enum class AnimationTypes {
303 kCarDrivingBackwards = 305,
309 enum class AnimType {
310 kAnimationTypeRepeat = 0,
314 kAnimationAllThen = 2,
316 kAnimationInsert = 3,
334 enum class HeroBehaviourType {
351 enum class BodyType {
362 enum class ExtraSpecialType {
368 enum class ZoneType {
382 #define SCENE_CEILING_GRID_FADE_1 (-1) 383 #define SCENE_CEILING_GRID_FADE_2 (-2) 386 Citadel_Island_Prison = 0,
387 Citadel_Island_outside_the_citadel = 1,
388 Citadel_Island_near_the_tavern = 2,
389 Citadel_Island_near_the_pharmacy = 3,
390 Citadel_Island_near_twinsens_house = 4,
391 Citadel_Island_inside_Twinsens_house = 5,
392 Citadel_Island_Harbor = 6,
393 Citadel_Island_Pharmacy = 7,
394 White_Leaf_Desert_Temple_of_Bu_1st_scene = 8,
395 Hamalayi_Mountains_landing_place = 9,
396 Principal_Island_Library = 10,
397 Principal_Island_Harbor = 11,
398 Principal_Island_outside_the_fortress = 12,
399 Principal_Island_Old_Burg = 13,
400 Citadel_Island_Tavern = 14,
401 Hamalayi_Mountains_Rabbibunny_village = 15,
402 Citadel_Island_inside_a_Rabbibunny_house = 16,
403 Principal_Island_Ruins = 17,
404 Principal_Island_outside_the_library = 18,
405 Principal_Island_Militairy_camp = 19,
406 Citadel_Island_Architects_house = 20,
407 Citadel_Island_secret_chamber_in_the_house = 21,
408 Principal_Island_Ticket_office = 22,
409 Principal_Island_Prison = 23,
410 Principal_Island_Port_Belooga = 24,
411 Principal_Island_Peg_Leg_Street = 25,
412 Principal_Island_Shop = 26,
413 Principal_Island_Locksmith = 27,
414 Principal_Island_inside_a_Rabbibunny_house = 28,
415 Principal_Island_Astronimers_House = 29,
416 Principal_Island_Tavern = 30,
417 Principal_Island_Basement_of_the_Astronomer = 31,
418 Principal_Island_Stables = 32,
419 Citadel_Island_Cellar_of_the_Tavern = 33,
420 Citadel_Island_Sewer_of_the_1st_scene = 34,
421 Citadel_Island_Warehouse = 35,
422 White_Leaf_Desert_outside_the_Temple_of_Bu = 36,
423 Principal_Island_outside_the_water_tower = 37,
424 Principal_Island_inside_the_water_tower = 38,
425 White_Leaf_Desert_Militairy_camp = 39,
426 White_Leaf_Desert_Temple_of_Bu_2nd_scene = 40,
427 White_Leaf_Desert_Temple_of_Bu_3rd_scene = 41,
428 Proxima_Island_Proxim_City = 42,
429 Proxima_Island_Museum = 43,
430 Proxima_Island_near_the_Inventors_house = 44,
431 Proxima_Island_upper_rune_stone = 45,
432 Proxima_Island_lower_rune_stone = 46,
433 Proxima_Island_befor_the_upper_rune_stone = 47,
434 Proxima_Island_Forgers_house = 48,
435 Proxima_Island_Prison = 49,
436 Proxima_Island_Shop = 50,
437 Proxima_Island_Sewer = 51,
438 Principal_Island_house_at_Peg_Leg_Street = 52,
439 Proxima_Island_Grobo_house = 53,
440 Proxima_Island_Inventors_house = 54,
441 Citadel_Island_Sewer_secret = 55,
442 Principal_Island_Sewer_secret = 56,
443 White_Leaf_Desert_Maze = 57,
444 Principal_Island_House_with_the_TV = 58,
445 Rebelion_Island_Harbor = 59,
446 Rebelion_Island_Rebel_camp = 60,
447 Some_room_cut_out = 61,
448 Hamalayi_Mountains_1st_fighting_scene = 62,
449 Hamalayi_Mountains_2nd_fighting_scene = 63,
450 Hamalayi_Mountains_Prison = 64,
451 Hamalayi_Mountains_outside_the_transporter = 65,
452 Hamalayi_Mountains_inside_the_transporter = 66,
453 Hamalayi_Mountains_Mutation_centre_1st_scene = 67,
454 Hamalayi_Mountains_Mutation_centre_2nd_scene = 68,
455 Hamalayi_Mountains_3rd_fighting_scene = 69,
456 Hamalayi_Mountains_Entrance_to_the_prison = 70,
457 Hamalayi_Mountains_outside_the_prison = 71,
458 Hamalayi_Mountains_Catamaran_dock = 72,
459 Hamalayi_Mountains_Bunker_near_clear_water = 73,
460 Tippet_Island_Village = 74,
461 Tippet_Island_Secret_passage_scene_2 = 75,
462 Tippet_Island_near_the_bar = 76,
463 Tippet_Island_Secret_passage_scene_1 = 77,
464 Tippet_Island_near_the_Dino_Fly = 78,
465 Tippet_Island_Secret_passage_scene_3 = 79,
466 Tippet_Island_Twinsun_Cafe = 80,
467 Hamalayi_Mountains_Sacret_Carrot = 81,
468 Hamalayi_Mountains_Backdoor_of_the_prison = 82,
469 Fortress_Island_inside_the_fortress = 83,
470 Fortress_Island_outside_the_forstress = 84,
471 Fortress_Island_Secret_passage_scene_1 = 85,
472 Fortress_Island_Secret_in_the_fortress = 86,
473 Fortress_Island_near_Zoes_cell = 87,
474 Fortress_Island_Swimming_pool = 88,
475 Fortress_Island_Cloning_centre = 89,
476 Fortress_Island_Rune_stone = 90,
477 Hamalayi_Mountains_Behind_the_sacret_carrot = 91,
478 Hamalayi_Mountains_Clear_water_lake = 92,
479 Fortress_Island_outside_fortress_destroyed = 93,
480 Brundle_Island_outside_the_teleportation = 94,
481 Brundle_Island_inside_the_teleportation = 95,
482 Hamalayi_Mountains_Ski_resort = 96,
483 Brundle_Island_Docks = 97,
484 Brundle_Island_Secret_room = 98,
485 Brundle_Island_near_the_telepods = 99,
486 Fortress_Island_Docks = 100,
487 Tippet_Island_Shop = 101,
488 Principal_Island_house_in_port_Belooga = 102,
489 Brundle_Island_Painters_house = 103,
490 Citadel_Island_Ticket_Office = 104,
491 Principal_Island_inside_the_fortress = 105,
492 Polar_Island_2nd_scene = 106,
493 Polar_Island_3rd_scene = 107,
494 Polar_Island_Before_the_rocky_peak = 108,
495 Polar_Island_4th_scene = 109,
496 Polar_Island_The_rocky_peak = 110,
497 Polar_Island_on_the_rocky_peak = 111,
498 Polar_Island_Before_the_end_room = 112,
499 Polar_Island_Final_Battle = 113,
500 Polar_Island_end_scene = 114,
501 Polar_Island_1st_scene = 115,
502 Citadel_Island_end_sequence_1 = 116,
503 Citadel_Island_end_sequence_2 = 117,
504 Citadel_Island_Twinsens_house_destroyed = 118,
505 Credits_List_Sequence = 119,
511 enum class TextBankId : int16 {
513 Options_and_menus = 0,
515 Inventory_Intro_and_Holomap = 2,
517 Principal_Island = 4,
518 White_Leaf_Desert = 5,
520 Rebellion_Island = 7,
521 Hamalayi_mountains_southern_range = 8,
522 Hamalayi_mountains_northern_range = 9,
525 Fortress_Island = 12,
530 enum class TextId : int16 {
532 kBehaviourNormal = 0,
533 kBehaviourSporty = 1,
534 kBehaviourAggressiveManual = 2,
535 kBehaviourHiding = 3,
536 kBehaviourAggressiveAuto = 4,
555 kVolumeSettings = 30,
556 kDetailsPolygonsHigh = 31,
557 kDetailsShadowHigh = 32,
559 kCreateNewPlayer = 40,
560 kCreateSaveGame = 41,
562 kPlayerAlreadyExists = 43,
563 kEnterYourNewName = 44,
564 kDeleteSaveGame = 45,
568 kTransferVoices = 49,
569 kPleaseWaitWhileVoicesAreSaved = 50,
570 kRemoveProtoPack = 105,
571 kDetailsPolygonsMiddle = 131,
572 kShadowsFigures = 132,
573 kSceneryZoomOn = 133,
579 kStarWarsFanBoy = 226,
580 kDetailsPolygonsLow = 231,
581 kShadowsDisabled = 232,
582 kNoSceneryZoom = 233,
585 kCustomHighResOptionOn = -2,
586 kCustomHighResOptionOff = -3,
587 kCustomWallCollisionOn = -4,
588 kCustomWallCollisionOff = -5,
589 kCustomLanguageOption = -6,
590 kCustomVoicesNone = -7,
591 kCustomVoicesEnglish = -8,
592 kCustomVoicesFrench = -9,
593 kCustomVoicesGerman = -10,
605 enum InventoryItems {
612 kSendellsMedallion = 6,
613 kFlaskOfClearWater = 7,
634 MaxInventoryItems = 28
641 constexpr
TwineResource(
const char *_hqr, int32 _index) : hqr(_hqr), index(_index) {
649 constexpr
TwineImage(
const char *hqr, int32 index, int32 paletteIndex = -1) : image(hqr, index), palette(hqr, paletteIndex) {
654 static int32 ANGLE_360;
655 static int32 ANGLE_351;
656 static int32 ANGLE_334;
657 static int32 ANGLE_315;
658 static int32 ANGLE_270;
659 static int32 ANGLE_225;
660 static int32 ANGLE_210;
661 static int32 ANGLE_180;
662 static int32 ANGLE_157_5;
663 static int32 ANGLE_140;
664 static int32 ANGLE_135;
665 static int32 ANGLE_90;
666 static int32 ANGLE_70;
667 static int32 ANGLE_63;
668 static int32 ANGLE_45;
669 static int32 ANGLE_22_5;
670 static int32 ANGLE_17;
671 static int32 ANGLE_11_25;
672 static int32 ANGLE_2;
673 static int32 ANGLE_1;
674 static int32 ANGLE_0;
676 static void init(
int factor);
682 #define VIEW_X0 (-50) 683 #define VIEW_Y0 (-30) 684 #define VIEW_X1(engine) ((engine)->width() + 40) 685 #define VIEW_Y1(engine) ((engine)->height() + 100) 687 inline int32 NormalizeAngle(int32 angle) {
688 if (angle < -LBAAngles::ANGLE_180) {
689 angle += LBAAngles::ANGLE_360;
690 }
else if (angle > LBAAngles::ANGLE_180) {
691 angle -= LBAAngles::ANGLE_360;
700 inline constexpr int32 ToAngle(int32 angle) {
708 inline constexpr int32 FromAngle(int32 angle) {
712 inline double AngleToRadians(int32 angle) {
713 return 2.0 * M_PI * angle / (double)LBAAngles::ANGLE_360;
716 inline int32 ClampAngle(int32 angle) {
717 return angle & (LBAAngles::ANGLE_360 - 1);
721 inline constexpr T bits(T value, uint8 offset, uint8 bits) {
722 return (((1 << bits) - 1) & (value >> offset));
725 #define COLOR_BLACK 0 726 #define COLOR_BRIGHT_BLUE 4 735 #define COlOR_31 31 // green dark 736 #define COlOR_47 47 // green bright 737 #define COLOR_48 48 // brown dark 738 #define COLOR_63 63 // brown bright 739 #define COLOR_64 64 // blue dark 740 #define COLOR_68 68 // blue 741 #define COLOR_73 73 // blue 743 #define COLOR_79 79 // blue bright 746 #define COLOR_BRIGHT_BLUE2 69 747 #define COLOR_WHITE 15 748 #define COLOR_GOLD 155 749 #define COLOR_158 158 752 kDebugScripts = 1 << 0,
Definition: achievements_tables.h:27
Axis aligned bounding box.
Definition: shared.h:179