Commit Graph
141 Commits
Author SHA1 Message Date
AyeZeeBB 2cdc5ee8df Fix costume merging, restrict server names, add Centrix tag
- Mod merge: rebuild a merged bundle's chunk metadata the way the game
  writes it (one record per chunk, in chunk GUID order), so costumes
  from different mods built on the same game costume keep their
  textures and meshes
- Merge audit checks that layout, and there is a new unit test for it
- Server names: only letters, numbers, spaces and - _ [ ] ( ),
  1 to 64 characters; the server browser hides servers with other names
- New Centrix tag from the backend's "centrix" list: blue and white
  name, badge and item animation, ranked after Dev and before Creator
v1.1.3
2026-10-05 23:39:16 -05:00
zeex64 0d5dfda243 Merge pull request #85 from jnslol/feat/chat-bubbles
Add chat bubbles above each skater
2026-10-05 20:59:03 -05:00
Juan 23151496f1 Add chat bubbles above each skater
A player's recent chat lines show as speech bubbles above their skater: newest nearest the head, older lines stacking upward, each popping in with a slight overshoot before it fades. Emotes render as their images, a message that is nothing but a few emotes shows them jumbo, and a message longer than a handful of lines is cut with an ellipsis so one line can never wall the screen off.

Local display options live under Settings > Interface > Multiplayer (on/off, own messages, distance, duration and how many recent lines stack) and the console gains mp chat-bubbles, chat-bubbles-own, chat-bubbles-distance, chat-bubbles-duration and chat-bubbles-history.

The chat panel and the bubbles now share one rich-text module (chat_rich), and a filtered message keeps its emote names: the bad-word mask is applied, but emote tokens are put back from the original before they are parsed.
2026-10-05 22:46:40 -03:00
AyeZeeBB dcc5e31a67 Update server_host.cpp v1.1.2 2026-10-05 18:57:42 -05:00
AyeZeeBB 137273e274 carry added assets with a changed list, combine in-place values, list repeats once
Merge: carry added assets with a changed list, combine in-place values, list repeats once

Three merge bugs found by auditing 104 installed mods:

- A changed list (the music playlist) reached every bundle copy that holds
  it, but the songs a mod added beside it only reached copies of the bundle
  the mod added them to. The game keeps the playlist in eight bundles, so
  the other seven named songs they did not hold. Added assets now follow
  the change into whichever bundle copy takes it.
- An entry naming an asset that lost its name to another mod's asset is
  now dropped from the list, both in the merged bundle and in the list
  other mods' copies are given.
- Two mods changing values in place in one asset (lighting) kept one mod's
  copy whole and silently dropped the other's. Plain values are now
  combined, the higher-priority mod winning where both changed one. An
  edit that also moved a reference or resized a list is taken whole or not
  at all, and the merge notes whose changes are missing.
