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
{ 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_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 },
@ -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_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_FLARE_INV_ITEM, 52, 0.8f, EulerAngles::Zero, 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_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::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_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_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_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_COMBO1, 18, 0.5f, EulerAngles::Zero, 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, 14, 0.5f, EulerAngles::Identity, OPT_USE, STRING_MECHANICAL_SCARAB, 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::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_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 },
@ -81,188 +81,188 @@ namespace TEN::Gui
{ ID_DIARY_OPEN, 0, 0.9f, EulerAngles(0, ANGLE(90.0f), 0), 0, 0, 0},
// Puzzles
{ ID_PUZZLE_ITEM1, 14, 0.5f, EulerAngles::Zero, 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_ITEM3, 8, 0.5f, EulerAngles::Zero, 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_ITEM5, 8, 0.5f, EulerAngles::Zero, 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_ITEM7, 8, 0.5f, EulerAngles::Zero, 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_ITEM9, 8, 0.5f, EulerAngles::Zero, 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_ITEM11, 8, 0.5f, EulerAngles::Zero, 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_ITEM13, 8, 0.5f, EulerAngles::Zero, 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_ITEM15, 8, 0.5f, EulerAngles::Zero, 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_ITEM1, 14, 0.5f, EulerAngles::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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
{ 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_COMBO2, 18, 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::Zero, 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_ITEM3_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM6_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM9_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM12_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM15_COMBO1, 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::Zero, 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_COMBO2, 8, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Keys
{ ID_KEY_ITEM1, 14, 0.5f, EulerAngles::Zero, 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_ITEM3, 8, 0.5f, EulerAngles::Zero, 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_ITEM5, 8, 0.5f, EulerAngles::Zero, 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_ITEM7, 8, 0.5f, EulerAngles::Zero, 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_ITEM9, 8, 0.5f, EulerAngles::Zero, 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_ITEM11, 8, 0.5f, EulerAngles::Zero, 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_ITEM13, 8, 0.5f, EulerAngles::Zero, 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_ITEM15, 8, 0.5f, EulerAngles::Zero, 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_ITEM1, 14, 0.5f, EulerAngles::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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
{ 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_COMBO2, 18, 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::Zero, 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_ITEM3_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM6_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM9_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM12_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM15_COMBO1, 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::Zero, 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_COMBO2, 8, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Pickups
{ ID_PICKUP_ITEM1, 8, 0.5f, EulerAngles::Zero, 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_ITEM3, 8, 0.5f, EulerAngles::Zero, 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_ITEM5, 8, 0.5f, EulerAngles::Zero, 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_ITEM7, 8, 0.5f, EulerAngles::Zero, 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_ITEM9, 8, 0.5f, EulerAngles::Zero, 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_ITEM11, 8, 0.5f, EulerAngles::Zero, 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_ITEM13, 8, 0.5f, EulerAngles::Zero, 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_ITEM15, 8, 0.5f, EulerAngles::Zero, 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_ITEM1, 8, 0.5f, EulerAngles::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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
{ 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_COMBO2, 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::Zero, 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_ITEM3_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM6_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM9_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM12_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_ITEM15_COMBO1, 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::Zero, 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_COMBO2, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
// Examines
{ ID_EXAMINE1, 4, 0.5f, EulerAngles::Zero, 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_EXAMINE3, 14, 0.5f, EulerAngles::Zero, 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_EXAMINE5, 14, 0.5f, EulerAngles::Zero, 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_EXAMINE7, 14, 0.5f, EulerAngles::Zero, 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_EXAMINE1, 4, 0.5f, EulerAngles::Identity, 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::Identity, 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::Identity, 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::Identity, 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
{ ID_EXAMINE1_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_EXAMINE4_COMBO1, 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::Zero, 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_COMBO2, 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::Zero, 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_EXAMINE7_COMBO1, 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::Zero, 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_COMBO2, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, 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::Identity, OPT_USE | OPT_COMBINABLE, STRING_LOAD_GAME, NO_JOINT_BITS, INV_ROT_Y },
};
CombineList CombineTable[MAX_COMBINES] =

View file

@ -16,7 +16,7 @@ namespace TEN::Hud
Vector2 Position = Vector2::Zero;
Vector2 Origin = Vector2::Zero;
Vector2 Target = Vector2::Zero;
EulerAngles Orientation = EulerAngles::Zero;
EulerAngles Orientation = EulerAngles::Identity;
float Life = 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
float CalcJumpVelocity = 0;
Pose NextCornerPos = Pose::Zero;
EulerAngles TargetOrientation = EulerAngles::Zero;
EulerAngles TargetOrientation = EulerAngles::Identity;
int WaterSurfaceDist = 0;
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.IsLow = true;
player.Control.MoveAngle = item->Pose.Orientation.y;
player.ExtraTorsoRot = EulerAngles::Zero;
player.ExtraTorsoRot = EulerAngles::Identity;
coll->Setup.Height = LARA_HEIGHT_CRAWL;
coll->Setup.ForwardAngle = item->Pose.Orientation.y;
coll->Setup.LowerFloorBound = CRAWL_STEPUP_HEIGHT;

View file

@ -74,9 +74,9 @@ WeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] =
{
// No weapon
{
std::pair(EulerAngles::Zero, EulerAngles::Zero),
std::pair(EulerAngles::Zero, EulerAngles::Zero),
std::pair(EulerAngles::Zero, EulerAngles::Zero),
std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Identity, EulerAngles::Identity),
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(-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(4.0f),
650,
@ -193,9 +193,9 @@ WeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] =
// Flare
{
std::pair(EulerAngles::Zero, EulerAngles::Zero),
std::pair(EulerAngles::Zero, EulerAngles::Zero),
std::pair(EulerAngles::Zero, EulerAngles::Zero),
std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Identity, EulerAngles::Identity),
std::pair(EulerAngles::Identity, EulerAngles::Identity),
0,
0,
0,
@ -311,7 +311,7 @@ void InitializeNewWeapon(ItemInfo& laraItem)
player.LeftArm.FrameNumber =
player.RightArm.FrameNumber = 0;
player.LeftArm.Orientation =
player.RightArm.Orientation = EulerAngles::Zero;
player.RightArm.Orientation = EulerAngles::Identity;
player.LeftArm.Locked =
player.RightArm.Locked = false;
player.LeftArm.GunFlash =
@ -810,7 +810,7 @@ void AimWeapon(ItemInfo& laraItem, ArmInfo& arm, const WeaponInfo& weaponInfo)
{
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);
}
@ -1037,7 +1037,7 @@ void LaraTargetInfo(ItemInfo& laraItem, const WeaponInfo& weaponInfo)
{
player.RightArm.Locked = false;
player.LeftArm.Locked = false;
player.TargetArmOrient = EulerAngles::Zero;
player.TargetArmOrient = EulerAngles::Identity;
return;
}

View file

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

View file

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

View file

@ -359,7 +359,7 @@ void ReadyShotgun(ItemInfo& laraItem, LaraWeaponType weaponType)
player.Control.HandStatus = HandStatus::WeaponReady;
player.TargetEntity = nullptr;
player.LeftArm.Orientation =
player.RightArm.Orientation = EulerAngles::Zero;
player.RightArm.Orientation = EulerAngles::Identity;
player.LeftArm.FrameNumber =
player.RightArm.FrameNumber = 0;
player.LeftArm.Locked =
@ -1276,7 +1276,7 @@ void RifleHandler(ItemInfo& laraItem, LaraWeaponType weaponType)
player.ExtraTorsoRot = player.LeftArm.Orientation;
if (Camera.oldType != CameraType::Look && player.Control.Look.OpticRange == 0)
player.ExtraHeadRot = EulerAngles::Zero;
player.ExtraHeadRot = EulerAngles::Identity;
}
if (weaponType == LaraWeaponType::Revolver)
@ -1459,7 +1459,7 @@ void ExplodeProjectile(ItemInfo& item, const Vector3i& prevPos)
}
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);
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);
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++)

