diff --git a/src/info.c b/src/info.c index c2bd3c964..56892d9c9 100644 --- a/src/info.c +++ b/src/info.c @@ -24085,7 +24085,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 48*FRACUNIT, // radius + 52*FRACUNIT, // radius 120*FRACUNIT, // height 0, // display offset 0, // mass @@ -24166,13 +24166,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height + 26*FRACUNIT, // radius + 26*FRACUNIT, // height 0, // display offset 0, // mass 0, // damage sfx_None, // activesound - MF_SCENERY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags + MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags S_NULL // raisestate }, diff --git a/src/k_kart.c b/src/k_kart.c index 6c1241a7d..61a32bd76 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -365,7 +365,7 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] = /*Ballhog*/ { 0, 0, 2, 2, 0, 0, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0, 2, 4, 0 }, // Self-Propelled Bomb /*Grow*/ { 0, 0, 0, 1, 2, 3, 0, 0 }, // Grow - /*Shrink*/ { 0, 0, 0, 0, 0, 0, 4, 2 }, // Shrink + /*Shrink*/ { 0, 0, 0, 0, 0, 2, 4, 2 }, // Shrink /*Lightning Shield*/ { 1, 0, 0, 0, 0, 0, 0, 0 }, // Lightning Shield /*Bubble Shield*/ { 0, 1, 2, 1, 0, 0, 0, 0 }, // Bubble Shield /*Flame Shield*/ { 0, 0, 0, 0, 0, 1, 3, 5 }, // Flame Shield @@ -375,7 +375,7 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] = /*Kitchen Sink*/ { 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink /*Drop Target*/ { 3, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target /*Sneaker x2*/ { 0, 0, 2, 2, 2, 0, 0, 0 }, // Sneaker x2 - /*Sneaker x3*/ { 0, 0, 0, 1, 6,10, 4, 0 }, // Sneaker x3 + /*Sneaker x3*/ { 0, 0, 0, 1, 6, 8, 4, 0 }, // Sneaker x3 /*Banana x3*/ { 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3 /*Banana x10*/ { 0, 0, 0, 1, 0, 0, 0, 0 }, // Banana x10 /*Orbinaut x3*/ { 0, 0, 1, 0, 0, 0, 0, 0 }, // Orbinaut x3 diff --git a/src/objects/shrink.c b/src/objects/shrink.c index 2ea94245f..6f8cb92a1 100644 --- a/src/objects/shrink.c +++ b/src/objects/shrink.c @@ -25,14 +25,16 @@ #define POHBEE_HOVER (256 << FRACBITS) #define POHBEE_SPEED (128 << FRACBITS) -#define POHBEE_TIME (15 * TICRATE) +#define POHBEE_TIME (30 * TICRATE) #define POHBEE_DIST (4096 << FRACBITS) #define GUN_SWING (ANGLE_90 - ANG10) -#define GUN_SWINGTIME (3 * TICRATE) +#define GUN_SWINGTIME (4 * TICRATE) #define CHAIN_SIZE (16) +#define EXTRA_FOR_FIRST (7) + enum { POHBEE_MODE_SPAWN, @@ -321,7 +323,7 @@ static void ShrinkLaserThinker(mobj_t *pohbee, mobj_t *gun, mobj_t *laser) P_SetScale(particle, particle->scale * 2); particle->destscale = 0; - particle->momz = 2 * particle->scale * P_MobjFlip(particle); + //particle->momz = 2 * particle->scale * P_MobjFlip(particle); } else { @@ -570,7 +572,7 @@ static void CreatePohbee(player_t *owner, waypoint_t *start, waypoint_t *end, UI // Valid spawning conditions, // we can start creating each individual part. - pohbee = P_SpawnMobjFromMobj(start->mobj, 0, 0, POHBEE_HOVER * 3, MT_SHRINK_POHBEE); + pohbee = P_SpawnMobjFromMobj(start->mobj, 0, 0, FixedDiv(size, mapobjectscale) + POHBEE_HOVER * 3, MT_SHRINK_POHBEE); P_SetTarget(&pohbee_owner(pohbee), owner->mo); pohbee_mode(pohbee) = POHBEE_MODE_SPAWN; @@ -622,6 +624,7 @@ void Obj_CreateShrinkPohbees(player_t *owner) waypoint_t *start; waypoint_t *end; UINT8 lasers; + boolean first; } pohbees[MAXPLAYERS]; size_t numPohbees = 0; @@ -684,6 +687,12 @@ void Obj_CreateShrinkPohbees(player_t *owner) pohbees[j].start = GetPohbeeStart(player->nextwaypoint); pohbees[j].end = endWaypoint; pohbees[j].lasers = 1; + + if (player->position == 1) + { + pohbees[j].first = true; + } + numPohbees++; } } @@ -691,5 +700,18 @@ void Obj_CreateShrinkPohbees(player_t *owner) for (i = 0; i < numPohbees; i++) { CreatePohbee(owner, pohbees[i].start, pohbees[i].end, pohbees[i].lasers); + + if (pohbees[i].first == true) + { + // Add a chain of extra ones for 1st place. + waypoint_t *prev = pohbees[i].end; + + for (j = 0; j < EXTRA_FOR_FIRST; j++) + { + waypoint_t *new = GetPohbeeEnd(pohbees[i].end); + CreatePohbee(owner, prev, new, 1); + prev = new; + } + } } } diff --git a/src/p_map.c b/src/p_map.c index 5c9b98ef2..0c490ce41 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -740,46 +740,76 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) // SRB2kart 011617 - Colission[sic] code for kart items //{ - if (thing->type == MT_SHRINK_GUN) + if (thing->type == MT_SHRINK_GUN || thing->type == MT_SHRINK_PARTICLE) { if (tmthing->type != MT_PLAYER) { return BMIT_CONTINUE; } - // Use special collision for the laser gun. - // The laser sprite itself is just a visual, - // the gun itself does the colliding for us. - if (tmthing->z > thing->z) + if (thing->type == MT_SHRINK_GUN) { - return BMIT_CONTINUE; // overhead - } + // Use special collision for the laser gun. + // The laser sprite itself is just a visual, + // the gun itself does the colliding for us. + if (tmthing->z > thing->z) + { + return BMIT_CONTINUE; // overhead + } - if (tmthing->z + tmthing->height < thing->floorz) + if (tmthing->z + tmthing->height < thing->floorz) + { + return BMIT_CONTINUE; // underneath + } + } + else { - return BMIT_CONTINUE; // underneath + if (tmthing->z > thing->z + thing->height) + { + return BMIT_CONTINUE; // overhead + } + + if (tmthing->z + tmthing->height < thing->z) + { + return BMIT_CONTINUE; // underneath + } } return Obj_ShrinkLaserCollide(thing, tmthing) ? BMIT_CONTINUE : BMIT_ABORT; } - else if (tmthing->type == MT_SHRINK_GUN) + else if (tmthing->type == MT_SHRINK_GUN || tmthing->type == MT_SHRINK_PARTICLE) { if (thing->type != MT_PLAYER) { return BMIT_CONTINUE; } - // Use special collision for the laser gun. - // The laser sprite itself is just a visual, - // the gun itself does the colliding for us. - if (thing->z > tmthing->z) + if (thing->type == MT_SHRINK_GUN) { - return BMIT_CONTINUE; // overhead - } + // Use special collision for the laser gun. + // The laser sprite itself is just a visual, + // the gun itself does the colliding for us. + if (thing->z > tmthing->z) + { + return BMIT_CONTINUE; // overhead + } - if (thing->z + thing->height < tmthing->floorz) + if (thing->z + thing->height < tmthing->floorz) + { + return BMIT_CONTINUE; // underneath + } + } + else { - return BMIT_CONTINUE; // underneath + if (tmthing->z > thing->z + thing->height) + { + return BMIT_CONTINUE; // overhead + } + + if (tmthing->z + tmthing->height < thing->z) + { + return BMIT_CONTINUE; // underneath + } } return Obj_ShrinkLaserCollide(tmthing, thing) ? BMIT_CONTINUE : BMIT_ABORT;