As I am learning the ins and outs of player saves vs database tagging saves. I have decided to Re-Architect the way players play the game…
I want to share the STATE of the project as it stands… because I broke it LOL no seriously I am working through FEATURES and bug fixes that I have identified… But here is long video of the current state of the ENGINE.
Now the UI changes… First a player must log in… This is NOT to collect player information its to assign player save data to a player… I cant just do it by player sessionID like I was trying to, this is because the session id gets blasted (erased) everytime the player closes the browser and flushes the local cache or cookies and there is no permanence to the player state SO I had to create this data and pass it into the database.
So I have ripped out the log in from the Chimerapocalypse table and GENERIFIED it to use on the VTT (Virtual Tablet-Top Engine). This way I can let the players have a SINGLE point of login and they can save multiple game slots… Think of any console game, you start a game – save at a part of it and pick it back up later… I am trying to replicate the Balders Gate 3, save states and multiplayer process… You start the game and SHARE privately or MAKE it public and let the masses raid the game! So to accomplish this I have to store the game state data into an online database NOT a local browser file. SO
Step 1 LOG IN

STEP 2 Select SAVE slot.

STEP 3 LOAD it
Couple of things to note here…
- The player pins dissappeared and the D-PAD crashed
- The player got a GLIMPSE of the map before it finished loading…
- The load in was fast and I like that…
- I dont like that the players get a map selector on the TOP of the game.php if a map is LOADED from a session that should not be there. BUT if its not the players are kind of stuck with what I give them… I am NOT sure if I want a SINGLE whole world or individual instances for players and their groups… This is where we have to decide if we want a mMOTTRPG (miniatureMultiplayer Online TABLET-TOP ROLE PLAYING GAME) or an MASSIVELY MULTIPLAYER (MM) OTTRPG…
I need to work out more on HOW I want to accomplish this… I think I want to do it like Baulders Gate 3… One player STARTS a map and INVITES people join it… I save it to the database… Each player can either PLAY as a single play or multiplayer campaign… BUT the experiences MUST be completely different – I dont want players SHARING – HOW DO THIS… If the mission is to kill X and collect Y I dont want X or Y to be the same for people doing single or multiplayer and I dont want X or Y to be the same things AT ALL… One game it may be kill boss named Burt, the other may be kill boss named Ernie and they will NOT be in the same place. The game should be random enough that players have a COMPLETELY new experience EVERY time they play on the same map AND they should be EXCITED when others release maps to play on because the logic experience will NOT be the same for everyone… THE – MAP should be the only consistent thing, non changing thing the map. Then WHEN a GM makes a GAME, then I want players to be able to play… So the PIPELINE is player > server –< 1. Pick existing campaign, 2. Start a new game. (here is where the software rebuilds the map and changes the criteria for success). Then the player starts which ever > server auto saves the sessions and asks to change slots if its NOT the same map an session the player was previously on. This needs to be done gracefully before we move to the next phase.
OH YEAH… I almost forgot…

I REMOVED the GM_MODE button so PLAYERS who are NOT flagged as a GM in the database CANNOT see the GM_MODE button…
This is to prevent any player who may have the GM mode password from fucking with peoples games.
In MMORPGS there is a single log in and everyone is in everyone elses games… in MY game I want it to be you START a game “MAP” and you can have anyone join it that YOU invite or leave it open and they can “Drop in” to YOUR game at YOUR story point. AND break the GAME apart by chapter and let anyone play ANY chapter with WITH anyone they want… the MAPS should be every changing and the STORY should function like a CHOOSE your own adventure book… With DICE controlling the outcomes.
Visually speaking I think that a SNES top down Zelda STYLE is more appropriate than a FULL on World of Warcraft or Call of Duty 3d game… those are TOO complicated… I want SIMPLE to play, EASY to pick up and ENDLESS dynamics… ALL with a player controlling it like a GM or a party member…
These are what I am about to implement this weekend…
Narrative & Environmental Alterations
- Introduce a new
pin-custom_assetconfigured with adata-custom-tag="dialogue_event". - Intercept this pin inside the
checkItemCollectionfunction so that stepping on it immediately halts player movement and triggers a dialog prompt rather than a standard scavenging event. - Tie specific dialog outcomes to global map updates, invoking
walls.delete(c, r)to clear paths orwalls.set(c, r, '#000000')to spawn blockades, followed instantly byrenderWalls().
Democratic Voting Protocol
- Upon triggering a dialogue node, broadcast a
request_votepayload throughwindow.vttSocketto lock all player D-Pads and display the dialogue choices. - The Host (Arbiter) collects
submit_votepayloads and tallies them against the active roster, explicitly ignoringSPECTATORclients and characters with anincapacitatedstatus.
Tie-Breaker System
- If the Arbiter detects an even split, it randomly selects one active
playerIdand broadcasts atie_breaker_assignedevent. - This unlocks the
.dice-ui-wrapperfor that specific player, prompting them to clickbtn-flipand trigger the coin toss video (0001-0170.mp4).
Core Dice Mechanics Integration
- Movement: Hijack the
triggerNewRoundfunction to require a D4 roll (videoSources['d4']). Add the resulting integer to the party’svttEquipment.feetboots bonus to establish the player’sdata-movesfor the round. - Combat Strike: Suspend the
combatStrike()logic to require a D8 roll (videoSources['d8']). Append the player’sweaponBonusto the dice value before subtracting it fromcombatHostileHP.
Arbiter Override (Disconnect Protection)
- Whenever a roll is prompted, the Host begins a silent 12-to-15 second countdown to match the dice video’s playback duration.
- If the active player drops and the timer expires without a websocket response, the Host script intercepts the action and generates the surrogate
Math.floor()value locally. - The Host automatically fires a POST request to
dice_roller_2.phpcontaining the disconnected player’scharacter_idso thegame_rd_resultstable maintains a pristine ledger. - Finally, the Host broadcasts this generated result via
window.vttSocket, forcing the map or combat sequence to proceed without stranding the remaining players.
THIS has been a NIGHTMARE – because I am TRYING to SPLIT the engine into 2 different PARTS – GAME_engine_LOGIC.js and GAME_engine_UI.js 2 part of the engine that are completely separate pieces of a puzzle.
Anyway I will update again soon when I have this stuff worked out.