Commit graph

23311 commits

Author SHA1 Message Date
AJ Martinez
8c08f759ac Use defined type for wavedash charge calcs 2023-05-30 04:54:51 -07:00
toaster
4387ea2f71 M_DrawCupSelect: Updated visuals for Cup windata per difficulty
- New Rank icons
- Use Minimap-sized Emerald instead of Battle HUD
- Shows associated character you last updated (or matched) the position with
    - Also removes the temporary printout display on G_LoadGameData.
2023-05-30 12:21:42 +01:00
toaster
956b3f985f Do not leave uninitialised memory for dummywindata best_placement emerald collection 2023-05-30 12:21:42 +01:00
toaster
989070c3f1 skinreference_t
Please note this is incompatible with gamedata from previous commits on this branch. As always, keep a backup of your last stable gamedata.

A system for record data to point to either loaded or unloaded skins.
- When writing to gamedata, stores a funny internal reference id on skinrecord_t.
- This ID is then used when writing out subsequent references ala mobjnum.
- As an example, has been attached to cup windata.
    - Also assigned based on profile skin when gamedata importprofilewins event is occouring.
    - Set to your current skin if you complete a Cup, OR if you get equal or better on any existing Cup.
- Successfully reassigned alongside unloadedskin records when a skin is added.
- TEMPORARY: Character ownership of Cup wins are displayed in your latest-log.txt, in lieu of an update to the cupgrid
2023-05-30 12:21:42 +01:00
toaster
a36213c435 G_LoadGameData: Improve indentation for gamedata skins block
Done seperately to reduce complexity of diff for the next commit.
2023-05-30 12:21:41 +01:00
toaster
cd2a4b3807 Move skinrecord_t and unloaded_skin_t to doomstat.h
Unfortunately, they are necessary to have in this already bloated file, to avoid circular dependency in future work.
2023-05-30 12:21:41 +01:00
toaster
1527471678 Character win records
Track wins per character.
- If you have an existing gamedata of minor version 2 or earlier, attempt to import your last-used profile's wins onto the character you last used on that profile, so you're not starting from nothing. It's not quite accurate, but it's something.
- Much like map headers and cups, these are also tracked in an unloaded_skins_t linked list. That work was done in this commit because gamedata is actually loaded before even base-game characters, which is annoying but at least confirmed it was working quicker.
- TEMPORARY: Your per-character wins are displayed in your latest-log.txt, in lieu of an update to the in-game statistics menu
2023-05-30 12:21:41 +01:00
toaster
aa35e249d5 g_game.c: Tidy in anticipation of next commit
- Use WRITESTRINGL and READSTRINGL instead of their N equivalents. These are mostly the same, but the macro length is inclusive of the null terminator, so this prevents one-byte overruns.
- Make sure datatype for iteration over nummapheaders is of sufficient unsigned region
- Make sure hashes are calculated based on final field for guaranteed consistency, not initial buffer
- Additional newlines for spacing
2023-05-30 12:21:41 +01:00
toaster
3e663867b9 Move skin->namehash set to conclusion of R_AddSkins loop just before numskins is incremented, as it's possible to have a default name for a skin that doesn't touch the hash codepath 2023-05-30 12:21:40 +01:00
toaster
0b5124b8c4 G_SaveGameData: Remove the "writtengamedata" secondary counter
Instead, subtract from the associated "numgamedata" variable and check if nonzero to continue.
2023-05-30 12:21:40 +01:00
toaster
8d9b42e49b Skin name search-assistive hashing
More opportunities for early rejection in table-wide searches, in anticipation of future work.
- Many circumstances independently implemented string name comparisons. Most of these have been converted to use R_SkinAvailable, with one exception.
    - M_CharacterSelectInit already needs to iterate over the characters, so produce the skin hash independently.
2023-05-30 12:21:40 +01:00
toaster
0f266198ca ACS_GetColorFromString; Fix copypaste error indexing into skin array rather than color array
Discovered while writing the following commit.
2023-05-30 12:21:40 +01:00
toaster
fde06aace2 CV_SetValueMaybeStealth: Correctly null terminate tmpskin for forcecharacter 2023-05-30 12:21:40 +01:00
toaster
acc5fc85b9 Skin rivals system: Adjust for fixes/consistency
- Previously duplicated across R_AddSkins and R_PatchSkins, now handled in R_ProcessPatchableFields.
- Increase the size of the buffer to SKINNAMESIZE+1, to prevent silent failure for long character names.
2023-05-30 12:21:40 +01:00
toaster
65f679c0bc Unloaded cupheader windata tracking
IMPORTANT NOTE - increments gamedata minor version to 3, as it is necessary to backfill windata to prevent losing existing cup records.

This is essentially commit 1482fd5 but for cups.
- All cups currently loaded with nonzero windata are written on gamedata save.
    - This reduces gamedata size for a player who has not unlocked every cup!
