Merge branch 'develop' into Dragon_update

This commit is contained in:
Adngel 2024-01-30 16:01:20 +01:00
commit 993f19899e
60 changed files with 331 additions and 331 deletions

View file

@ -22,7 +22,7 @@ namespace TEN::Gui
{ {
// Weapons // Weapons
{ ID_PISTOLS_ITEM, 6, 0.5f, EulerAngles(ANGLE(244.0f), ANGLE(90.0f), ANGLE(276.0f)), OPT_EQUIP | OPT_COMBINABLE | OPT_CHOOSE_AMMO_PISTOLS, STRING_PISTOLS, NO_JOINT_BITS, INV_ROT_Y }, { ID_PISTOLS_ITEM, 6, 0.5f, EulerAngles(ANGLE(244.0f), ANGLE(90.0f), ANGLE(276.0f)), OPT_EQUIP | OPT_COMBINABLE | OPT_CHOOSE_AMMO_PISTOLS, STRING_PISTOLS, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PISTOLS_AMMO_ITEM, 4, 0.5f, EulerAngles::Zero, OPT_USE, STRING_PISTOL_AMMO, NO_JOINT_BITS, INV_ROT_Y }, { ID_PISTOLS_AMMO_ITEM, 4, 0.5f, EulerAngles::Identity, OPT_USE, STRING_PISTOL_AMMO, NO_JOINT_BITS, INV_ROT_Y },
{ ID_UZI_ITEM, -4, 0.5f, EulerAngles(ANGLE(135.0f), ANGLE(-90.0f), ANGLE(90.0f)), OPT_EQUIP | OPT_COMBINABLE | OPT_CHOOSE_AMMO_UZI, STRING_UZIS , NO_JOINT_BITS, INV_ROT_Y }, { ID_UZI_ITEM, -4, 0.5f, EulerAngles(ANGLE(135.0f), ANGLE(-90.0f), ANGLE(90.0f)), OPT_EQUIP | OPT_COMBINABLE | OPT_CHOOSE_AMMO_UZI, STRING_UZIS , NO_JOINT_BITS, INV_ROT_Y },
{ ID_UZI_AMMO_ITEM, 5, 0.5f, EulerAngles(ANGLE(29.5f), 0, 0), OPT_USE, STRING_UZI_AMMO, NO_JOINT_BITS, INV_ROT_Y }, { ID_UZI_AMMO_ITEM, 5, 0.5f, EulerAngles(ANGLE(29.5f), 0, 0), OPT_USE, STRING_UZI_AMMO, NO_JOINT_BITS, INV_ROT_Y },
{ ID_SHOTGUN_ITEM, -6, 0.8f, EulerAngles(ANGLE(270.0f), ANGLE(-20.0f), ANGLE(45)), OPT_EQUIP | OPT_COMBINABLE | OPT_CHOOSE_AMMO_SHOTGUN, STRING_SHOTGUN, 0x01, INV_ROT_Y }, { ID_SHOTGUN_ITEM, -6, 0.8f, EulerAngles(ANGLE(270.0f), ANGLE(-20.0f), ANGLE(45)), OPT_EQUIP | OPT_COMBINABLE | OPT_CHOOSE_AMMO_SHOTGUN, STRING_SHOTGUN, 0x01, INV_ROT_Y },
@ -57,17 +57,17 @@ namespace TEN::Gui
{ ID_BIGMEDI_ITEM, 2, 0.7f, EulerAngles(0, ANGLE(180.0f), 0), OPT_USE, STRING_LARGE_MEDIPACK, NO_JOINT_BITS, INV_ROT_Y }, { ID_BIGMEDI_ITEM, 2, 0.7f, EulerAngles(0, ANGLE(180.0f), 0), OPT_USE, STRING_LARGE_MEDIPACK, NO_JOINT_BITS, INV_ROT_Y },
{ ID_SMALLMEDI_ITEM, 0, 0.7f, EulerAngles(ANGLE(112.0f), ANGLE(180.0f), 0), OPT_USE, STRING_SMALL_MEDIPACK, NO_JOINT_BITS, INV_ROT_Y }, { ID_SMALLMEDI_ITEM, 0, 0.7f, EulerAngles(ANGLE(112.0f), ANGLE(180.0f), 0), OPT_USE, STRING_SMALL_MEDIPACK, NO_JOINT_BITS, INV_ROT_Y },
{ ID_BINOCULARS_ITEM, -1, 0.5f, EulerAngles(ANGLE(10.0f), ANGLE(180.0f), 0), OPT_USE, STRING_BINOCULARS, NO_JOINT_BITS, INV_ROT_Y }, { ID_BINOCULARS_ITEM, -1, 0.5f, EulerAngles(ANGLE(10.0f), ANGLE(180.0f), 0), OPT_USE, STRING_BINOCULARS, NO_JOINT_BITS, INV_ROT_Y },
{ ID_FLARE_INV_ITEM, 52, 0.8f, EulerAngles::Zero, OPT_USE, STRING_FLARES, NO_JOINT_BITS, INV_ROT_Y }, { ID_FLARE_INV_ITEM, 52, 0.8f, EulerAngles::Identity, OPT_USE, STRING_FLARES, NO_JOINT_BITS, INV_ROT_Y },
{ ID_TIMEX_ITEM, 2, 0.4f, EulerAngles::Zero, OPT_STATS, STRING_STATISTICS, NO_JOINT_BITS, INV_ROT_Y }, { ID_TIMEX_ITEM, 2, 0.4f, EulerAngles::Identity, OPT_STATS, STRING_STATISTICS, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PC_LOAD_INV_ITEM, 52, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_LOAD, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PC_LOAD_INV_ITEM, 52, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_LOAD, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PC_SAVE_INV_ITEM, 52, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_SAVE, STRING_SAVE_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PC_SAVE_INV_ITEM, 52, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_SAVE, STRING_SAVE_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_BURNING_TORCH_ITEM, 14, 0.5f, EulerAngles(ANGLE(90.0f), 0, 0), OPT_USE, STRING_TORCH, NO_JOINT_BITS, INV_ROT_Y }, { ID_BURNING_TORCH_ITEM, 14, 0.5f, EulerAngles(ANGLE(90.0f), 0, 0), OPT_USE, STRING_TORCH, NO_JOINT_BITS, INV_ROT_Y },
{ ID_CROWBAR_ITEM, 4, 0.5f, EulerAngles(ANGLE(90.0f), 0, 0), OPT_USE, STRING_CROWBAR, NO_JOINT_BITS, INV_ROT_Y }, { ID_CROWBAR_ITEM, 4, 0.5f, EulerAngles(ANGLE(90.0f), 0, 0), OPT_USE, STRING_CROWBAR, NO_JOINT_BITS, INV_ROT_Y },
{ ID_DIARY_ITEM, 0, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_DIARY, STRING_DIARY, NO_JOINT_BITS, INV_ROT_Y }, { ID_DIARY_ITEM, 0, 0.3f, EulerAngles(0, ANGLE(180.0f), 0), OPT_DIARY, STRING_DIARY, NO_JOINT_BITS, INV_ROT_Y },
{ ID_COMPASS_ITEM, -14, 0.5f, EulerAngles(ANGLE(90.0f), ANGLE(180.0f), 0), 0, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_COMPASS_ITEM, -14, 0.5f, EulerAngles(ANGLE(90.0f), ANGLE(180.0f), 0), 0, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_CLOCKWORK_BEETLE, 14, 0.5f, EulerAngles::Zero, OPT_USE, STRING_MECHANICAL_SCARAB, NO_JOINT_BITS, INV_ROT_Y }, { ID_CLOCKWORK_BEETLE, 14, 0.5f, EulerAngles::Identity, OPT_USE, STRING_MECHANICAL_SCARAB, NO_JOINT_BITS, INV_ROT_Y },
{ ID_CLOCKWORK_BEETLE_COMBO1, 18, 0.5f, EulerAngles::Zero, OPT_COMBINABLE, STRING_MECHANICAL_SCARAB_1, NO_JOINT_BITS, INV_ROT_Y }, { ID_CLOCKWORK_BEETLE_COMBO1, 18, 0.5f, EulerAngles::Identity, OPT_COMBINABLE, STRING_MECHANICAL_SCARAB_1, NO_JOINT_BITS, INV_ROT_Y },
{ ID_CLOCKWORK_BEETLE_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_COMBINABLE, STRING_MECHANICAL_SCARAB_2, NO_JOINT_BITS, INV_ROT_Y }, { ID_CLOCKWORK_BEETLE_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_COMBINABLE, STRING_MECHANICAL_SCARAB_2, NO_JOINT_BITS, INV_ROT_Y },
{ ID_WATERSKIN1_EMPTY, 2, 0.5f, EulerAngles(ANGLE(285.0f), 0, 0), OPT_USE | OPT_COMBINABLE, STRING_WATERSKIN_SMALL_EMPTY, NO_JOINT_BITS, INV_ROT_Y }, { ID_WATERSKIN1_EMPTY, 2, 0.5f, EulerAngles(ANGLE(285.0f), 0, 0), OPT_USE | OPT_COMBINABLE, STRING_WATERSKIN_SMALL_EMPTY, NO_JOINT_BITS, INV_ROT_Y },
{ ID_WATERSKIN1_1, 2, 0.5f, EulerAngles(ANGLE(285.0f), 0, 0), OPT_USE | OPT_COMBINABLE, STRING_WATERSKIN_SMALL_1L, NO_JOINT_BITS, INV_ROT_Y }, { ID_WATERSKIN1_1, 2, 0.5f, EulerAngles(ANGLE(285.0f), 0, 0), OPT_USE | OPT_COMBINABLE, STRING_WATERSKIN_SMALL_1L, NO_JOINT_BITS, INV_ROT_Y },
{ ID_WATERSKIN1_2, 2, 0.5f, EulerAngles(ANGLE(285.0f), 0, 0), OPT_USE | OPT_COMBINABLE, STRING_WATERSKIN_SMALL_2L, NO_JOINT_BITS, INV_ROT_Y }, { ID_WATERSKIN1_2, 2, 0.5f, EulerAngles(ANGLE(285.0f), 0, 0), OPT_USE | OPT_COMBINABLE, STRING_WATERSKIN_SMALL_2L, NO_JOINT_BITS, INV_ROT_Y },
@ -81,188 +81,188 @@ namespace TEN::Gui
{ ID_DIARY_OPEN, 0, 0.9f, EulerAngles(0, ANGLE(90.0f), 0), 0, 0, 0}, { ID_DIARY_OPEN, 0, 0.9f, EulerAngles(0, ANGLE(90.0f), 0), 0, 0, 0},
// Puzzles // Puzzles
{ ID_PUZZLE_ITEM1, 14, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM1, 14, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM2, 14, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM2, 14, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM3, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM3, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM4, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM4, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM5, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM5, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM6, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM6, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM7, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM7, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM8, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM8, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM9, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM9, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM10, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM10, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM11, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM11, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM12, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM12, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM13, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM13, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM14, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM14, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM15, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM15, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM16, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM16, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Puzzle combos // Puzzle combos
{ ID_PUZZLE_ITEM1_COMBO1, 18, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM1_COMBO1, 18, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM1_COMBO2, 18, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM1_COMBO2, 18, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM2_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM2_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM2_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM2_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM3_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM3_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM3_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM3_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM4_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM4_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM4_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM4_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM5_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM5_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM5_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM5_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM6_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM6_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM6_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM6_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM7_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM7_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM7_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM7_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM8_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM8_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM8_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM8_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM9_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM9_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM9_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM9_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM10_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM10_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM10_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM10_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM11_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM11_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM11_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM11_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM12_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM12_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM12_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM12_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM13_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM13_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM13_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM13_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM14_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM14_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM14_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM14_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM15_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM15_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM15_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM15_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM16_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM16_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PUZZLE_ITEM16_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PUZZLE_ITEM16_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Keys // Keys
{ ID_KEY_ITEM1, 14, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM1, 14, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM2, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM2, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM3, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM3, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM4, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM4, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM5, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM5, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM6, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM6, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM7, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM7, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM8, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM8, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM9, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM9, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM10, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM10, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM11, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM11, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM12, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM12, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM13, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM13, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM14, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM14, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM15, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM15, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM16, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM16, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Key combos // Key combos
{ ID_KEY_ITEM1_COMBO1, 18, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM1_COMBO1, 18, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM1_COMBO2, 18, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM1_COMBO2, 18, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM2_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM2_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM2_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM2_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM3_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM3_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM3_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM3_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM4_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM4_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM4_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM4_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM5_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM5_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM5_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM5_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM6_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM6_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM6_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM6_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM7_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM7_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM7_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM7_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM8_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM8_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM8_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM8_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM9_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM9_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM9_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM9_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM10_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM10_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM10_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM10_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM11_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM11_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM11_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM11_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM12_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM12_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM12_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM12_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM13_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM13_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM13_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM13_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM14_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM14_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM14_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM14_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM15_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM15_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM15_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM15_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM16_COMBO1, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM16_COMBO1, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_KEY_ITEM16_COMBO2, 8, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_KEY_ITEM16_COMBO2, 8, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Pickups // Pickups
{ ID_PICKUP_ITEM1, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM1, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM2, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM2, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM3, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM3, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM4, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM4, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM5, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM5, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM6, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM6, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM7, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM7, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM8, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM8, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM9, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM9, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM10, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM10, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM11, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM11, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM12, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM12, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM13, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM13, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM14, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM14, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM15, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM15, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM16, 8, 0.5f, EulerAngles::Zero, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM16, 8, 0.5f, EulerAngles::Identity, OPT_USE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Pickup combos // Pickup combos
{ ID_PICKUP_ITEM1_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM1_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM1_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM1_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM2_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM2_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM2_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM2_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM3_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM3_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM3_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM3_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM4_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM4_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM4_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM4_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM5_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM5_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM5_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM5_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM6_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM6_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM6_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM6_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM7_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM7_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM7_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM7_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM8_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM8_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM8_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM8_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM9_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM9_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM9_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM9_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM10_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM10_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM10_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM10_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM11_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM11_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM11_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM11_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM12_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM12_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM12_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM12_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM13_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM13_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM13_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM13_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM14_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM14_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM14_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM14_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM15_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM15_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM15_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM15_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM16_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM16_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_PICKUP_ITEM16_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_PICKUP_ITEM16_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Examines // Examines
{ ID_EXAMINE1, 4, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE1, 4, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE2, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE2, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE3, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE3, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE4, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE4, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE5, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE5, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE6, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE6, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE7, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE7, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE8, 14, 0.5f, EulerAngles::Zero, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE8, 14, 0.5f, EulerAngles::Identity, OPT_EXAMINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Examines combos // Examines combos
{ ID_EXAMINE1_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE1_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE1_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE1_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE2_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE2_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE2_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE2_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE3_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE3_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE3_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE3_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE4_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE4_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE4_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE4_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE5_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE5_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE5_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE5_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE6_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE6_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE6_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE6_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE7_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE7_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE7_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE7_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE8_COMBO1, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE8_COMBO1, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
{ ID_EXAMINE8_COMBO2, 14, 0.5f, EulerAngles::Zero, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y }, { ID_EXAMINE8_COMBO2, 14, 0.5f, EulerAngles::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
}; };
CombineList CombineTable[MAX_COMBINES] = CombineList CombineTable[MAX_COMBINES] =

View file

@ -16,7 +16,7 @@ namespace TEN::Hud
Vector2 Position = Vector2::Zero; Vector2 Position = Vector2::Zero;
Vector2 Origin = Vector2::Zero; Vector2 Origin = Vector2::Zero;
Vector2 Target = Vector2::Zero; Vector2 Target = Vector2::Zero;
EulerAngles Orientation = EulerAngles::Zero; EulerAngles Orientation = EulerAngles::Identity;
float Life = 0.0f; float Life = 0.0f;
float Scale = 0.0f; float Scale = 0.0f;

View file

@ -24,7 +24,7 @@ namespace TEN::Entities::Player
int ProjectedFloorHeight = 0; // Used for primitive offset blend. TODO: Real offset blend feature + object parenting. -- Sezz 2023.09.27 int ProjectedFloorHeight = 0; // Used for primitive offset blend. TODO: Real offset blend feature + object parenting. -- Sezz 2023.09.27
float CalcJumpVelocity = 0; float CalcJumpVelocity = 0;
Pose NextCornerPos = Pose::Zero; Pose NextCornerPos = Pose::Zero;
EulerAngles TargetOrientation = EulerAngles::Zero; EulerAngles TargetOrientation = EulerAngles::Identity;
int WaterSurfaceDist = 0; int WaterSurfaceDist = 0;
short WaterCurrentActive = 0; // Sink number? Often used as bool. short WaterCurrentActive = 0; // Sink number? Often used as bool.

View file

@ -127,7 +127,7 @@ void lara_col_crouch_idle(ItemInfo* item, CollisionInfo* coll)
player.Control.KeepLow = IsInLowSpace(*item, *coll); player.Control.KeepLow = IsInLowSpace(*item, *coll);
player.Control.IsLow = true; player.Control.IsLow = true;
player.Control.MoveAngle = item->Pose.Orientation.y; player.Control.MoveAngle = item->Pose.Orientation.y;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.Height = LARA_HEIGHT_CRAWL; coll->Setup.Height = LARA_HEIGHT_CRAWL;
coll->Setup.ForwardAngle = item->Pose.Orientation.y; coll->Setup.ForwardAngle = item->Pose.Orientation.y;
coll->Setup.LowerFloorBound = CRAWL_STEPUP_HEIGHT; coll->Setup.LowerFloorBound = CRAWL_STEPUP_HEIGHT;

View file

@ -74,9 +74,9 @@ WeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] =
{ {
// No weapon // No weapon
{ {
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
0, 0,
0, 0,
0, 0,
@ -110,7 +110,7 @@ WeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] =
{ {
std::pair(EulerAngles(ANGLE(-80.0f), ANGLE(-60.0f), 0), EulerAngles(ANGLE(80.0f), ANGLE(60.0f), 0)), std::pair(EulerAngles(ANGLE(-80.0f), ANGLE(-60.0f), 0), EulerAngles(ANGLE(80.0f), ANGLE(60.0f), 0)),
std::pair(EulerAngles(ANGLE(-80.0f), ANGLE(-10.0f), 0), EulerAngles(ANGLE(80.0f), ANGLE(10.0f), 0)), std::pair(EulerAngles(ANGLE(-80.0f), ANGLE(-10.0f), 0), EulerAngles(ANGLE(80.0f), ANGLE(10.0f), 0)),
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
ANGLE(10.0f), ANGLE(10.0f),
ANGLE(4.0f), ANGLE(4.0f),
650, 650,
@ -193,9 +193,9 @@ WeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] =
// Flare // Flare
{ {
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Zero, EulerAngles::Zero), std::pair(EulerAngles::Identity, EulerAngles::Identity),
0, 0,
0, 0,
0, 0,
@ -311,7 +311,7 @@ void InitializeNewWeapon(ItemInfo& laraItem)
player.LeftArm.FrameNumber = player.LeftArm.FrameNumber =
player.RightArm.FrameNumber = 0; player.RightArm.FrameNumber = 0;
player.LeftArm.Orientation = player.LeftArm.Orientation =
player.RightArm.Orientation = EulerAngles::Zero; player.RightArm.Orientation = EulerAngles::Identity;
player.LeftArm.Locked = player.LeftArm.Locked =
player.RightArm.Locked = false; player.RightArm.Locked = false;
player.LeftArm.GunFlash = player.LeftArm.GunFlash =
@ -810,7 +810,7 @@ void AimWeapon(ItemInfo& laraItem, ArmInfo& arm, const WeaponInfo& weaponInfo)
{ {
const auto& player = *GetLaraInfo(&laraItem); const auto& player = *GetLaraInfo(&laraItem);
auto targetArmOrient = arm.Locked ? player.TargetArmOrient : EulerAngles::Zero; auto targetArmOrient = arm.Locked ? player.TargetArmOrient : EulerAngles::Identity;
arm.Orientation.InterpolateConstant(targetArmOrient, weaponInfo.AimSpeed); arm.Orientation.InterpolateConstant(targetArmOrient, weaponInfo.AimSpeed);
} }
@ -1037,7 +1037,7 @@ void LaraTargetInfo(ItemInfo& laraItem, const WeaponInfo& weaponInfo)
{ {
player.RightArm.Locked = false; player.RightArm.Locked = false;
player.LeftArm.Locked = false; player.LeftArm.Locked = false;
player.TargetArmOrient = EulerAngles::Zero; player.TargetArmOrient = EulerAngles::Identity;
return; return;
} }

View file

@ -95,7 +95,7 @@ void ReadyFlare(ItemInfo& laraItem)
player.Control.HandStatus = HandStatus::Free; player.Control.HandStatus = HandStatus::Free;
player.LeftArm.Orientation = player.LeftArm.Orientation =
player.RightArm.Orientation = EulerAngles::Zero; player.RightArm.Orientation = EulerAngles::Identity;
player.LeftArm.Locked = player.LeftArm.Locked =
player.RightArm.Locked = false; player.RightArm.Locked = false;
player.TargetEntity = nullptr; player.TargetEntity = nullptr;

View file

@ -32,7 +32,7 @@ void lara_as_monkey_idle(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Free; player.Control.Look.Mode = LookMode::Free;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);
@ -182,7 +182,7 @@ void lara_as_monkey_forward(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Horizontal; player.Control.Look.Mode = LookMode::Horizontal;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);
@ -261,7 +261,7 @@ void lara_as_monkey_back(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Horizontal; player.Control.Look.Mode = LookMode::Horizontal;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);
@ -334,7 +334,7 @@ void lara_as_monkey_shimmy_left(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Vertical; player.Control.Look.Mode = LookMode::Vertical;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);
@ -410,7 +410,7 @@ void lara_as_monkey_shimmy_right(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Vertical; player.Control.Look.Mode = LookMode::Vertical;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);
@ -510,7 +510,7 @@ void lara_as_monkey_turn_left(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Vertical; player.Control.Look.Mode = LookMode::Vertical;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);
@ -600,7 +600,7 @@ void lara_as_monkey_turn_right(ItemInfo* item, CollisionInfo* coll)
auto& player = GetLaraInfo(*item); auto& player = GetLaraInfo(*item);
player.Control.Look.Mode = LookMode::Vertical; player.Control.Look.Mode = LookMode::Vertical;
player.ExtraTorsoRot = EulerAngles::Zero; player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.EnableObjectPush = false; coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false; coll->Setup.EnableSpasm = false;
Camera.targetElevation = -ANGLE(5.0f); Camera.targetElevation = -ANGLE(5.0f);

View file

@ -359,7 +359,7 @@ void ReadyShotgun(ItemInfo& laraItem, LaraWeaponType weaponType)
player.Control.HandStatus = HandStatus::WeaponReady; player.Control.HandStatus = HandStatus::WeaponReady;
player.TargetEntity = nullptr; player.TargetEntity = nullptr;
player.LeftArm.Orientation = player.LeftArm.Orientation =
player.RightArm.Orientation = EulerAngles::Zero; player.RightArm.Orientation = EulerAngles::Identity;
player.LeftArm.FrameNumber = player.LeftArm.FrameNumber =
player.RightArm.FrameNumber = 0; player.RightArm.FrameNumber = 0;
player.LeftArm.Locked = player.LeftArm.Locked =
@ -1276,7 +1276,7 @@ void RifleHandler(ItemInfo& laraItem, LaraWeaponType weaponType)
player.ExtraTorsoRot = player.LeftArm.Orientation; player.ExtraTorsoRot = player.LeftArm.Orientation;
if (Camera.oldType != CameraType::Look && player.Control.Look.OpticRange == 0) if (Camera.oldType != CameraType::Look && player.Control.Look.OpticRange == 0)
player.ExtraHeadRot = EulerAngles::Zero; player.ExtraHeadRot = EulerAngles::Identity;
} }
if (weaponType == LaraWeaponType::Revolver) if (weaponType == LaraWeaponType::Revolver)
@ -1459,7 +1459,7 @@ void ExplodeProjectile(ItemInfo& item, const Vector3i& prevPos)
} }
else else
{ {
TriggerShockwave(&item.Pose, 48, 304, 96, 128, 96, 0, 24, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, 48, 304, 96, 128, 96, 0, 24, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
item.Pose.Position.y += CLICK(1.0f / 2); item.Pose.Position.y += CLICK(1.0f / 2);
TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, item.RoomNumber); TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, item.RoomNumber);
@ -1581,7 +1581,7 @@ void HandleProjectile(ItemInfo& projectile, ItemInfo& emitter, const Vector3i& p
TriggerExplosionSparks(meshPtr->pos.Position.x, meshPtr->pos.Position.y, meshPtr->pos.Position.z, 3, -2, 0, projectile.RoomNumber); TriggerExplosionSparks(meshPtr->pos.Position.x, meshPtr->pos.Position.y, meshPtr->pos.Position.z, 3, -2, 0, projectile.RoomNumber);
auto pose = Pose(meshPtr->pos.Position.x, meshPtr->pos.Position.y - 128, meshPtr->pos.Position.z, 0, meshPtr->pos.Orientation.y, 0); auto pose = Pose(meshPtr->pos.Position.x, meshPtr->pos.Position.y - 128, meshPtr->pos.Position.z, 0, meshPtr->pos.Orientation.y, 0);
TriggerShockwave(&pose, 40, 176, 64, 0, 96, 128, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&pose, 40, 176, 64, 0, 96, 128, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
} }
for (int i = 0; i < MAX_COLLIDED_OBJECTS; i++) for (int i = 0; i < MAX_COLLIDED_OBJECTS; i++)

View file

@ -1126,7 +1126,7 @@ struct ArmInfo
int FrameNumber = 0; int FrameNumber = 0;
int FrameBase = 0; int FrameBase = 0;
EulerAngles Orientation = EulerAngles::Zero; EulerAngles Orientation = EulerAngles::Identity;
bool Locked = false; bool Locked = false;
int GunFlash = 0; int GunFlash = 0;
@ -1180,8 +1180,8 @@ struct LaraCountData
struct LookControlData struct LookControlData
{ {
LookMode Mode = LookMode::None; LookMode Mode = LookMode::None;
EulerAngles Orientation = EulerAngles::Zero; EulerAngles Orientation = EulerAngles::Identity;
EulerAngles TurnRate = EulerAngles::Zero; EulerAngles TurnRate = EulerAngles::Identity;
short OpticRange = 0; short OpticRange = 0;
bool IsUsingBinoculars = false; bool IsUsingBinoculars = false;
@ -1346,9 +1346,9 @@ struct LaraInfo
TorchData Torch = {}; TorchData Torch = {};
CarriedWeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] = {}; // TODO: Move to WeaponControlData. CarriedWeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] = {}; // TODO: Move to WeaponControlData.
EulerAngles ExtraHeadRot = EulerAngles::Zero; EulerAngles ExtraHeadRot = EulerAngles::Identity;
EulerAngles ExtraTorsoRot = EulerAngles::Zero; EulerAngles ExtraTorsoRot = EulerAngles::Identity;
EulerAngles TargetArmOrient = EulerAngles::Zero; EulerAngles TargetArmOrient = EulerAngles::Identity;
ArmInfo LeftArm = {}; ArmInfo LeftArm = {};
ArmInfo RightArm = {}; ArmInfo RightArm = {};

View file

@ -382,7 +382,7 @@ bool TestLaraHangJumpUp(ItemInfo* item, CollisionInfo* coll)
item->Animation.Velocity.y = 0; item->Animation.Velocity.y = 0;
item->Animation.IsAirborne = false; item->Animation.IsAirborne = false;
lara->Control.HandStatus = HandStatus::Busy; lara->Control.HandStatus = HandStatus::Busy;
lara->ExtraTorsoRot = EulerAngles::Zero; lara->ExtraTorsoRot = EulerAngles::Identity;
return true; return true;
} }

View file

@ -102,7 +102,7 @@ static void ReadyPistols(ItemInfo& laraItem, LaraWeaponType weaponType)
player.LeftArm.FrameNumber = player.LeftArm.FrameNumber =
player.RightArm.FrameNumber = 0; player.RightArm.FrameNumber = 0;
player.LeftArm.Orientation = player.LeftArm.Orientation =
player.RightArm.Orientation = EulerAngles::Zero; player.RightArm.Orientation = EulerAngles::Identity;
player.LeftArm.Locked = player.LeftArm.Locked =
player.RightArm.Locked = false; player.RightArm.Locked = false;
} }
@ -254,7 +254,7 @@ static int AnimateWeaponUndraw(ItemInfo& laraItem, LaraWeaponType weaponType, bo
} }
else if (frame == 0) else if (frame == 0)
{ {
arm.Orientation = EulerAngles::Zero; arm.Orientation = EulerAngles::Identity;
frame = weaponAnimData.RecoilAnim - 1; frame = weaponAnimData.RecoilAnim - 1;
} }
else if (frame > weaponAnimData.Draw1Anim && frame < weaponAnimData.RecoilAnim) else if (frame > weaponAnimData.Draw1Anim && frame < weaponAnimData.RecoilAnim)

View file

@ -83,13 +83,13 @@ struct AnimFrameInterpData
struct BoneMutator struct BoneMutator
{ {
Vector3 Offset = Vector3::Zero; Vector3 Offset = Vector3::Zero;
EulerAngles Rotation = EulerAngles::Zero; EulerAngles Rotation = EulerAngles::Identity;
Vector3 Scale = Vector3::One; Vector3 Scale = Vector3::One;
bool IsEmpty() const bool IsEmpty() const
{ {
return (Offset == Vector3::Zero && return (Offset == Vector3::Zero &&
Rotation == EulerAngles::Zero && Rotation == EulerAngles::Identity &&
Scale == Vector3::One); Scale == Vector3::One);
}; };
}; };

View file

@ -1402,9 +1402,9 @@ namespace TEN::Gui
if (Rings[(int)RingTypes::Ammo].RingActive) if (Rings[(int)RingTypes::Ammo].RingActive)
return; return;
AmmoObjectList[0].Orientation = EulerAngles::Zero; AmmoObjectList[0].Orientation = EulerAngles::Identity;
AmmoObjectList[1].Orientation = EulerAngles::Zero; AmmoObjectList[1].Orientation = EulerAngles::Identity;
AmmoObjectList[2].Orientation = EulerAngles::Zero; AmmoObjectList[2].Orientation = EulerAngles::Identity;
if (options & if (options &
(OPT_CHOOSE_AMMO_UZI | OPT_CHOOSE_AMMO_PISTOLS | OPT_CHOOSE_AMMO_REVOLVER | OPT_CHOOSE_AMMO_CROSSBOW | (OPT_CHOOSE_AMMO_UZI | OPT_CHOOSE_AMMO_PISTOLS | OPT_CHOOSE_AMMO_REVOLVER | OPT_CHOOSE_AMMO_CROSSBOW |
@ -1520,7 +1520,7 @@ namespace TEN::Gui
void GuiController::InsertObjectIntoList(int objectNumber) void GuiController::InsertObjectIntoList(int objectNumber)
{ {
Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].NumObjectsInList].InventoryItem = objectNumber; Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].NumObjectsInList].InventoryItem = objectNumber;
Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].NumObjectsInList].Orientation = EulerAngles::Zero; Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].NumObjectsInList].Orientation = EulerAngles::Identity;
Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].NumObjectsInList].Bright = 32; Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].NumObjectsInList].Bright = 32;
Rings[(int)RingTypes::Inventory].NumObjectsInList++; Rings[(int)RingTypes::Inventory].NumObjectsInList++;
} }
@ -1534,7 +1534,7 @@ namespace TEN::Gui
if (Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].CurrentObjectInList].InventoryItem != objectNumber) if (Rings[(int)RingTypes::Inventory].CurrentObjectList[Rings[(int)RingTypes::Inventory].CurrentObjectInList].InventoryItem != objectNumber)
{ {
Rings[(int)RingTypes::Ammo].CurrentObjectList[Rings[(int)RingTypes::Ammo].NumObjectsInList].InventoryItem = objectNumber; Rings[(int)RingTypes::Ammo].CurrentObjectList[Rings[(int)RingTypes::Ammo].NumObjectsInList].InventoryItem = objectNumber;
Rings[(int)RingTypes::Ammo].CurrentObjectList[Rings[(int)RingTypes::Ammo].NumObjectsInList].Orientation = EulerAngles::Zero; Rings[(int)RingTypes::Ammo].CurrentObjectList[Rings[(int)RingTypes::Ammo].NumObjectsInList].Orientation = EulerAngles::Identity;
Rings[(int)RingTypes::Ammo].CurrentObjectList[Rings[(int)RingTypes::Ammo].NumObjectsInList++].Bright = 32; Rings[(int)RingTypes::Ammo].CurrentObjectList[Rings[(int)RingTypes::Ammo].NumObjectsInList++].Bright = 32;
} }
} }
@ -2737,7 +2737,7 @@ namespace TEN::Gui
void GuiController::SpinBack(EulerAngles& orient) void GuiController::SpinBack(EulerAngles& orient)
{ {
orient.Lerp(EulerAngles::Zero, 1.0f / 8); orient.Lerp(EulerAngles::Identity, 1.0f / 8);
} }
void GuiController::DrawAmmoSelector() void GuiController::DrawAmmoSelector()
@ -3440,7 +3440,7 @@ namespace TEN::Gui
// HACK: Needle is rotated in the draw function. // HACK: Needle is rotated in the draw function.
const auto& invObject = InventoryObjectTable[INV_OBJECT_COMPASS]; const auto& invObject = InventoryObjectTable[INV_OBJECT_COMPASS];
g_Renderer.DrawObjectIn2DSpace(ID_COMPASS_ITEM, POS_2D, EulerAngles::Zero, invObject.Scale1 * 1.5f); g_Renderer.DrawObjectIn2DSpace(ID_COMPASS_ITEM, POS_2D, EulerAngles::Identity, invObject.Scale1 * 1.5f);
} }
void GuiController::DoDiary(ItemInfo* item) void GuiController::DoDiary(ItemInfo* item)