- A reference two mods both append to a list is listed once.
2026-10-05 18:53:51 -05:00
AyeZeeBB a9742673da log changes 2026-10-05 17:27:50 -05:00
zeex64 8403d4a548 Merge pull request #66 from wishluna/tolerant-loadout-slots
Load a saved outfit whose slots differ from the template's
2026-10-05 17:10:35 -05:00
zeex64 1466359a14 Merge pull request #45 from xThrasherrr/fix/launcher-empty-arguments
Pass empty launch arguments to the game as ""
2026-10-05 17:05:05 -05:00
zeex64 bdbf5b015a Merge pull request #58 from DeckardDetribine/fix/propagate-added-assets-multi-mod
Vfs: carry added assets from every mod that edits a shared asset
2026-10-05 17:01:45 -05:00
zeex64 f262614119 Merge pull request #52 from xThrasherrr/fix/freecamfov-range
Reject freecamfov values the client would refuse
2026-10-05 17:01:23 -05:00
zeex64 f6d77b88b9 Merge pull request #57 from DeckardDetribine/fix/playlist-lookup-crash-guard
Music: guard the playlist traversal against unresolved song entries
2026-10-05 17:01:00 -05:00
zeex64 2c80bf1b8c Merge branch 'main' into fix/playlist-lookup-crash-guard 2026-10-05 17:00:52 -05:00
zeex64 9f9d611f7d Merge pull request #56 from DeckardDetribine/pr/mod-music-shelf
Music: add a native "Mods" shelf above Featured in the Music Player / Playlist Manager.
2026-10-05 17:00:01 -05:00
zeex64 5cb6cb57ae Merge pull request #53 from xThrasherrr/fix/help-developer-group
Drop the nonexistent Developer group from the help text
2026-10-05 16:59:32 -05:00
zeex64 e877af0620 Merge pull request #50 from VexFlint/fix/linux-console-crlf
Accept CRLF lines on the Linux server console
2026-10-05 16:58:49 -05:00
zeex64 0c3ca2bb68 Merge pull request #49 from VexFlint/fix/systemd-unit-duplicate-log
Send the systemd unit's stdout to the journal, not a second copy of the log
2026-10-05 16:58:30 -05:00
zeex64 f6e191cfbd Merge pull request #48 from DeckardDetribine/pr/mod-music-artwork
Music: custom playlist and song cover artwork for mods
2026-10-05 16:57:56 -05:00
zeex64 e4a534a366 Merge pull request #72 from Vebjorhk/fix/offline-pause-menu-tab
Fix empty Social page and dead Back when reopening offline pause menu
2026-10-05 16:56:46 -05:00
zeex64 022900d9fc Merge pull request #74 from xThrasherrr/feat/server-map-pool
Let server hosts choose the map pool and rotate through it
2026-10-05 16:53:52 -05:00
zeex64 f940e5eb2c Merge pull request #75 from moelrobi/claude/upbeat-fermat-61tz9j
Add server direct messages (msg, msg-party, msg-admins, /w)
2026-10-05 16:48:23 -05:00
AyeZeeBB de631ad9e6 leave out mods that copy store items, chat badge check
- Mods that add copies of store items under new names are no longer
  loaded. The launcher, mod manager and game say why.
- A chat line passed on by the host only shows a Dev/Creator/Homie
  badge when the player's own copy of it arrives too, so a host
  can't put one on a line that player never wrote.
2026-10-05 16:29:37 -05:00
Robin MöllerandClaude Sonnet 5.5 3b3dbf8cd7 Add server direct messages: msg, msg-party, msg-admins and /w
Admins and the console can DM one player, a player's party or all online
admins. Players can whisper with /w. Messages carry a [DM from ...] prefix.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhQ3AZZ7KQddTqV67tZMLc
2026-10-05 21:19:38 +00:00
xThrasherrr 7007ad0389 Name the missing map when leaving a session over it
The host sends the map's name with map offers and changes, since a player without the map's mod has no manifest to name it from.
2026-10-05 15:09:30 -06:00
xThrasherrr 206885fa62 Add a map pool card to the Multiplayer menu for server admins
The server now sends admins its pool and rotation with the map list, which bumps the protocol to 42: players and servers need this build to connect.
2026-10-05 14:43:12 -06:00
xThrasherrr b643f76c2f Let server hosts choose the map pool and rotate through it 2026-10-05 14:40:25 -06:00
VebjorhkandClaude Opus 5.5 ed6b4c5aff Fix empty Social page and dead Back when reopening offline pause menu
In offline mode, closing the pause menu on Social or Custom Stuff and
opening it again showed an empty Social page, and Back did nothing until
the player switched tabs. The game reopens the page at the last position
in its own tab list (Social at position 4, the Store at position 3)
before insert() swaps the Store for Custom Stuff. Offline that swap
leaves the tab count at 5, so the menu never redraws the page.

Keep a copy of the Store tab last for a moment so the count changes and
the right page is drawn, then drop it again (trim_store). Online, and
reopening on Map, Hub or Skaters, nothing changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:32:44 +02:00
ReGlitched dd1913b647 merge bug (material fix) 2026-10-05 12:32:31 -06:00
wishlunaandClaude Fable 5.1 96d44fc8a8 Load a saved outfit whose slots differ from the template's
A mod that adds slots to a template made every outfit saved before it
fail to load (recipe_template_mismatch / slot_mismatch), and switching
the mod off did the same to every outfit saved with it. The preset was
blocked, so the player saw the standard skater until the profile
database was edited by hand.