View file

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

View file

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

View file

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

View file

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

View file

@ -1402,9 +1402,9 @@ namespace TEN::Gui
if (Rings[(int)RingTypes::Ammo].RingActive)
return;
AmmoObjectList[0].Orientation = EulerAngles::Zero;
AmmoObjectList[1].Orientation = EulerAngles::Zero;
AmmoObjectList[2].Orientation = EulerAngles::Zero;
AmmoObjectList[0].Orientation = EulerAngles::Identity;
AmmoObjectList[1].Orientation = EulerAngles::Identity;
AmmoObjectList[2].Orientation = EulerAngles::Identity;
if (options &
(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)
{
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].NumObjectsInList++;
}
@ -1534,7 +1534,7 @@ namespace TEN::Gui
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].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;
}
}
@ -2737,7 +2737,7 @@ namespace TEN::Gui
void GuiController::SpinBack(EulerAngles& orient)
{
orient.Lerp(EulerAngles::Zero, 1.0f / 8);
orient.Lerp(EulerAngles::Identity, 1.0f / 8);
}
void GuiController::DrawAmmoSelector()
@ -3440,7 +3440,7 @@ namespace TEN::Gui
// HACK: Needle is rotated in the draw function.
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)

View file

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

View file

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

View file

@ -17,8 +17,8 @@ using namespace TEN::Math;
auto normalizedAxis = axis;
normalizedAxis.Normalize();
Axis = normalizedAxis;
Angle = angle;
_axis = normalizedAxis;
_angle = angle;
}
AxisAngle::AxisAngle(const EulerAngles& eulers)
@ -34,8 +34,8 @@ using namespace TEN::Math;
axis.Normalize();
float angle = 2.0f * acos(quat.w);
Axis = axis;
Angle = FROM_RAD(angle);
_axis = axis;
_angle = FROM_RAD(angle);
}
AxisAngle::AxisAngle(const Matrix& rotMatrix)
@ -54,23 +54,23 @@ using namespace TEN::Math;
auto rotAxis = Vector3::TransformNormal(Vector3::Right, rotMatrix);
// 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)
{
// Negate angle and unit axis to ensure the angle stays within [0, PI] range.
Angle = -Angle;
Axis = -Axis;
// Negate angle and unit axis to ensure angle stays within [0, PI] range.
_angle = -_angle;
_axis = -_axis;
}
}
Vector3 AxisAngle::GetAxis() const
{
return Axis;
return _axis;
}
short AxisAngle::GetAngle() const
{
return Angle;
return _angle;
}
void AxisAngle::SetAxis(const Vector3& axis)
@ -78,12 +78,12 @@ using namespace TEN::Math;
auto normalizedAxis = axis;
normalizedAxis.Normalize();
Axis = normalizedAxis;
_axis = normalizedAxis;
}
void AxisAngle::SetAngle(short angle)
{
Angle = angle;
_angle = angle;
}
void AxisAngle::Slerp(const AxisAngle& axisAngleTo, float alpha)
@ -118,7 +118,7 @@ using namespace TEN::Math;
Vector3 AxisAngle::ToDirection() const
{
// 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);
}
@ -129,17 +129,17 @@ using namespace TEN::Math;
Quaternion AxisAngle::ToQuaternion() const
{
return Quaternion::CreateFromAxisAngle(Axis, TO_RAD(Angle));
return Quaternion::CreateFromAxisAngle(_axis, TO_RAD(_angle));
}
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
{
return ((Axis == axisAngle.GetAxis()) && (Angle == axisAngle.GetAngle()));
return ((_axis == axisAngle.GetAxis()) && (_angle == axisAngle.GetAngle()));
}
bool AxisAngle::operator !=(const AxisAngle& axisAngle) const
@ -149,8 +149,8 @@ using namespace TEN::Math;
AxisAngle& AxisAngle::operator =(const AxisAngle& axisAngle)
{
Axis = axisAngle.GetAxis();
Angle = axisAngle.GetAngle();
_axis = axisAngle.GetAxis();
_angle = axisAngle.GetAngle();
return *this;
}

