returns true if it was handled
| 2677 | } |
| 2678 | // returns true if it was handled |
| 2679 | bool 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)) { |
no test coverage detected