View file

@ -93,7 +93,7 @@ namespace TEN::Gui
struct ObjectList struct ObjectList
{ {
int InventoryItem = 0; int InventoryItem = 0;
EulerAngles Orientation = EulerAngles::Zero; EulerAngles Orientation = EulerAngles::Identity;
unsigned short Bright; unsigned short Bright;
}; };

View file

@ -190,7 +190,7 @@ namespace TEN::Math::Geometry
EulerAngles GetOrientToPoint(const Vector3& origin, const Vector3& target) EulerAngles GetOrientToPoint(const Vector3& origin, const Vector3& target)
{ {
if (origin == target) if (origin == target)
return EulerAngles::Zero; return EulerAngles::Identity;
return EulerAngles(target - origin); return EulerAngles(target - origin);
} }

View file

@ -17,8 +17,8 @@ using namespace TEN::Math;
auto normalizedAxis = axis; auto normalizedAxis = axis;
normalizedAxis.Normalize(); normalizedAxis.Normalize();
Axis = normalizedAxis; _axis = normalizedAxis;
Angle = angle; _angle = angle;
} }
AxisAngle::AxisAngle(const EulerAngles& eulers) AxisAngle::AxisAngle(const EulerAngles& eulers)
@ -34,8 +34,8 @@ using namespace TEN::Math;
axis.Normalize(); axis.Normalize();
float angle = 2.0f * acos(quat.w); float angle = 2.0f * acos(quat.w);
Axis = axis; _axis = axis;
Angle = FROM_RAD(angle); _angle = FROM_RAD(angle);
} }
AxisAngle::AxisAngle(const Matrix& rotMatrix) AxisAngle::AxisAngle(const Matrix& rotMatrix)
@ -54,23 +54,23 @@ using namespace TEN::Math;
auto rotAxis = Vector3::TransformNormal(Vector3::Right, rotMatrix); auto rotAxis = Vector3::TransformNormal(Vector3::Right, rotMatrix);
// Check if rotation axis and unit axis are pointing in opposite directions. // Check if rotation axis and unit axis are pointing in opposite directions.
float dot = rotAxis.Dot(Axis); float dot = rotAxis.Dot(_axis);
if (dot < 0.0f) if (dot < 0.0f)
{ {
// Negate angle and unit axis to ensure the angle stays within [0, PI] range. // Negate angle and unit axis to ensure angle stays within [0, PI] range.
Angle = -Angle; _angle = -_angle;
Axis = -Axis; _axis = -_axis;
} }
} }
Vector3 AxisAngle::GetAxis() const Vector3 AxisAngle::GetAxis() const
{ {
return Axis; return _axis;
} }
short AxisAngle::GetAngle() const short AxisAngle::GetAngle() const
{ {
return Angle; return _angle;
} }
void AxisAngle::SetAxis(const Vector3& axis) void AxisAngle::SetAxis(const Vector3& axis)
@ -78,12 +78,12 @@ using namespace TEN::Math;
auto normalizedAxis = axis; auto normalizedAxis = axis;
normalizedAxis.Normalize(); normalizedAxis.Normalize();
Axis = normalizedAxis; _axis = normalizedAxis;
} }
void AxisAngle::SetAngle(short angle) void AxisAngle::SetAngle(short angle)
{ {
Angle = angle; _angle = angle;
} }
void AxisAngle::Slerp(const AxisAngle& axisAngleTo, float alpha) void AxisAngle::Slerp(const AxisAngle& axisAngleTo, float alpha)
@ -118,7 +118,7 @@ using namespace TEN::Math;
Vector3 AxisAngle::ToDirection() const Vector3 AxisAngle::ToDirection() const
{ {
// TODO: Works, but need to find a way without EulerAngles. -- Sezz 2023.03.08 // TODO: Works, but need to find a way without EulerAngles. -- Sezz 2023.03.08
auto refDir = Geometry::RotatePoint(Vector3::Right, EulerAngles(Axis)); auto refDir = Geometry::RotatePoint(Vector3::Right, EulerAngles(_axis));
return Geometry::RotatePoint(refDir, *this); return Geometry::RotatePoint(refDir, *this);
} }
@ -129,17 +129,17 @@ using namespace TEN::Math;
Quaternion AxisAngle::ToQuaternion() const Quaternion AxisAngle::ToQuaternion() const
{ {
return Quaternion::CreateFromAxisAngle(Axis, TO_RAD(Angle)); return Quaternion::CreateFromAxisAngle(_axis, TO_RAD(_angle));
} }
Matrix AxisAngle::ToRotationMatrix() const Matrix AxisAngle::ToRotationMatrix() const
{ {
return Matrix::CreateFromAxisAngle(Axis, TO_RAD(Angle)); return Matrix::CreateFromAxisAngle(_axis, TO_RAD(_angle));
} }
bool AxisAngle::operator ==(const AxisAngle& axisAngle) const bool AxisAngle::operator ==(const AxisAngle& axisAngle) const
{ {
return ((Axis == axisAngle.GetAxis()) && (Angle == axisAngle.GetAngle())); return ((_axis == axisAngle.GetAxis()) && (_angle == axisAngle.GetAngle()));
} }
bool AxisAngle::operator !=(const AxisAngle& axisAngle) const bool AxisAngle::operator !=(const AxisAngle& axisAngle) const
@ -149,8 +149,8 @@ using namespace TEN::Math;
AxisAngle& AxisAngle::operator =(const AxisAngle& axisAngle) AxisAngle& AxisAngle::operator =(const AxisAngle& axisAngle)
{ {
Axis = axisAngle.GetAxis(); _axis = axisAngle.GetAxis();
Angle = axisAngle.GetAngle(); _angle = axisAngle.GetAngle();
return *this; return *this;
} }

