| 3714 | } |
| 3715 | |
| 3716 | void DoEnergyToShields(int pnum) { |
| 3717 | float amount; // how much energy gets transfered |
| 3718 | static float last_play_time = 0; |
| 3719 | |
| 3720 | if (Players[pnum].energy - INITIAL_ENERGY <= 0) { |
| 3721 | if (pnum == Player_num) |
| 3722 | AddHUDMessage(TXT_NEEDMOREENERGY, INITIAL_ENERGY); |
| 3723 | return; |
| 3724 | } |
| 3725 | if (Objects[Players[pnum].objnum].shields >= MAX_SHIELDS) { |
| 3726 | if (pnum == Player_num) |
| 3727 | AddHUDMessage(TXT_SHIELDSATMAX); |
| 3728 | return; |
| 3729 | } |
| 3730 | |
| 3731 | amount = std::min({Frametime * CONVERTER_RATE, Players[pnum].energy - INITIAL_ENERGY, (MAX_SHIELDS - Objects[Players[pnum].objnum].shields) * CONVERTER_SCALE}); |
| 3732 | |
| 3733 | Players[pnum].energy -= amount; |
| 3734 | |
| 3735 | if ((!(Game_mode & GM_MULTI)) || Netgame.local_role == LR_SERVER) |
| 3736 | Objects[Players[pnum].objnum].shields += amount / CONVERTER_SCALE; |
| 3737 | else |
| 3738 | Multi_additional_shields[SHIELD_REQUEST_ENERGY_TO_SHIELD] += Frametime; |
| 3739 | |
| 3740 | if (pnum == Player_num) { |
| 3741 | if (last_play_time > Gametime) |
| 3742 | last_play_time = 0; |
| 3743 | |
| 3744 | if (Gametime > last_play_time + CONVERTER_SOUND_DELAY) { |
| 3745 | Sound_system.Play3dSound(SOUND_ENERGY_CONVERTER, &Objects[Players[pnum].objnum], MAX_GAME_VOLUME / 2); |
| 3746 | |
| 3747 | ain_hear hear; |
| 3748 | hear.f_directly_player = true; |
| 3749 | hear.hostile_level = 0.3f; |
| 3750 | hear.curiosity_level = 1.0f; |
| 3751 | hear.max_dist = Sounds[SOUND_ENERGY_CONVERTER].max_distance * 0.5f; |
| 3752 | AINotify(&Objects[Players[Player_num].objnum], AIN_HEAR_NOISE, (void *)&hear); |
| 3753 | |
| 3754 | last_play_time = Gametime; |
| 3755 | } |
| 3756 | } |
| 3757 | } |
| 3758 | |
| 3759 | // Sets the start position that the player will respawn at |
| 3760 | void PlayerAddWaypoint(int index) { |
no test coverage detected