Ship Interior Hook - A Proof of Concept

A place to discuss mods in development and concepts for new mods.
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

So... After going over this with Betel on irc, I thought i might hear what others have to say.

This is an attempt at building a hook for DockScreens.
What this will provide, is a way for a 3'rd party mod, to tell the dockscreen that is wants to be available (so you can show another screen)

It requires that the XML for the DockScreen be overwritten (really simple change though), so there is that one issue.

As a proof of concept, i have implemented this on the ships interior dockscreen. (This is the one you refuel from)
I have added a new action (External Interfaces), which holds the meat of this mod.

Instead of selecting which dockscreen you want to see by calling an action, you are presented with a custompicker interface (think a list of items you can navigate).
This list consists of actions that invoke a dockscreen. We can provide a title, description, icon and of course the doockscreen to navigate to.

- So, what does this provide.

Well...

Ever wanted an item to have multiple unrelated dockscreens.
Have a usable item run an effect on <Invoke> but still have a dockscreen for configuration.
Have a dockscreen without having an item or station.

The list goes on... (i dont know what the limits are right now)

Basically it provides dynamic dockscreens.

As i said, it does require overriding some vanilla XML, and that is the thing I'm least satisfied with.
But in weighing the benefits against the disadvantages, I just can't help myself.

The dockscreen that I have overridden is the one that is always present to the user. The override is very simple, so migrating to future versions is simple.

What I am proposing is something of a convention among modders for providing dockscreens to the user.
Don't override that XML once again. Use this hook, and if it isn't already implemented for your base dockscreen, implement it, share it, and use it.

That way we can end up all being able to add custom actions to StartonEridani in our mods, without making our mod incompatible with others (there are plenty of other ways of doing this)

- So, what now?

