MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / HandleCommonPowerups

Function HandleCommonPowerups

Descent3/multisafe.cpp:2679–2798  ·  view source on GitHub ↗

returns true if it was handled

Source from the content-addressed store, hash-verified

2677}
2678// returns true if it was handled
2679bool HandleCommonPowerups(char *pname, msafe_struct *mstruct, uint8_t *pickup) {
2680 int pnum = IOBJ->id;
2681 bool handled = false;
2682 // Shield bonus
2683 if (!stricmp("Shield", pname)) {
2684 handled = true;
2685 // If this guy is already at max shields, then don't do anything
2686 if ((IOBJ->shields) >= MAX_SHIELDS) {
2687 if (pnum == Player_num)
2688 AddFilteredHUDMessage(TXT_MAXSHIELDS);
2689 } else {
2690 // Pick it up
2691 *pickup = 1;
2692 float addval = SHIELD_BONUS * Diff_shield_energy_scalar[DIFF_LEVEL];
2693 if (IOBJ->shields + addval > MAX_SHIELDS)
2694 addval = MAX_SHIELDS - IOBJ->shields;
2695
2696 IOBJ->shields += addval;
2697 if (pnum == Player_num)
2698 AddFilteredHUDMessage(TXT_SHIELDBOOST, (int)IOBJ->shields);
2699 }
2700 }
2701 // ENERGY POWERUP
2702 else if (!stricmp("Energy", pname)) {
2703 handled = true;
2704 float addval = ENERGY_BONUS * Diff_shield_energy_scalar[DIFF_LEVEL];
2705 addval = std::min(addval, MAX_ENERGY - Players[pnum].energy);
2706 Players[pnum].energy += addval;
2707 // Pick up if multiplayer or added
2708 if ((Game_mode & GM_MULTI) || (addval > 0))
2709 *pickup = 1;
2710 if (pnum == Player_num)
2711 AddFilteredHUDMessage((addval > 0) ? TXT_MSG_ENERGY : TXT_MAXENERGY);
2712 }
2713 // Quad Laser
2714 else if (!stricmp("QuadLaser", pname)) {
2715 handled = true;
2716 object *pobj = &Objects[Players[pnum].objnum];
2717 if (!(pobj->dynamic_wb[LASER_INDEX].flags & DWBF_QUAD)) {
2718 // player doesn't have Quad Lasers
2719
2720 if (pnum == Player_num)
2721 AddFilteredHUDMessage(TXT_QUADLASER);
2722 *pickup = 1;
2723 pobj->dynamic_wb[LASER_INDEX].flags |= DWBF_QUAD;
2724 pobj->dynamic_wb[SUPER_LASER_INDEX].flags |= DWBF_QUAD;
2725 // add them to the inventory so we can spew it
2726 static int quad_id = -2;
2727 if (quad_id == -2)
2728 quad_id = FindObjectIDName(IGNORE_TABLE(pname));
2729 if (quad_id > -1) {
2730 Players[pnum].inventory.Add(OBJ_POWERUP, quad_id, NULL, -1, -1, INVAF_LEVELLAST | INVAF_TIMEOUTONSPEW);
2731 }
2732 } else if (pnum == Player_num)
2733 AddFilteredHUDMessage(TXT_MSG_QUADHAVE);
2734 }
2735 // FullMap Powerup
2736 else if (!stricmp("FullMap", pname)) {

Callers 1

msafe_DoPowerupFunction · 0.85

Calls 7

AddFilteredHUDMessageFunction · 0.85
FindObjectIDNameFunction · 0.85
ThiefReturnItemFunction · 0.85
ThiefPlayerHasItemFunction · 0.85
MakePlayerInvulnerableFunction · 0.85
MakeObjectInvisibleFunction · 0.85
AddMethod · 0.45

Tested by

no test coverage detected