TIC-TAC-TOE — 3D INTERACTIVE BOARD GAME | Mole Resources
Bring classic Tic-Tac-Toe into the world as a physical, placeable object. Players carry the board as an inventory item, place it anywhere with a live preview, and play against another player or a built-in AI opponent — with everyone nearby watching the board update in real time.
Trailer: Youtube
Documentation: https://mole-resource.gitbook.io/mole-resource-docs/
Support: Discord
━━━━━━━━━━━━━━━━━━━━━━━━━━
KEY FEATURES
Player vs Player — two seats, turn-based, works for any two players standing at the same board
Player vs AI — minimax-based bot with three difficulty levels; on hard it plays perfectly, best case is a draw. Players pick the difficulty themselves at the start of a solo match, directly from the same on-screen button bar used for camera controls — no extra menu
Placeable item — put the board anywhere with a live translucent preview; scroll to rotate, click to confirm, pick it back up anytime
Full persistence — board position and grid state are stored in the database and survive restarts
Real multiplayer sync — seated players always see moves instantly; optional live mode streams every move to nearby spectators too
Live score tracking with a proper rematch flow — both players have to agree before a new round starts; a mid-game reset is instant
Smart anti-AFK turn timer — only counts down while a player actually has the ability to move (camera locked on the board), not while they're simply looking around
Housing support — instance system with a two-export integration for instance and coordsbased housing script
Server-owned boards — define permanent public boards in the config that can't be picked up
━━━━━━━━━━━━━━━━━━━━━━━━━━
BUILT SERVER-FIRST
-
Every move validated server-side — turn order, cell ownership, and board state, no client-side trust
-
Distance validation on every interaction — remote exploit attempts are rejected
-
Event throttling and an entry-timeout watchdog — a seat can never get permanently stuck if a client fails to load
-
Distance-based object streaming — boards outside a configurable radius are never spawned as objects at all, so a server with hundreds of placed boards doesn't choke the client's object pool; hysteresis prevents flicker at the render distance edge, spawning is budget-limited per frame
-
Clean resource lifecycle — no leftover entities after restarts
━━━━━━━━━━━━━━━━━━━━━━━━━━
INTERACTION & TARGETING
-
Built-in proximity prompts with configurable keys, or
-
ox_target / qtarget integration — Play, Play vs AI, and Pick up options directly on the board object
━━━━━━━━━━━━━━━━━━━━━━━━━━
CONFIGURATION & COMPATIBILITY
Inventory: ox_inventory, QBCore, or ESX — one config option
Notifications: ox_lib, ESX, mythic_notify, or QB-Core
Fully translatable — every player-facing string lives in one locale table
Discord logging — board placement, pickup, and admin actions via webhook, including the player's license and in-character name
Admin commands — list all boards, force-remove a board
━━━━━━━━━━━━━━━━━━━━━━━━━━
REQUIREMENTS
-
oxmysql (required)
-
One inventory: ox_inventory / QBCore / ESX (required)
-
ox_lib / mythic_notify / QB-Core — optional (notifications)
-
ox_target / qtarget — optional (target interaction)
-
Custom board & mark props included — no extra prop pack needed
━━━━━━━━━━━━━━━━━━━━━━━━━━
WHAT YOU GET
-
Complete resource with custom 3D props
-
SQL file included — one-step database setup
-
Documentation — installation, configuration, housing integration, FAQ
━━━━━━━━━━━━━━━━━━━━━━━━━━
Questions before buying? Join the Discord — happy to help: \