Skip to content

Ravengard tutorial, classes, regions and config driven items - #837

Merged
Swofty-Developments merged 104 commits into
masterfrom
feat/ravengard-tutorial
Aug 4, 2026
Merged

Ravengard tutorial, classes, regions and config driven items#837
Swofty-Developments merged 104 commits into
masterfrom
feat/ravengard-tutorial

Conversation

@Swofty-Developments

Copy link
Copy Markdown
Owner

No description provided.

Adds /logpackets for recording an entity rig and its per-tick transforms, /recreation
hudcapture for dumping scoreboard lines and glyph usage, and a B-key toggle that dumps
every component of an open container. These are what the Ravengard recreation is derived
from, so they need to live alongside it.
…a path

Polar worlds can now be loaded from an arbitrary path rather than only the type loader's
main instance, which the tutorial world and /switch both need. The pack server serves
Hypixel's untouched archive so the client resolves the real shaders and fonts, and polar
display entities spawn without gravity so they stop flooding motion packets.
The pack draws the whole hud from scoreboard sidebar lines, addressing colours through
team prefixes and negative space fonts. Lines are replayed verbatim from the capture with
only the dynamic values substituted, and the minimap position is encoded into a tint the
shader decodes. Health rides the vanilla hearts and stamina the vanilla exp bar, so both
have to be fed real values for the bars to fill.
Rigs are rebuilt from packet captures as per part keyframe tracks with idle, talk and walk
phases. Rotation is applied as a single rigid body delta to both the quaternion and the
translation so the whole model turns together instead of each part spinning about its own
origin. Roaming NPCs turn before they walk and glance around while idle, and clicking one
plays its talk phase and sends its captured dialogue.
Menu buttons are itemstacks whose sprite position the pack reads out of two components:
custom_name colour places the lit hover glow and dyed_color places the unlit face, both as
a pixel offset from the screen centre. Buttons declare their footprint so a multi slot
sprite is written once at its origin and repeated across the slots it covers, sharing one
offset. Offsets are authored per button per menu rather than derived from the slot grid, so
captured values take precedence over the computed fallback.
Adds the four launch classes with all twenty eight abilities, their icons resolved from the
pack font and their cooldowns taken from live tooltips where these disagree with the wiki.
Items follow the same shape SkyBlock uses, loaded from configuration/ravengard/items as
yaml with pluggable components, including a class restriction so gear can be gated per
class. Starting kits are three item ids per class rather than hardcoded stacks.
Cuboid regions resolved from two corners with the smallest overlapping region winning,
backed by its own mongo collection and seeded with built in regions that only register when
no stored region shadows them. SkyBlock drives region changes off its tracked player values
which Ravengard has no equivalent of, so a poller fires the change event instead. Entering
a region announces it as a subtitle.
New players start aboard the Nevermore with no gear until they pick a class. Diago's
dialogue opens the class menu, and choosing one grants that class's kit and moves the
player into the main world. Tutorial state is a datapoint so it survives a relog.
Chat lines lead with the player's class glyph and carry their level between name and
message, with default rank keeping the whole line grey. Adds /class for switching class and
/switch for moving between polar captures with completion.
The hud was being rasterised server side and encoded into markers, which the real pack does
not do. Now that the pack is served untouched and the hud is driven through its own shader
inputs, none of this is reachable.
@vercel

vercel Bot commented Aug 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hypixel-skyblock Ignored Ignored Aug 3, 2026 1:39pm

Swofty-Developments and others added 19 commits August 1, 2026 19:11
Idle and walk were already shared but talk was left per capture, so clicking different
villagers played visibly different animations. All four now use one sixty frame talk cycle,
with props only one of them carries holding their own pose resampled to the same length so
every part stays on a single frame counter.
fix(ravengard): ability slots, some cleanups
…d twice

RavengardView.chrome wraps whatever title() returns with the panel glyph and renders it in
both font passes, so pre-baking the captured header into title() drew the panel and icon
twice and the text four times.
Profiles live in their own mongo collection, one document per profile with class, level,
tutorial state, playtime, crowns and ability points; the account keeps a selected pointer
and the existing class, level and tutorial datapoints act as the working copy of whichever
profile is active, so everything that already reads them is untouched. Creating a profile
sends the player to the ship with Diago to pick a class, selecting one restores that
class's equipment and moves them to the world it belongs in, and deleting the selected
profile falls back to the next one or creates a fresh tutorial profile. Join announces the
profile id and the create, select and delete messages match the captured ones verbatim.