Since this is a proof of concept here is some code.
You can put these into a vanilla game, and it should work (please let me know if i doesn't).
Access your ship's dockscreen and hit 'e' for ExternalInterface and bask in the glory of a test interface.

So... this works, but it is not finished. As stated i would like to see this turn into a framework, but for that to happen, we need to agree on the usability and possibilities of it.
There are a lot of things that could be done differently, from naming conventions, to extra hooks (wan't to update the pane description when user selects your action?)

Please let me know your thoughts


ShipInteriorHook.xml

Code: Select all

<?xml version="1.0" ?>
<!DOCTYPE TranscendenceExtension
	[
	<!ENTITY sih_modShipInteriorHook				"0xDCBA0030">
	<!ENTITY sih_dsExternalInterface				"0xDCBA0031">
]>

<TranscendenceExtension UNID="&sih_modShipInteriorHook;" version="0.99c">

	<DockScreen UNID="&sih_dsExternalInterface;"
		name=			"External Interfaces"
		type=			"customPicker"
		backgroundID=	"&rsItemListScreen;"
		>
		
		<List>
			(block (displayList)
				(if (isError ExternalInterfaceList)
					(setq ExternalInterfaceList (list))
				)
				(setq displayList (list))
				(enum ExternalInterfaceList fn
					(lnkAppend displayList ((eval fn)))
				)
				(lnkRemoveNil displayList)
			)
		</List>
		
		<Panes>
			<Default desc="Select and external interface to use.">
				<Actions>
					<Action name="Select" key="S" default="1">
						(block Nil
							(setq scr (item (scrGetListEntry gScreen) 3))
							(scrShowScreen gScreen scr)
						)
					</Action>
					<Action name="Back" key="B" cancel="1">
						<Navigate screen="&dsShipInterior;"/>
					</Action>
				</Actions>
			</Default>
		</Panes>
	</DockScreen>

	<!-- Taken straight from Vanilla XML -->
	<!-- Only added an action to access External Interfaces -->
	<!-- Player ship's interior -->

	<DockScreen UNID="&dsShipInterior;"
			name=				"Ship's Interior"
			backgroundID=		"&rsShipInterior;"
			>

		<Panes>

			<Default
					desc=	"You are inside the main compartment of your ship. A hatch in front of you opens into the cargo hold. To the side there is a small ladder that leads to the reactor and the ship's engines.">

				<Actions>
					<Action name="Ship configuration" key="S">
						(scrShowScreen gScreen "&dsShipConfig;")
					</Action>
						
					<Action name="View cargo hold" key="V" >
						(block Nil
							(setq gDest Nil)
							(scrShowScreen gScreen "&dsCargoHold;")
							)
					</Action>

					<Action name="Refuel engines" key="R" >
						<Navigate screen="&dsManualRefuel;"/>
					</Action>
					
					<Action name="External Interface" key="E">
						<Navigate screen="&sih_dsExternalInterface;"/>
					</Action>

					<Action name="Back to cockpit" cancel="1" key="B">
						<Exit/>
					</Action>

				</Actions>

			</Default>

		</Panes>

	</DockScreen>

</TranscendenceExtension>
ShipInteriorTest.xml

Code: Select all

<?xml version="1.0" ?>
<!DOCTYPE TranscendenceExtension
	[
	<!ENTITY tst_modExternalInterfaceTest					"0xDCBA0032">
	<!ENTITY tst_dsExternalInterfaceTest					"0xDCBA0033">
]>

<TranscendenceExtension UNID="&tst_modExternalInterfaceTest;" version="0.99c">

	<DockScreen UNID="&tst_dsExternalInterfaceTest;"
		name=			"External Interface"
		backgroundDI=	"&rsShipInterior;"
		>
		<Panes>
			<Default
				desc=	"I should be available through the external interfaces list in your ship interior screen.">
				
				<Actions>
					<Action name="Do Something" key="D">
						(scrSetDesc gScreen "Yes... that's right, you can do anything here")
					</Action>
					<Action name="Back" key="B" cancel="1">
						<Navigate screen="&dsShipInterior;"/>
					</Action>
				</Actions>
			</Default>
		</Panes>
	</DockScreen>
	<Globals>
		(block Nil
			;; this is the only required part of using the ShipInteriorHook
			;; let me walk you through it
			
			;; ShipInteriorHook must be a list of functions, that when called, provide information about the DockScreen to show
			;; The format of the list is:
			;; ("Title" ImageDesc "A Long Description of this screen" "&tst_dsExternalInterfaceTest;")
			;; 
			;; If the function returns Nil instead, it won't be shown
			;;
			;; Here we will make it really simple, but you can have it's logic be as complicated as you want
			(setq tst_ExternalInterfaceFunc (lambda Nil
			    (list "External Interface Test" Nil "This is a long winded description of what is available here" "&tst_dsExternalInterfaceTest;")
			))
			
			;; If the ExternalInterfaceList is not defined anywhere, calling it will result in an error.
			;; By testing for this, we can determine if we must define it ourselves, or append to the existing one
			(if (isError ExternalInterfaceList)
				;; we got an error, define it ourselves
				(setq ExternalInterfaceList (list "tst_ExternalInterfaceFunc"))
				;; it already exists, append to it
				(lnkAppend ExternalInterfaceList "tst_ExternalInterfaceFunc")
			)
		)
	</Globals>
</TranscendenceExtension>

Have fun!
Last edited by alterecco on Tue Jan 20, 2009 10:51 pm, edited 1 time in total.
User avatar
Periculi
Fleet Officer
Fleet Officer
Posts: 1282
Joined: Sat Oct 13, 2007 7:48 pm
Location: Necroposting in a forum near you

This is a good idea, which could be implemented as a sort of mod players standard - replacing the basic ship interior altogether might be a way to go.

I believe it is inevitable that mod makers for transcendence will develop a common extension that helps prevent mods from overriding each other or conflicting.

I had been thinking of doing a mod very similar to this to make an easy way to add screens for custom devices and ship enhancements and other specialty screens, and know that a lot can be done in this area.

Some further division of the screens that make a list might make for an easier interface, imagine how the screen navigation would handle if your list of custom screens had grown to dozens or more.
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

Thx for answering, Periculi. I had a feeling you might like standardization also.
Periculi wrote: - replacing the basic ship interior altogether might be a way to go.
I'm not sure i would like that - It would certainly increase the count of things that might break further on. I would really prefer not overriding any vanilla xml at all, but as you know that is not always possible. I would like to hear your thoughts on what could be accomplished from overriding the whole ship interior.
Periculi wrote:I believe it is inevitable that mod makers for transcendence will develop a common extension that helps prevent mods from overriding each other or conflicting.
I for one, certainly hope so, and will do my best to work on it.
Periculi wrote:Some further division of the screens that make a list might make for an easier interface, imagine how the screen navigation would handle if your list of custom screens had grown to dozens or more.
Again, i would like to hear your futher thoughts on this. The way i have thought it through, every mod that hooks into the "ExternalInterface" dockpane, should only place one list item. That would keep complexity down, until everyone and his grandma are using this, at which point i hope george would come up with a more built in solution. (Dynamically adding actions, anyone)

That being said, If there are some clear categories (devices, other?), then I can definately see it would make sense to separate them early on (DeviceConfiguration, ExternalInterface). I just think we should be careful with placing too many actions on the front pane of the ships interior.

OK... enough about that. I would love to look through some of your mods, for inspiration and code hints, if you would re-up the again somewhere. Temporarily even. If you really don't want to, then, well... ok :)
User avatar
Mutos
Militia Lieutenant
Militia Lieutenant
Posts: 218
Joined: Thu Aug 14, 2008 3:31 am
Location: Near Paris, France
Contact:

Hi alterecco, hi all,


Would love to use such a thing. I'll see what I can do with it, but as I read your description, it seems to answer some questions I was asking about dynamic dockscreens.

For instance :
- A planet could dynamically build a list of famous viewpoints to visit,
- A station could come with a list of rooms, marketplaces, lounges, shipyards and so on,
- Etc, etc, etc....
@+

Benoît 'Mutos' ROBIN
Hoshikaze 2250 Project
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

Mutos wrote: For instance :
- A planet could dynamically build a list of famous viewpoints to visit,
- A station could come with a list of rooms, marketplaces, lounges, shipyards and so on,
- Etc, etc, etc....

Hi Mutos,

Yes, that can be accomplished. I have been trying to come up with a comprehensive writeup of the Hook, but the proper explanation eludes me.
I will have some serious code available soon, and will try to explain that as good as possible. For now, please ask any questions if you have any.
User avatar
Prophet
Militia Captain
Militia Captain
Posts: 826
Joined: Tue Nov 18, 2008 6:09 pm

This sounds very interesting.
I really like the standarization idea.
Could it be used to create a list of current missions/quests like a 'captain's log' or journal? I have always felt that this was missing from the game and would make longer, more involved plot easier to handle rather than rely on the player's memory.
How about hailing/communicating with other ships?
A standalone mod to find target ship's sovereign or ship type(fighter/freighter/enemy/friendly) and call a list of communication options?

One quick question though which may arise later on. If a player uses a modded station/item that tries to invoke the ExternalInterface without the updated ship interior?
Coming soon: The Syrtian War adventure mod!
A Turret defense genre mod exploring the worst era in Earth's history.
Can you defend the Earth from the Syrtian invaders?
Stay tuned for updates!
User avatar
Mutos
Militia Lieutenant
Militia Lieutenant
Posts: 218
Joined: Thu Aug 14, 2008 3:31 am
Location: Near Paris, France
Contact:

Hi Prophet, hi alterecco, hi all,


Good idea Prophet, I would then use it as a foundation for my missions system ! I also will need a comm system with variable messages and answer and couldn't find how to devise it in the <c> comm system.

As for the serious code, I'll first handle the bugfixes I'm in and then I'll see your code and begin to actually test what I can do with it.
@+

Benoît 'Mutos' ROBIN
Hoshikaze 2250 Project
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

OK, I will try to summarize how i envision this (and how it is coded so far).

The whole mod revolves around the possibillity to override dockscreens. So, this mod can be implemented for any dockscreen very easily.

To enable a hook for a dockscreen you add one action to it, and a block of code in the <Initialize> element of that pane. I will show an excerpt here:

Code: Select all

<Initialize>
	(sh_InitializeScreenHook 
		"+ShipInterior;" 
		3
		(append
			sh_HookActionFlavour_Standard
			sh_HookActionFlavour_Machines
		)
	)
</Initialize>

Code: Select all

<Action name="Screen Hook">
	(block Nil
		(setq sh_ScreenHook "+ShipInterior;")
		(setq sh_PreviousScreen "&dsShipInterior;")
		(scrShowScreen gScreen "&sh_dsScreenHook;")
	)
</Action>
OK, this is taken out of context, so let me start by saying that this is the code for the Ship Interior.
The sh_InitializeScreenHook function is provided by the mod and takes the following arguments.
1) a Modifier to identify this hook
2) the number of the action that starts the hook (like all other screen functions)
3) a list of list, containing possible names for the action, descriptions etc... (basically a cosmetic addition). *Please, ask about this and i will go into details (you were warned!:) ).

