Get the Jedaii Client
One download. Everything you need to join the ranked dueling server — the custom OpenJK client and the Jedaii RPG PK3, packaged together and ready to drop in.
Full Package
Contains the Jedaii custom OpenJK client (mbii.x86.exe) and the Jedaii RPG PK3 (zzz_rpg_hud.pk3). Drop in and launch through your normal MBII launcher.
Source Branch
View the ranked-clean branch on GitHub. See the full release history, changelogs, and source code for the custom OpenJK fork.
See the New Look
Every window in the client has been redrawn: HUD cards, shop, quests, leaderboards, the cantina games and the Master RPG Hub, all animated. Sound on for the music.
Quick Install Guide
Download
Click Download Full Package above and save the zip anywhere on your PC.
Unzip
Extract the zip. You will find mbii.x86.exe and zzz_rpg_hud.pk3 inside.
Place Client
Copy mbii.x86.exe into your Jedi Academy GameData/ folder.
Place PK3
Copy zzz_rpg_hud.pk3 into GameData/MBII/
Launch
Start the game through the normal MBII launcher as you always do. The PK3 loads automatically.
Enjoy
Connect to the Jedaii Ranked server. Climb the ranks. Become a Legend.
Ranked Changelog
Recent gameplay updates, social features, and ranked system enhancements.
- Fix: the HUD card and the stats window showed the duel numbers on Battleground / Open / FA servers.
!statscorrectly showed the numbers of the mode the server runs, but every automatic sync (after a kill, a win, a login) re-sent the duel numbers, so the card and the stats window jumped back to duel. The sync now uses the active mode (Elo, wins/losses, kills, deaths, highest streak; Open mode uses team wins / losses, like!stats) and also sends the current streak, trivia wins and top rival instead of zeros. Server-side change inSV_Ranked_SyncClientRPG: needs a new server build on those servers. - Objective loot drops are no longer guaranteed. Completing an objective in FA / Legends used to always drop an item with a boosted rarity. Now: 35% chance (
loot_objective_chance), at most 2 drops per player per round (loot_objective_round_cap, 0 = no cap), and a pity counter (loot_objective_pity, default 4): after that many objectives in a row without a drop the next one is guaranteed and at least Uncommon (the counter is saved on the account). Objective rarity is now 45% Common / 35% Uncommon / 16% Rare / 4% Legendary (was 30 / 35 / 25 / 10). Kill and assist drops are unchanged. All three numbers are settings in the server's rankedconfig.json. - New
!scrap [item]: sells every extra copy of loot items at the normal sell price and keeps one of each, so set pieces are never sold by accident.!scrapdoes all duplicates,!scrapjust that item. Listed in!helpand in the!collectiontext. Server-side change: needs a new server build. - Fix: garbled duel messages. The "Valiant Effort" line printed a random number instead of "Elo" (for example
-30 1.283134E+108lo Loss Shielded) and the anti-farm line could do the same: the text was built withva()and then read as a format string a second time, so the%in "-30% Elo" was taken as a format code. Both now pass their format straight to the command. - New chat ranking
!top chat(also!topchat): counts how many *different* messages a logged-in player writes in public chat, in every mode, and shows the top 10 in a new "Chat Kings" window (same Holo style as the other lists) with a funny chat rank next to each count (Silent Youngling, Throat Clearer, Cantina Regular, Gossip Droid, Jawa Translator, Chatterbox Knight, Senate Filibusterer, Midi-chlorian Mouth, Jar Jar's Apprentice, Wookiee Whisperer, Galactic Broadcast). Only the number is stored (chat_msgson the account), never the text. Spam does not count: a message that repeats one of the player's last 5 messages (ignoring case, punctuation, colour codes and doubled letters, so "ok", "OK!" and "okkk" are the same), messages under 2 letters, more than one counted message per 2 seconds, and more than 10 per minute are ignored. Players get a chat line when they reach a new chat rank, and!top chatalso shows their own rank, place and the next rank. Needs a new server build and client; the global list needs the account service updated (it must know thechat_msgsfield).
- No more "Could not load generic shader!" after changing resolution:
CL_ShutdownRefincodemp/client/cl_main.cppnow always unloads the renderer DLL onvid_restart. MBII's ownrd-rend2-mbii/rd-vanilla-mbiiDLLs keep static state and cannot be re-initialised in place. - Console version text: the bottom-right console text now reads
Jedaii-MBII-MP v1.1.0(JEDAII_VERSIONincodemp/qcommon/game_version.h) instead ofOpenJK-MP: v1.0.1.0. The engineVERSION_*numbers are unchanged. - Jedaii logo as the exe icon:
codemp/win32/icon.icorebuilt from the Jedaii logo (16-256 px). - Live rank table: the server now sends
rpg_ranks(from" " ... ranked/config.json,xp_per_level) whenever it syncs RPG data (SV_Ranked_SendRankTableinsv_ranked_logic.cpp). The!rpgmenuRANKS tab draws that table, shows each rank's Elo range and marks the player's current rank. - XP per level:
stats_syncand the XP bar use the server'sxp_per_levelinstead of a hard-coded 1000. The wrong "XP = 100 + (L-1)*150 ..." footnote was replaced with the real formula. - Proportional UI font: all client overlay text (
SCR_DrawVirtualString/SCR_GetStringWidthincl_scrn.cpp) now uses the MBII proportional font (ergoec, falling back toarialnb/ocr_a) instead of the fixed-width character sheet, so letters are evenly spaced. Text with emoji glyphs (0x80-0x8F) still uses the old path. - RPG HUD: the XP text now matches the bar (
245 / 1000 XP), kills/deaths/wins/losses are spelled out, long names are shortened with..and the level badge is pinned to the card edge, and the wide bar style has a fixed width so it no longer resizes with the name. - Follow-up fixes: the font code no longer leaves the renderer colour set (casino buttons were tinted yellow until hovered), text is drawn slightly smaller and higher so it no longer collides with the card art, the rank line is left-aligned on all card styles, the XP text is centred inside the bar, and the wide bar style shows its stats under the bar. The garbled bullet in the blackjack subtitle was replaced with a dash.
- New HUD style "Holo" (
rpg_hud_style holo, or the HUD Style button in the RPG menu): code-drawn card in the look of the duel result announcer (navy glass, thin border, accent bar). It slides in when it appears, and the XP bar is the animated part: it eases to its value, has a moving sheen, flashes with a floating+N XPon every XP gain, and turns gold with a LEVEL UP flash on level up. - HUD cards are shorter (48 instead of 58 units, the empty gap between the stats row and the XP bar is gone) and Edge now has the avatar and the Kills/Deaths/Wins/Losses row like Holo; its cut corners are drawn with one row per screen pixel and an outline that no longer tints the inside of the card
- Fixed
FX_WorldToScreenNULL-Pointer Dereference: Added defensive validation fortheFxHelper.refdefand positive FOV (fov_x > 0,fov_y > 0) incodemp/client/FxPrimitives.cpp. Previously, joining a server triggered 3D screen calculations before the 3D scene was initialized, resulting in a fatal segmentation fault when loading into game servers. - Client Overlay State Guards: Added
cls.cgameStartedandcl.snap.validchecks to overhead icon functions (SCR_DrawPartyOverheadIcons,SCR_DrawHotPotatoOverheadIcon,SCR_DrawInspectOverlay) incodemp/client/cl_scrn.cpp. - Non-Destructive Server Tokenizer: Replaced global
Cmd_TokenizeStringinparty_infoparsing (codemp/client/cl_parse.cpp) with isolatedCOM_Parse. This prevents network packet updates from overwriting active user chat commands and eliminates "eaten" chat messages. - Connection-State Chat Preservation: Updated
Message_Keyincodemp/client/cl_keys.cppto permit chat transmission in all connected states (>= CA_CONNECTED), preventing dropped messages during server loading, spectator transitions, or intermissions.
- Unchoked Snapshot Delivery: Hardcoded unchoked snapshot delivery in
codemp/server/sv_snapshot.cppto guarantee 100% green lagometer and eliminate packet delivery choking. - Rate-Throttling Removal: Removed
SNAPFLAG_RATE_DELAYEDrestrictions. - Zero-Latency Saves: Transitioned player stats, rank data, and inventory saving to debounced asynchronous writes in
sv_ranked_db.cpp, completely eliminating tickrate hitching upon kill events. - High-Tier ELO Balance: Refined win/loss point gains for top-tier players.
- Diamond+ Inactivity Decay: Added automated weekly rating decay for inactive Diamond+ ranked players to maintain competitive leaderboard integrity.
- Multiplayer Pazaak 20: Full multiplayer wagering system (
!pazaak challenge,!pazaak accept), 52-card custom deck, side deck modifiers, stand/end turn mechanics, and UI rendering. - Canto Bight Blackjack 21: Interactive blackjack table with animated 3D chip stacks and real-time dealer logic.
- Cantina Games Hub (
!games): Unified menu to launch casino and cantina mini-games. - Party Hub (
!party,!p): Create and manage parties with custom colors, shared scores, party health/armor/force/BP indicators, and dedicated party chat styled in yellow. - Live BP Telemetry: Real-time duel Block Points (BP) tracking and status telemetry.
- NPC Culling Exemption: Modified
DuelCullincodemp/server/duel_cull.cppto return0(do not cull, do not disable collision) if either entity is an NPC (isNPC(flatten(ent)) || isNPC(flatten(touch))). - Rationale: Prior to this fix, when a player entered a duel, the server's snapshot duel culling would identify NPCs as non-dueling actors and filter them out of the dueling player's snapshots. This caused NPCs to disappear immediately after spawning or starting a duel. This fix keeps NPCs visible and interactive for all players, regardless of their dueling state.
- Reverted 31304c14: Reverted the bone-remapping commit which corrupted skeleton structures on 72-bone humanoid models for dedicated servers, causing all NPCs to become invisible.
codemp/server/duel_cull.cpp(Exempt NPCs from Duel Culling)codemp/rd-dedicated/tr_model.cpp(Revert bone remapping)codemp/rd-rend2/tr_model.cpp(Revert bone remapping)codemp/rd-vanilla/tr_model.cpp(Revert bone remapping)
- Triggered Mode Refresh: Integrated
SV_Ranked_SaveConfig()intoSV_SpawnServer()insv_init.cpp. The Ranked engine now re-queriesg_Authenticityandg_gametypeat the start of every map, ensuring the dashboard correctly reflects "Duel" vs "Open" mode immediately. - Initialization Cleanup: Fixed a bug in
SV_Ranked_Initthat printed the active mode before CVars were synchronized, which previously caused misleading "Open" reports in the startup log.
Looking for technical changes?
Engine commits, source code diffs, and developer patch notes are hosted on GitHub.
Need help installing?
Join our Discord for setup assistance, bug reports, and community support.