- On gamedata load, if a cup is not loaded, store the extra windata on a linked list.
- On cup header creation, check the linked list to see if an associated unloaded cupheader windata exists.
    - If it does, write the record onto the cup structure directly, and delete the "unloaded cupheader" storage struct!
- Then on the NEXT gamedata save, in addition to all loaded cupheaders, it writes the extra windata kept in long term storage in exactly the same format.
2023-05-30 12:21:39 +01:00
toaster
b186e89353 K_ResetCeremony: Populate results downward in difficulty
Per request, someone who beats a cup on Normal doesn't have to worry about beating that cup on Easy as well unless they want to of their own volition.
2023-05-30 12:21:39 +01:00
toaster
eb26f9fda4 Unloaded mapheader record tracking: Manage memory usage by dropping unimportant stats
Only persist the full data while unloaded if player has explicitly achieved something on that level, rather than merely visited (such as in a netgame).
Achieving something counts as:
- Getting a best time
- Getting a best lap time (Race only)
- Getting MV_SPBATTACK (completing an SPB run)
- Completing the level IF the level has LF2_FINISHNEEDED (finish level in GP/MP before you see it in Time Attack)
2023-05-30 12:21:39 +01:00
toaster
3027d254fe Rollover protection for unloaded mapheader record tracking system
You will run into memory limits before this happens, but... if you have major quantities of unloaded mapheader record data, avoid a rollover in the counter of records to write.
2023-05-30 12:21:39 +01:00
toaster
28677da5b9 Unloaded mapheader record tracking system
In the previous entry in the series, due to level header records existing in a NUMMAPS-sized table always saved and loaded in full, Time Attack times persisted even across game loads without the relevant custom levels added.
However, this was changed with the long map name system. Map records were assigned to level headers, which were only created on level load.
This new system brings Ring Racers up to parity (or better, due to the reduced incidence of header conflicts!)
- All levels currently loaded with records attached are written on gamedata save.
    - This reduces gamedata size for a player who has not unlocked every level!
- On gamedata load, if a level is not loaded, store those extra records on a linked list.
- On level header creation, check the linked list to see if an associated unloaded mapheader record exists.
    - If it does, write the record onto the map structure directly, and delete the "unloaded mapheader" storage struct!
- Then on the NEXT gamedata save, in addition to all loaded mapheaders, it writes the extra records kept in long term storage in exactly the same format.
2023-05-30 12:21:39 +01:00
toaster
4682f03f91 On reflection, whether a map is visited should be cleared at the same time as its time attack record data, not seperately. 2023-05-30 12:21:39 +01:00
toaster
4c34d04f8a recorddata_t handling adjustments
Preperatory work for the next feature on my agenda.
- No longer independently allocated.
    - This was a byproduct of the previous NUMMAPS-based implementation. It's just cleaner to have it live directly on the mapheader_t, no caveats about it.
- Now contains mapvisited bitflag array.
    - Now all to-gamedata properties on a mapheader's struct are grouped together.
        - I was of two minds about it, but decided that this would have cleaner guarantees for compartmentalisation, saving, and loading.
        - They can still be wiped independently (G_ClearRecords for time/lap and M_ClearSecrets for mapvisited).
2023-05-30 12:21:39 +01:00
toaster
533508d7b0 Level and cup header information: Hashing for referencing by name
Foundational assistive work.
Also guarantees a consistent cup name length in memory, as some places read/wrote 15 bytes, and some places read/wrote 16 bytes. We settle on the latter (including null terminator) for the broadest backwards compatibility.
2023-05-30 12:21:39 +01:00
AJ Martinez
955d6001b0 "Boolean" 2023-05-30 04:12:47 -07:00
AJ Martinez
04e3a9f4b9 Death tumble 2023-05-30 04:08:45 -07:00
AJ Martinez
136800ec23 When hit at -20 rings, die 2023-05-30 03:03:34 -07:00
AJ Martinez
cfa4f9e135 Botcontrol CV_NETVAR|CV_CHEAT 2023-05-30 02:22:59 -07:00
AJ Martinez
bf901f0166 Add DEVELOP cvar "botcontrol" to disable bot actions 2023-05-29 23:49:08 -07:00
AJ Martinez
3187294deb Charge wavedash boost proportional to turning angle 2023-05-29 23:28:08 -07:00
Oni
ff23501e74 Merge branch 'podium-bugsquoosh' into 'master'
Podium BugSquoosh

See merge request KartKrew/Kart!1258
2023-05-30 03:10:18 +00:00
Oni
3f8ca964c7 Merge branch 'instashield' into 'master'
Instashield (and Guard!)