View file

@ -8,8 +8,8 @@ class EulerAngles;
{ {
private: private:
// Members // Members
Vector3 Axis = Vector3::Backward; Vector3 _axis = Vector3::Backward;
short Angle = 0; short _angle = 0;
public: public:
// Constants // Constants

View file

@ -10,7 +10,7 @@ using namespace TEN::Math;
//namespace TEN::Math //namespace TEN::Math
//{ //{
const EulerAngles EulerAngles::Zero = EulerAngles(0, 0, 0); const EulerAngles EulerAngles::Identity = EulerAngles(0, 0, 0);
EulerAngles::EulerAngles(const Vector3& dir) EulerAngles::EulerAngles(const Vector3& dir)
{ {

View file

@ -12,7 +12,7 @@
short z = 0; short z = 0;
// Constants // Constants
static const EulerAngles Zero; // TODO: Should be "Identity", not "Zero". static const EulerAngles Identity;
// Constructors // Constructors
constexpr EulerAngles() {}; constexpr EulerAngles() {};

View file

@ -9,7 +9,7 @@ using namespace TEN::Math;
//namespace TEN::Math //namespace TEN::Math
//{ //{
const Pose Pose::Zero = Pose(Vector3i::Zero, EulerAngles::Zero); const Pose Pose::Zero = Pose(Vector3i::Zero, EulerAngles::Identity);
Pose::Pose() Pose::Pose()
{ {

View file

@ -9,7 +9,7 @@
public: public:
// Members // Members
Vector3i Position = Vector3i::Zero; Vector3i Position = Vector3i::Zero;
EulerAngles Orientation = EulerAngles::Zero; EulerAngles Orientation = EulerAngles::Identity;
// Constants // Constants
static const Pose Zero; static const Pose Zero;

View file

@ -247,29 +247,29 @@ namespace TEN::Entities::Effects
case MissileType::Demigod3Single: case MissileType::Demigod3Single:
case MissileType::Demigod3Radial: case MissileType::Demigod3Radial:
TriggerShockwave(&fx.pos, 32, 160, 64, 0, 96, 128, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 0, 96, 128, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
case MissileType::Demigod2: case MissileType::Demigod2:
TriggerShockwave(&fx.pos, 32, 160, 64, 128, 64, 0, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 128, 64, 0, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
case MissileType::Harpy: case MissileType::Harpy:
TriggerShockwave(&fx.pos, 32, 160, 64, 128, 128, 0, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 128, 128, 0, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
case MissileType::CrocgodMutant: case MissileType::CrocgodMutant:
TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, fx.roomNumber); TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, fx.roomNumber);
TriggerShockwave(&fx.pos, 48, 240, 64, 128, 96, 0, 24, EulerAngles::Zero, 15, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 64, 128, 96, 0, 24, EulerAngles::Identity, 15, true, false, false, (int)ShockwaveStyle::Normal);
fx.pos.Position.y -= 128; fx.pos.Position.y -= 128;
TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Zero, 15, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Identity, 15, true, false, false, (int)ShockwaveStyle::Normal);
fx.pos.Position.y += 256; fx.pos.Position.y += 256;
TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Zero, 15, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Identity, 15, true, false, false, (int)ShockwaveStyle::Normal);
break; break;
case MissileType::ClawMutantPlasma: case MissileType::ClawMutantPlasma:
@ -283,7 +283,7 @@ namespace TEN::Entities::Effects
break; break;
default: default:
TriggerShockwave(&fx.pos, 32, 160, 64, 0, 128, 64, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 0, 128, 64, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
} }
@ -298,7 +298,7 @@ namespace TEN::Entities::Effects
switch ((MissileType)fx.flag1) switch ((MissileType)fx.flag1)
{ {
case MissileType::SethLarge: case MissileType::SethLarge:
TriggerShockwave(&fx.pos, 48, 240, 64, 0, 128, 64, 24, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 64, 0, 128, 64, 24, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 2, fx.roomNumber); TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 2, fx.roomNumber);
ItemCustomBurn(LaraItem, Vector3(0.0f, 0.8f, 0.1f), Vector3(0.0f, 0.9f, 0.8f)); ItemCustomBurn(LaraItem, Vector3(0.0f, 0.8f, 0.1f), Vector3(0.0f, 0.9f, 0.8f));
break; break;
@ -315,12 +315,12 @@ namespace TEN::Entities::Effects
case MissileType::Demigod3Single: case MissileType::Demigod3Single:
case MissileType::Demigod3Radial: case MissileType::Demigod3Radial:
TriggerShockwave(&fx.pos, 32, 160, 64, 0, 96, 128, 16, EulerAngles::Zero, 10, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 0, 96, 128, 16, EulerAngles::Identity, 10, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
case MissileType::Demigod2: case MissileType::Demigod2:
TriggerShockwave(&fx.pos, 32, 160, 64, 128, 64, 0, 16, EulerAngles::Zero, 5, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 128, 64, 0, 16, EulerAngles::Identity, 5, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
@ -336,24 +336,24 @@ namespace TEN::Entities::Effects
break; break;
case MissileType::Harpy: case MissileType::Harpy:
TriggerShockwave(&fx.pos, 32, 160, 64, 128, 128, 0, 16, EulerAngles::Zero, 3, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 32, 160, 64, 128, 128, 0, 16, EulerAngles::Identity, 3, true, false, false, (int)ShockwaveStyle::Normal);
BubblesShatterFunction(&fx, 0, -32); BubblesShatterFunction(&fx, 0, -32);
break; break;
case MissileType::CrocgodMutant: case MissileType::CrocgodMutant:
TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, fx.roomNumber); TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, fx.roomNumber);
TriggerShockwave(&fx.pos, 48, 240, 64, 128, 96, 0, 24, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 64, 128, 96, 0, 24, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
fx.pos.Position.y -= 128; fx.pos.Position.y -= 128;
TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
fx.pos.Position.y += 256; fx.pos.Position.y += 256;
TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 48, 240, 48, 128, 112, 0, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
ItemBurn(LaraItem); ItemBurn(LaraItem);
break; break;
default: default:
TriggerShockwave(&fx.pos, 24, 88, 48, 0, 128, 64, 16, EulerAngles::Zero, 1, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx.pos, 24, 88, 48, 0, 128, 64, 16, EulerAngles::Identity, 1, true, false, false, (int)ShockwaveStyle::Normal);
break; break;
} }

View file

@ -70,7 +70,7 @@ namespace TEN::Entities::Generic
// Set mutators to EulerAngles identity by default. // Set mutators to EulerAngles identity by default.
for (auto& mutator : item.Model.Mutators) for (auto& mutator : item.Model.Mutators)
mutator.Rotation = EulerAngles::Zero; mutator.Rotation = EulerAngles::Identity;
} }
void FallingBlockCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) void FallingBlockCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)

