diff --git a/src/k_rank.h b/src/k_rank.h index 4d6974006..c69270bf7 100644 --- a/src/k_rank.h +++ b/src/k_rank.h @@ -53,6 +53,7 @@ struct gpRank_t UINT32 totalLaps; UINT32 continuesUsed; + UINT32 specialDamage; UINT32 prisons; UINT32 totalPrisons; diff --git a/src/objects/ufo.c b/src/objects/ufo.c index dd1e8958e..cc6216df1 100644 --- a/src/objects/ufo.c +++ b/src/objects/ufo.c @@ -29,6 +29,7 @@ #include "../k_hitlag.h" #include "../acs/interface.h" #include "../hu_stuff.h" +#include "../k_grandprix.h" #define UFO_BASE_SPEED (42 * FRACUNIT) // UFO's slowest speed. #define UFO_SPEEDUP (FRACUNIT >> 1) // Acceleration @@ -935,6 +936,12 @@ boolean Obj_SpecialUFODamage(mobj_t *ufo, mobj_t *inflictor, mobj_t *source, UIN ufo->health = max(1, ufo->health - damage); + if (grandprixinfo.gp) + { + grandprixinfo.rank.specialDamage += damage; + CONS_Printf("new damage %d: %d\n", damage, grandprixinfo.rank.specialDamage); + } + K_SetHitLagForObjects(ufo, inflictor, source, (damage / 3) + 2, true); UFOCopyHitlagToPieces(ufo); @@ -1339,6 +1346,11 @@ static mobj_t *InitSpecialUFO(waypoint_t *start) P_SetTarget(&ufo_piece_prev(piece), prevPiece); prevPiece = piece; + if (grandprixinfo.gp && grandprixinfo.rank.specialDamage) + { + ufo->health -= min(70, grandprixinfo.rank.specialDamage/2); + } + return ufo; } diff --git a/src/p_saveg.c b/src/p_saveg.c index bef745fdb..4c270cbaa 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -6136,6 +6136,7 @@ static inline void P_ArchiveMisc(savebuffer_t *save) WRITEUINT32(save->p, rank->totalLaps); WRITEUINT32(save->p, (rank->continuesUsed + 1)); + WRITEUINT32(save->p, rank->specialDamage); WRITEUINT32(save->p, rank->prisons); WRITEUINT32(save->p, rank->totalPrisons); @@ -6394,6 +6395,7 @@ static boolean P_UnArchiveSPGame(savebuffer_t *save) rank->totalLaps = READUINT32(save->p); rank->continuesUsed = READUINT32(save->p); + rank->specialDamage = READUINT32(save->p); rank->prisons = READUINT32(save->p); rank->totalPrisons = READUINT32(save->p);