See merge request KartKrew/Kart!1242
2023-05-30 01:36:45 +00:00
toaster
36d81d7996 Final lack of smoothness in camera cutaway killed: A one-frame window where focus angle/pitch was incorrect due to not having thunk yet 2023-05-30 01:12:59 +01:00
toaster
f24df4f38d Remove the interp-caused jitter from cutaway camera behaviour
It is preferable that smash cuts reset view interpolation IMO
2023-05-30 01:05:20 +01:00
toaster
f9b1bdf2bc K_CalculateGPGrade: Do not penalise for a cup that has no Prisons/Laps at all, so Sealed Star can be reached with numlaps 0/custom Cup with no battle levels 2023-05-30 00:41:28 +01:00
toaster
5e76ea6f8f K_StartCeremony: Directly modify spectator status for bots as early as possible
The problem with bots randomly going towards the same spot in podium was...
- If you failed a Sealed Star, K_UpdateGrandPrixBots wouldn't make the puppies non-spectators
- P_SpawnPlayer catches the spectator status...
- ...but it's in a loop that calls K_GetPodiumPosition...
- ...which ignores spectators...
- ...which means this is too late to catch it, so we simply have to do it earlier.
Also short circuits P_SpawnPlayer's and K_UpdateGrandPrixBot's attempts to set so the author of this commit can be certain what is being done is correct
2023-05-30 00:40:00 +01:00
AJ Martinez
47a63e1ca2 If I ever see another macro I'm going to burn down John Carmack's house 2023-05-28 16:07:32 -07:00
AJ Martinez
4c927b09d1 Review fixup 2023-05-28 15:12:08 -07:00
AJ Martinez
dd5332df83 Smooth out gentleman delay 2023-05-28 01:31:27 -07:00
AJ Martinez
4875311ac9 Slower Drop Dash boost type 2023-05-27 21:55:26 -07:00
toaster
8240dbe4e6 pflags_t, PF_NOFASTFALL: Compilation fix -- 1<<31 is not a valid enum value because it's all signed 2023-05-27 16:47:33 +01:00
Sal
94b2deb4de Merge branch 'twerk-b-gone' into 'master'
One fastfall per input

See merge request KartKrew/Kart!1253
2023-05-26 22:53:17 +00:00
Sal
c7aabfd431 Merge branch 'hexdump-debugfile' into 'master'
debugfile: replace mixed string/control character notation with hexdump

See merge request KartKrew/Kart!1250
2023-05-26 22:43:45 +00:00
AJ Martinez
c7bae4a06b Also prevent fastfall on ebrake ground-to-air 2023-05-26 06:47:22 -07:00
AJ Martinez
1871cad1d9 Require new input to fastfall after bouncing 2023-05-25 23:21:19 -07:00
Oni
9b8306c91b Merge branch 'menu-pokes' into 'master'
Menu Pokes

See merge request KartKrew/Kart!1248
2023-05-26 05:53:16 +00:00
AJ Martinez
691311ab14 Merge branch 'instashield' of git.do.srb2.org:KartKrew/Kart into instashield 2023-05-25 22:49:23 -07:00
AJ Martinez
20f57d7efa Don't drop emeralds unless it's a new hit 2023-05-25 22:49:14 -07:00
Sally Coolatta
ce7e083e13 Bots: Add instashield behaviors
Also tidied up some of the ring usage code.
2023-05-25 15:31:33 -04:00
Sally Coolatta
9d80323a3a Read-only mapthing_t
Map things are writeable in Lua, which I am pretty certain is a mistake because mapthings are not sent over the network at all. I considered making them net-synced (it would be relatively easy), but it also aligns with another, more "philosophical" issue: Doom generally copies over properties from mapthing_t into mobj_t, and then only refers to it again when needing to respawn an object -- mapthing_t is not really intended to be referred to very often at runtime. At best it's slightly annoying since some objects rely on a spawnpoint for behavior changes, at worst it may make ACS more confusing in the future since Thing and Mobj tags are mixed together or less useful since they wouldn't be able to modify behaviors of objects that are based on args.

So I decided to solve these two issues at the same time; just treat mapthing_t as something to copy values from, like OG Doom does it. This basically just means that special and args are also part of the mobj now instead of the mapthing, which should fill any desire to edit this stuff from Lua, and reduces the number of instances where objects need to check for their spawnpoint to function properly.
2023-05-25 14:40:55 -04:00
James R
3ad30c0c7a debugfile: replace mixed string/control character notation with hexdump
Example of old notation:

    [10]O[0,0]jartha[0,254,142,131]c[133]hL^{[170][[251,199]+E[181]U+t[247,183,129,165,152]#$[164,22,10,169]r[150,212,3,232,3,0,0,2,0,0,0,8,0]0[8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,9,2,0,0,1,0,217,161,192] D[0,0,0,0,0,0,0]

Example of new notation:

         0:  01 0e 6a 61  72 74 68 61  00 57 00 09  5a 00 42 00  ..jartha.W..Z.B.
        16:  02 01 00 b7  6a d4 20 6f  2b 45 b5                  ....j. o+E.
2023-05-24 18:33:22 -07:00
Eidolon
d2482287a9 Merge branch 'read-exact-span-vec' into 'master'
io: Specialize read_exact for Span/VecStream

See merge request KartKrew/Kart!1247
2023-05-24 22:35:16 +00:00