View file

@ -69,8 +69,8 @@ namespace TEN::Entities::Creatures::TR1
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature.MuzzleFlash[0].Delay != 0) if (creature.MuzzleFlash[0].Delay != 0)
creature.MuzzleFlash[0].Delay--; creature.MuzzleFlash[0].Delay--;

View file

@ -66,8 +66,8 @@ namespace TEN::Entities::Creatures::TR1
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature.MuzzleFlash[0].Delay != 0) if (creature.MuzzleFlash[0].Delay != 0)
creature.MuzzleFlash[0].Delay--; creature.MuzzleFlash[0].Delay--;

View file

@ -121,8 +121,8 @@ namespace TEN::Entities::Creatures::TR1
auto& creature = *GetCreatureInfo(&item); auto& creature = *GetCreatureInfo(&item);
auto& skateItem = g_Level.Items[item.ItemFlags[0]]; auto& skateItem = g_Level.Items[item.ItemFlags[0]];
short headingAngle = 0; short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (skateItem.Status & ITEM_INVISIBLE) if (skateItem.Status & ITEM_INVISIBLE)
{ {

View file

@ -88,7 +88,7 @@ namespace TEN::Entities::Creatures::TR1
auto& creature = *GetCreatureInfo(&item); auto& creature = *GetCreatureInfo(&item);
short headingAngle = 0; short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
if (item.HitPoints <= 0) if (item.HitPoints <= 0)
{ {

View file

@ -59,8 +59,8 @@ namespace TEN::Entities::Creatures::TR1
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
AI_INFO ai; AI_INFO ai;
int timer = creature->Flags & NATLA_TIMER; int timer = creature->Flags & NATLA_TIMER;

View file

@ -112,7 +112,7 @@ namespace TEN::Entities::Creatures::TR1
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
if (item.HitPoints <= 0) if (item.HitPoints <= 0)
{ {

View file

@ -38,8 +38,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;
@ -252,8 +252,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;

View file

@ -84,8 +84,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;

View file

@ -217,8 +217,8 @@ namespace TEN::Entities::Creatures::TR2
auto* creature = GetCreatureInfo(item); auto* creature = GetCreatureInfo(item);
short headingAngle = 0; short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
bool isPlayerAlive = ((creature->Enemy != nullptr) && creature->Enemy->IsLara() && (creature->Enemy->HitPoints > 0)); bool isPlayerAlive = ((creature->Enemy != nullptr) && creature->Enemy->IsLara() && (creature->Enemy->HitPoints > 0));

View file

@ -37,8 +37,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;

View file

@ -67,8 +67,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
auto pos = GetJointPosition(item, WorkerFlamethrowerBite.BoneID, WorkerFlamethrowerBite.Position); auto pos = GetJointPosition(item, WorkerFlamethrowerBite.BoneID, WorkerFlamethrowerBite.Position);

View file

@ -54,8 +54,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;

View file

@ -54,8 +54,8 @@ namespace TEN::Entities::Creatures::TR2
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;

View file

@ -92,7 +92,7 @@ namespace TEN::Entities::Creatures::TR3
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto headOrient = EulerAngles::Zero; auto headOrient = EulerAngles::Identity;
if (item.HitPoints <= 0) if (item.HitPoints <= 0)
{ {

View file

@ -308,7 +308,7 @@ namespace TEN::Entities::Creatures::TR3
static auto targetPos = Vector3i::Zero; static auto targetPos = Vector3i::Zero;
auto headOrient = EulerAngles::Zero; auto headOrient = EulerAngles::Identity;
short headingAngle = 0; short headingAngle = 0;
short prevYOrient = 0; short prevYOrient = 0;

View file

@ -277,8 +277,8 @@ namespace TEN::Entities::Creatures::TR3
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (item->HitPoints <= 0) if (item->HitPoints <= 0)
{ {
@ -495,8 +495,8 @@ namespace TEN::Entities::Creatures::TR3
case SHIVA_STATE_KILL: case SHIVA_STATE_KILL:
creature.MaxTurn = 0; creature.MaxTurn = 0;
extraHeadRot = EulerAngles::Zero; extraHeadRot = EulerAngles::Identity;
extraTorsoRot = EulerAngles::Zero; extraTorsoRot = EulerAngles::Identity;
if (item->Animation.FrameNumber == GetFrameIndex(item, 10) || if (item->Animation.FrameNumber == GetFrameIndex(item, 10) ||
item->Animation.FrameNumber == GetFrameIndex(item, 21) || item->Animation.FrameNumber == GetFrameIndex(item, 21) ||

View file

@ -179,8 +179,8 @@ namespace TEN::Entities::Creatures::TR3
int targetAngle = 0; int targetAngle = 0;
int targetDistance = 0; int targetDistance = 0;
auto jointHeadRot = EulerAngles::Zero; auto jointHeadRot = EulerAngles::Identity;
auto jointTorsoRot = EulerAngles::Zero; auto jointTorsoRot = EulerAngles::Identity;
if (item.BoxNumber != NO_BOX && (g_Level.Boxes[item.BoxNumber].flags & BLOCKED) && item.HitPoints > 0) if (item.BoxNumber != NO_BOX && (g_Level.Boxes[item.BoxNumber].flags & BLOCKED) && item.HitPoints > 0)
{ {

View file

@ -301,8 +301,8 @@ namespace TEN::Entities::Creatures::TR3
auto& creature = *GetCreatureInfo(&item); auto& creature = *GetCreatureInfo(&item);
short headingAngle = 0; short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (item.HitPoints <= 0) if (item.HitPoints <= 0)
{ {

View file

@ -61,8 +61,8 @@ namespace TEN::Entities::Creatures::TR3
short angle = 0; short angle = 0;
short tilt = 0; short tilt = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
auto pos = GetJointPosition(item, FlamethrowerBite); auto pos = GetJointPosition(item, FlamethrowerBite);
int randomInt = GetRandomControl(); int randomInt = GetRandomControl();

View file

@ -103,8 +103,8 @@ namespace TEN::Entities::Creatures::TR3
short angle = 0; short angle = 0;
short tilt = 0; short tilt = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (item->HitPoints <= 0) if (item->HitPoints <= 0)
{ {

View file

@ -65,7 +65,7 @@ namespace TEN::Entities::Creatures::TR3
short angle = 0; short angle = 0;
short tilt = 0; short tilt = 0;
short head = 0; short head = 0;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0) if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--; creature->MuzzleFlash[0].Delay--;

View file

@ -75,7 +75,7 @@ namespace TEN::Entities::Creatures::TR3
short angle = 0; short angle = 0;
short tilt = 0; short tilt = 0;
short head = 0; short head = 0;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (item->BoxNumber != NO_BOX && (g_Level.Boxes[item->BoxNumber].flags & BLOCKED)) if (item->BoxNumber != NO_BOX && (g_Level.Boxes[item->BoxNumber].flags & BLOCKED))
{ {

View file

@ -79,7 +79,7 @@ namespace TEN::Entities::Creatures::TR3
short headingAngle = 0; short headingAngle = 0;
short tiltAngle = 0; short tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
if (item->HitPoints <= 0) if (item->HitPoints <= 0)
{ {

View file

@ -405,8 +405,8 @@ namespace TEN::Entities::Creatures::TR3
short angle = 0; short angle = 0;
short tilt = 0; short tilt = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
if (item->HitPoints <= 0) if (item->HitPoints <= 0)
{ {

View file

@ -4,9 +4,9 @@ namespace TEN::Entities::Vehicles
{ {
struct BigGunInfo struct BigGunInfo
{ {
EulerAngles BaseOrientation = EulerAngles::Zero; EulerAngles BaseOrientation = EulerAngles::Identity;
EulerAngles TurnRate = EulerAngles::Zero; EulerAngles TurnRate = EulerAngles::Identity;
EulerAngles Rotation = EulerAngles::Zero; EulerAngles Rotation = EulerAngles::Identity;
short BarrelRotation = 0; short BarrelRotation = 0;
int XOrientFrame = 0; int XOrientFrame = 0;

View file

@ -171,7 +171,7 @@ namespace TEN::Entities::TR4
short inner = vel >= 0 ? 32 : 640; short inner = vel >= 0 ? 32 : 640;
short outer = vel >= 0 ? 160 : 512; short outer = vel >= 0 ? 160 : 512;
TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles(ANGLE(45.0f), 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles(ANGLE(45.0f), 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal);
TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles(ANGLE(90.0f), 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles(ANGLE(90.0f), 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal);
TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles(ANGLE(135.0f), 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, inner, outer, vel, byteColor.x, byteColor.y, byteColor.z, 24, EulerAngles(ANGLE(135.0f), 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal);

View file

@ -130,7 +130,7 @@ namespace TEN::Entities::TR4
auto* creature = GetCreatureInfo(item); auto* creature = GetCreatureInfo(item);
short angle = 0; short angle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
if (item->HitPoints <= 0) if (item->HitPoints <= 0)
{ {

View file

@ -118,8 +118,8 @@ namespace TEN::Entities::TR4
short headingAngle = 0; short headingAngle = 0;
short boneAngle = 0; short boneAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
AI_INFO ai; AI_INFO ai;

View file

@ -706,11 +706,11 @@ namespace TEN::Entities::TR4
else else
pos.y = height - CLICK(0.5f); pos.y = height - CLICK(0.5f);
TriggerShockwave((Pose*)&pos, 24, 88, 256, 128, 128, 128, 32, EulerAngles::Zero, 8, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave((Pose*)&pos, 24, 88, 256, 128, 128, 128, 32, EulerAngles::Identity, 8, true, false, false, (int)ShockwaveStyle::Normal);
TriggerHammerSmoke(pos.x, pos.y + 128, pos.z, 8); TriggerHammerSmoke(pos.x, pos.y + 128, pos.z, 8);
pos.y -= 64; pos.y -= 64;
TriggerShockwave((Pose*)&pos, 24, 88, 200, 128, 128, 128, 32, EulerAngles::Zero, 8, true, false, true, (int)ShockwaveStyle::Normal); TriggerShockwave((Pose*)&pos, 24, 88, 200, 128, 128, 128, 32, EulerAngles::Identity, 8, true, false, true, (int)ShockwaveStyle::Normal);
auto lightColor = Color(1.0f, 0.4f, 0.2f); auto lightColor = Color(1.0f, 0.4f, 0.2f);
TriggerDynamicLight(pos.ToVector3(), lightColor, 0.1f); TriggerDynamicLight(pos.ToVector3(), lightColor, 0.1f);

View file

@ -272,8 +272,8 @@ namespace TEN::Entities::TR4
auto* creature = GetCreatureInfo(item); auto* creature = GetCreatureInfo(item);
short headingAngle = 0; short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
int frameNumber; int frameNumber;

View file

@ -200,8 +200,8 @@ namespace TEN::Entities::Creatures::TR5
auto& creature = *GetCreatureInfo(&item); auto& creature = *GetCreatureInfo(&item);
short headingAngle = 0; short headingAngle = 0;
auto headOrient = EulerAngles::Zero; auto headOrient = EulerAngles::Identity;
auto torsoOrient = EulerAngles::Zero; auto torsoOrient = EulerAngles::Identity;
AI_INFO ai; AI_INFO ai;
CreatureAIInfo(&item, &ai); CreatureAIInfo(&item, &ai);

View file

@ -195,8 +195,8 @@ namespace TEN::Entities::Creatures::TR5
short headingAngle = 0; short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero; auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Zero; auto extraTorsoRot = EulerAngles::Identity;
AI_INFO ai; AI_INFO ai;
if (item->HitPoints <= 0) if (item->HitPoints <= 0)

View file

@ -601,7 +601,7 @@ namespace TEN::Entities::Creatures::TR5
TriggerExplosionSparks(item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, 3, -2, 2, item.RoomNumber); TriggerExplosionSparks(item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, 3, -2, 2, item.RoomNumber);
TriggerExplosionSparks(item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, 2, 0, 2, item.RoomNumber); TriggerExplosionSparks(item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, 2, 0, 2, item.RoomNumber);
TriggerShockwave(&item.Pose, 32, 160, 64, 0, 128, 64, 36, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, 32, 160, 64, 0, 128, 64, 36, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
TriggerShockwave(&item.Pose, 32, 160, 64, 0, 128, 64, 36, EulerAngles(0x3000, 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, 32, 160, 64, 0, 128, 64, 36, EulerAngles(0x3000, 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal);
TriggerShockwave(&item.Pose, 32, 160, 64, 0, 128, 64, 36, EulerAngles(0x6000, 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&item.Pose, 32, 160, 64, 0, 128, 64, 36, EulerAngles(0x6000, 0.0f, 0.0f), 0, true, false, false, (int)ShockwaveStyle::Normal);

View file

@ -587,12 +587,12 @@ namespace TEN::Entities::Creatures::TR5
if (item->ItemFlags[0]) if (item->ItemFlags[0])
item->ItemFlags[0]--; item->ItemFlags[0]--;
TriggerShockwave(&Pose(pos1), 16, 160, 96, 0, color / 2, color, 48, EulerAngles::Zero, 1, true, false, true, (int)ShockwaveStyle::Normal); TriggerShockwave(&Pose(pos1), 16, 160, 96, 0, color / 2, color, 48, EulerAngles::Identity, 1, true, false, true, (int)ShockwaveStyle::Normal);
TriggerRomanStatueShockwaveAttackSparks(pos1.x, pos1.y, pos1.z, 128, 64, 0, 128); TriggerRomanStatueShockwaveAttackSparks(pos1.x, pos1.y, pos1.z, 128, 64, 0, 128);
pos1.y -= 64; pos1.y -= 64;
TriggerShockwave(&Pose(pos1), 16, 160, 64, 0, color / 2, color, 48, EulerAngles::Zero, 1, true, false, true, (int)ShockwaveStyle::Normal); TriggerShockwave(&Pose(pos1), 16, 160, 64, 0, color / 2, color, 48, EulerAngles::Identity, 1, true, false, true, (int)ShockwaveStyle::Normal);
auto lightColor = Color(0.4f, 0.3f, 0.0f); auto lightColor = Color(0.4f, 0.3f, 0.0f);
TriggerDynamicLight(pos.ToVector3(), lightColor, 0.04f); TriggerDynamicLight(pos.ToVector3(), lightColor, 0.04f);

View file

@ -120,9 +120,9 @@ void MissileControl(short itemNumber)
{ {
TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber);
fx->pos.Position.y -= 64; fx->pos.Position.y -= 64;
TriggerShockwave(&fx->pos, 48, 256, 64, 64, 128, 0, 24, EulerAngles::Zero, 1, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx->pos, 48, 256, 64, 64, 128, 0, 24, EulerAngles::Identity, 1, true, false, false, (int)ShockwaveStyle::Normal);
fx->pos.Position.y -= 128; fx->pos.Position.y -= 128;
TriggerShockwave(&fx->pos, 48, 256, 48, 64, 128, 0, 24, EulerAngles::Zero, 1, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx->pos, 48, 256, 48, 64, 128, 0, 24, EulerAngles::Identity, 1, true, false, false, (int)ShockwaveStyle::Normal);
} }
else if (fx->flag1 == 2) else if (fx->flag1 == 2)
{ {
@ -133,7 +133,7 @@ void MissileControl(short itemNumber)
else else
{ {
TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber);
TriggerShockwave(&fx->pos, 48, 240, 48, 128, 64, 0, 24, EulerAngles::Zero, 2, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx->pos, 48, 240, 48, 128, 64, 0, 24, EulerAngles::Identity, 2, true, false, false, (int)ShockwaveStyle::Normal);
} }
KillEffect(itemNumber); KillEffect(itemNumber);
@ -147,9 +147,9 @@ void MissileControl(short itemNumber)
// ROMAN_GOD hit effect // ROMAN_GOD hit effect
TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber);
fx->pos.Position.y -= 64; fx->pos.Position.y -= 64;
TriggerShockwave(&fx->pos, 48, 256, 64, 0, 128, 64, 24, EulerAngles::Zero, 1, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx->pos, 48, 256, 64, 0, 128, 64, 24, EulerAngles::Identity, 1, true, false, false, (int)ShockwaveStyle::Normal);
fx->pos.Position.y -= 128; fx->pos.Position.y -= 128;
TriggerShockwave(&fx->pos, 48, 256, 48, 0, 128, 64, 24, EulerAngles::Zero, 1, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx->pos, 48, 256, 48, 0, 128, 64, 24, EulerAngles::Identity, 1, true, false, false, (int)ShockwaveStyle::Normal);
KillEffect(itemNumber); KillEffect(itemNumber);
DoDamage(LaraItem, 200); DoDamage(LaraItem, 200);
} }
@ -172,7 +172,7 @@ void MissileControl(short itemNumber)
{ {
// HYDRA hit effect // HYDRA hit effect
TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber);
TriggerShockwave(&fx->pos, 48, 240, 48, 128, 96, 0, 24, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&fx->pos, 48, 240, 48, 128, 96, 0, 24, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
if (LaraItem->HitPoints >= 500) if (LaraItem->HitPoints >= 500)
DoDamage(LaraItem, 300); DoDamage(LaraItem, 300);
else else

View file

@ -139,7 +139,7 @@ void ExplosionControl(short itemNumber)
{ {
TriggerExplosionSparks(CollidedItems[i]->Pose.Position.x, CollidedItems[i]->Pose.Position.y, CollidedItems[i]->Pose.Position.z, 3, -2, 0, CollidedItems[i]->RoomNumber); TriggerExplosionSparks(CollidedItems[i]->Pose.Position.x, CollidedItems[i]->Pose.Position.y, CollidedItems[i]->Pose.Position.z, 3, -2, 0, CollidedItems[i]->RoomNumber);
CollidedItems[i]->Pose.Position.y -= 128; CollidedItems[i]->Pose.Position.y -= 128;
TriggerShockwave(&CollidedItems[i]->Pose, 48, 304, 96, 128, 96, 0, 24, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&CollidedItems[i]->Pose, 48, 304, 96, 128, 96, 0, 24, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
CollidedItems[i]->Pose.Position.y += 128; CollidedItems[i]->Pose.Position.y += 128;
ExplodeItemNode(CollidedItems[i], 0, 0, 80); ExplodeItemNode(CollidedItems[i], 0, 0, 80);
SmashObject(CollidedItems[i]->Index); SmashObject(CollidedItems[i]->Index);
@ -165,7 +165,7 @@ void ExplosionControl(short itemNumber)
{ {
TriggerExplosionSparks(CollidedMeshes[i]->pos.Position.x, CollidedMeshes[i]->pos.Position.y, CollidedMeshes[i]->pos.Position.z, 3, -2, 0, item->RoomNumber); TriggerExplosionSparks(CollidedMeshes[i]->pos.Position.x, CollidedMeshes[i]->pos.Position.y, CollidedMeshes[i]->pos.Position.z, 3, -2, 0, item->RoomNumber);
CollidedMeshes[i]->pos.Position.y -= 128; CollidedMeshes[i]->pos.Position.y -= 128;
TriggerShockwave(&CollidedMeshes[i]->pos, 40, 176, 64, 128, 96, 0, 16, EulerAngles::Zero, 0, true, false, false, (int)ShockwaveStyle::Normal); TriggerShockwave(&CollidedMeshes[i]->pos, 40, 176, 64, 128, 96, 0, 16, EulerAngles::Identity, 0, true, false, false, (int)ShockwaveStyle::Normal);
CollidedMeshes[i]->pos.Position.y += 128; CollidedMeshes[i]->pos.Position.y += 128;
SoundEffect(GetShatterSound(CollidedMeshes[i]->staticNumber), &CollidedMeshes[i]->pos); SoundEffect(GetShatterSound(CollidedMeshes[i]->staticNumber), &CollidedMeshes[i]->pos);
ShatterObject(NULL, CollidedMeshes[i], -128, item->RoomNumber, 0); ShatterObject(NULL, CollidedMeshes[i], -128, item->RoomNumber, 0);

View file

@ -880,7 +880,7 @@ namespace TEN::Renderer
{ {
constexpr auto SCREEN_POS = Vector2(400.0f, 300.0f); constexpr auto SCREEN_POS = Vector2(400.0f, 300.0f);
static EulerAngles orient = EulerAngles::Zero; static EulerAngles orient = EulerAngles::Identity;
static float scaler = 1.2f; static float scaler = 1.2f;
short invItem = g_Gui.GetRing(RingTypes::Inventory).CurrentObjectList[g_Gui.GetRing(RingTypes::Inventory).CurrentObjectInList].InventoryItem; short invItem = g_Gui.GetRing(RingTypes::Inventory).CurrentObjectList[g_Gui.GetRing(RingTypes::Inventory).CurrentObjectInList].InventoryItem;