The dock screen "&sh_dsScreenHook;" is the screen that actually shows the hooks that have been registered for this screen.
It is actually a very simple mod, containing a dockscreen and some global functions.
I am quite satisfied with its current state, so here is a copy to look at: ScreenHook.xml

So, the real question is how we hook into all this. The solution i have arrived at is to use an item with static data.
To illustrate this here is an example hook.

Code: Select all

<ItemType UNID="&testHook;"
	name=		"Screen Hook"
	frequency=		"notrandom"
	modifiers=		"ScreenHook; ShipInterior; CannotOrder; NotForSale;"
	>
	<Image imageID="&rsItems1;" imageX="0" imageY="288" imageWidth="96" imageHeight="96"/>
	<StaticData>
		<HookName>"Test Hook"</HookName>
		<HookText>"This Hook provides access to whatever"</HookText>
		<HookScreen>"&dsIAmTheDockScreenYouWantToSee;"</HookScreen>
		<HookPaneDesc>"I am a long winded description that will show up as the current (scrSetDesc). Good for adding flavour and plot. :)"</HookPaneDesc>
	</StaticData>
</ItemType>
This item is basically the glue. It connects a screen to another screen.
The reason it is an item is because we can use the 'modifiers' attribute to do some quick enuming.
If you look at this attribute you will see to modifiers, "ScreenHook; ShipInterior;". This enables us to
quickly search for items pertaining to a specific screen.
If you look at the <Action> code above you will notice this bit:

