Skip to content

Releases: RemArrow/Operator-Phone-Mod

VERSION M2 1.0.3

Choose a tag to compare

@RemArrow RemArrow released this 05 Aug 23:42
263835a

[1.0.3] — 2026-08-05

Message bubbles were being cut off at both edges of the screen.

Fixed

  • Bubbles rendered outside the phone's bounds, clipping text on the left and right
    simultaneously. Two causes: every bubble was forced to a fixed width regardless of how
    short the message was, and the conversation list's content was anchored from its
    centre — so anything wider than the view spilled equally past both sides instead of
    being contained.
  • Bubbles are now sized to their text, up to a maximum width, so short messages get
    short bubbles and the alignment between sent and received is actually readable.
  • Text wrapping now matches the bubble's real width, fixing bubbles whose height didn't
    match the text inside them.

Version M2 1.0.2

Choose a tag to compare

@RemArrow RemArrow released this 05 Aug 23:31
753990c

[1.0.2] — 2026-08-05

Chat now connects. Previous builds shipped without Photon's client assembly embedded,
so messaging could never start.

Fixed

  • Photon's client assembly wasn't being embedded, so every attempt to use chat threw
    FileNotFoundException and messaging was unreachable. It's now bundled inside the mod
    DLL and resolved at load time.
  • The chat fault guard never armed, producing an identical exception every frame —
    thousands of lines that buried anything else in the log. The failure is a type-load
    error raised while JIT-compiling the method that touches chat, so a try/catch inside
    that same method could never catch it. The guard moved to the caller, with the chat
    reference isolated behind a no-inline boundary.
  • Opening Settings could wedge navigation. Reading chat state forces Photon's
    assembly to load; when that failed, the throw happened mid-navigation before the nav
    bar refreshed, hiding the back button with no way out of the screen.
  • App lifecycle callbacks are isolated, so a failure in any one app can no longer break
    navigation for the whole phone.
  • Settings degrades to Chat: unavailable instead of throwing.
  • Unlinking no longer fails when the chat service is unreachable.

Added

  • Home button () in the nav bar. Previously only Back existed, so returning to the
    app grid from a nested screen took several presses.
  • Startup diagnostic listing embedded resources, so a missing dependency is reported at
    load with the actual cause rather than surfacing later as an opaque
    FileNotFoundException.

Notes

  • Chat connects and authenticates, but message delivery between two players is still
    unverified.
  • Both players need the mod and must have linked at least once. Numbers that have never
    been claimed can't be messaged.
  • Still no offline delivery — if the recipient isn't connected, the message is lost.

Version M1 V1.0.1

Choose a tag to compare

@RemArrow RemArrow released this 05 Aug 22:26
753990c

Changelog

All notable changes to OperatorPhone.

Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).


[1.0.1] — 2026-08-05

Navigation fix. If you got stuck in Settings, this is the one you want.

Fixed

  • Navigation could wedge on entering Settings. The Settings screen reads chat state,
    which forces the runtime to load Photon's assembly. When that assembly wasn't
    resolvable the throw happened mid-navigation, before the nav bar refreshed — leaving
    the back button hidden and no way out of the screen.
  • App lifecycle callbacks are now isolated, so a failure inside any one app can't take
    navigation down with it. A broken app is now a broken screen you can leave, rather
    than a phone you're trapped in.
  • Settings degrades gracefully when chat is unavailable, showing Chat: unavailable
    instead of throwing.
  • Unlinking no longer fails when the chat service can't be reached.

Added

  • Home button in the nav bar (). Previously only Back existed, so returning to
    the app grid from a nested screen took multiple presses.

[1.0.0] — 2026-08-05

First public release. Identity works end to end; messaging is present but unverified
between two players.

Added

Identity

  • Steam account linking via Steam OpenID, in the player's browser. No API key or App ID
    required, which is what makes this possible for a third-party mod at all — validating
    a Steam auth session ticket needs a publisher key only the game's developer can issue.
  • Persistent phone numbers in AAA-NNNN format. Area codes encode join cohort,
    starting at 201 and rolling over at 50% block occupancy.
  • Numbers derive from HMAC(steamid, secret), so the same account always converges to
    the same number — surviving reinstalls and even a database restore.
  • Atomic assignment: INSERT plus a UNIQUE constraint, linear-probing on collision.
    Uniqueness is enforced by the database rather than a read-then-write check, which
    would race two simultaneous logins onto one number.
  • Auth token cached locally, so only the first launch opens a browser.
  • Relink is forced automatically if the running Steam account differs from the linked
    one — on a shared machine, that prevents delivering someone else's messages.