Match the saved outfit to the template slot by slot instead of by
position. A template slot the outfit has no item for starts on the
game's default. A saved slot the template does not have is held, like
an item from a costume mod that is not installed, and a save writes it
back beside the template's slots. Template key, template version,
scalar count and recipe count still have to match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:01:20 -05:00
ReSkate local bf89ea7038 Music: preserve authored track positioning in mod playlists 2026-10-05 10:53:31 +01:00
ReSkate local 2b39afcb62 Vfs: carry added assets from every mod that edits a shared asset
When several mods change the same game asset (the master music playlist,
for one), only the first mod's edit was read for the imports it names, so
only that mod's added songs, waves and chunks were carried into the other
mods' copies of the bundle (a map's level superbundle). Every later mod's
additions went missing on those levels while the game's own levels kept
them, which showed up as songs vanishing from the playlist on custom maps.

Read the imports of every changed asset, and merge a later mod's edit into
the stored change so the combined document's imports -- and the chunks
they lead to -- are followed too. Add a regression test with two music
mods whose songs must both reach a map's copy of the bundle.
2026-10-05 07:32:27 +01:00
ReSkate local 88e033b33f Music: skip the Mods shelf when no mod declares a playlist
Build the Mods shelf only when an enabled mod declares at least one playlist with songs, read from each mod's reskate-music.json. The shelf must be inserted before the native widgets bind, so it cannot wait for Featured rows to hydrate, and it should not publish an empty shelf when there is nothing to show. With no declared mod playlist the native three shelves are left as they are and a music_mods_shelf_skipped event is logged.
2026-10-05 06:51:05 +01:00
ReSkate local 2e6882ede1 Music: guard the playlist lookup against unresolved song entries
The music player's playlist walk loads a song entry, masks it and reads a flag at [rcx+0x14] before it checks the entry's identity. An unresolved or NULL entry makes that read fault and takes the game down while a playlist is built or opened.

Install a 13-byte in-place guard at the reviewed RVA 0x14f80c7 when the music contracts pass. It keeps the original flag test, shrinks the leading mov eax,0 to xor eax,eax, and adds a jrcxz that skips the dereference when the entry is NULL, landing on the loop increment. The site is matched against its contract bytes before anything is written, so an unsupported image is left untouched, and the guard is applied with VirtualProtect and FlushInstructionCache and then made read-only again.

The contract and patch bytes live with the other music contracts in Engine/Game/Build/20260929/local_music.h; the installer is Extension/Music/local_music_safety.{h,cpp}; local_music_ui.cpp invokes it from initialize_music_functions; cmake/Runtime.cmake builds it. A new dingosdk_music_safety_tests (CTest music_safety) pins the contract length, the decoded instructions and the branch target arithmetic without needing the game.
2026-10-05 06:31:13 +01:00
AyeZeeBB 5bfe4f7bfa tag preview, separate switches and per-item colors
- Split the single switch into "Show my tag" and "Show my items", and
  show the tag as chat and nametags draw it.
- Color whatever is equipped instead of the one hoodie and pink board:
  top, bottoms, shoes, socks, hat, glasses, outfit, costume, deck, grip
  tape, trucks and wheels, each set on its own.
- Each item can use its list's animation (rainbow, red or gold), a
  gradient between two picked colors, one solid color, or be off.
- The choices travel with the player's appearance so everyone sees them.
  Protocol version 41.
v1.1.1
2026-10-05 00:00:45 -05:00
ReSkate local d4d3549799 Music: keep shelf code out of playlist UI module 2026-10-05 05:21:21 +01:00
ReSkate local 96cd684e20 Music: isolate native shelf implementation 2026-10-05 05:20:49 +01:00
ReSkate local 916e281e69 Music: preserve artwork insertion context 2026-10-05 05:15:17 +01:00
ReSkate local 81f3a77a25 Music: isolate shelf helpers from artwork UI hunk 2026-10-05 05:15:06 +01:00
ReSkate local e145a67db9 Music: add a native Mods shelf above Featured
Create independent anchored and tile-list models before native widget binding.
Populate Mods from Featured rows with mod playlist IDs while retaining native
presentation and actions. Leave existing playlist contexts and cosmetic
ownership unchanged.

