* Blocking lines above or below the current sector should only block if they actually intersect with the currently checking actor.
* Sectors above a ceiling portal should not change current floor information and vice versa.
* removed all code for dealing with z-displacing portals in the iterator loops. This would cause too many problems so I decided to scrap any provisions for allowing interactive portals with z-displacement. They will remain restricted to pure teleporter portals.
* changed spechit to carry a position along with the special line. If something is activated through an interactive portal this is needed to calculate movement.
* pass the abovementioned position to CheckForPushSpecial.
* collect touched portal lines in a second array analogous to spechit.
* use FMultiBlockThingsIterator in P_TestMobjZ.
(This is just a safety commit before doing some more extensive behind-the-scenes refactoring.)
Notable changes here:
* use the same logic for determining whether a 3D floor is 'below' or 'above' the actor as all the other functions.
* removed the broken code which tried to detect whether an actor was touching a steep slope. Better use P_LineOpening to find the correct planes and store the results.
* improved detection whether the slopes on both sides of a plane are identical, using the same data as for steep slope detection.
Note: This replaces AActor::intersects with a direct calculation. Although that function could be adjusted it'd mean some redundant distance calculations which are easily avoided.
- some consolidation in p_map.cpp. PIT_CheckLine and PIT_FindFloorCeiling had quite a bit of redundancy which has been merged.
- čontinued work on FMultiBlockLinesIterator. It's still not completely finished.
A big problem with this function was that some flags required setting up some variables before calling it and others did not. It will now set everything up itself so all initializations to AActor::floorz and ceilingz that were made before these calls (which were all identical to begin with) could be removed and the internal initialization logic streamlined.
This was to resolve some circular dependencies with the portal code.
The most notable changees:
* FTextureID was moved from textures.h to doomtype.h because it is frequently needed in files that don't want to do anything with actual textures.
* split off the parts from p_maputl into a separate header.
* consolidated all blockmap related data into p_blockmap.h
* split off the polyobject parts into po_man.h
- Check if a co-op start exists. If not, pick one at random.
- Don't telefrag other players when spawning in co-op games, since
you're allowed to move out of other players now.
'ceilingterrain' is needed because the top of 3D-floors refers to the model sector's ceiling, so in order to give a 3D floor a terrain it must be assignable to the sector's ceiling.
Note that although it is basically the same property, its actual function bears no relevance to its use in Eternity.
Issues with the old code:
* when calculating friction for a 3D-floor - swimmable or not - the 3D floor's top texture must be used. The previous version always checked the sector's floor texture, even though the top might as well come from the sector's ceiling.
* 3D floors never checked for the SECF_FRICTION flag at all. According to Boom specs, sector-based friction must be ignored if this is the case.
* Terrain based friction had a higher priority than the sector's own value.
Changed the rules as follows:
* if the sector's SECF_FRICTION flag is set (i.e. something explicitly changed the sector's friction), this value is used regardless of terrain settings.
* if this flag is not set, the terrain's friction is used, if defined, using the proper plane for 3D-floors.
* otherwise the default is used.
The previous version didn't detect some real mistakes in code which used operator& with the wrong flagset (for now 'converted' to the correcly equivalent counterpart, waiting for the proper fix).
The code never checked the starting position of the move and could be erroneously triggered in rare situations where the distance increased between actors but the hit boxes started overlapping because x or y distance got below the radius.
Changed it so that the code only gets executed when there's already an overlap before the move.
- changed monster unblocking logic to include players as well (i.e. a player being stuck inside another actor is allowed to move away from that other actor.)
- Rippers will rip through anything with an equivalent ripper level, or if their level is between or on the min and max ranges.
- If no min or max is defined, it simply checks if the monster's ripper level is lower than the missiles.
- Functions: A_SetRipperLevel(int level), A_SetRipMin(int min), A_SetRipMax(int max)
- Properties: RipperLevel, RipLevelMin, and RipLevelMax.
- RipperLevel: Applicable to monsters and projectiles.
- RipLevelMin and RipLevelMax are only useful on monsters.
- By default, all are 0.
Conflicts:
src/CMakeLists.txt
src/b_think.cpp
src/g_doom/a_doomweaps.cpp
src/g_hexen/a_clericstaff.cpp
src/g_hexen/a_fighterplayer.cpp
src/namedef.h
src/p_enemy.cpp
src/p_local.h
src/p_mobj.cpp
src/p_teleport.cpp
src/sc_man_tokens.h
src/thingdef/thingdef_codeptr.cpp
src/thingdef/thingdef_function.cpp
src/thingdef/thingdef_parse.cpp
wadsrc/static/actors/actor.txt
wadsrc/static/actors/constants.txt
wadsrc/static/actors/shared/inventory.txt
- Added register reuse to VMFunctionBuilder for FxPick's code emitter.
- Note to self: Need to reimplement IsPointerEqual and CheckClass, which
were added to thingdef_function.cpp over the past year, as this file no
longer exists in this branch.
- Added THRUREFLECT, MIRRORREFLECT, and AIMREFLECT. All require REFLECTIVE to work.
- THRUREFLECT prevents missiles from changing course if reflected, and takes precedence over all reflective flags.
- MIRRORREFLECT causes missiles to perform a direct 180 turn-around.
- AIMREFLECT turns the missile back to the original shooter, and does not slow the missile down.
- Avoid doing the division if the result would be outside the ]0,1<<24[ range:
-- if the numerator is nonpositive, ie <=0, truncate the result to 0,
-- if the numerator is greater or equal than the denominator, the result will be outside the allowed range, hence truncate the result to 1<<24.
-- otherwise, the result will be inside the range. Knowing that the denominator is greater than the numerator, if the numerator has the last 24 bits non zero, the denominator can't be less than 1<<24, hence the denominator won't be truncated to 0.
- Add comment details to help who doesn't know math. Big deal!
-Fixed: ALLOWPAIN should not trigger pain states if the damage is 0, but still allow for infighting to occur.
-Fixed: an unneeded logic call was processing damage modification when it was 0 to begin with.
Actors will be excluded from damage/radius thrusting of all sorts by
explosions or damage of any kind. They will also never deal impact
damage to other enemies, nor will they damage themselves from being too
close to a wall.
- specie: money in the form of coins rather than notes
- species: a group of living organisms consisting of similar individuals
capable of exchanging genes or interbreeding
- For maps like xtheateriii that expect non-blocking push lines to
activate when you are standing on them and run into a completely different
line, there is now this compatiblity.txt-only flag.
Corrected entries were blood would spawn inconsistently because of
cl_bloodtype. Blood now always spawns but is marked invisible according
to cl_bloodtype.
DECORATE). Then you can use:
* Bounce
* Bounce.Floor
* Bounce.Ceiling
* Bounce.Wall
* Bounce.Actor
* Bounce.Actor.Creature
Partial matches work just like Pain states, so if an actor bounces off a floor and you don't
have a Bounce.Floor state, but you do have a Bounce state, it will use the Bounce state.
Conversely, if you only have a Bounce.Floor state but no Bounce state, then the actor will
only enter the Bounce.Floor state when it bounces on a floor; bouncing off anything else will
not cause it to change state.
SVN r4250 (trunk)
infighting is disabled; let the normal conditions apply. Otherwise, you end up with situations
where monster-fired projectiles can collide with pickups.
SVN r4198 (trunk)
can perform based on the amount of damage actually taken after all modifications are done to
it. However, if the damage is canceled away, blood will still spawn for the original damage
amount rather than the modified amount.
SVN r4012 (trunk)
and RTF_NOTMISSILE so that you can use A_Explode and A_RadiusThrust with non-missiles without
them telling P_RadiusAttack() that the target is the source.
SVN r3860 (trunk)
- fixed: The same rules that are used for deciding if a weapon attack took place should be used when checking the PIERCEARMOR flag in P_LineAttack: It should be ignored if the attack doesn't originate from the weapon.
SVN r3649 (trunk)
respawns.
- Use doubles instead of floats, as appropriate, in PIT_FindFloorCeiling().
- Fixed: The second call to P_FindFloorCeiling() in A_RestoreSpecialPosition and P_NightmareRespawn()
must only consider 3D floors and midtexes.
SVN r3545 (trunk)
P_GetFloorCeilingZ(). I got confused because its bool parameter's meaning had been the
opposite of P_FindFloorCeiling()'s bool parameter before they got changed to flags.
SVN r3543 (trunk)
without resetting the actor's sector. The 3D floor checks in P_NightmareRespawn() and
A_RestoreSpecialPosition now use this.
- Fixed: P_NightmareRespawn() did its Z clamping before checking for 3D floors.
- Fixed: Respawning actors were not clamped to the ceiling.
SVN r3542 (trunk)
- Fixed: The 3D floors part of P_GetFriction() did not check for friction still being set to
ORIG_FRICTION, so it only worked with lower frictions.
SVN r3538 (trunk)
The initial spawn did not, so this can prevent respawns of things that were initially
spawned if they happen to intersect a wall.
- Fixed: Don't respawn actors inside the floor.
- Fixed: The final calls to P_FindFloorCeiling() in P_NightmareRespawn() and A_RestoreSpecialPosition
also need to pass true as the second parameter. (Because this parameter is onlyspawnpos, not
onlymidtex.)
SVN r3518 (trunk)
but their Z position would not actually be moved up, so the subsequent call to P_ZMovement()
would destroy it because it was in the floor.
SVN r3491 (trunk)
your movement was blocked, even if it wasn't that wall that blocked you. Note that this is just
a Z check against the actor and the floor and ceiling heights; it might still be possible to
goof it up, but the common case is fixed.
SVN r3414 (trunk)
Includes:
- Made the move tried from checking missile spawns ignore drop off height. This solves the Voodoo Gun ghostly civilian issue.
- Fixed: the NOTELEPORT flag is removed from Dehacked missiles which lose the MISSILE flag. This caused problems with certain special effects based on dehacked spawn cubes.
- Fixed: all Boom silent teleporters preserve relative height.
- support for palette independent particle colors if the renderer can handle them.
SVN r3329 (trunk)
A_DeathBallImpact uses these to avoid aiming at friends when the death ball
bounces. (The pointer is needed because the missile itself does the aiming,
not the player that shot it, and missiles are nobody's friends.)
SVN r3315 (trunk)