The profiles menu and the delete confirmation are rebuilt from captures: five statue
columns with the create button filling unused columns, the selected profile marked instead
of clickable, and confirm and cancel text buttons on the delete screen.
The client log flattens component colours away, so the absence of legacy codes on the
captured lines said nothing about their colour; in game the line is gray.
…ass menu, dialogue skipping

The bottom hud's two spell slots were replayed verbatim from a capture taken as an assassin,
so every player saw Shadows and Heal Wounds regardless of class; the line is now composed
from the player's own abilities via the pack's ui/spell glyphs and stays empty until a class
is chosen. Fresh inventories now carry all four accessory panes (neck, earring, belt, ring)
with their gray names and click protection; only the neck position is captured since the
recorder truncates the player inventory, the rest follow it along the top row. The select
class menu uses its captured per-class descriptions, the main world arrival faces south, and
the remaining profile messages are gray.

Clicking an NPC mid-dialogue now skips ahead a line instead of being swallowed, so repeated
clicks speed through multi-line speech.
…uuids

Items now render the tooltip the live server sends: a first line of rarity and item-kind tag
glyphs, the defense value behind its icon in the stat colour, and a closing line tagging
every class that can use the item, with the rarity also driving the tooltip style. The tag
vocabulary comes from the pack's font, which is also how the captured Reinforced Pants
turned out to be knight-restricted rather than shared.

Non-placeholder items are unique the way SkyBlock's tracked items are: custom_data carries a
rarity-prefixed id and a minted uuid, recorded with owner and profile to a tracker
collection. SkyBlock routes this through the item tracker service; Ravengard writes straight
to its own collection until traffic justifies one. The distinct uuid is also what keeps two
identical items from stacking.
…imation

play resets the frame counter, and onClick played the talk phase on every click, so
skipping through dialogue snapped the rig back to the start of the cycle each time.
…ad space

Every captured title places the header icon with a negative space of 4088 after the panel
glyph; the chrome used 8192, so the icon and title text rendered four thousand pixels too
far left and the panel showed no name.
The captured Ability One page fills in the whole layout: seven abilities down the panel at
their grid-computed offsets, each with its wrapped highlighted description, cooldown and a
state line, selected abilities marked with which slot they hold and the rest locked behind
an ability point purchase. Both pages open from the main menu's ability buttons and read
whichever class the player is, and block distances highlight green as the capture shows.

The profile id line is dark gray with a blank line after it, matching the live join.
The client log flattens component colours, so the level looked like plain white text there;
in game it renders bold gold with the colon and message returning to the rank's colour.
…xcluded from exports

The exporter branded a display as moving on an exactly nonzero velocity vector or any
sub-pixel position change between passes, but servers send no-op move and motion packets
for stationary displays, so animated furniture like the alchemy stand plants was silently
dropped from the polar. Movement now requires real displacement.
…uilt in

Pages now declare only their content: RavengardView owns the layout pass, injecting the
title chrome and the invisible stick every captured menu keeps in its first slot, and gives
pages footprint-aware placement, click wiring and the shared back button so a new menu is a
list of buttons rather than slot arithmetic. All five menus sit on the new base.
Inventories were never saved, and a plain join only synced datapoints without rebuilding the
inventory, so loading straight into the lobby left it wrong. Every occupied slot now
serializes into the profile document as item nbt whenever the profile saves, and joins and
profile switches rebuild the inventory from the saved slots, falling back to the class
defaults with the restore message only when the profile has never saved any.
They are displays like the accessory panes, so clicks on any menu-button or slot-pane model
inside the player's own inventory are cancelled, scoped so the same models keep working as
buttons inside the menus.
…enerated dungeons