Document the native UI model flow, verified loader entry points, typed
publication, and inspection workflow for future modders.
2026-10-05 05:04:37 +01:00
AyeZeeBB c930b512e6 Backend lists for tags, cosmetics and bans
- Read Dev / Creator / Homie Steam IDs from api.reskate.dev instead of the hardcoded list
- Creator (red) and Homie (gold) tags and hoodie/board colours; Admin tag is now pink
- Global bans: lobby hosts and dedicated servers turn banned players away
  ("global_bans": false in ReSkateServer.json opts a server out)
- SPECIAL menu page for listed players to hide their own tag and items
- Fix hoodie and board keeping the animated colour after the animation turns off
- Multiplayer protocol 39 -> 40
2026-10-04 22:33:57 -05:00
xThrasherrr 2c3b2f63d4 Drop the nonexistent Developer group from the help text 2026-10-04 19:11:47 -06:00
xThrasherrr e5def363ca Reject freecamfov values the client would refuse 2026-10-04 18:57:37 -06:00
VexandClaude Opus 5.5 3a23cf0a18 Accept CRLF lines on the Linux server console
The Linux console reader split stdin on '\n' only, so a line ending in
"\r\n" kept its '\r': "quit" did not stop the server and every command
answered Unknown command. Lines from a script saved on Windows, a hosting
panel or telnet end that way. (The Windows reader uses std::getline on a
text-mode stream, which already drops the '\r'.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 21:25:54 -03:00
VexandClaude Opus 5.5 65e0e8d86c Send the systemd unit's stdout to the journal, not a second copy of the log
The server appends every line to ReSkateServer.log next to itself (main.cpp
write_log). The unit also appended stdout to that same file, so each line
was written twice, once per stream, and the copies could interleave out of
order. The journal keeps the console copy instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 21:25:52 -03:00
AyeZeeBB 493cc4f5a1 mem pool cap decrease 2026-10-04 19:14:36 -05:00
xThrasherrr ddd24c0f41 Pass empty launch arguments to the game as "" 2026-10-04 17:23:54 -06:00
zeex64 2b08f17ce6 Merge pull request #44 from xThrasherrr/fix/emote-packer-odd-file-names
Keep packing emotes when a file name is outside the ANSI code page
2026-10-04 18:10:17 -05:00
ReSkate localandClaude Sonnet 5.5 702e5c74d2 Music: serve mod cover artwork over HTTP/2 cleartext
The game fetches the artwork URL with HTTP/2 cleartext (h2c, prior knowledge), and only from 127.0.0.1. The loopback server spoke HTTP/1.1, so every cover request was answered with an HTTP/1.1 404 and mod playlist/song covers never appeared.

Speak h2c: complete the SETTINGS handshake, read the request header block (HEADERS and CONTINUATION frames), decode :path with a minimal HPACK decoder (static table and Huffman code from RFC 7541 in hpack_tables.h), and serve the matching image as HEADERS plus DATA frames with flow control. Keep the HTTP/1.1 path for other clients. Serve from one stable origin (http://127.0.0.1:47823/music-art/<mod>/<relative>) so the game's HTTP cache is reused, send Cache-Control and an ETag so it stops re-fetching, close gracefully (closing with unread frames queued makes Windows send RST and the client drops the tail), and use a non-blocking listener since several pollers share it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 00:09:51 +01:00
ReSkate local 5a01b1b0de Music: support custom playlist and song cover artwork in mods 2026-10-05 00:09:41 +01:00
xThrasherrr 902e064aad Keep packing emotes when a file name is outside the ANSI code page 2026-10-04 17:03:36 -06:00
AyeZeeBB ecb083f417 Don't drop every player after the server is held up 2026-10-04 17:56:24 -05:00