Code: Select all

(setq sh_ScreenHook "+ShipInterior;")
This tells our ScreenHook that we want items who have modifiers of type ShipInterior to show up.
We could choose whichever modifiers we want. Or multiple, just as an item can have multiple hook modifiers.

OK... I guess you see where this is going. The static data is pretty simple.
The ScreenHook.xml file contains getters for all of these, and they can all be overridden by setting global data on the item.

The information iteself ends up in the <List> item of the ScreenHook, and gets displayed to the user or helps determine what to do if this item is selected.

The <Image> element in the item can be excluded, but if included it will show up as an image in the list (think ItemPicker). The image can be overridden at runtime also.

Additionally there is a <HookPane> element which can be used to set which pane will be shown on your screen. (that's right, scrShowScreen takes a pane argument as well... woohooo)

The item can be disabled, so it wont show up at all.
This also means that on the dockscreen that is overridden, if no hooks have been registered, the action wont show up. So the interface remains uncluttered untill there is actually information to be had.

Part of what this mod allows for, is an almost pure dockscreen mod. The only non-dockscreen item you need is the item that carries the modifiers.

Ehh... that's all i can think of now. Time for another beer, woohooo. ;)

Please be aware though that this is still a work in progress. Of course you can take anything you want and use it
for whatever purpose, but personally i would really really like to see an agreement on the format and use
before it sees extensive use, at least an agreement among the modder community.

Have a look at the code, and please comment with questions, suggestions or criticism.

Edited a couple of times for clarity...
Last edited by alterecco on Fri Jan 23, 2009 5:29 am, edited 2 times in total.
User avatar
Mutos
Militia Lieutenant
Militia Lieutenant
Posts: 218
Joined: Thu Aug 14, 2008 3:31 am
Location: Near Paris, France
Contact:

Hi alterecco, hi all,


Wooo, that's great ! This way we could have a file with a long series of ScreenHook items with behaviors attached to them. Then we could at runtime use them and customize them as will !

I don't swear I'll use it fast, because there are things to do before I begin working on topics that would use it. But sure I'll keep updated and use it !

EDIT : couldn't help but try, but for now I get a picker with no item and no description. I'll post further details once I got more.
Last edited by Mutos on Fri Jan 23, 2009 5:37 am, edited 1 time in total.
@+

Benoît 'Mutos' ROBIN
Hoshikaze 2250 Project
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

Absolutely possible. Your type of mod (adventure mods) are perfect fits, with stations and items that are already custom made.

Although i do wish you used it fast, so i could get some practical feedback right away 8)
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

