From eeb096e64cc768b9ea99db1ad5c25b8692612db5 Mon Sep 17 00:00:00 2001 From: kraflab Date: Fri, 6 Oct 2023 17:14:40 +0200 Subject: [PATCH] Add movefactor --- docs/udmf.md | 1 + prboom2/src/dsda/udmf.cpp | 3 +++ prboom2/src/dsda/udmf.h | 1 + prboom2/src/p_setup.c | 5 +++++ prboom2/src/p_user.c | 3 +++ 5 files changed, 13 insertions(+) diff --git a/docs/udmf.md b/docs/udmf.md index 86f0f9611..a4328b986 100644 --- a/docs/udmf.md +++ b/docs/udmf.md @@ -170,6 +170,7 @@ DSDA-Doom supports the `zdoom` and `dsda` namespaces and the zdbsp extended gl n | :duck: **skyfloor** _string_ | Floor sky texture. | | :duck: **skyceiling** _string_ | Ceiling sky texture. | | :duck: **frictionfactor** _float_ | Friction factor. Ranges from 0 to 1 (default is 0.90625). | +| :duck: **movefactor** _float_ | Multiplier for actor ground movement, normally derived from the friction factor (default is 0.03125). | #### Scroll Mode diff --git a/prboom2/src/dsda/udmf.cpp b/prboom2/src/dsda/udmf.cpp index 63ecf0f4a..32c0dfaa3 100644 --- a/prboom2/src/dsda/udmf.cpp +++ b/prboom2/src/dsda/udmf.cpp @@ -629,6 +629,9 @@ static void dsda_ParseUDMFSector(Scanner &scanner) { else if (scanner.StringMatch("frictionfactor")) { SCAN_FLOAT_STRING(sector.frictionfactor); } + else if (scanner.StringMatch("movefactor")) { + SCAN_FLOAT_STRING(sector.movefactor); + } else if (scanner.StringMatch("lightfloorabsolute")) { SCAN_FLAG(sector.flags, UDMF_SECF_LIGHTFLOORABSOLUTE); } diff --git a/prboom2/src/dsda/udmf.h b/prboom2/src/dsda/udmf.h index 81e095974..b0caecba1 100644 --- a/prboom2/src/dsda/udmf.h +++ b/prboom2/src/dsda/udmf.h @@ -212,6 +212,7 @@ typedef struct { int thrustgroup; int thrustlocation; char* frictionfactor; + char* movefactor; udmf_sector_flags_t flags; } udmf_sector_t; diff --git a/prboom2/src/p_setup.c b/prboom2/src/p_setup.c index befc73282..3e9fdd6c4 100644 --- a/prboom2/src/p_setup.c +++ b/prboom2/src/p_setup.c @@ -1018,6 +1018,11 @@ static void P_LoadUDMFSectors(int lump) P_ResolveFrictionFactor(dsda_StringToFixed(ms->frictionfactor), ss); } + if (ms->movefactor) + { + ss->movefactor = dsda_StringToFixed(ms->movefactor); + } + ss->damage.amount = ms->damageamount; ss->damage.leakrate = ms->leakiness; ss->damage.interval = ms->damageinterval; diff --git a/prboom2/src/p_user.c b/prboom2/src/p_user.c index a47629a39..0826d3e6b 100644 --- a/prboom2/src/p_user.c +++ b/prboom2/src/p_user.c @@ -419,6 +419,9 @@ void P_MovePlayer (player_t* player) int bobfactor = friction < ORIG_FRICTION ? movefactor : ORIG_FRICTION_FACTOR; + if (map_format.zdoom && !movefactor) + bobfactor = movefactor; + if (cmd->forwardmove) { P_Bob(player,mo->angle,cmd->forwardmove*bobfactor);