Phone

  • Screen-space phone panel, toggled with F1.
  • Status bar showing your number and connection state, in tabular figures so digits
    don't jitter as they change.
  • App shell with home grid, nav bar, and back navigation.
  • Messages — thread list, new conversations by number, conversation view with
    aligned bubbles, composer.
  • Contacts — add with nickname, delete, persisted locally.
  • Settings — number, identity state, chat state, unlink.

Networking

  • Photon Chat transport, entirely separate from OPERATOR's Mirror netcode. The mod
    registers no prefabs, spawns no networked objects, and touches no NetworkServer
    so it can't desync a match or crash a server.
  • Messaging works outside matches and across different servers.
  • Photon custom authentication against the identity worker, so a client can't connect
    claiming a UserId it doesn't own.
  • Versioned message envelopes. Unknown types are ignored rather than throwing, so a
    newer client's message can't break an older one.
  • Local message history in append-only JSONL, one file per thread.

Input

  • Game input suppressed while the phone is open, with cursor state saved and restored.
  • Cursor lock reasserted each frame, since the game re-locks it from its own state
    machine.

Packaging

  • Ships as a single DLL. Photon's client assembly is embedded and resolved at load time
    via a module initializer, so nothing goes in UserLibs.

Known issues

  • Messaging is unverified between two accounts.
  • No offline delivery — messages to a disconnected player are lost.
  • Text entry untested mid-match. If typing moves your operator, that's the top-priority
    fix.
  • Long messages may lay out incorrectly in a conversation.
  • The phone is a screen-space panel, not a held object.

Privacy

  • SteamIDs are never stored server-side, only an irreversible HMAC.
  • Number lookup is one-directional: a number can receive messages but can't be resolved
    back to a Steam account.
  • Messages are not end-to-end encrypted and pass through Photon in transit.

Version M1

Choose a tag to compare

@RemArrow RemArrow released this 05 Aug 21:41
18e4154

v1.0.0 M1 — Identity

First release. You can link your Steam account and get a phone number that persists
across restarts and reinstalls.

This is a foundation release. Messaging is implemented but not yet verified between
two accounts — treat it as untested. Nothing else is here to use yet.

What works

  • Link once, keep your number. Steam login in your browser assigns a number like
    201-9219. Stored locally, so every launch after that goes straight to the phone with
    no browser trip.
  • The phone opens. Press F1. Status bar shows your number and connection state.
  • Home, Messages, Contacts, Settings exist and navigate.
  • Game input is suppressed while the phone is open, so you don't walk into a wall
    reading a text.

What doesn't

  • Messaging is unverified. The send path is written and persists locally, but no
    message has been confirmed delivered between two players yet.
  • No offline delivery. If the recipient isn't connected, the message is lost.
  • No images, links, presence, or group threads.
  • No moderation tooling. Don't hand this to strangers.

Install

  1. [MelonLoader](https://melonwiki.xyz/) v0.6+ installed into OPERATOR
  2. Drop OperatorPhone.dll into OPERATOR/Mods/
  3. Launch, press F1, click Link Steam Account

Single DLL. Nothing goes in UserLibs.

Notes

  • Requires Steam — the mod authenticates through Steam OpenID.
  • Your SteamID is never stored on the server, only an irreversible hash of it.
  • Messages are not end-to-end encrypted. Treat the phone like an unencrypted chat.
  • Numbers can't currently be transferred or rerolled from the UI. Since assignment is
    derived from your account, unlinking and relinking returns the same number.
  • Tested against OPERATOR 0.09.5 / Unity 6000.3.8f1. Game updates may break it.

Known issues

  • Text entry hasn't been tested mid-match. If typing moves your operator, close the
    phone and report it — that's the top-priority fix.
  • Long messages may lay out incorrectly in the conversation view.
  • The phone renders as a screen-space panel, not a held object. That's next.

Feedback

Bug reports welcome — include your MelonLoader/Latest.log, it makes almost every
problem diagnosable in one pass.

Full changelog: first release.