The tab list header now composes the fullscreen map from the generated
layout itself: room tiles carry absolute packed positions on the 512px
map canvas centred on the dungeon bounds, with player and teammate
markers packed the same way, replacing the pre-made crypt segment tiles
which drew the wrong map for generated instances. The minimap room
tiles are redrawn in the crypt map palette with data pixels on all four
texture corners so the shader routes every vertex correctly.
The generated tab map header carries several hundred glyphs and was
resent every tick, flooding the client with identical component payloads.
The pack was pushed after spawn, forcing a mid-game resource reload
while world data streamed in. Chunk sections received during that
reload are never rendered by the client even after a manual chunk
rebuild, which made generated dungeon instances appear invisible. The
push now happens in the configuration phase and blocks until the
client reports a terminal pack status, matching how Hypixel applies
theirs before any world data is sent.
Each catalog room's map art is cropped from the crypt segment images,
which align with the blueprint world at exactly one pixel per block,
rotated to all four placements and packed as bitmap font grids with
per-cell data pixels. The minimap and tab map now place these room
shaped glyphs for discovered rooms at one pixel per block, replacing
the flat placeholder squares, so generated dungeons render with the
same map styling as the pre-made crypt.
The blueprint outlines every room twice on the marker plane, once at
the outer wall face and once at the interior face. The extractor had
turned each inner outline into a second nested room whose placement
stamped a wall-less cut through the middle of the physical structure,
which is what sliced buildings in half. The 54 inner duplicates are
dropped from the catalog, generation targets clamp to the pool size,
the maps always draw the full layout since hypixel has no discovery
fog, and any remaining border column without a physical wall outside a
door aperture is sealed at stamp time with the room's own dominant
wall material.
Chunk sections that reach the client while a resource pack reload is in
flight are dropped from its renderer and a client side rebuild cannot
recover them since the stored section data itself is lost. Two seconds
after the player lands in the instance the server resends every chunk
in view, which restores the data and remeshes.
…er session

The blueprint keeps a two hundred forty by two hundred sixty block
structure at the heart of the map that rises well past the normal room
roof, so it is extracted as a dedicated catalog entry with its own roof
height and thirty two door apertures, always placed unrotated at the
layout centre where its doors seed room growth. The admin aerial spawn
hovers above its roof and its map art ships with the room glyphs. The
resource pack push is now gated by a client cookie that survives
backend transfers, so switching from the lobby to a game no longer
triggers a redundant client resource reload.
Every static world on the stack runs on the default DynamicChunk and
renders correctly, while generated instances were the only worlds using
LightingChunk and their computed light payload is the one thing the
client never rendered, surviving relights, materialization and chunk
resends. Generated instances now use the default supplier and the
lighting stages are removed from the readiness path.
The polar worlds all ship baked light from their files and render,
while generated instances sent chunk packets with no light data at all
and this client skips meshing such sections entirely, leaving the world
collidable but invisible. Generated layouts now set full bright sky and
block light on every section after stamping, matching how a lit dungeon
interior plays.
Generated instances now use a dedicated ravengard dungeon dimension with
full ambient light and players join a shared instance wrapping the
container, exactly how skyblock islands build runtime instances that
render correctly on this client. A fullbright dimension needs no light
data at all, sidestepping the missing light payload that left generated
worlds collidable but unrendered.
Half the blueprint's structure belongs to no outlined room, so packing
rooms into a fresh void discarded the entire connective city and left
the gaps hypixel does not have. Generation now loads the whole
blueprint city as the instance base through the polar path and permutes
rooms between slots whose footprints match under rotation, stamping
only the swapped interiors. Every placement keeps its original city
coordinates, so the crypt segment map art lines up verbatim and the
minimap pans hypixel's own tiles with the packed player position while
the tab map returns to the crypt tile path.
…b origin

The player marker template renders before the minimap segment tiles and
was buried under them, so a live marker with the real yaw now rides
after the map glyphs at the minimap centre. The tab map origin becomes
the canvas centre since map pixels equal world coordinates on the crypt
canvas, placing the tab marker exactly where the player stands.
…e menu item in dungeons

The dungeon stats line was missing the keybind hint runs and the map
and inventory icon block that the captured hypixel hud carries after
the date, which the shader positions under the ability slots, and the
health and stamina used a tripled half font wrapper while the capture
doubles them with the full and default fonts, which threw off their
placement. The ravengard menu item is no longer given on the dungeon
server.
…ur class

Same shape rooms carry their doors in different positions, seventeen of
the eighteen swap pairs misalign, so full mask swapping put doorways
into neighbouring walls. The outer shell with its walls and doors now
always belongs to the city and only cells at least two blocks inside
the mask edge are restamped. The blueprint's outline colours classify
room roles, white and brown standard classes plus cyan lime green
orange and light blue specials, and interiors only permute between
rooms of the same class.
…eons

