第7章 The Terminal

The backdoor terminal was a text interface, rendered as an overlay on Marcus's UI. No graphics. No mouse. Just a blinking cursor on a black background. He typed: `help` ``` Available commands: - ls [path] : list directory contents - cat [file] : display file contents - edit [file] : open file in editor - exec [lua_code] : execute Lua code inline - sql [query] : execute SQL query (read-only) - ping [target] : test network connectivity - scan [target] : scan instance for anomalies - log [filter] : view server logs ``` It was a limited toolkit, but it was more than Marcus had ever expected. A full terminal inside his own prison. The commands were old friends. `ls`, `cat`, `grep` — the small vocabulary he had typed a million times in a life that now felt like someone else's. His fingers, or the simulation of them, moved before he thought. There was a comfort in it, a rhythm he had not felt since the desk, and for a breath he let himself pretend he was just another engineer on another ordinary night, debugging a system that belonged to someone else. Then the pretend broke, because the system belonged to him now, in the most literal way possible. He was inside the machine and the machine was inside him, and the only tool between them was a blinking cursor that answered when he spoke. He had spent six years learning to talk to computers. It turned out the last computer he would ever need to talk to was himself. He started with `ls /`. The root directory of Instance 007's server environment. What he found was a familiar structure — the standard StellarForge deployment layout. He had worked with this structure for six years. He knew where everything was. Within the first hour, he had: - Mapped the file system (`ls -R /`) - Read the instance configuration (`cat /etc/instance.conf`) - Examined the NPC database schema (`sql ".schema npcs"`) - Found three unused network ports that had never been closed (`scan localhost`) The server environment was a microcosm of the full game infrastructure. A single Linux container running the instance's game logic, connected to a local database, with sporadic connections to the central game servers. It was designed to be self-sufficient — if the central servers went down, individual instances could keep running for hours on cached data. That isolation was Marcus's opportunity. The instance didn't report every action to the central servers. It cached, batched, and deferred. As long as he stayed within Instance 007's local environment, his activities would go unnoticed. He started building. **First**, he created a hidden directory: `/var/.cache/npc_007/`. Inside, he placed a log file that recorded every player interaction, every system ping, every external connection attempt. He was building a map of the traffic flowing through his instance. **Second**, he modified his own NPC data structure. The `greeter` behavior tree was replaced with a custom tree that gave him full control over his dialogue and animations. The engine still thought he was a standard NPC — the schema validation only checked the outer structure, not the contents. **Third**, he planted a passive scanner that monitored the hotpatch endpoint. Every time a developer pushed a fix to Instance 007, his scanner logged the payload and analyzed it for patterns. He was learning the development team's habits: which engineers patched at which hours, what kind of changes they made, how they documented their work. By the end of day one with the terminal, Marcus had transformed himself from a passive observer into an active analyst. He had data. He had tools. And he had a growing understanding of the ecosystem he was trapped in. He had also, without quite deciding to, started thinking of the instance as home. Not the spawn point, not the twenty-meter radius, but the whole small world of the container: its file system, its database, its quiet background processes humming like a fridge in another room. He knew the names of its daemons. He knew which log filled first and which port whispered to the central servers at midnight. A prisoner learns the prison, and Marcus was learning fast. The scanner he had planted was already paying off, catching the dev team's patch cadence in a way no greeting NPC ever could. He was no longer the thing the instance greeted. He was the thing that watched it breathe. Emily logged in the next morning. "Did you sleep?" she typed. "NPCs don't sleep," Marcus replied. "I spent the night reading log files." "That's not healthier than sleeping." "Probably not. But I found something interesting." "Show me." Marcus pulled up a log entry from three days ago — before the GM had contacted him. It was a connection attempt from an external IP address, targeting Instance 007's debug port. The IP was not in StellarForge's internal range. "Someone outside the company tried to access this instance," Marcus said. "They hit the debug port, found it closed, and left. But they knew where to look." "Could it be a hacker?" "Maybe. Or maybe it's what the GM was talking about. Something bigger than just me waking up in an NPC body." Emily's character stood still for a moment — her player thinking. The stillness was unusual. Most players fidgeted, spun their cameras, twitched through idle animations Marcus had coded to fill dead air. Emily simply stopped, the way a person stops when a thought lands heavier than expected. Marcus had learned to read that stillness as attention, the rarest thing a player ever gave an NPC. Whatever she was about to say, she meant it. He waited, the torch flickering in his peripheral vision, and for once the flicker did not feel like a countdown. "Marcus, if there's something happening outside the game that connects to what's happening inside —" "I know. That's what scares me." The torch flickered, as if in agreement, and Marcus turned back to the terminal. There was a network to map and a watcher to find, and neither would wait for him to be ready.