Prophet wrote:Could it be used to create a list of current missions/quests like a 'captain's log' or journal?
Definately. There is alot of work to do still from the mod's side (alot of information to keep track of), but the ability to hook into any overridden screen (and preferrably most screens will be overridden), and co-exist with other mods, will add to the potential of that mod.

(Think... "Hmmm, he's done some pretty bad stuff" {rep:-10}, "Hmm, he's pretty far into the game {sysGetLevel:6} - OK, show the "Do you want to be a pirate boss" dockscreen)
Prophet wrote:How about hailing/communicating with other ships?
A standalone mod to find target ship's sovereign or ship type(fighter/freighter/enemy/friendly) and call a list of communication options?
I am not very familiar with the built in communication system, but i can tell you, that any information that at current time can be set or gleaned by script, can be used in this mod. So yes, you could find a target ships sovereign, set orders, etc... If you want have a look at Signature Memoizer which was the mod that got me started on this idea (DigDug's comment).
Prophet wrote:One quick question though which may arise later on. If a player uses a modded station/item that tries to invoke the ExternalInterface without the updated ship interior?
This will fail. It probably wont throw errors, but the mod will not really be functional. At least the entire part that is registered as hook, won't be available...

This is, indeed, the "Achilles Heel" of this mod. That it, in itself, is only a mod.

We can only hope that George will one day provide something better :)
User avatar
Mutos
Militia Lieutenant
Militia Lieutenant
Posts: 218
Joined: Thu Aug 14, 2008 3:31 am
Location: Near Paris, France
Contact:

Hi alterecco, hi all,


Just got it, it works with the test item you provided. So I formalize a small tuto for those who would want to try :)

What you have to do is the following :

1/ Add the Mod XML to your extension folder,

2/ Add the following line to your entity list :

Code: Select all

	<!ENTITY sh_dsScreenHook			"0xDCBA0101">