Adds a shared look-to-open system for dungeon interactables driven by
the captured hypixel behaviour: an empty bossbar fills while a player
looks at or clicks the target and triggers the open at full. Doors
spawn from the city config's nine hundred twenty four leaf and four
hundred sixty three frame positions, pair into double doors and swing
ninety degrees around their hinges with the hitbox following, closing
again after five seconds. Chests seed into thirty percent of rooms per
generation seed with the captured two display rig, the five tick lid
slide, a twenty seven slot loot inventory titled with the captured
glyphs, and a poof burst that removes the rig when the inventory
closes. Satchels spawn via the new spawnsatchel command with a landing
smoke puff, rising skull displays while unopened, the lootbag model
swap on open and the captured forty five slot dead body inventory.
Each door_1 config entry is one whole door, not a leaf, so a door now
spawns a single display with two side by side hitboxes matching the
captured pair and swings as one piece around its edge hinge. Clicking
an interactable now updates the progress bar immediately, and satchels
no longer open from looking alone: the bar fills and holds full until
the player clicks.
Satchels snap to the floor beneath the spawn position instead of
hovering at the player's waist, and the unopened effect now releases
two to three small red tinted skulls per burst with staggered starts
instead of one full size sprite.
…kulls

Interactions now follow the captured flow exactly: a click starts a
channel, the centre bossbar fills over roughly a second while the
player keeps looking at the target, looking away cancels it, and the
open only fires on completion. The click listener runs in the gameplay
phase with data loaded like the generic interaction handler, which is
why clicks previously did nothing. Door leaves stop translating: the
hinge offset is baked into the door model's head display so a leaf
swings by rotating the entity yaw alone, doorway clusters swing their
leaves in mirrored directions together and park the hitboxes while
open. The satchel skulls become bursts of small red dust particles
rising from the bag instead of scaled item displays.
The pack blanks white bossbar sprites to a transparent pixel and routes
the blue sprites to the shader's cast bar, so the interaction loading
bar must be a blue progress bossbar to render at all. Satchels also
spawn with zeroed pitch and yaw instead of inheriting the player's
look angles.
…door swing

The bossbar name in the cast bar tint colour renders above the loading
bar through the pack shader, so each interactable now labels its
channel. Chest ground detection sampled unloaded polar chunks and
silently spawned nothing, which is why clicking chest shaped decor did
nothing; it now samples the template, which shares coordinates with the
loaded city. Door clusters are deep doorway faces rather than mirrored
side by side leaves and now swing in a uniform direction around their
model baked hinges.
Entity spawns into unloaded chunks throw and the exception was
swallowed inside the readiness future, killing the door loop midway
and preventing every chest from spawning. All door and chest chunk
positions now load before any entity spawns and the spawn pass logs
its counts or its failure.
The captured door, chest and satchel rigs carry no display context
metadata, so their models render with the default context and none of
the head display transforms. Forcing the head context applied the mob
part scale and offset to doors and chests, which is why doors rendered
oversized and displaced.
Loot rolls no longer draw equipment slot placeholders from the item
registry and are weighted by the map's ring structure: the further a
chest or satchel sits from the centre the more likely its rolls leave
the common tier. Interactable displays carry the captured brightness
override so door faces light evenly, and entity clicks log their
target and resolution while the click path is under investigation.
…clearing

The channel look check used a fixed angle threshold that failed at
close range where aiming anywhere but the hitbox centre cancelled the
channel instantly, so it now ray tests the player's line of sight
against the interaction box. Door leaves spawn snapped to the closed
yaw for their doorway axis since the blueprint snapshot saved some
doors open or mid swing, and opening a door clears the invisible
barrier blocks sealing its aperture, restoring them when it closes.
Closed leaves face across their doorway axis, not along it, so the
axis to yaw mapping is inverted, and channel cancellations now log
whether the target was already open or the look ray missed.
The slab ray test disagreed with the client's own raycast and cancelled
every channel, so the gate now measures the look ray's miss distance
from the hitbox centre against the box radius with slack. Door leaves
swing ninety degrees and opposite facing leaves mirror their delta so
both halves of a doorway open in the same world direction.
Doors stay open until channelled again with a closing label instead of
auto closing, their hitboxes widen past the aperture barrier faces so
the client raycast reaches the entity instead of the invisible block,
and chests clear any barrier blocks around their spawn point since some
room centres sit inside barrier fields that swallowed every click.
…rture wide door hitboxes

The city ships over a thousand decorative chest displays in its polar
user data, which is what players actually find and click, so those
pairs are now converted into functional chests in place with silver and
gold tiers boosting the loot rolls, replacing the invisible room centre
seeding nobody could locate. Doors get one interaction spanning the
whole aperture so every barrier face is covered, and the open state
keeps its hitbox so the door can be channelled shut again.
@Swofty-Developments
Swofty-Developments marked this pull request as ready for review August 4, 2026 08:44
@Swofty-Developments
Swofty-Developments merged commit ea17a4c into master Aug 4, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants