Commit graph

340 commits

Author SHA1 Message Date
toaster
2207115424 Time Attack: Update Medals on player exit, not on intermission
- M_UpdateRecordReplays: Split out M_UpdateRecords
- P_DoPlayerExit: Call M_UpdateRecords in modeattacking
2023-02-05 00:21:08 +00:00
toaster
a020ea86c8 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into rulesify
# Conflicts:
#	src/k_boss.h
#	src/k_specialstage.h
#	src/y_inter.h
2023-01-01 16:02:05 +00:00
toaster
05241341b8 Remove the last few instances of gametype-specific colorisation 2022-12-31 21:38:52 +00:00
Eidolon
be021baa02 Add extern "C" in C++ to all headers 2022-12-30 19:26:16 -06:00
toaster
3ee8713e46 Dehardcode menu gametype selection, part 1
- Introduce `menugametype`
    - Controlled by IT_KEYHANDLER/M_HandleMenuGametype
    - Excludes gametypes that do not support multiplayer by default
        - GTR_CAPSULES and GTR_BOSS for now, but also user-specifiable GTR_NOMP
- Remove gametype_cons_t and G_UpdateGametypeSelections, an obstacle in the way of infinitely allocatable custom gametypes
2022-12-30 15:23:26 +00:00
toaster
03c8fd543f More fun rules for Special Stages
- GTR_ROLLINGSTART
    * Initial instathrust, as before
    * Forced MAXPLMOVE forward
    * Disable finish line beam
    * "Super transformation" sound
        - Reference to the previous entry in the series' Perfect Startboost mechanic
- GTR_SPECIALSTART
    * Instant white fade
    * No titlecard (overridden by Boss intro)
    * Starting warp sound
- Match slidein time with no traditional titlecard to the end of the playsim intro fade
- Remove G_IsSpecialStage
2022-12-27 17:58:35 +00:00
toaster
17dd15b998 "Special Mode" (Sealed Stars) and "Versus Mode" (bosses) are now gametypes
* The existing structs are now exclusively for handling extra data.
    * `specialStage` has been renamed to `specialstageinfo`, to reflect that it is not the sole arbiter.
    * `specialstageinfo.valid` and `bossinfo.valid` are what must be checked before grabbing data from either struct.
        * These are turned on when the gametype extra data is successfully initialised, not on map start.
            * `K_InitBossHealthBar(...)` for `bossinfo.valid`
            * `K_InitSpecialStage(void)` for `specialstageinfo.valid`
        * `K_CanChangeRules(...)` no longer checks these
    * No longer uses duplicate encore information.
* The map command (and -warp) now guesses gametype using a general `G_GuessGametypeByTOL(UINT32)` function
    * Grabs the first gametype with an overlap between the requested TOL and the gametype's TOL.
* The cool Versus-specific intro is now checked via `K_CheckBossIntro()`.
2022-12-26 23:06:24 +00:00
toaster
185b36bd27 gametype_t
- New array of pointers to structures in memory (currently mixing static for base-game and Callocated for custom)
- Centralises a metric-ton of previously seperately handled properties into one struct
    - Gametype_Names[]
    - Gametype_ConstantNames[]
    - gametypetol[]
    - timelimits[]
    - pointlimits[]
    - gametypedefaultrules[]
