MCPcopy Create free account
hub / github.com/TheForceEngine/TheForceEngine / setPickup

Function setPickup

TheForceEngine/TFE_DarkForces/pickup.cpp:387–453  ·  view source on GitHub ↗

TFE: Pickups are set from external data instead of hardcoded as in vanilla DF

Source from the content-addressed store, hash-verified

385
386 // TFE: Pickups are set from external data instead of hardcoded as in vanilla DF
387 void setPickup(Pickup*& pickup, SecObject* obj, ItemId itemId, TFE_ExternalData::ExternalPickup* externalPickups)
388 {
389 // itemId will correspond to position in externalPickups array
390 pickup->type = ItemType(externalPickups[itemId].type);
391 pickup->weaponIndex = externalPickups[itemId].weaponIndex;
392 pickup->playerItem = externalPickups[itemId].playerItem;
393 pickup->playerAmmo = externalPickups[itemId].playerAmmo;
394 pickup->amount = pickup->playerAmmo == s_playerBatteryPower
395 ? s32(externalPickups[itemId].amount / 100.0 * 2 * ONE_16) // convert battery from a percentage
396 : externalPickups[itemId].amount;
397
398 pickup->msgId[0] = externalPickups[itemId].message1;
399 pickup->msgId[1] = externalPickups[itemId].message2;
400
401 if (externalPickups[itemId].fullBright)
402 {
403 obj->flags |= OBJ_FLAG_FULLBRIGHT;
404 }
405
406 if (externalPickups[itemId].noRemove)
407 {
408 obj->flags |= OBJ_FLAG_NO_REMOVE;
409 }
410
411 // Set max amounts based on ammo type
412 TFE_ExternalData::MaxAmounts* maxAmounts = TFE_ExternalData::getMaxAmounts();
413 if (externalPickups[itemId].playerAmmo == s_playerAmmoEnergy)
414 {
415 pickup->maxAmount = maxAmounts->ammoEnergyMax;
416 }
417 else if (externalPickups[itemId].playerAmmo == s_playerAmmoPower)
418 {
419 pickup->maxAmount = maxAmounts->ammoPowerMax;
420 }
421 else if (externalPickups[itemId].playerAmmo == s_playerAmmoPlasma)
422 {
423 pickup->maxAmount = maxAmounts->ammoPlasmaMax;
424 }
425 else if (externalPickups[itemId].playerAmmo == s_playerAmmoShell)
426 {
427 pickup->maxAmount = maxAmounts->ammoShellMax;
428 }
429 else if (externalPickups[itemId].playerAmmo == s_playerAmmoDetonators)
430 {
431 pickup->maxAmount = maxAmounts->ammoDetonatorMax;
432 }
433 else if (externalPickups[itemId].playerAmmo == s_playerAmmoMines)
434 {
435 pickup->maxAmount = maxAmounts->ammoMineMax;
436 }
437 else if (externalPickups[itemId].playerAmmo == s_playerAmmoMissiles)
438 {
439 pickup->maxAmount = maxAmounts->ammoMissileMax;
440 }
441 else if (externalPickups[itemId].playerAmmo == s_playerShields)
442 {
443 pickup->maxAmount = maxAmounts->shieldsMax;
444 }

Callers 1

obj_createPickupFunction · 0.85

Calls 2

ItemTypeEnum · 0.85
getMaxAmountsFunction · 0.85

Tested by

no test coverage detected