| 677 | } |
| 678 | |
| 679 | void pickupInventory() |
| 680 | { |
| 681 | // Get the size of the PlayerInfo structure up to but not including s_playerInfo.stateUnknown. |
| 682 | size_t size = (size_t)&s_playerInfo.pileSaveMarker - (size_t)&s_playerInfo; |
| 683 | if (s_playerInvSaved) |
| 684 | { |
| 685 | // Copy the saved player info and add it to the current player info. |
| 686 | u32* dst = (u32*)&s_playerInfo; |
| 687 | u32* src = s_playerInvSaved; |
| 688 | for (s32 sizeCopied = 0; sizeCopied < size; sizeCopied += 4, src++, dst++) |
| 689 | { |
| 690 | (*dst) += (*src); |
| 691 | } |
| 692 | |
| 693 | // Clear out the nava card item since it is one of the current objectives. |
| 694 | s_playerInfo.itemNava = JFALSE; |
| 695 | if (s_playerInfo.maxWeapon != s_playerInfo.curWeapon) |
| 696 | { |
| 697 | if (s_playerWeaponTask) |
| 698 | { |
| 699 | weapon_queueWeaponSwitch(s_playerInfo.maxWeapon); |
| 700 | s_playerInfo.maxWeapon = max(s_playerInfo.curWeapon, s_playerInfo.maxWeapon); |
| 701 | } |
| 702 | else |
| 703 | { |
| 704 | s_playerInfo.saveWeapon = s_playerInfo.maxWeapon; |
| 705 | } |
| 706 | } |
| 707 | |
| 708 | // Free saved inventory. |
| 709 | level_free(s_playerInvSaved); |
| 710 | s_playerInvSaved = nullptr; |
| 711 | // Clamp ammo values. |
| 712 | s_playerInfo.ammoEnergy = pickup_addToValue(s_playerInfo.ammoEnergy, 0, s_ammoEnergyMax); |
| 713 | s_playerInfo.ammoPower = pickup_addToValue(s_playerInfo.ammoPower, 0, s_ammoPowerMax); |
| 714 | s_playerInfo.ammoPlasma = pickup_addToValue(s_playerInfo.ammoPlasma, 0, s_ammoPlasmaMax); |
| 715 | s_playerInfo.ammoDetonator = pickup_addToValue(s_playerInfo.ammoDetonator, 0, s_ammoDetonatorMax); |
| 716 | s_playerInfo.ammoShell = pickup_addToValue(s_playerInfo.ammoShell, 0, s_ammoShellMax); |
| 717 | s_playerInfo.ammoMine = pickup_addToValue(s_playerInfo.ammoMine, 0, s_ammoMineMax); |
| 718 | s_playerInfo.ammoMissile = pickup_addToValue(s_playerInfo.ammoMissile, 0, s_ammoMissileMax); |
| 719 | } |
| 720 | } |
| 721 | } // TFE_DarkForces |
no test coverage detected