View file

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

View file

@ -10,7 +10,7 @@ using 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)
{

View file

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

View file

@ -9,7 +9,7 @@ using 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()
{

View file

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

View file

@ -247,29 +247,29 @@ namespace TEN::Entities::Effects
case MissileType::Demigod3Single:
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);
break;
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);
break;
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);
break;
case MissileType::CrocgodMutant:
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;
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;
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;
case MissileType::ClawMutantPlasma:
@ -283,7 +283,7 @@ namespace TEN::Entities::Effects
break;
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);
break;
}
@ -298,7 +298,7 @@ namespace TEN::Entities::Effects
switch ((MissileType)fx.flag1)
{
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);
ItemCustomBurn(LaraItem, Vector3(0.0f, 0.8f, 0.1f), Vector3(0.0f, 0.9f, 0.8f));
break;
@ -315,12 +315,12 @@ namespace TEN::Entities::Effects
case MissileType::Demigod3Single:
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);
break;
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);
break;
@ -336,24 +336,24 @@ namespace TEN::Entities::Effects
break;
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);
break;
case MissileType::CrocgodMutant:
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;
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;
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);
break;
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;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -217,8 +217,8 @@ namespace TEN::Entities::Creatures::TR2
auto* creature = GetCreatureInfo(item);
short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero;
auto extraTorsoRot = EulerAngles::Zero;
auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Identity;
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 tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero;
auto extraTorsoRot = EulerAngles::Zero;
auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Identity;
if (creature->MuzzleFlash[0].Delay != 0)
creature->MuzzleFlash[0].Delay--;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -179,8 +179,8 @@ namespace TEN::Entities::Creatures::TR3
int targetAngle = 0;
int targetDistance = 0;
auto jointHeadRot = EulerAngles::Zero;
auto jointTorsoRot = EulerAngles::Zero;
auto jointHeadRot = EulerAngles::Identity;
auto jointTorsoRot = EulerAngles::Identity;
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);
short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero;
auto extraTorsoRot = EulerAngles::Zero;
auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Identity;
if (item.HitPoints <= 0)
{

View file

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

View file

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

View file

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

View file

@ -75,7 +75,7 @@ namespace TEN::Entities::Creatures::TR3
short angle = 0;
short tilt = 0;
short head = 0;
auto extraTorsoRot = EulerAngles::Zero;
auto extraTorsoRot = EulerAngles::Identity;
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 tiltAngle = 0;
auto extraHeadRot = EulerAngles::Zero;
auto extraHeadRot = EulerAngles::Identity;
if (item->HitPoints <= 0)
{

View file

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

View file

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

View file

@ -171,7 +171,7 @@ namespace TEN::Entities::TR4
short inner = vel >= 0 ? 32 : 640;
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(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);

View file

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

View file

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

View file

@ -706,11 +706,11 @@ namespace TEN::Entities::TR4
else
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);
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);
TriggerDynamicLight(pos.ToVector3(), lightColor, 0.1f);

