UFO: Alien Invasion
Loading...
Searching...
No Matches
e_event_actorwound.cpp
Go to the documentation of this file.
1
4
5/*
6Copyright (C) 2002-2025 UFO: Alien Invasion.
7
8This program is free software; you can redistribute it and/or
9modify it under the terms of the GNU General Public License
10as published by the Free Software Foundation; either version 2
11of the License, or (at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
17See the GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
21Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23*/
24
25#include "../../../../client.h"
26#include "../../../cl_actor.h"
27#include "../../../cl_hud.h"
29#include "e_event_actorwound.h"
30
36void CL_ActorWound (const eventRegister_t* self, dbuffer* msg)
37{
38 int entnum, bodyPart, wounds, treatment;
39 NET_ReadFormat(msg, self->formatString, &entnum, &bodyPart, &wounds, &treatment);
40
41 le_t* le = LE_Get(entnum);
42 if (!le)
43 LE_NotFoundError(entnum);
44
45 switch (le->type) {
46 case ET_ACTORHIDDEN:
47 case ET_ACTOR:
48 case ET_ACTOR2x2:
49 break;
50 default:
51 Com_Printf("CL_ActorWound: LE (%i) not an actor (type: %i)\n", entnum, le->type);
52 return;
53 }
54
55 const BodyData* const bodyData = le->teamDef->bodyTemplate;
56 if (le->wounds.woundLevel[bodyPart] < wounds && wounds > le->maxHP *
57 bodyData->woundThreshold(bodyPart) && !LE_IsDead(le)) {
58 const character_t* chr = CL_ActorGetChr(le);
59 char tmpbuf[128];
60 Com_sprintf(tmpbuf, lengthof(tmpbuf), _("%s has been wounded"), chr->name);
61 HUD_DisplayMessage(tmpbuf);
62 }
63 le->wounds.woundLevel[bodyPart] = wounds;
64 le->wounds.treatmentLevel[bodyPart] = treatment;
65 const int actorIdx = CL_ActorGetNumber(le);
66 if (actorIdx < 0)
67 return;
68
69 /* Update bleeding status */
70 const int bleeding = (wounds > le->maxHP * bodyData->woundThreshold(bodyPart)
71 ? static_cast<int>(wounds * bodyData->bleedingFactor(bodyPart)) : 0);
72 UI_ExecuteConfunc("updateactorstatus %i %s %i", actorIdx, "bleeding", bleeding);
73}
int CL_ActorGetNumber(const le_t *le)
Returns the number of the actor in the teamlist.
Definition cl_actor.cpp:125
character_t * CL_ActorGetChr(const le_t *le)
Returns the character information for an actor in the teamlist.
Definition cl_actor.cpp:155
void HUD_DisplayMessage(const char *text)
Displays a message on the hud.
Definition cl_hud.cpp:138
HUD related routines.
le_t * LE_Get(int entnum)
Searches all local entities for the one with the searched entnum.
#define LE_IsDead(le)
#define LE_NotFoundError(entnum)
#define _(String)
Definition cl_shared.h:44
float woundThreshold(const short bodyPart) const
float bleedingFactor(const short bodyPart) const
Primary header for client.
void Com_Printf(const char *const fmt,...)
Definition common.cpp:428
void CL_ActorWound(const eventRegister_t *self, dbuffer *msg)
Parses the actor wound stats that come from the netchannel.
void NET_ReadFormat(dbuffer *buf, const char *format,...)
The user-friendly version of NET_ReadFormat that reads variable arguments from a buffer according to ...
Definition netpack.cpp:533
@ ET_ACTOR
Definition q_shared.h:148
@ ET_ACTOR2x2
Definition q_shared.h:160
@ ET_ACTORHIDDEN
Definition q_shared.h:163
#define lengthof(x)
Definition shared.h:105
bool Com_sprintf(char *dest, size_t size, const char *fmt,...)
copies formatted string with buffer-size checking
Definition shared.cpp:494
Describes a character with all its attributes.
Definition chr_shared.h:388
char name[MAX_VAR]
Definition chr_shared.h:390
Struct that defines one particular event with all its callbacks and data.
Definition e_main.h:42
const char * formatString
The format string that is used to write and parse this event.
Definition e_main.h:54
a local entity
teamDef_t * teamDef
int maxHP
entity_type_t type
woundInfo_t wounds
const BodyData * bodyTemplate
Definition chr_shared.h:350
int woundLevel[BODYPART_MAXTYPE]
Definition chr_shared.h:362
int treatmentLevel[BODYPART_MAXTYPE]
Definition chr_shared.h:363
void UI_ExecuteConfunc(const char *fmt,...)
Executes confunc - just to identify those confuncs in the code - in this frame.
Definition ui_main.cpp:110