Current engine status and UI Changes

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…

  1. The player pins dissappeared and the D-PAD crashed
  2. The player got a GLIMPSE of the map before it finished loading…
  3. The load in was fast and I like that…
  4. 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_asset configured with a data-custom-tag="dialogue_event".
  • Intercept this pin inside the checkItemCollection function 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 or walls.set(c, r, '#000000') to spawn blockades, followed instantly by renderWalls().

Democratic Voting Protocol

  • Upon triggering a dialogue node, broadcast a request_vote payload through window.vttSocket to lock all player D-Pads and display the dialogue choices.
  • The Host (Arbiter) collects submit_vote payloads and tallies them against the active roster, explicitly ignoring SPECTATOR clients and characters with an incapacitated status.

Tie-Breaker System

  • If the Arbiter detects an even split, it randomly selects one active playerId and broadcasts a tie_breaker_assigned event.
  • This unlocks the .dice-ui-wrapper for that specific player, prompting them to click btn-flip and trigger the coin toss video (0001-0170.mp4).

Core Dice Mechanics Integration

  • Movement: Hijack the triggerNewRound function to require a D4 roll (videoSources['d4']). Add the resulting integer to the party’s vttEquipment.feet boots bonus to establish the player’s data-moves for the round.
  • Combat Strike: Suspend the combatStrike() logic to require a D8 roll (videoSources['d8']). Append the player’s weaponBonus to the dice value before subtracting it from combatHostileHP.

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.php containing the disconnected player’s character_id so the game_rd_results table 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.