Scrivener07 / FO4-Papyrus-Terminal

A terminal with advanced Papyrus support, by niston. This codebase is a stale fork of niston's repository.
https://github.com/niston/PapyrusTerminal
2 stars 2 forks source link

Project #1

Open Scrivener07 opened 3 years ago

Scrivener07 commented 3 years ago

Hardware

The hardware for this system refers to "physical" machines in game.

Classic Hardware

Add classic hardware like the Commodore, IBM systems, and others.

Settlement Mainframes (HAL)

There would also be the larger version constructible HAL computers in rack format for the settlement. These could use that network stack I mentioned so you could run batch programs that do stuff in your settlement. Things like turn on lights etc.

Firmware

The firmware for this system refers to the core terminal program.

Firmware, Menu Replacer

Imagine when you activate a terminal and its immediately in terminal mode before a Holotape is even played. Then Holotapes can be run like programs. This crossed my mind when I was poking at the "Press R to load holotape" message and menu. This might also be done via SWF injection on TerminalMenu.

Firmware, Holotape Library

I think I found a way how to implement Holotape library by replacing TerminalButtons.swf.

This should allow us to do these things. 1) Intercept the holotape activation that brings up the "select holotape from inventory menu" 2) Add more activation buttons.

So if we had an option to "select tape library" we could then intercept "LOAD HOLOTAPE", move the holotapes from the selected library to player, and then run the activation for the holotape selection menu. We can also intercept "EJECT HOLOTAPE" by moving the holotapes back to the library.

Firmware, Papyrus Interrupter

This will support a computer system that can execute scripts much like a mainframe does.

What if we created a "standard" for an actor object (some invisible marker) to execute a "program" script via magic effect. Then that program had a STDIO like interface that could be redirected.

Now what if the HAL5051 spawned one of those actor objects, inside it. And what if we had a OS like software that would allow us to load a script from some source (holoreel, anyone?) and apply it to the actor (magic effect) in order to run that script to terminate an instance, the OS like software would dispel the magic effect

Now, if the STDIO interface could be redirected to terminal one could have an interactive application. Meanwhile if the STDIO interface could be redirected to some "file" instead. The program could run in batch fashion with no one logged in if the STDIO interface could be redirected over the powerline/radio network you could literally log into your HAL5051 at your home from some other terminal somewhere else perhaps that could even be redirected over the internet

MGEF is good for a lot of stuff but one of its qualities is that you should not ever reference an Active Magic Effect instance from another script. OMOD is another possible candidate. I don't know, it will work itself out as prototypes are built.

Using actor because of the magic effect mechanism that allows dispelling. Dispelling actually kills the script I read somewhere. It could also be an invisible marker placeatnode'd.

Firmware, Pipboy Compatibility

Since the Pipboy doesn't generate OnHolotapePlay, and since OnEquip is only generated after the holotape has been closed, I think the flash program would have to show some introductory note on the screen, prompting the user to hit a key so that the flash program can then notify the BIOS.psc that the "terminal" is initializing.

Right now the problem is OnTerminalReady registration is done in OnHolotapePlay. So when there is no OnHolotapePlay, the BIOS never gets the ready event.

We would have to emulate the OnHolotapePlay event on Pipboy by calling a function on the BIOS.psc from flash as soon as the player confirms the introductory note. The SendExternalEvent doesn't work because we can't register for that. The called function would in essence do the same as the OnHolotapePlay event.

Nexus Forums: script-event-for-holotapes

Firmware, Pipboy Disable FX

This feature may need to be added with a native XSE plugin. If a reference gets activated and is a Terminal, then check if that reference has a keyword with name NSNE_PerfectronColor.

If it does, temporarily disable Pipboy FX. If Pipboy FX were enabled prior to the Terminal opening, then re-enable them when terminal closes.

The problem with doing it from script is, there is no way to read the INI setting (or something) so it can't know if FX were previously enabled.

Firmware, Close Terminal Menu

This feature may need to be added with a native XSE plugin. Add the ability to completely close the Terminal via an XSE plugin. In settlement transfer there is a terminal+.dll which has exactly this functionality.

Firmware, Unpause Terminal Menu

This feature may need to be added with a native XSE plugin. Add feature to unpause game while the Terminal menu is open. A Holotape script should be able to toggle this setting.

I think it's basically replacing this thing supplying new flags.

Firmware, Graphics & Drawing

Expose some of the graphics capabilities of Flash to Papyrus. The idea is that you can control a "Brush" rather than a "Cursor" to draw images on screen, with Papyrus.

Firmware, Media Display

Add feature to format (size & position) media in terminal like SWF/PNG/DDSfiles. So question about loading media into the terminal from disk like my DOS example. I was thinking that internally the terminal could define a "media" object.

MediaObject
+--Position: starting character index
+--Size: Small, Medium, Large

**Position:** The starting character index of the media object *size* range.
**Size: ** Three size presets which define a character range that the media occupies.

This is just an early thought as I approach working on the TYPE "filename.dds". This is mostly a NOTE: for myself but has something like this crossed your mind already?

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/type I have it displaying text files already, that is straight forward.

Firmware, Easter-Egg, Credits Screen

Add an Easter-Egg at some point that goes something like this. If you press Ctrl-Shift-Alt-Home or whatever, it shows a credits screen. Perhaps a mod tune could be played too.

Software

The software for this system refers to BIOS.psc implementations of Holotapes These are some example implementations of software built on Papyrus Terminal framework.

Software, Operating System, DOS

Replicate a Fallout version of DOS built on the Papyrus Terminal framework. This would be a novelty program that serves as a technology demonstration.

Goals

Software, ATM & Digital Banking

Create new example for an ATM and digital banking system in Fallout 4 using Caps as currency. Niston mentioned he wanted to do a banking system in Concord tied in to the local bank.

Software, Minutemen Settlement Network (MSN)

Provides a terminal environment with network stack that can network settlement objects over power lines, wireless, and radio. The ultimate goal is the MSN, or Minutemen Settlement Network.

This network stack could run batch programs that do stuff in your settlement. Things like turn on lights etc.

Or more complex things like controlling factories provided there were builders etc that support the network stack as well. A lamp could support the network stack, a door could, or a Vertibird landing pad could (turn on/off lights, signal pad occupied by bird).

Now if you added the simple concept of group controllers to that network you could even set up stuff without having to write code.

You'd set up a group that controls say 6 on/off channels. Then you'd set up light switches to control these groups and you'd set up lamps to react to these groups.

The group controller provides persistent state. When light switch A goes "toggle channel 1 on group 1", group 1 toggles channel 1. Then a state change gets sends out to anything listening to that group, such as a lamp. The lamp queries the group for initial state when it gets loaded.

Now imagine if a program could access this network stack and read/update the groups etc. You could do very complex stuff and have simple button/light interfaces for it.

- Press button 1 to configure factory to produce 5mm ammo and run a batch of 10000.
- Press button 2 to configure factory to produce teddy bears and run a batch of 500.

Anyhow, with the much simpler lamp example all the components only need one wire connection to power. A wireless connection that is implemented with channel numbers instead of the HasSharedPowerGrid() or something might also be used.

Scrivener07 commented 3 years ago