View file

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

View file

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

View file

@ -195,8 +195,8 @@ namespace TEN::Entities::Creatures::TR5
short headingAngle = 0;
auto extraHeadRot = EulerAngles::Zero;
auto extraTorsoRot = EulerAngles::Zero;
auto extraHeadRot = EulerAngles::Identity;
auto extraTorsoRot = EulerAngles::Identity;
AI_INFO ai;
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, 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(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])
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);
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);
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);
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;
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)
{
@ -133,7 +133,7 @@ void MissileControl(short itemNumber)
else
{
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);
@ -147,9 +147,9 @@ void MissileControl(short itemNumber)
// ROMAN_GOD hit effect
TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber);
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;
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);
DoDamage(LaraItem, 200);
}
@ -172,7 +172,7 @@ void MissileControl(short itemNumber)
{
// HYDRA hit effect
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)
DoDamage(LaraItem, 300);
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);
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;
ExplodeItemNode(CollidedItems[i], 0, 0, 80);
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);
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;
SoundEffect(GetShatterSound(CollidedMeshes[i]->staticNumber), &CollidedMeshes[i]->pos);
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);
static EulerAngles orient = EulerAngles::Zero;
static EulerAngles orient = EulerAngles::Identity;
static float scaler = 1.2f;
short invItem = g_Gui.GetRing(RingTypes::Inventory).CurrentObjectList[g_Gui.GetRing(RingTypes::Inventory).CurrentObjectInList].InventoryItem;