MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / GameSticksControl

Function GameSticksControl

TombEngine/Objects/TR4/Object/tr4_senet.cpp:52–296  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

50}
51
52void GameSticksControl(short itemNumber)
53{
54 auto* item = &g_Level.Items[itemNumber];
55
56 int number, x, z;
57 bool flag;
58 short piece, probedRoomNumber;
59
60 if (item->ItemFlags[7] > -1)
61 {
62 if (item->HitPoints == 100)
63 SoundEffect(SFX_TR4_SENET_PUZZLE_SPIN, &item->Pose);
64 for (int i = 0; i < 4; ++i)
65 {
66 if (item->HitPoints < 100 - 2 * i)
67 {
68 item->ItemFlags[i] -= 128 * item->HitPoints;
69
70 if (item->HitPoints < (40 - 2 * i))
71 {
72 if (abs(item->ItemFlags[i]) < 4096 && item->ItemFlags[7] & 1 << i)
73 item->ItemFlags[i] = 0;
74 else if ((item->ItemFlags[i] > 28672 || item->ItemFlags[i] < -28672) && !(item->ItemFlags[7] & 1 << i))
75 item->ItemFlags[i] = -32768;
76 }
77 }
78 }
79
80 --item->HitPoints;
81 if (!item->HitPoints)
82 {
83 for (int i = 0; i < 3; ++i)
84 g_Level.Items[SenetPiecesNumber[i]].TriggerFlags = 0;
85
86 item->ItemFlags[7] = -1;
87
88 if (ActivePiece == -1 && !SenetDisplacement)
89 {
90 RemoveActiveItem(itemNumber);
91 item->Status = ITEM_NOT_ACTIVE;
92 }
93 }
94 }
95 else if (ActivePiece > -1)
96 {
97 number = ActivePiece >= 3 ? 2 : 1;
98 auto* item2 = &g_Level.Items[SenetPiecesNumber[ActivePiece]];
99 item2->Flags |= 32;
100 item2->AfterDeath = 48;
101
102 piece = ActiveSenetPieces[ActivePiece];
103 if (piece == -1 || piece >= 5)
104 {
105 if (piece == -1)
106 piece = 16;
107
108 x = SenetTargetX + BLOCK(1);
109 z = SenetTargetZ + BLOCK(piece - 5);

Callers

nothing calls this directly

Calls 11

SoundEffectFunction · 0.85
RemoveActiveItemFunction · 0.85
GetPointCollisionFunction · 0.85
ItemNewRoomFunction · 0.85
KillItemFunction · 0.85
CheckSenetWinnerFunction · 0.85
_0x0040FAE0Function · 0.85
MakeMoveFunction · 0.85
Vector3iClass · 0.70
GetRoomNumberMethod · 0.45

Tested by

no test coverage detected