[Scripting] My failed attempt at an alternative tutorial

Talk about the game
Post Reply
Woetoo
Posts: 69
Joined: Wed Jun 24, 2015 10:40 am

[Scripting] My failed attempt at an alternative tutorial

Post by Woetoo » Sat May 14, 2016 9:25 pm

Yes, I know... playing about with scripting of a game that is still actively being developed is just asking for trouble.

That's me.. asking for trouble.

So I decided to have a bash at seeing if I could create an alternative tutorial mission.
Sure, I've no clue about the various event types, objective types or any of the parameters... but therein lies the fun.

I didn't get very far, mainly because there's just things which I wanted to do.. that I can't (or perhaps didn't know how to).

I don't need answers or documentation or anything... Please consider this feedback.


<---- CUT ------>
Spoiler: show

Code: Select all

<?xml version="1.0" ?>

<scenario>
	<title>
		<en>Woetoo's Tutorial</en>
	</title>

	<world seed="43" climate="mesothermal" size="60" tectonics="0" baseName="Maia Training Sim 1a"  colonists="4" tutorial="true" lockCapsules="true" />

	<brief>
		<en>Simulation Lab 6:
			"Colony Administration for Dummies".
		
			Bring your own sandwiches.
		</en>
	</brief>

	<info>
		<en>Engineer Note: Found this... it seems to be a DNGN interface for machine readable devices. Handle with care.</en>
	</info>

	<event id="Intro-1a" time="0" type="disableUI" >
		<email>
			<en>Greetings Administrator.
			
				Welcome to the Maia Corporation Headquarters.
				
				
				
				(Click the left mouse button or press "Y" to close this message)
			</en>
		</email>

	</event>
	
	<event id="Intro-1b" time="5" >
		<email>
			<en>As you know, since the now decommisioned NASA Kepler Space telescope first discovered a potential Earth-like habitable planet in the early 21st century, we have been working towards space colonisation.
				
				Decades of research. Billions of man hours. Terrible losses and outstanding successes. Mountains of caffine pills. We are now poised to begin our first interseller mission to 3452C.
			</en>
		</email>
	</event>
	
	<event id="Intro-1c" time="5" >
		<email>
			<en>Or as we prefer to call it...
			
				MAIA.
			</en>
		</email>
	</event>
	
	<event id="Intro-1d" time="10" >
		<email>
			<en>However, before we can let you lose on a real colony with real lives at stake, we need you to complete the administrator training simulation.
			
				
			
				DISCLAIMER: No snargles were injured or killed to bring you this simulation.
			</en>
		</email>
		<objective type="annoyUser" triggers="Intro-1e" >
			<en>Waiting for confirmation from Snargle homeworld...</en>
		</objective>
	</event>

	<event id="Intro-1e" type="highlightInfoModeSelection" >
		<objective type="selectInfoMode"  triggers="Intro-2a" >
			<en>Please press the "Hand" icon at the bottom of the screen to begin simulation.</en>
		</objective>
	</event>
		
	<event id="Intro-2a" >
		<email>
			<en>::SIMULATION ACTIVE</en>
		</email>
		<objective type="annoyUser" >
			<en>::Boot up sequence initiated!</en>
		</objective>
		<objective type="annoyUser" requirePreviousObjective="true" >
			<en>Visual System: CCD 517.3</en>
		</objective>
		<objective type="annoyUser" requirePreviousObjective="true" >
			<en>Artificial Intelligence System: K177</en>
		</objective>
		<objective type="annoyUser" requirePreviousObjective="true" >
			<en>7@L&13 70@573& ::PARAMETER ERROR</en>
		</objective>
		<objective type="annoyUser" requirePreviousObjective="true" >
			<en>Manufacturer: Taiwan</en>
		</objective>
		<objective type="annoyUser" triggers="TutorialEnd" requirePreviousObjective="true" >
			<en>::SIMULATION: ONLINE</en>
		</objective>
	</event>
	
	
	<event id="TutorialEnd" type="enableUI" >
		<email>
			<en>Good Luck</en>
		</email>

		<objective type="annoyUser" >
			<en>Don't Panic!</en>
		</objective>
	</event>


