| 2140 | } |
| 2141 | |
| 2142 | int CreatureVault(short itemNumber, short angle, int vault, int shift) |
| 2143 | { |
| 2144 | auto* item = &g_Level.Items[itemNumber]; |
| 2145 | auto* creature = GetCreatureInfo(item); |
| 2146 | |
| 2147 | int xBlock = item->Pose.Position.x / BLOCK(1); |
| 2148 | int zBlock = item->Pose.Position.z / BLOCK(1); |
| 2149 | int y = item->Pose.Position.y; |
| 2150 | short roomNumber = item->RoomNumber; |
| 2151 | |
| 2152 | CreatureAnimation(itemNumber, angle, 0); |
| 2153 | |
| 2154 | if (item->Floor > (y + CLICK(4.5f))) |
| 2155 | { |
| 2156 | vault = 0; |
| 2157 | } |
| 2158 | else if (item->Floor > (y + CLICK(3.5f)) && IsCreatureVaultAvailable(item, -4)) |
| 2159 | { |
| 2160 | vault = -4; |
| 2161 | } |
| 2162 | else if (item->Floor > (y + CLICK(2.5f)) && IsCreatureVaultAvailable(item, -3)) |
| 2163 | { |
| 2164 | vault = -3; |
| 2165 | } |
| 2166 | else if (item->Floor > (y + CLICK(1.5f)) && IsCreatureVaultAvailable(item, -2)) |
| 2167 | { |
| 2168 | vault = -2; |
| 2169 | } |
| 2170 | else if (item->Pose.Position.y > (y - CLICK(1.5f))) |
| 2171 | { |
| 2172 | return 0; |
| 2173 | } |
| 2174 | else if (item->Pose.Position.y > (y - CLICK(2.5f))) |
| 2175 | { |
| 2176 | vault = 2; |
| 2177 | } |
| 2178 | else if (item->Pose.Position.y > (y - CLICK(3.5f))) |
| 2179 | { |
| 2180 | vault = 3; |
| 2181 | } |
| 2182 | else if (item->Pose.Position.y > (y - CLICK(4.5f))) |
| 2183 | { |
| 2184 | vault = 4; |
| 2185 | } |
| 2186 | |
| 2187 | // Jump |
| 2188 | int newXblock = item->Pose.Position.x / BLOCK(1); |
| 2189 | int newZblock = item->Pose.Position.z / BLOCK(1); |
| 2190 | |
| 2191 | if (zBlock == newZblock) |
| 2192 | { |
| 2193 | if (xBlock == newXblock) |
| 2194 | return 0; |
| 2195 | |
| 2196 | if (xBlock < newXblock) |
| 2197 | { |
| 2198 | item->Pose.Position.x = (newXblock * BLOCK(1)) - shift; |
| 2199 | item->Pose.Orientation.y = ANGLE(90.0f); |
no test coverage detected