- Don't attempt to guess custom gametype in Replay Hut (requires more work to make custom gametypes behave across the entire experience)
- I_Error if invalid gametype set
- gametyperules is deprecated since it will never be modified seperately from gametype (temporarily a #define, don't wanna bloat this commit too much)
2022-12-26 01:07:57 +00:00
toaster
d95ac73f3b Remove Gametype Preference and Voting Rule Change cvars
* The consensus has moved against gametype changes in voting, so strip it out
* Encorescramble already independently controls setting Encore, so don't keep the outdated randomisation method
Done in this branch because it uses gametype constants directly, both in a cvar and function, and I want to get rid of as many of those as possible
2022-12-24 17:03:36 +00:00
James R
b5310a1f68 Add typedef.h
All typedefs for structs that were present in other header
files have been moved to here. (Except node_t because the
renderer and netcode both define node_t LOL.)
2022-11-27 17:21:40 -08:00
toaster
00b73d4a48 Rework nextmap a little further
- Set gamemap after intermission, rather than before.
    - Fixes a bug where the NO CONTESTed player wouldn't get cycled out on the 4th round, because it had already been incremented by G_GetNextMap.
- Make the vote screen a special NEXTMAP_VOTING constant, for sanity, and to make cv_advancemap handled all in one place.
    - Along with the above, fixes a bug where changing cv_advancemap would only enable or disable the voting screen, not change the nextmap.
- Call G_EndGame in G_NextLevel, since they were never used seperately.
- Add Special Stage and marathonmode to K_CanChangeRules.
2022-10-12 19:48:01 +01:00
VelocitOni
1d2e1420f6 Merge branch 'master' into cheats-streamline 2022-09-25 14:27:17 -04:00
Sally Coolatta
117d791424 Merge branch 'master' into cheats-streamline 2022-09-23 14:38:54 -04:00
toaster
48e9138dda Refactoring ahoy
* Instead of doing constant G_MapNumbers when finding the relationship between maps and cups...
    * Add a cache of level IDs to cups, to go with the strings.
    * Add a cache of the cup pointer to maps, so we don't have to search through all cups to find our map. (done in P_InitMapData)
    * Pre-emptive work: G_IsSpecialStage and P_GetNextEmerald now reference cup data instead of a hardcoded ID set.
* Remove a bunch of old stuff from mapheaderinfo_t/associated, and reorder what stays
    * Countdowntimer? 💥
    * Startrings? 💥
    * sstimer/ssspheres? 💥
    * forcecharacter? 💥 (distinct from forceskin)
    * interscreen? 💥
    * sstage_start/end and smpstage_start/end? 💥💥💥💥
    * You've been blocked
* G_MapNumber now returns a special NEXTMAP_INVALID if not found, for more consistent reference.
* Incorporate a good chunk of the `edit-headers` branch. Can't clear maps individually because of the new restrictions on sequential mapheaders, but we can add a "disable in vote screen, not even for map hell/archive" flag to a map at some future juncture for equivalent functionality...
2022-09-22 17:14:41 +01:00
toaster
60355d9efd Move two of the three remaining NUMMAPS arrays part of the mapheader_t struct
- mapvisited and recorddata_t (previously mainrecords)
- Changed how gamedata is saved and loaded
- Change the versioncheck (funny hex provided by chengi) AND call it `developringdata.dat` in develop builds
- Fix a bunch of off-by-ones in condition and emblem data
ALSO, for Time Attack:
- Fix menu not showing off your times
- Now save times even when gamedata modified, since the menu didn't care (come back to it?)
- Don't save times or do intermission screen if the Capsule Attack ended because you lost all your bumpers
- Fix a crash adding ghosts in Capsule Attack
2022-09-21 22:12:36 +01:00
toaster
7d990c4f15 Rework nextmap to be automatic
- Refactor significantly (now has its own func, `G_GetNextMap`)
    - If gametype uses cups, iterate through cups to find the current level, then grab the next valid level
    - If not, get the next valid mapheader for your gametype
    - SOC `nextmap`/`marathonnext` is not just deprecated but REMOVED
    - Hide the NEXTMAP_ constants again, but leave support dummied out for if we have them publically accessible again
- Also get rid of a bunch of OTHER mapheader stuff we're never gonna use
    - NiGHTS Grades? NOPE
    - Vanilla titlecard patches? NOPE
    - Boss music fadeout/replacement? NOPE
    - Select Heading? NOPE
    - You've been blocked.
- Don't show maps without lumps on the level select list
- this is me being petty, but making it NOTIMEATTACK in SOC instead of TIMEATTACK so we can reconsider the maps with/without them.
2022-09-18 20:00:28 +01:00
toaster
b68710faf2 Rework special nextmap events.
- G_MapNumber now handles special NEXTMAP_ nextmapspecial_t constants that exist at the end of the available type.
- Cleanup of G_DoCompleted
- Add bounds checking to the various SOC maincfg map starts (spstage_start, etc)
- Add lump checking to titlemap behaviour
2022-09-17 19:10:04 +01:00
toaster
1a284ec7c6 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into big-large-map-markers
# Conflicts:
#	src/d_netcmd.c
2022-09-17 13:57:26 +01:00
VelocitOni
8a5707ad83 Merge branch 'master' into hostcode 2022-09-13 17:08:15 -04:00
Sal
a7716b966a Merge branch '14plus-votechanges' into 'master'
1.4+ Voting Changes

See merge request KartKrew/Kart!655
2022-09-11 06:30:39 +00:00
Sally Coolatta
2fddc9f343 Merge branch 'master' into big-large-map-markers 2022-09-10 16:01:02 -04:00
toaster
7edec43d72 Port Gametype Preference and associated changes
Notably, makes the PWR-based Encore scrambling component of G_SometimesGetDifferentGametype WAY less spaghettified.
2022-08-28 23:36:55 +01:00
Sally Coolatta
2fdd8c1e13 Implement shout commands
- shout command to create a server message, with its own special sound cue & color
- shoutname to control the nametag, by default this is "SERVER"
- shoutcolor controls the color of the message. By default it's red, but there's also a option for player colored.
- autoshout makes any message sent by a admin/server automatically turn into a shout
- Unlike HOSTMOD shout, integrated it with the dedicated server say behavior -- using say on dedicated server is always a shout.
2022-08-24 21:02:39 +01:00
Sally Coolatta
36b8ab1eac Streamline cheats
"cheats" is a proper cvar now. Enabling it allows for cheats to be used any time, even in multiplayer, and disables gamedata saving. Turning it off undoes as many cheat commands as reasonably possible. Based a little bit off of some vanilla work I also did.

Many cheat commands are still SP-only, but can reasonably be allowed in netgames now if a net command is created for them.
2022-06-08 12:46:56 -04:00
toaster
d963dea4f9 Merge branch 'master' into new-menus
# Conflicts:
#	src/Sourcefile
#	src/deh_soc.c
#	src/m_menu.c
#	src/p_user.c
#	src/r_data.h
#	src/r_skins.h
2022-05-25 15:12:51 +01:00
Sally Coolatta
0dc472a255 Try resetting driftend 2022-05-22 15:38:08 -04:00
Sally Coolatta
4b149c103c Bring back camera turn prediction
REALLY complicated, because just emulating player turning in ticcmd code is broken.
2022-05-21 03:11:37 -04:00
toaster
73dabaeab6 Merge branch 'master' into new-menus
# Conflicts:
#	src/d_clisrv.c
#	src/deh_soc.c
#	src/lua_baselib.c
#	src/m_cheat.c
#	src/m_menu.h
#	src/y_inter.c
2022-03-29 17:14:38 +01:00
Sally Coolatta
fd7c377043 Force shrink can be toggled individually online
In preparation for a "make yourself small by default" cheat on the char select like SMK.
2022-02-14 14:29:50 +01:00
toaster
2df53dd5a5 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart.git into votefree 2022-01-23 22:46:11 +00:00
toaster
8c3fad058d * Fix the Z_Free double-free issue (in two different ways, one ifdef'd out) that can sometimes occur on the vote screen.
* Fix a technically invalid read in D_SetupVote.
* If the third map on the voting screen has a different gametype, don't interact with the buffer.
* Fix the inttime 0 setting, since I was in y_inter.c and testing quick map changes.
2022-01-23 20:33:27 +00:00
Sally Coolatta
c606e1e96b Force shrink can be toggled individually online
In preparation for a "make yourself small by default" cheat on the char select like SMK.
2022-01-09 04:08:26 -05:00
Sally Coolatta
0179466107 Finalize char select multiplayer
- Add menu control fallbacks.
    - If it could not find a bind using your existing keys, then it looks at default controls.
    - If it could not find it then, and you're P1, then it looks through gamepads, and then lastly settles for keyboard.
    - Changed around the order of operations on the character select menu, to accommodate for this change.
- Added initroutine to menu_t, which is called every time without question when going to a new menu. This solves many, many minor bugs you could experience in the character select menu when changing between menus, due to things only being properly reset when selecting the character select menu option.
2021-12-28 12:02:31 -05:00
Sally Coolatta
cd8862f0bc New input handling
Events have a player ID instead of adding billions of keys for separate gamepads. Axis movement (mouse movement, analog sticks) now are counted as keys, so axes don't need to be separately implemented for all controls. Game controls emulate a Saturn controller (some of the external functions like screenshot / gif should be readded, but I got lazy)

This will allow later us to save a config for a controller that can be reused for any player slot, which is one of the main goals for profiles.

Only just enough was made to use the new input system to make it compile. Menus in this branch should aim to move to using PlayerInputDown entirely, instead of using hardcoded keys & simply remapping to those
2021-11-26 14:56:25 -05:00
Sally Coolatta
359cf86efb Merge branch 'master' into big-large-map-markers 2021-04-09 19:49:33 -04:00
Sally Coolatta
8bb1fa57d4 Merge branch 'master' into 22-merge-again 2021-04-05 01:11:26 -04:00
Sally Coolatta
0a10396c84 Spindash shortcut button 2021-03-09 17:28:20 -05:00
Sryder
8344ac3489 Actually just get rid of seenplayer and NAMECHECK altogether. 2021-03-03 18:03:41 +00:00
Sally Coolatta
20e2c78331 Delete seenames code
We had SEENAMES disabled before, and vanilla removed the define, so I went ahead and removed it. Repurposed the old seenames console variable for our nametags.
2021-02-28 21:27:23 -05:00
Sally Coolatta
9d7ec0ab8f Merge SRB2 next
Probably doesn't compile yet, but I got rid of all of the conflicts for anyone who wants to take a stab at it.
2021-02-27 05:18:36 -05:00
toaster
08d087c6b5 Acceleration Kickstart, my little hobby project.
It's no secret that holding down a button a lot can fuck with your wrists and fingers. It's too late for me to be damageless, but I can at least create an option to reduce further harm.

This accessibility feature, when enabled (kickstartaccel and kickstartaccel2/3/4 in the console) behaves with the following properties:
* Hold accelerate for 1 second to lock it down.
* Press again to release.
* Short holds/presses do nothing (good for POSITION).
* Continue holding it during the releasing press to re-lock it.
* A small triangular UI element is added next to the speedometer sticker, which displays the current state of the acceleration kickstart for visual feedback. (NO SPLITS SUPPORT YET)

In addition:
* Add PF_ACCELDOWN and PF_BRAKEDOWN, and BT_REALACCELERATE (which ACCELDOWN tracks). Even if this feature never gets merged, BT_REALACCELERATE is required because sneakers and boosters force it on too (extending this is how I implemented it).
* Fix the dehacked playerflag list being out of shape.
* I replaced some existing flags during development of this branch, so their old uses have been whittled away.
2021-02-20 23:10:18 +00:00
Sryder
0be892ba0d Turn the aim axis into a digital one, as we only use it for throwing items and the vote screen
Turn axis still has the same deadzone handling as before, meaning it gradients away from the deadzone properly.
2021-01-09 12:09:00 +00:00
James R
41f1b3b97c Kill SEENAMES 2020-12-12 02:11:23 -08:00
James R
37c345c7eb Map lump names can be anything, map number is dynamically allocated 2020-10-30 20:10:31 -07:00
Sally Coolatta
9b6aa946ea Merge remote-tracking branch 'srb2/master' into the-scary-22-merge 2020-10-24 19:28:06 -04:00
Sally Coolatta
b5fcd74ef9 Merge master
Slopes in a few maps are really broken ... think it's anchors, I'm gonna leave that to jart :V
2020-09-25 12:00:50 -04:00
Lachlan Wright
b37d6ba94d Merge branch 'name-change-spam' into 'next'
Don't let players change their name more than five times per minute

See merge request STJr/SRB2!1155
2020-09-25 09:36:39 -04:00
Sally Coolatta
672c4fb763 Make aiming relative too 2020-09-25 02:06:37 -04:00
James R
c0abb2ca09 Don't let players change their name more than five times per minute
(ported 2948885660 and 4e9d006c37)
2020-09-22 12:04:28 -07:00
Sally Coolatta
99a1bacb81 Turning code overhaul
Packet drops are still broken, but at least netgames are playable now.
2020-09-22 00:35:44 -04:00