</scenario>
<---- AND PASTE------>

So... some of my stumbling blocks.
  • Problem 1: Altering size= didn't seem to affect the world size. I ended up trying numbers as low as 5. It feels like the word sizes may be fixed as 60, 100 and 150. Grrrr.
  • Problem 2: disabling the UI still allows marking blocks for digging. I was hoping to stop all interactions until I switched them on.
  • Problem 3: Time advances. time= parameters are fixed relative to the mission time. So if the player does nothing or spends longer than normal reading, events collide together.
  • Problem 4: All messages require an email. I'd really like to be able to put up messages that aren't emails.
  • Problem 5: The objective tracker is only 4 lines long. It feels like "well, I only needed 4 lines" solution.
  • Problem 6: Enabling/Disabling colonist lander timers looks like it's tied to world generation, rather than being an event (like disableUI).
  • Problem 7: I don't understand the "moveTutorialCamera" event. There's no parameters, yet in the existing tutorial, the camera goes to very specific places. (did you hardcode it, Simon? :shock: )
  • Problem 8: Coding time= onto an event with an email automatically opens that email. Shouldn't that be a separate parameter? What if I want to send an email on a timer, but not have it auto-open?
  • Problem 9: I tried to combine event type="highlightInfoModeSelection" with time= ... bad things happened. Though I'm thinking that's probably fine.
*cough* <event id="PlaceDigOrders" type="createTutorialDigOrders" > *cough*. :oops:

I appreciate some of the stuff I wanted to do may already be available. Like enabling and disabling marking for mining, or enabling and disabling the colonist lander timer.

The main one for me was a combination of the time= stuff and the exclusive use of emails for displaying text to the user.
I really wanted to create a series of informational messages for the user to read and acknowledge before advancing to the next message.
Since it's impossible to know how long a user will take to read a message or even if the user might go AFK right at the beginning - I couldn't just stack up message by time.
I tried to get around it using objectives, but then I just ended up with a mass of objectives running into each other.

