* Flashing Eggman-hit players.
* Fix typo with Rocket Shoe item bar, and make it extensible for potential future purposes since I was fiddling with it anyways.
* More complete playerarrow visuals for various items.
* Eggman fake (and debug) item get sounds.
* Steal a point from Ballhog and give to Orbinaut.
* Make it based on the maximum number of bumpers someone has, not the average for everyone.
* Improve the odds a tad if you're Wanted.
* Tweak the score multiplication to give three points for Wanted and two for removing the last bumper (both disabled if you get the hit with a fake item).
* Allow Karma players to drop their Random box.
* These boxes flicker out of existence after 15 seconds.
* Causes a WAIT penalty, too.
* Remove some redundant PF_ATTACKDOWN stuff, given under the conditions the flag would be applied, it has definitely *already* been applied.
* Make Orbinaut Shields animate at 3 tics per frame, not 1.
* Make dead items flash in and out of visibility.
* Related to above, fix a few circumstances where returning was not properly handled after removing a mobj in mobjthinker.
- Turning dust is spawned in the correct position
- Turning dust sprites are flipped
- Shadows display on the ceiling for flipped objects
- Drift sparks display in the correct position for flipped players
Will continue with item fixes tomorrow
- Ballhog has explosion + sound on death
- Ballhog shrinks to nothing if it didn't hit anything
- Replaced a Mario sound on Orbinaut
- Fixed Jawz's sound effect
- Fixed Mines not being removed on death pits
* Palette remaps.
* Branding.
TODO:
* Doesn't work in GL. (Mostly.) I have SOME ideas on how to tackle this, but...
* Transmaps are broken in Encore for some reason.
* I tried to make in-level colormaps shimmy over, but it didn't quite work, so I commented it out and only semi-fixed it.
* Stop respawning spectators when their PF_WANTSTOJOIN request hasn't been processed yet.
* Handle PF_WANTSTOJOIN requests in GS_WAITINGPLAYERS.
* Refactor K_CheckSpectateStatus, and make it so PF_WANTSTOJOIN requests are processed if there's only one player in the server, even if they're on lap 2 or up.
* Make the player entry mechanism in P_SpawnPlayer use the PF_WANTSTOJOIN mechanism so that it can also take advantage of the level refresh mechanism with no extra code.
* NOTE: This does a bad hack in order to not send multiple mapchanges while the joining timer is low! If you can think of a better way to do this, please let me know/commit it.
* Change the timer until you can hit ITEM again when a spectator who has to wait to join shorter.
* (controversial, but I think necessary) - flash the ITEM text when the above-mentioned timer is nonzero.
- Getting wipeout bumped into offroad slows you down
- Orbinaut & Jawz are relative to your weight (Jawz is heavier), via new function K_GetMobjWeight
- Reorangized where K_KartBouncing is called so that wipeout changes don't affect Eggman Items
- You can bump other people during spinout.
- Bumping during spinout activates a "slow down" timer, which increases your friction after a few tics.
- You have a Smash-style dust effect after a spinout bump, indicating clearly if you'll slow down or not.
* Deaths in record attack no longer put you into a glitchy singleplayer game-over state that we somehow both kept around and also broke since we branched Kart off of Vanilla..
* Fix non-standard mapscales making the Death Egg respawn octagons dissasemble themselves.
* Allow for MULTIPLE TIME EMBLEMS PER MAP, at least in the emblem UI on the timer. It shows all completed emblems plus the uncompleted emblem up to a total of three.
* Major tweaks to the First Person HUD.
* I know this was your baby, Sal, and some of the changes may prove controversial - so I've put the ones that are likely to cause the most fuss inside an ifndef block, so that you can toggle it as you please with minimal code changes.
* Dontdraw-ness, transparency, and colorization match the player's object!
* Moves around on the screen with respect to the direction of the player object's motion, to make drifting look nicer!
* Flashes the colour of your drift sparks.
* Did a WHOLE bunch of things with respect to music. I'm not sure how to describe this, so I'll go through step-by-step.
* Countdowns now play the drowning music again.
* Removed/disabled extraenous P_RestoreMusics.
* Made map-ending music called by its own function, P_EndingMusic(player_t *player).
* Made the ending music play on the LAST player crossing the finishing line in splitscreen, rather than first.
* Make dead players spinout and clip through the floor, at least until we add the new death anims.
* Fix prior pogo spring usage making dead players fall faster.
* Make the time over countdown use the kart font when not splitscreen with 3 or 4 players.
* Removed a weird bonus HWR_DrawCroppedPatch function signature in the hardware header.
* PRETTY SURE I fixed that bastardacious issue with multiple shield items disappearing at once. Done via introducing lastlook to store the updated count.
* Fix an issue with incorrect scale setting for shield items.
* Clean up a bunch of weird shit with regards to setting of hnext/hprev chains. (Why does the player go on the opposite end to the direction you enter the chain from...)
* Repair hnext chain on mobjremoval as well. May or may not remove the need for overlay/shadow thinkers; too tired/excited to dig into that atm.
- SPB multiplier depending on 1st-2nd distance
- Removed the Battle-only k_poweritemtimer (hold over from when you could easily get invuln items all of the time), replaced it with a 2 invincibility item cap in ALL modes.
- Spinout is affected by boosters, *properly*
- Can no longer strafe while spinning out on speed bumps
- Messed with how other items interact with speed bumps, again.
- Old bounce code has been ported for non-players
- Fixed Karma players being able to do anything after the round has ended.
- Fixed sneaker and spinout timer weirdness
- Fixed Mines still being hold-use
- Fixed rubber-burn turn not working
- Removed redundant k_spinout and unused k_boosting variables
- Filled out the Color_Opposite table with Kart's new colors. Not really relevant right now (besides some extra Lua functionality) since nothing uses it, but will be nice for if we do the signpost from the sky idea.
- More Jawz states for later
- Jawz orbit their user in the right direction now.
- Banana trails made closer to each other
- wheels.lua hardcoded
- All held items take a double press, for consistency.
- Fixed Karma Items not being able to be collected by invincibility or hyudoro users
The overlay object now has a hitbox which handles all of the item giving/bombing code, and no longer takes up the player's tracer. This is to give them a bigger hitbox without any bad side-effects of changing the player's hitbox directly (shadow size). Should make bombing more useful, and just sliiiightly less missed high-fives from items.
- Mines last twice as long
- Mines can appear in 1st with a measly 5% chance, for maximum ass-blasting
- Mine shiiiiink sound no longer plays globally
- Thrown Bananas and Eggman Monitors bounce off walls like Mines
- Hyudoro can steal from anyone
- Halved invincibility alarm/music distance
- Getting out Orbinaut/Jawz plays a shield sound
- Using Shrink plays a devastating Chaotix sound
- SPB plays a high-pitched wail when it's locked in
- Hyudoro plays a ghosty sound when used
- Fixed Battle arrow roulette
They can now blow up after they first stick their spikes out in the deploy animation. They also make a spikey sound effect to indicate when they can blow up.
- Fix merge issues
- Update invincibility flash to use its own object instead of MT_OVERLAY, so extra hacks don't need baked into overlay thinking
- K_SpawnSparkleTrail can accept mobjs now, since there really wasn't any reason it needed a player.
- Comment out a few old MK/vanilla SRB2 effects for now
- cmd->driftturn exists now, for figuring out how far you're turning. Added to prevent analog sticks from being able to get drift sparks faster.
- Feather bounce strafing moved to use cmd->sidemove, which means it also supports analog now.
- Braking now waits a few tics for you to be stopped for a few tics before it lets you go in reverse, as per Sev's request.
- Removed a lot of unused/redundant/commented out control code, and reorganized some of the existing code.
Some people like to lag up the whole server by enabling precip, so y'know what, just turn it off in netgames. Weather can just stay a Record Attack/splitscreen only feature now I guess
Use reactiontime instead of health so chain reactions can occur when multiple bombs are layered.
Make the check for nearby players happen BEFORE the spawning of explosion objects.
Remove MF_NOCLIPTHING and MF_MISSILE from bombs so they don't try and die when they hit the floor sometimes.
Removed Magnet item box pulling code. It's a mess, hacky, doesn't really help in races, and breaks things. We will implement something new for it soon.
Should make it a lot easier to add more gametypes later.
Also some minor fixes:
- Changed up how shell speed scales in mobjscale juuuust slightly, so
it's less messy
- Fixed CHECK showing spectators
- Flame trails don't spawn if you're not on the ground
- Mobjscale: Shells are now the correct speed
- Mobjscale: Explosion's wipeout hit height scales
- Look backward button works
- Increased default cam_speed, from 0.3 to 0.45. This is the highest
value that I think doesn't look overly stiff.
- Removed bobbing in first person
I was trying to do the camera angle thing that we've been talking about
for a while, but I can't get it to work well.
- Menus now have all of the Kart cvars
- Removed any cvars that aren't useful for Kart from the menu (they
still exist in the console, though)
- Removed SP and NiGHTS Mode options from the main menu
- "kartcc" is renamed "kartspeed", uses values 0-2 instead of multiples
of 50, or the terms "Relaxed", "Standard", and "Turbo"
- Many gametype options (game speed, frantic, mirror, & karma comeback)
are now changed on map load instead of instantly
- New cvar, "kartminimap", for disabling the minimap
- The maxplayers cvar now actually matches up with our 16 player limit
- Game now keeps track of matches played. Has a condition type
associated with it, as well.
- Game checks for unlocks and saves gamedata when finishing a match,
even in MP
- Removed most of the normal emblems, added a single emblem for Green
Hills. Didn't know what to do with extra emblems and such so I just left
them (FOR NOW c:<)
- MT_FALLINGROCK bumps you instead of spinning you out! RIP annoying af apples
- Made some Battle-related messages only happen in netgames
- Messed with the timing on the intro
This prevents a mobj of NUMMOBJTYPES from being created and potentially crashing the game. Really, this happens only if you start messing with the mapthings of respawning items like rings/weapons/etc in the first place via Lua.
Replacement for Oldbrak mode, lets you set any scale instead of only
1/2, also modified some of Kart's scale shenanigans to be compatible.
Requested by Sev for Dimension Heist
- Added kartmirror cvar, flips the screen & player controls. The
post-processing effect is currently Software only; will need an OpenGL
implementation but I don't know enough to make that happen
- Moved adminplayer = -1 setting to SV_ResetServer instead of
SV_StartServer
- SMK-style wipeout
- Using goldshroom removes some of its timer again
- Karma item boxes follow the player more closely
- "ATTACK OR PROTECT" no longer appears when you die if you've already
seen it
- Lua support for our SOC actions
- Fixed KARTSTUFF_LIST for Lua/SOC
- "Battle" is now an accepted word in level headers for setting
TOL_MATCH
- Default map numlaps is now 3 instead of 4
- Reverted making LF2_RECORDATTACK and LF2_NOVISITNEEDED default menu
flags, needs to be set manually now
- Enemies can no longer award points
- You should no longer get karma for "bombing" someone during their
invincibility frames
- Red shells have slightly more friction in Battle
- Improve balloon-based items. Much more distinguished differences
between the different ranks
- Reverted Feather strafing. You can now just... properly move in the
air, if you're using a Feather or a Bounce Pad.
- Bounce pads are now stronger while using speed items.
- Fixed the long standing bug about offroad & ziplines working when
you're on FOFs above them. This is a tricky subject, so please report
any issues you may come across related to this.
- Shells should no longer travel to Mars, nor will they when using
bounce pads. They should now do a gentle hop.
- :WIP: new MP Player Setup screen, now shows character stats. Will
later feature the list of characters in a row of icons, and a backported
2.2 color selector with toast's permission
- Renamed "Match" to "Battle" :p
- Yet MORE minor cases where kartspeed & kartweight were being read as
fixed_t when they're freakin' UINT8's, people!
- Position faces are now drawn in Battle, categorized first by balloons,
then by points
- Balloon-based items, gives people who are worse off better items, and
people who are better off worse items.
- You can strafe while using feather or while using a bounce pad
- Reduced the strength of bounce pad thrust on items
- Increased bounce pad's minimum forward push on players
- Made Frantic Mode just a teeeeensy bit more frantic
- Fixed being able to use Feathers mid-air
- Fixed being unable to steal Feathers
- Drift sparks use frameangle instead of angle
- Comeback players are now 1 speed with -20 friction
- Bombing gives 2 karma now
- Item players should no longer be able to be hit
- Attempted to fix instances of trying to bomb someone while they can't
be touched causing you to lose all your karma and start a console
message saying you're back in the game, despite not rewarding a balloon
- Fixed a few places where kartspeed & kartweight were being read as
fixed point numbers, despite being UINT8's
- Fixed up kartstuff Lua support more, functions properly now
- K_DoBouncePad now uses mobj_t instead of player_t
- Bounce pads can now bump thrown shells
- Bounce pads now give heavier gravity to players
- The suicide command now works in all gamemodes
- Comeback timer is now always 10 seconds instead of scaling
- Takes 10 seconds before exiting
- Flashing tics is doubled in Battle Mode
- Removed a bunch of bomb nerfs
- Bombs are back to making only 1 point per hit
- Exposed K_GetKartAccel & K_GetKartFlashing to Lua
- Item boxes should no longer drop while going up slopes
- Trading item boxes with a bomb should turn you back into a bomb
- Balloons should no longer all respawn when dying in pits in 2-player
games
- Flashing players are able to kill *thrown* shells again (shields and
trap items are still unkillable). Prevents red shells from being able to
stick to a flashing player and hurt them again as soon as they're done
flashing
- CHECK appears at a farther distance
- Bomb overlay is invisible during comeback timer, and flickers back in
when it's almost up
- Show comeback timer on HUD
- Feather is stronger & has more gravity
- Option to use SMK star alarm instead of overlapping music
- Using P_MobjDamage normally on players now defaults to normal spinout
instead of shell's instant stop
- Some general gametype case fixes (most notably, being able to spin
people out in Race using a mushroom)
"Missile" items are spawned on the ground and should follow slopes when the player is on the ground
Forwards thrown items should work in reverse gravity
Dropped items are dropped slightly closer (depends on player and item radius) and have their position set correctly
Held items are held closer (depends on player and item radius)
- Comeback timer gets higher the more you get hit
- Your ghost appears over the bomb
- Speed & accel is set to worst while a bomb
- CHECK range scales with kartcc
- Player arrows now show if a player is in the item roulette
- Boo has been improved, and added back to Battle's item roulette
- The CHECK HUD item is now more accurate, and should appear more often
- Early comeback mechanic. Functional, but really unpolished
- Attempted (again) to make the first player to join in a netgame spawn
with balloons
- No longer shows respawn text on death
Added extra boolean for P_SlideMove forceslide, since kart's walls are almost all bouncy slidemove will almost always bounce things instead, even if we don't want it to.
- Different sizes for the balloons, depending on how many you have
- Balloons are fullbright, cast shadows, and stick closer to players
- Mega Mushrooms can now appear
- Can steal items with Boo in Battle Mode now, as intended
- Death pits make you lose only 1 balloon
- Balloons disappear properly if you use Boo
- Boo item icon should no longer appear if you're out of balloons
- You can now properly respawn in Battle Mode
- Can no longer collide with items if you are already holding one
When they get close their top speed starts to decrease to the player's current speed.
Movement direction ends up being adjusted in A_RedShellChase where it Thrusts towards the player at its acceleration speed.
To-Do:
- fix demo desync (desync is only super noticeable on slopes, but a
message pops up when the player starts moving regardless)
- fix ghosts not appearing
- replace that dumb level tally
- remove a bunch of things that made the assumption that race & record
attack would never mix (ex: "next map x doesn't support race mode, using
map y anyway" message)
- Rarer
- Speed reduced from +25% to +20%
- Getting squished doesn't last as long
= Nerfed the Banana Meta - or at least changed it
- You don't wipeout for as long
- You don't lose as much speed from wiping out (1/2 instead of 1/4)
= Respawning after death is faster
- Lakitu drops you faster, only three floaty sounds instead of four
= Adjusted the camera to the values given by Sev
-------
Lakitu returns from his ironically-not-pillowshaded-cloud grave
Dropboosting works on respawn
Players respawn "automatically after 2 seconds" instead of "*instantaneously* while accel is held"
Fixes with respect to sector special touching and slopes
Some important stuff.
* SF_TRIGGERSPECIAL_TOUCH now actually works. Previously, it abandoned the loop early if ANY bounding sector didn't have that sector flag, which it likely didn't - only checking one extra sector's worth of FOFs. Also, the teleport handling there is more robust, and actually bails out if you teleport, instead of just awkwardly continuing through the loop.
* SF_TRIGGERSPECIAL_TOUCH now works for each time thinkers, too.
* Fixed a bug with being able to go under lava because P_CheckSolidLava doesn't take slopes into account.
* Also, P_CanRunOnWater supports slopes now too.
* Quicksand supports slopes and reverse gravity now.
* Space Countdown supports slopes now.
Also, an experiment behind a #define which currently isn't turned on:
* UNDER A #define, "SECTORSPECIALSAFTERTHINK", WHICH IS CURRENTLY TURNED OFF, BUT I WILL WANT TO TURN ON IN INTERNAL: Moved sector touch handling to P_PlayerAfterThinker (from P_PlayerThinker before movement). Allows for being able to trigger moving slope sectors that are going down, most specifically lava (didn't matter in RVZS in 2.1 because you could clip through the sides and go underneath the lava, causing damage - a sloped testwad version of that prevented going underneath.) Also fixes one-frame standing on deathpits before you die. Basically means sector triggers effectively happen one tic earlier, since it's after movement.
See merge request !131
Missiles 'n slopes
Fixed that thing where missiles like sliding up slopes for some reason.
This isn't a 1:1 fix compared to non-slopes - missiles still like stepping up over the borders of sloped sectors and will continue going as long as they never touch that ground again, whereas they can never step up on flat ones - but this fixes the most egregrious issue.
See merge request !181
-------
Braking no longer stops on a dime, and instead reduces your speed input. The effect is different between braking and accelerating at the same time, and braking on its own.
Increased 'driftweight' to player->kartweight*14, up from player->kartweight*12.
Changed the base drift curve formula from a range of 447 - 303, to 415 - 303. This will result in a very slightly wider drift arc at low weights. This does not effect the strength of steering while drifting.
Drifting without holding a direction now has a bonus of 0.5 frames, up from 0.
Added kartweight to the required number of drift frames, at half value. Lighter characters take up to 4 additional frames to earn blue sparks, 8 for orange.
-------
Reverted drift timer to 52 + player->kartspeed;
Reduced weight's effect on neutral drifting by 10%
Reduced weight's effect on collision by 50%
*EXPERIMENTAL*: Inverted collision's x and y. This should shunt players to the side instead of bump them forward?
--------
Driftboost formula changed to:
49 + player->kartspeed*2;
(No longer factors weight from previous version)
Collision code now factors character weight for players.
Collision code now only plays the collision sound once, rather than per player.
Weight now factors into drifting's base value. A heavier character will drift more straight with no input and have less control.
Added a cheat check in SetPlayerSkinByNum(), to force speed and weight within the boundaries of 1 and 9.
Nerfed orange turbo to 50 frames, down from 60.
-------
Changed the drift spark formula from:
51 + player->kartspeed;
To:
43 + player->kartspeed*2 + (10 - player->kartweight);
This allows an extreme heavy/accel to get sparks more often than an extreme light/speed character. Other extremes should be roughly where they were before.
Lakitu is completely commented out currently and we will be able to re-add it back later
Final lap sounds do some wacky stuff with the variables of the local player only, and also block out the music just to restart it at the same speed currently, changed it to just be the lap sound, we can use a new sound for it later
No longer does all the angle adjustments inside of the player thinker and instead does it with the controls
Should hopefully avoid any desynch from drifting
Also maybe fixed player 2's controls
One Eggscalibur fix
Use mobj->watertop instead of mobj->spawnpoint->z. CEZ3 is far from fixed in multiplayer, but this is still one less thing to worry about.
See merge request !148
(neither does P_CanRunOnWater, but I don't think it's necessary to make that check more complicated as you probably shouldn't be able to waterrun up steep surfaces anyways)
Fixed players disappearing when spindashing whilst wearing multi-layer shields
* Before: http://i.imgur.com/gxUFElo.png
* After: http://i.imgur.com/NxsOg94.png
The problem was that MT_OVERLAY's default radius and height were never getting changed from 1*FRACUNIT, and that meant that when you spindashed, the game considered it completely below the surface of the flat you were standing on. Since you're not usually clipped on flats that don't belong to FOFs, we didn't notice this aspect of the issue sooner.
(SORRY FOR THE MULTIPLE MR'S AGAIN I TOTALLY SUCK AT REMEMBERING TO MAKE SURE IT GOES TO NEXT INSTEAD OF MASTER)
See merge request !124
(the problem was that MT_OVERLAY's default radius and height were never getting changed from 1*FRACUNIT, and that meant that when you spindashed, the game considered it completely below the surface of the flat you were standing on. Since you're not usually clipped on flats that don't belong to FOFs, we didn't notice this issue sooner.)
More slope fixes (aka sorry guys I made another quick SUGOI fix)
Another slopes fix branch!
This branch currently includes a fix for:
* Knuckles gliding into a slope while in 2D mode causes him to try to "climb" on air above them, if the original non-sloped height is higher. Unfortunately he still tries to grab onto places that he can't really climb on, but at least now it's on the slope itself and not in mid-air lol. This issue is encountered in SUGOI's Retro Hill Zone, if you want to check for yourselves.
* Bustable FOF-busting code for both players AND pushables not accounting for slopes
* (Unrelated to slopes): Fix FF_SHATTERBOTTOM FOFs acting like THZ goop when stood on; I added this fix as a bonus because I encountered it in a test map of mine for the bustables fix
(Other fixes may or may not appear here in the near future, I haven't decided yet. Don't wait on me to get in any further fixes before merging, that said)
See merge request !110
Last-minute NiGHTS exiting bugfix
One single-line fix concerning the end of NiGHTS maps. Extremely small, literally zero side effects here, the only reason I'm not committing directly to master (aside from ettiquette) is that I don't have the ability to do so.
* The NiGHTS drone had a single tic of visibility when you hit the goal, which is evident stepping frame by frame through http://gfycat.com/ComplicatedComposedAoudad (the contents of which may or may not make it into 2.2). This is no longer the case.
See merge request !100
* The NiGHTS drone had a single tic of visibility when you hit the goal, which is evident stepping frame by frame through http://gfycat.com/ComplicatedComposedAoudad (the contents of which may or may not make it into 2.2).
* When completing a NiGHTS stage with a non-zero link, the link could flash up in the final few tics before the fade to black. This just checks for player->exiting to make sure it shouldn't be shown.
- Now checks whether the player's top is below the bottom of the fan/gas jet, instead of its bottom. zdist calculation not affected.
- mo->standingslope is NULL'd so the player isn't launched off at a wacky angle. (I also did this for springs, since Prime mentioned it was a problem for them too.)
Sectorlist traversal
MOM GET THE CAMERA
There's a LOT of code in the source that ended up mixing m_snext (the node for the next thing in the sector's thinglist) and m_tnext (the node for the next sector in the thing's sectorlist), so I renamed the following:
* m_snext ==> m_thinglist_next
* m_sprev ==> m_thinglist_prev
* m_tnext ==> m_sectorlist_next
* m_tprev ==> m_sectorlist_prev
Then, I changed all the instances where the code was trying to go m_thinglist_next on a mobj's touching_sectorlist (which would've just gone to the node for the next thing in the same sector, instead of the node for the next sector for the same thing). Notable samples:
* FF_SHATTER blocks now disappear the moment you go into their sector. You still can't give FF_SOLID to them because in that case they will still stop you if you never enter their sector at all (ie - clip on corners), but having them nonsolid no longer allows you to phase through entirely without busting them (which was the whole downside of making them intangible in the first place).
* You can now bump into multiple Mario blocks at a time, even if you're not exclusively in their sector.
* No more getting randomly stopped on the edges of bouncy FOFs.
* Landing on polyobjects might behave a little more consistently at the edge of their host sector.
* Teetering did a SHITTON of code that basically never got executed, and then had directly-blockmap-accessing code as a backup. The code was activatable by replacing the m_thinglist_next with m_sectorlist_next, but it behaved SUPER differently from what we're used to with teetering (if the player mobj's edge was JUST off the edge of a platform, you ended up in teetering frames - even if it looked like you could stand) so I ended up removing that section entirely.
Any objections?
See merge request !85
Also, the teetering angle on slopes is now FRACUNIT/2 because there's literally no way to stand still on a slope that steep unless it doesn't have physics.
Two interesting points of note:
* The touchspecial sector flag seems to actually do its job now.
* Detection of sectors with polyobjects in seems to have done this incorrectly, but this doesn't mess with anything about touching the polies themselves so it seems to really only handle edge cases where the polyobject was too close to the border of another sector (which would've likely made rendering glitches anyways).
* There was a whole swathe of teetering code that was basically never run properly because of this mistake. I did a simple fix at first, but you started teetering whenever you were slightly less than your radius away from a sector's edge, which was completely different and undesirable behaviour. Instead, I cut out the code that was never running, and just left the hacky method in instead since it was more accurate to what we want in general.
Issue was caused by attempting to traverse the sector's thing-touching-list across all the things in the sector (which would inevitably have the same sector as the first node in mobj->touching_sectorlist) instead of traversing the thing's sector-touching-list (which has the same thing but different sector references).
I wonder how many times AJ copypasted this code with absolutely no idea why it wasn't working properly. I'll figure that out tomorrow, maybe set up some compiler macros so this mistake is never made again. For now, I must sleeb.