Repository navigation
REDnode 0.49.5
New
- The Console, built into REDnode: a command line for the game, like a browser's developer console, opened from the launcher. Type JavaScript with the whole
rednodepackage ready (game,api,tweakdb,worldand the rest, no imports), and Enter runs it: top-levelawait, variables kept between entries, results you can fold open, game objects you can call from the next entry ($1,$_), errors in red, history with Up and Down, Tab completion. Shortcuts for routine jobs:addItem("Items.Pants_01_basic_01"),removeItem,pos(),tp(x, y, z);help()lists them. The code runs in the Console's own Node mod, so an endless loop stops only the Console: Stop starts it again. No Cyber Engine Tweaks needed. - The editor channel (#17): tools on the player's PC, such as EDGEwave in VS Code, can play a game sound event in the running game, and stop it, with the game's own mix. While REDnode runs it writes
%LOCALAPPDATA%\REDnode\editor.jsonwith a local port and a token made new each run; the calls arePOST /editor/sound.play,/editor/sound.stopandGET /editor/info. Local only, refused to web pages;"editorChannel": "off"in REDnode's settings turns it off. See the Overlay apps guide, "Editor tools". game.player.addItem(id, count?)andgame.player.removeItem(id, count?)put items in V's inventory, or take them out, by their TweakDB id, as Cyber Engine Tweaks'Game.AddToInventorydoes.addItemrefuses an id with no record, so a typo is not given as an empty item.api.$nullpasses no object on purpose, for an object parameter the game does not mark optional (MCP:{"$null": true}).- Roles (#20): a package can provide a role, such as
"provides": ["voice"], answered by its service file, and any mod reaches it withuse("voice")without knowing which package that is. When two installed packages provide a role, the player picks the one that answers in the Mod Manager's new Provides section. audio.playplays a file from the package's data folder (pkg.dataDir) by its full path, for sounds a package makes while it runs, such as spoken lines.ui.input({ password: true }): a text field that shows dots, for a key or a password.- The Roles test sample checks all three.
- Keys in the launcher's Settings, a panel that slides out beside them (#23): the player's AI service keys (Anthropic, Google Gemini, OpenAI, ElevenLabs, or any other by its id), set once in the game and read by every EDGE tool on the PC. Each line shows only the key's last 4 characters and which tools have used it, with Set, Replace and Remove; an Anthropic or OpenAI key that does not start the right way is refused. Keys are kept encrypted for the Windows user in
%APPDATA%\Edgemodders\keys. See https://edgemodders.github.io/REDnode/keys.html - EDGEmat's material tools for in-game assistants: REDnode now ships EDGEmat's MCP server (
@edgemodders/edgemat-mcp0.3.1) and runs it when an in-game assistant such as REDagent first needs it, with REDnode's own Node, the game folder and REDbridge. Its tools are listed asedgemat__mat_*: searches and descriptions run without asking, edits and new materials ask the player first, and the Tools Manager switches them. Desktop assistants such as Claude Code get EDGEmat through EDGEchat instead ("edgematTools": "all"in REDnode's settings lists them there too). See https://edgemodders.github.io/REDnode/mcp.html#edgemats-tools-e1 game.state().world(#25): true only while V is in the world, false while the game starts, at the main menu and from the start of every load, the pause menu's too, sent throughgame.onStateas it changes. Mods read the world's systems (time, weather, districts) only while it is true.loc.text(key)(#26): the game's own text for a LocKey, such as a district's or an item's name, in the player's language:await loc.text("LocKey#10963")gives "Little China" in English. An array of keys is read in one round trip, and an unknown key givesnull.loc.language()gives the language.- Packages can use the player's shared keys (#23): list
"keys:anthropic"(or any other service) inpermissions, read it withsecrets.shared("anthropic"), and ask for it withsecrets.askShared("anthropic", { reason, offer }), which opens REDnode's own Key request window: the player allows the package and, when no key is saved, pastes one, or moves the key the package kept itself. The package never sees the window's box, and never writes the store. The Mod Manager shows and withdraws the permission. See https://edgemodders.github.io/REDnode/keys.html - The Keys test sample checks shared keys with a made-up service.
apicalls takescript_refparameters: pass the value itself, as inapi.GetLocalizedText("LocKey#10947").- Resizable windows:
"resizable": truein a package'srednode-app.json(withminWidthandminHeight) gives itsrn-windowa grip in the bottom-right corner. REDnode keeps the size with the window's position, and Reset position and size in the title bar goes back to the manifest's. See https://edgemodders.github.io/REDnode/overlay-apps.html#resizable-windows - The Mod Manager is resizable, its table shows as many rows a page as fit, and its columns are resized by dragging the edges in the header. The details beside the table slide shut to the right, and open again, with the tab between them. Column widths and the shut details are kept for the next visit.
- The Mod log has a close button.
Changed
-
An archive swap with the inventory open refreshes the inventory's preview of V on its own (#28). With V's clothes in the base slots, the game hides V's own items while the inventory shows, so the preview was skipped and kept the old look until the item was taken off and put on again.
-
world.movekeeps the new place of the package's own spawns, and a respawn after an archive swap reads where the entity is now, so an entity moved since its spawn (byworld.move, physics or a script) comes back there, not where it was first spawned (#27). Assistants' spawns through MCP do the same. -
The launcher's window is wider (1040 pixels, was 690) to make room for Keys beside Settings; its empty parts stay see-through and click through to the game. A launcher you moved goes back to its corner once.
-
While V is not in the world,
apirefuses the game's global and static functions that take aGameInstance(the gates to the world's systems, such asGameInstance.GetWeatherSystem) with "V is not in the world yet", where some crashed the game (#25).GetPlayerandGetSettingsSystemstay allowed: they answer safely without a world. -
Until the game first says what it shows,
game.state()reports the main menu, so a mod linked while the game starts never takes it for a loaded save. -
Keys: while a key is encrypted and saved (about a second), its line says "Encrypting the key…" in place of the box, and "Removing the key…" while one is removed.
-
Keys: Other service id refuses what looks like a key (long, a key's prefix such as
sk-orAIza, a long run of digits) and clears the box, so a key pasted there by mistake never becomes a file name or a log line. Service ids are now 1 to 24 characters. -
Counter service 0.3.0 provides the
counterrole. -
A plain
nullfor an object parameter the game does not mark optional is refused with an error naming the parameter, instead of being passed as an empty object: many game functions use such a parameter without checking it, andGetItemNamewith a null item data crashed the game (#18). The game API's types no longer allownullthere.
Fixed
- An archive swap through REDswap that replaces an archive with one holding fewer files now lets the files it left out load from the game, or another mod, again (#29). Before, they kept the old archive's version until the game restarted, so a mod could not restore the game's own look by swapping its file out. Comes with REDswap 1.0.3.
- A drag inside an overlay page now holds on when the cursor leaves the element it started on: mouse moves tell the page which button is held (
buttonsis 1 while the left button is down), sosetPointerCaptureworks. Before, a page's own drags, such as a resize grip, stopped after a few pixels. - The Console showed only
Uncaught:for an error whose first line is longer than 80 characters, such as "V is not in the world yet: ...": the whole message shows now. - A static function's full name now works with
class(api.$static("UIItemsHelper", "GetItemName;TweakDBIDgameItemData", ...), or the MCP tools'classandfn), with or without the class in front. - The MCP tool
api_readaccepts a full name that starts with its class, such asgameUIItemsHelper::GetItemName;TweakDBIDgameItemData.
Other
- The Nexus release tool (
tools/nexus/nexus.mjs) takes an optional"tag"innexus.json, the prefix of a page's own release tags, such as"wardrobe-designer-v", for a page released apart from its repo'sv<version>tags (#30). - Shared keys, first part (#23): one store for the player's AI service keys that every EDGE tool on the PC can read,
%APPDATA%\Edgemodders\keys\<service>.txtencrypted for the Windows user, and a small MIT library for tools to copy,tools/keys/keys.mjs. Packages reach it withsecrets.sharedandsecrets.askShared(above). See https://edgemodders.github.io/REDnode/keys.html
Also attached: REDnode Admin Tools 0.1.0 (REDnode-Admin-Tools-0.1.0.zip). An optional app pack for managing REDnode itself: the Task Manager (what every package costs, End task, Restart) and the Tools Manager (every tool an AI assistant sees, switched on and off). Extract it into the game folder after REDnode; it needs REDnode 0.37.0 or later. Guide: https://edgemodders.github.io/REDnode/admin-tools.html (changelog: https://github.com/Edgemodders/REDnode/blob/main/packs/admin-tools/changelog.md)
Also attached: REDnode Sound Tools 0.1.1 (REDnode-Sound-Tools-0.1.1.zip). An optional app pack for sound modders: Sound Tracer, Sound Search and Hot swap. Hot swap swaps through REDswap, which REDnode 0.41.0 installs. Extract it into the game folder after REDnode; it needs REDnode 0.41.0 or later. Guide: https://edgemodders.github.io/REDnode/sound-tools.html (changelog: https://github.com/Edgemodders/REDnode/blob/main/packs/sound-tools/changelog.md)
Also attached: REDswap 1.0.3 (REDswap-1.0.3.zip), the archive swap plugin on its own, for tools and players without REDnode. REDnode's zip already has it. Nexus: https://www.nexusmods.com/cyberpunk2077/mods/36172 (changelog: https://github.com/Edgemodders/REDnode/blob/main/native/redswap/changelog.md)
Install: extract into the game folder, or add the zip to Vortex or EDGEdeck. Needs RED4ext and redscript. Packages that read the game's archives also need REDbridge: press Get REDbridge in the Mod Manager. Docs: https://edgemodders.github.io/REDnode/ (changelog: https://edgemodders.github.io/REDnode/changelog.html)
Full Changelog: v0.41.0...v0.49.5