Things I'd like to see (if they aren't already possible).
  • An action to display a message, without it being an email.
  • An action to enable/disable receiving normal emails (it's still the tutorial, reading the power messages and such seems a bit premature).
  • An action to enable/disable marking mining blocks, lander timers, meteor events, earthquake event, etc.
  • Maybe combine all those with each being starting disabled if tutorial="true" is coded on the world generation tag.
  • Absolute control of the camera position, zoom and angle.
  • An action to clear the email queue. (especially if all messages NEED to be emails).
  • Since emails are part of events, and events have id="xxx"... is it possible to have an objective type of "closedEmail" and/or "dismissedEmail" tagged with the event id that created it? (ie. to check for players having finished reading mails and/or have dismissed them from the email queue?). If that somehow covered my fictional non-email message, that'd be peachy too.
  • A parameter for an event to clear completed items the objective queue. I appreciate not all objectives will be flagged as requirePreviousObjective. But I already wanted to create a new set of objectives without the old objectives still hanging around on screen.
  • The objective "haveFood" is used for checking the food exceeding a specified amount. Could we also have a "food below a specified amount" check too? Same with the other resource types too.
  • EDIT: The ability to make an event conditionally dependant on other event(s) have completed. (maybe you want to send an email after x, y and z have been built - without making them objectives on the objective tracker.
  • EDIT: Timings and time= are all absolute. It would be nice if time= could include something like time=+20, where the "+" makes it relative to... erm.. something. (Problem is previous events can already be long complete by the user sees the email linked to them - again, another issue highlighted by a player going AFK - Try playing the Sulphur mission and going AFK for 8 minutes at the beginning).
Some of that is in part because I wanted my tutorial to cover opening, closing and dismissing emails after having taught the player the basics of camera movements and building.

EDIT: I suppose at the heart of it, what I want is to be able to trigger some future events based on when the player took positive actions within the game (and not just using the objective tracker). i.e. If the script schedules two emails for time=10 and time=20, that seems fine until you realise the 2nd email won't be shown to the player until they close email #1. I keep mentioning the extreme of what if the player goes AFK, but the extremes are what highlight the minor problems. btw, the objective tracker has similar but seemingly opposite problems - especially over short periods. Timers on objectives don't start until the objective is displayed on the screen - which is something that happened to me when I added a 5 objective condition and objective #5 was waiting for the objective #1 to scroll off the screen.

I know that's a lot - and as I said earlier, it's just feedback rather than a wishlist (okay, it's also a wishlist - but only if it makes sense for the overall plan for the game).
Plus I know you're busy bug fixing. Then there will be stuff that's on the roadmap. Then there will be scenarios. And none of this gets the game any closer to release (though I think it would be better for it).

Plus this is only the stuff that came up when I was trying to do something fairly specific. If I'd have gotten further into my tutorial ... no doubt my wishlist would have gotten longer and I'd have noticed more hard coded solutions. :twisted:
Last edited by Woetoo on Thu May 19, 2016 11:14 am, edited 4 times in total.

Woetoo
Posts: 69
Joined: Wed Jun 24, 2015 10:40 am

Re: [Scripting] My failed attempt at an alternative tutorial

Post by Woetoo » Sun May 15, 2016 11:02 am

Okay. A night's sleep and I realised a way of abusing the annoyUser objective to display messages without a connected email.

Attempt #2 at an alternate tutorial
<---- CUT ------>
Spoiler: show

Code: Select all

<?xml version="1.0" ?>

<scenario>
	<title>
		<en>Woetoo's Tutorial</en>
	</title>

	<world seed="43" climate="mesothermal" size="60" tectonics="0" baseName="Maia Training Sim 1a"  colonists="4" tutorial="true" lockCapsules="true" />

	<brief>
		<en>Simulation Lab 6:
			"Colony Administration for Dummies".
		
			Bring your own sandwiches.
		</en>
	</brief>

	<info>
		<en>Engineer Note: Found this... it seems to be a DNGN interface for machine readable devices. Handle with care.</en>
	</info>

	<event id="Intro-01a" time="0" type="disableUI" >
		<objective type="annoyUser" >
			<en>COLONY ADMINISTRATION FOR DUMMIES:
			
				Greetings Administrator.
			
				Welcome to the Maia Corporation Headquarters.</en>
		</objective>
	</event>

	<event id="Intro-02a" time="18" >
		<objective type="annoyUser" >
			<en>MISSION BACKGROUND:
			
				As you know, since the now decommisioned NASA Kepler Space
			 	telescope first discovered a potential Earth-like habitable
			 	planet in the early 21st century, we have been working
			 	towards space colonisation.
			 </en>
		</objective>
	</event>
  
	<event id="Intro-03a" time="36" >
		<objective type="annoyUser" >
			<en>Decades of research.</en>
		</objective>
	</event>

	<event id="Intro-03b" time="37" >
		<objective type="annoyUser" >
			<en>Billions of man hours.</en>
		</objective>
	</event>

	<event id="Intro-03c" time="38" >
		<objective type="annoyUser" >
			<en>Mountains of caffine pills.</en>
		</objective>
	</event>

	<event id="Intro-03d" time="39" >
		<objective type="annoyUser" >
			<en>Terrible losses and outstanding successes.</en>
		</objective>
	</event>

	<event id="Intro-04a" time="57" >
		<objective type="annoyUser" >
			<en>TO THE STARS !!!!
				We are now poised to begin our first interseller mission to 3452C.
				Or as we prefer to call it...
			</en>
		</objective>
	</event>

	<event id="Intro-04b" time="61" >
		<objective type="annoyUser" >
			<en>
			
			MAIA.
			</en>
		</objective>
	</event>
	
	<event id="Intro-05a" time="80" >
		<objective type="annoyUser" >
			<en>TRAINING SIMULATION:

			However, before we can let you lose on a real colony with
			real lives at stake, we need you to complete the
			administrator training simulation.
			</en>
		</objective>
	</event>
	
	<event id="Intro-05b" time="98" >
		<objective type="annoyUser" >
			<en>DISCLAIMER:
				No snargles were injured or killed to bring you this simulation.
			</en>
		</objective>
	</event>

	<event id="Intro-05c" time="100" >
		<objective type="annoyUser" >
			<en>
				Waiting for confirmation from Snargle homeworld...
			</en>
		</objective>
	</event>
				
	<event id="Intro-06a" time="120" >
		<objective type="annoyUser" >
			<en>
				Boot up sequence initiated!</en>
		</objective>
	</event>

	<event id="Intro-06b" time="121" >
		<objective type="annoyUser" >
			<en>
				Visual System: CCD 517.3</en>
		</objective>
	</event>

	<event id="Intro-06c" time="122" >
		<objective type="annoyUser" >
			<en>
				Artificial Intelligence System: K177</en>
		</objective>
	</event>

	<event id="Intro-06d" time="123" >
		<objective type="annoyUser" >
			<en>
				7@L&13 70@573& ::PARAMETER ERROR</en>
		</objective>
	</event>

	<event id="Intro-06e" time="124" >
		<objective type="annoyUser" >
			<en>
				Manufacturer: Taiwan</en>
		</objective>
	</event>

	<event id="Intro-07a" time="142" >
		<email>
			<en>::SIMULATION: ACTIVE
			
				Welcome to the colony email messaging system.
				
				As colony administrator, you need to do exactly what you are told.
				Colonists however, will do whatever the heck they like.
				
				Before we can teach you how to influence your colonists, you must first learn how to control the view of your base.
				
				(Click the left mouse button or press "Y" to close this message)
			</en>
		</email>
		<objective type="cameraMove"  >
			<en>Press W, S, A, and D to move the camera.</en>
		</objective>
		<objective type="middleButtonRotate" requirePreviousObjective="true" >
			<en>Press and hold the middle mouse button to rotate your camera view.</en>
		</objective>
		<objective type="mouseScroll" requirePreviousObjective="true"  >
			<en>Scroll the mouse wheel to zoom.</en>
		</objective>
		<objective type="annoyUser" triggers="TutorialEnd" requirePreviousObjective="true" >
			<en>Sit up straight and take deep breaths.</en>
		</objective>
	</event>

	<event id="TutorialEnd" type="enableUI" >
		<email>
			<en>Good Luck</en>
		</email>
		<objective type="annoyUser" >
			<en>Don't Panic!</en>
		</objective>
	</event>

</scenario>
<---- AND PASTE------>

The timing of the messages suck, the presentation is awful and some of the flow is lost. But that's to be expected since the objectives tracker has a very fixed behaviour related to advancing, scrolling and clearing messages.
(a nice feature would be to be able to control the timings of how fast/slow the objectives tracker per objective - though in a "real" scenario, it's probably not an issue).

Regardless, it kind of demonstrates where I was going with the early introduction.

There is obviously the problem that the colonists are not doing anything for over 2 minutes. So once the tutorial is more fleshed out, they could be starving, freezing or asphyxiating before the player can do anything about it. I did consider starting the tutorial with zero colonists, spawning 2 and triggering a lander for the other 2. But without being able to position the camera, I didn't trust the player not to have moved outside before I asked it to spawn the colonists. Plus calling down the lander is random position (it'd be nice to be able to override that within a script btw), so the 2 new ones might end up dying because they spawned within an enclosed area... erm, well, maybe, perhaps the map seed could limit the chances of that happening.

Then there's also the fact that the player has no way of speeding up events. Whilst I appreciate experienced players probably won't replay the tutorial mission - I've been annoyed by too many games in the past where the player has to wait for scripted events to happen during tutorials.
And of course, the player has time to do things that could adversely effect the game environment that could end up breaking the tutorial (like digging out areas or locking doors).

Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 1 guest