Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ASTRA228b/BoardBiblesV1/llms.txt

Use this file to discover all available pages before exploring further.

Board Bibles V1 takes over Gorilla Tag’s built-in bulletin boards inside the TreeRoom scene to display scripture verses. This page explains how the mod finds the four relevant GameObjects, prevents the game from overwriting the mod’s content, and drives the startup and rotation cycle through Unity’s Update() loop.

Locating the GameObjects

All four bulletin board text objects live under a fixed scene path:
Environment Objects/LocalObjects_Prefab/TreeRoom/
The FindThem() method calls GameObject.Find() with that base path prepended to each object name. It targets two heading slots and two body slots — one pair for the MOTD board and one pair for the Code of Conduct board:
Object nameRole
motdHeadingTextMOTD heading label
motdBodyTextMOTD body content
CodeOfConductHeadingTextCoC heading label
COCBodyText_TitleDataCoC body content
string local = "Environment Objects/LocalObjects_Prefab/TreeRoom/";

private void FindThem()
{
    GameObject MotdHTxt = GameObject.Find(local + "motdHeadingText");
    GameObject MotdBTxt = GameObject.Find(local + "motdBodyText");
    GameObject COCHTxt = GameObject.Find(local + "CodeOfConductHeadingText");
    GameObject COCBTxt = GameObject.Find(local + "COCBodyText_TitleData");
    MotdBTxt.GetComponent<PlayFabTitleDataTextDisplay>().enabled = false;
    COCBTxt.GetComponent<PlayFabTitleDataTextDisplay>().enabled = false;
    // ... assigns TMP_Text components
}
FindThem() is called from Update() every frame until all four references are non-null. Once the objects are cached the method is no longer called.

Disabling the native text handler

Gorilla Tag uses a PlayFabTitleDataTextDisplay component on the body text objects to pull live content from PlayFab’s title data service. If left enabled, the game would overwrite whatever the mod writes to those TMP_Text fields on the next frame. Board Bibles V1 disables this component on both body objects immediately after finding them:
MotdBTxt.GetComponent<PlayFabTitleDataTextDisplay>().enabled = false;
COCBTxt.GetComponent<PlayFabTitleDataTextDisplay>().enabled = false;
Only the two body objects carry PlayFabTitleDataTextDisplay. The heading objects do not, so no disable call is needed for those.

Applying text every frame

ApplyTexts() is called from Update() on every frame after the GameObjects are found. It writes the mod’s heading and the current verse string to all four slots:
private string ModHTitle = "Board Bible V1";

private void ApplyTexts()
{
    if (MotdText != null)
        MotdText.text = ModHTitle;
    if (COCText != null)
        COCText.text = ModHTitle;
    if (MotdBodyText != null)
        MotdBodyText.text = CV.ToUpper();
    if (COCBodyText != null)
        COCBodyText.text = CV.ToUpper();
}
Both heading slots are set to the literal string "Board Bible V1". Both body slots receive the current verse string stored in CV, converted to uppercase via .ToUpper() before display.
Writing text every frame is intentional. If another system tries to reset the billboard content, the mod’s Update() call immediately restores it on the next frame.

Startup and rotation cycle

Board Bibles V1 follows a three-phase display loop from the moment the game loads:
1

Welcome message (0–2 minutes)

On Start(), the current verse string CV is set to the welcome message and a start timestamp is recorded:
private string StartMsg = "WELCOME TO BOARD BIBLE MADE BY ASTRA\n LOADING GET READY...";

private void Start()
{
    StartT = DateTime.UtcNow;
    CV = StartMsg;
}
The showingStartMessage flag stays true and Update() keeps writing the welcome message to the boards until two minutes have elapsed.
2

First verse fetch

Once DateTime.UtcNow - StartT >= TimeSpan.FromMinutes(2), showingStartMessage is set to false and PickVerse() is called for the first time. This triggers the APIPuller coroutine to request a verse from the live API (or fall back to the local list if the network is unavailable). See API and offline fallback for details.
3

5-minute rotation

After the first verse loads, Update() checks whether five minutes have passed since ChangeTime was last set. If so, PickVerse() is called again:
if (!LV && (ChangeTime == null || DateTime.UtcNow - ChangeTime >= TimeSpan.FromMinutes(5)))
{
    PickVerse();
}
The LV (loading verse) flag prevents a second fetch from starting while one is already in progress.

Summary

GameObject discovery

Four bulletin board objects are located by full scene path using GameObject.Find() and cached after the first successful lookup.

Native handler disabled

PlayFabTitleDataTextDisplay is disabled on the two body objects so Gorilla Tag cannot overwrite the mod’s content.

Frame-level text write

ApplyTexts() runs every frame, keeping both boards in sync with the current verse string at all times.

Timed rotation

A 2-minute welcome screen is followed by verse fetches that rotate every 5 minutes for the duration of the session.

Build docs developers (and LLMs) love