3/ Add the following action to your screen (copy-paste from alterecco's post) :

Code: Select all

<Action name="Screen Hook">
   (block Nil
      (setq sh_ScreenHook "+ShipInterior;")
      (setq sh_PreviousScreen "&dsShipInterior;")
      (scrShowScreen gScreen "&sh_dsScreenHook;")
   )
</Action>
4/ Add the following Init to your Pane (copy-paste from alterecco's post) :

Code: Select all

<Initialize>
   (sh_InitializeScreenHook
      "+ShipInterior;"
      3
      (append
         sh_HookActionFlavour_Standard
         sh_HookActionFlavour_Machines
      )
   )
</Initialize> 
Beware : change the "3" to the sequence number of your action !

5/ Add somewhere items with the appropriate modifiers and the following code (copy-paste from alterecco's post) :

Code: Select all

<ItemType UNID="&testHook;"
   name=      "Screen Hook"
   frequency=      "notrandom"
   modifiers=      "ScreenHook; ShipInterior; CannotOrder; NotForSale;"
   >
   <Image imageID="&rsItems1;" imageX="0" imageY="288" imageWidth="96" imageHeight="96"/>
   <StaticData>
      <HookName>"Test Hook"</HookName>
      <HookText>"This Hook provides access to whatever"</HookText>
      <HookScreen>"&dsIAmTheDockScreenYouWantToSee;"</HookScreen>
      <HookPaneDesc>"I am a long winded description that will show up as the current (scrSetDesc). Good for adding flavour and plot. :)"</HookPaneDesc>
   </StaticData>
</ItemType>
Beware : replace "dsIAmTheDockScreenYouWantToSee" with an existing DockScreen UNID.

6/ Test, it should work !

7/ Fiddle with the parameters and spawn items !!!!!!!!!!!!!!!!

Thanks again altereco, this is going to be of a great use ^-^
@+

Benoît 'Mutos' ROBIN
Hoshikaze 2250 Project
User avatar
alterecco
Fleet Officer
Fleet Officer
Posts: 1658
Joined: Wed Jan 14, 2009 3:08 am
Location: Previously enslaved by the Iocrym

Hi Mutos,

Cool that you got it to work, and clarified the process. For you own use as and adventure modder, I would like to point you at:

Code: Select all

         sh_HookActionFlavour_Standard
         sh_HookActionFlavour_Machines
from the <Initialize> element.

At the moment, those are very much under testing, and are not *really* usefull. What they do specifically is provide randomized content for the overridden DockScreen, in this case of the types Machines and Standard. (the functions can be found in the ScreenHook.xml)

Everything about this implementation is very "shaky", so i am going to explain what i would like to accomplish with this in the end.

~~~~~~~

First of all i would like to point out that my main purpose is to mod the existing game, so if you are building your own adventure mod (like Mutos) please take this into account.

Every time you visit a station in the game it remains the same, to the point where i can say, find "this kind of station" , dock with it, press "this key" and that will happen. To a large extent that is perfectly OK, but when looking at a hook, that may appear in multiple locations, I felt that it was necessary to have some variation. So... my thoughts were to name the action differently from overridden station to overridden station, but found that repetitive and error prone. So instead i implemented this syntax you see here.

The idea is to create a set of general "ActionName/ActionDescription" functions that can be included by any station, to allow it to have a randomized selection of action names. I am not changing the names of the default actions (like "Refuel", "Dock Services"), but only the action that starts the ScreenHook. The plan is that in one game the action that shows a Black Market stations hook's is called "A shady looking man" with an accompanying description, in another game/station it is called something else.

Although i personally like the idea, the problem is that the list this name and description is selected from is static (defined by the function (sh_HookActionFlavour_Standard), or by the DockScreen override), so it's not really a perfect solution. I would very much like feedback on this element... would people prefer the action be called the same, no matter where it is found, or that your hook could add an item to the list of randomly selected names... or whatever....

Please give me feedback on this if you have some. Thx.
User avatar
Mutos
Militia Lieutenant
Militia Lieutenant
Posts: 218
Joined: Thu Aug 14, 2008 3:31 am
Location: Near Paris, France
Contact:

Hi alterecco, hi all,


In fact I just tested it and found it working. I'll give it full attention when I'll need it, but for now I'm on the topic of generic ship behavior, something entirely different ! But that's good to know where to look at when you try Step 7 : fiddle with the parameters ^-^

EDIT #1 : how do you see a missions system ? Something where you can create missions on the fly based on the current situation and present them in a specific "lounge" screen ?
@+

Benoît 'Mutos' ROBIN
Hoshikaze 2250 Project
User avatar
Prophet
Militia Captain
Militia Captain
Posts: 826
Joined: Tue Nov 18, 2008 6:09 pm

Hi everybody!

Finally got my laptop running again after a massive HD failure. Needless to say I lost everything on it. Good news is that I'm back and able to start from scratch.

I recently tried your mod alterecco, I got most of it working but my skills are not quite at the level necessary to rebuild what you already have so instead I will contribute ideas and egg you on until you have a version available for download.

My first thought is that this mod truly is 'all-encompassing' which is both good and bad. My thought is that many people will be using once you have it running and without the standardization of atleast SOME aspects there will be many conflicts. To alleviate some future headaches I thought breaking up the ship interior into, for lack of a better term, decks.
This would allow relevant dockscreens to be sorted and hopefully stem the "OH MY GOD I HAVE 1836792 HOOKS" (yes, an exageration) but if a player were looking for a specific choice in the heat of combat... disaster.

Bridge - Communications, Sensors
Engineering - Reactor, Drives
Armoury - Weapons, Armour and Shields.
Transporter room/Shuttlebay - Going on an away mission with a redshirt to a custom planet or station?
Cargo Bay - Using or inspecting your cargo (Obviously)

Basically just categories that could be eventually hardcoded to keep similar things together and easier to find. Certain decks could be build to handle specific Hook tags and a master list would make it easier for a modder to tie into your existing architecture.

Similarly, for Hooks that deal with something that is not directly accessible in your ship (such as a loung/bar/Merchant Bizarre/wreck) to use a generalized descriptor like you had already put forward
sh_HookActionFlavour_Standard
sh_HookActionFlavour_Machines
and expand it to include Blackmarket, Militia, Korolov, Ringers,etc.

I'm not sure if that is quite what you had in mind for the Flavours.


Can't wait til this gets running, kudos to you, alterecco!
Coming soon: The Syrtian War adventure mod!
A Turret defense genre mod exploring the worst era in Earth's history.
Can you defend the Earth from the Syrtian invaders?
Stay tuned for updates!
Post Reply