General Storyline setup by Rasauul
A Storyline mission is generally made up of several standard parts:
1. [Mission]
This is the storyline starter it states that everything below here is a mission
file.
2. npc_ship_file = X
(fx: npc_ship_file = missions\m04\npcships.ini)
This line placed just below the mission statement tell the program what folder to go to for ship loadouts
3. [NPC] introductions
The [NPC] statement means that this is a NPC
and we can include info on what name, ship, voice and pilot-look is attached to it.
(activated by [MsnShip]entries)
4.[MsnShip] Behaviour
In these entries we assign behaviour to the NPCs, Location in 3d space, orientation, groups that the
npc belongs to and wheter the npc can use jumpgates or not.
(activates by [Trigger]s)
5. [MsnFormation]s
The [MsnFormation] statement is an extension on the [MsnShip] files and grabs several [MsnShip]s and ties
em together in one of many possible formations, assigns a position (in 3d space) and possibly sets their orientation a.k.a
direction.
(activates by [MsnShip]entries and [Trigger]s)
6. [NNObjective]s
Now we make the entries for the general storyline objectives for the Player: Go here, then go here
, then dock with this object, then kill this guy, and so forth.
(activates by [Trigger]s)
7. [objlist] orders
This resembles the above entry header, BUT now we are giving orders to the NPCs, these differs from the player [NNObjective]s
in the way that the NPCs are "forced" to obey these as opposed to the player objectives that can be "Ignored"
.....if ure a comple moron.....
(activates by [Trigger]s)
8. [Trigger]s
These guys are the core of the mission file and can be thought of as the "Event-tree"
or the "event-progress" of the mission file, these files activate all the above named entries.
The "event-tree" activates by the "InitState = active" command included in the starter [Trigger]
and ends with the "Act_ChangeState = SUCCEED" command in the final mission file [Trigger].
9. summing it up
Think of the mission as a tree, growing in one general direction but
branching out too, dividing into smaller branches that end (or loop)......until u arrive with ur chainsaw and cut it into
savegame firewood with the "Act_ChangeState = SUCCEED" command, Have Fun
10. What does these headers mean/ summing it up
[NPC]
Ships description
[MsnShip]
ship and solar behaviour
[MsnFormation]
formation descriptions
[NNObjective]
objectives:
Objectives are really the storyline's way of communicating with you, they tell you where to go and what to do to fullfill the
mission requirements and keep you proceeding through the storyline.
All Objective entries are linked to a trigger, if not then they are not activated and might as well not be in ur ini.
[ObjList]
Actions/Goto/stay within range/follow/break formation
These contain orders given to non-player ships (anyone but you in singleplayer), this makes your friends follow you,
and break formation when engaging combat, it makes your enemies know where to stay after spawning and/or where
to go.
All ObjList entries are linked to a trigger, if not then they are not activated and might as well not be in ur ini.
[Trigger]
storyline tree of events
[Dialog]
Storyline voice and sound entry links
Rasauul.
11. Splicing mission inis by Rasauul
I did this to get a completely blank mission 13 folder and ini, for my custom mission thats still in the works (about halfway).
Splicing mission Inis:
Were moving m13 to m12.
1. Copy all ship loadouts from M13/npcships.ini
2. Paste them to M12/ npcships.ini
3. If any of the ship loadouts are the same then you need to rename them(unless its essentially the same loadout, then just keep one)
4. Rename all M13 triggernames giving them an extra "_M13" in the name, this just saves a lot of hassle later and makes the missions more easy to tell apart.
Also you will have to redo all the Act_Actrigs that leads to these triggers (see my other tutes for explanation on this).
5. Remove the CHANGESTATE = SUCCEED command from the end of mission 12.
6. Find the last m12 trigger, there loads of leftover junk triggers in there that dont work, so if you have trouble then follow the "event tree" aka trigger entries to find the right one.
7. Find the M13 trigger entry that holds the INITSTATE = ACTIVE command and delete this.
8. Insert an Act_Actrig (see my other more basic tutes for explanation) linking the M12 trigger where u deleted the Changestate order with the M13 entry where u deleted the Initstate order.(you might need to redo the FIRE conditions, see other tutes).
9. now, if u havent allready done so, then cut and paste the entire M13.ini (Except the [mission] header and the Npcshipfile reference) to the M12 ini.
10. now you can either keep all the M13 mission offer inis in the M13 folder or move em to M12, if you do so then u have to change the directory adresses in the spliced ini(just leave it as it is m8).
11.Now its time for "concrete football", yes its not really a fun sport, but i bet you will have some crashes and you will tear out your hair, maybe even spit at the screen once or twice, DO NOT WORRY! THIS IS NORMAL!
Just dry off the screen before your mom or wife enters and reads something very different into it.
12. Trouble shooting, see my meger troubleshooting advice in the "Actions, parameters and more" tute.
13. Remember if your using this on a mod where you have moved planets or other system ini solars, you will have to change every rendezvouz(that french for meeting place) so it coincides with your various system.ini changes.
14. Remember to make lots of comments (using the semicolon aka ";")when you identify the triggers and what they do, this will save you thinking time ( i been trying to cut down on thinking for many years).
15. You will be able to rip my custom mission 14 and the m12/m13 mission splice from my upcoming mod "MORPH MOD" thats in the making.
(ill be done in a month or so i reckon)
16. one more thing. if you have several of the same NPC entry you will get double spawns of npcs n it will mess up the event tree (even though 2 extra hot Swat versions of the titty showing Juni is exhilarating).
Here we go, setting up space battles in Storyline.
I decided to make this tute, since setting up a decent storyline battle
has alotta entries and can be a bit complex.
....so you should read all the basic storyline tutes first.
0. a little snippet about the "object" concept
1. Spawning
2. Naming the (Trigger) entry
3. "pulling" the Trigger
4. Act_SpawnFormation command
5. Shout out ComEntry "Icing the cake"
6. if_key_people_die_u_lose
7. Group_is_vulnerable
8. Battle or teaparty?
9. Meeting the enemy
10. Assigning hate to single ship + "Icing the cake"
11. Kill a certain amount of baddies to proceed
12. [MsnFormation], [NPC]s and [MsnShip]s
0. a little snippet about the "object" concept
Think of an object as an "invisible" pin-up board, it does nothing by itself but you can "Pin" or assign alotta things to it:
Behaviour, looks, actions, how it responds to other objects.
In this case since were talking storyline battles were really starting with a group of objects in a set formation,
then we assign Behaviour(MsnShip),
to which we assign Npc entries,
to which we assign shipdescriptions (Mission folder/npcships.ini).
When all the aboves are done we can specify the "Vibe" between the npc groups and/or the Player.
After this we start giving direct orders to the npcs using the [Trigger]s and the [ObjList] entry commands.
1. Spawning
First thing to do is the spawn entry, this is a good way to start since this
continues your storyline progression and will make it neat and logical.
A spawn entry could look like this:
[Trigger]
nickname = Spawning_Bounty_hunters
Cnd_Timer = 8
Act_SpawnFormation = Bounty_hunters_formation
Act_EtherComm = pilot_c_leg_m01, 261999, Player, gcs_combat_announce_allclear_06-, -1, ge_male2_head, pi_orillion_body, comm_li_hatcher (optional)
Act_ActTrig = if_key_people_die_u_lose (optional)
Act_ActTrig = Group1_is_vulnerable (optional)
Act_ActTrig = Bounty_hunters_wants_blood
Act_ActTrig = Bounty_hunters_goes_to_fugees
Act_ActTrig = Bounty_hunters_within_range (optional)
Act_ActTrig = Bounty_hunters_is_dead (optional)
2. Naming the (Trigger) entry
First we name this [Trigger] entry, here its called "Spawning_Bounty_hunters",
Of course you need an earlier trigger to link to this (Act_ActTrig = Spawning_Bounty_hunters),
but we shown that in the earlier tutes, ok lets name our trigger for the above entry:
[Trigger]
nickname = Spawning_Bounty_hunters
3. "pulling" the Trigger
Ok, now we need a "Condition" to be fulfilled before the trigger fires, this is all basic and done in earlier tutes but what the hell,
Here we will set the trigger to fire 8 seconds after its been linked to, that looks like this:
Cnd_Timer = 8
4. Act_SpawnFormation command
Ok now were getting to what were really talkin' bout! Spawn em all! let loose the dogs of war:
Act_SpawnFormation = Bounty_hunters_formation
........for now this command only specifies an invisible formation of non-existing objects,
but we will assign formation and ships, to the objects later.
5. Shout out ComEntry "Icing the cake"
In the spawn entry we got a little "Icing on the cake"entry, you dont need to have this, but ill describe it anyhoot since the fun is in the details:
Act_EtherComm = pilot_c_leg_m01, 261999, Player, gcs_combat_announce_allclear_06-, -1, ge_male2_head, pi_orillion_body, comm_li_hatcher
Translated:
This_is_a_comm = Clip_is_from_this_library, NameDll, talking_to_Player, Clip_name, ??, This_head, This_body, This_mask
Yes you guessed it! its one of those little Com entries where u get the square in the upper left corner while in space talkin some stuff at ya.
6. if_key_people_die_u_lose
This part Act_ActTrig’s (a.k.a links) to a trigger entry that you see in most of the storyline battles, you can use it or not,
it "Fails" you if ur mates get blown away f.ex. Juni, king, or others.
Example:
[Trigger]
nickname = king_dies
system = Li01
Cnd_Destroyed = escort, 1, EXPLODE
Act_ChangeState = FAIL, 21960
7. Group_is_vulnerable
This part Act_ActTrig’s (a.k.a links) to a trigger making the group vulnerable if it has been made invulnerable at spawn.
Example on making ships invulnerable:
[Trigger]
nickname = com_110_delayed
system = Li01
Cnd_Timer = 2
Act_SpawnFormation = rcruiser_frm, -35007, 0, -26692
Act_GiveObjList = r_cruiser, ol_nudge_up
Act_SetVibe = defender1, Player, REP_FRIEND_THRESHOLD
Act_SetVibe = defender2, Player, REP_FRIEND_THRESHOLD
Act_SetVibe = defender3, Player, REP_FRIEND_THRESHOLD
Act_SetVibe = defender1, escort, REP_FRIEND_MAXIMUM
Act_SetVibe = defender2, escort, REP_FRIEND_MAXIMUM
Act_SetVibe = defender3, escort, REP_FRIEND_MAXIMUM
Act_SetVibeShipToLbl = escort, us, REP_FRIEND_MAXIMUM
Act_SetVibeLbl = us, us, REP_FRIEND_MAXIMUM
Act_Invulnerable = r_cruiser, true, true, 0.900000
Act_Invulnerable = defender1, true, true, 0.900000
Act_Invulnerable = defender2, true, true, 0.900000
Example on making a group vulnerable:
[Trigger]
nickname = com_0160_camera_cut
system = Li01
Cnd_CommComplete = DX_M01_0160_DONAU
Act_CallThorn = missions\m01a\m01a_rev2_05.thn, r_cruiser
Act_ActTrig = tm_rhescorts_scramble
Act_SpawnFormation = badboys
Act_GiveObjList = badboys, ol_order_attack_the_donau
Act_Invulnerable = o_hostile1, true, false
8. Battle or teaparty?
Now were getting down to it, do you want the Nomads to act as the Orders long lost friends? Or do you want em to get down and dirty n’ tear each other to pieces?
Here is an example on 2 groups being assigned Maximum_Hostility:
[Trigger]
nickname = Bounty_hunters_wants_blood
Cnd_timer = 2
Act_SetVibe = Bounty_hunter1, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter2, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter3, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter4, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter5, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter6, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter7, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter8, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter9, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter10, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter11, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter12, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter13, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter14, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter15, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter16, Player, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter1, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter2, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter3, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter4, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter5, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter6, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter7, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter8, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter9, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter10, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter11, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter12, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter13, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter14, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter15, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter16, Dokai_Surabaya, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter1, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter2, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter3, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter4, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter5, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter6, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter7, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter8, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter9, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter10, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter11, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter12, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter13, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter14, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter15, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter16, refugees_01, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter1, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter2, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter3, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter4, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter5, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter6, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter7, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter8, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter9, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter10, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter11, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter12, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter13, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter14, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter15, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter16, refugees_02, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter1, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter2, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter3, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter4, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter5, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter6, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter7, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter8, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter9, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter10, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter11, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter12, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter13, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter14, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter15, refugees_03, REP_HOSTILE_MAXIMUM
Act_SetVibe = Bounty_hunter16, refugees_03, REP_HOSTILE_MAXIMUM
Now thats alotta bad vibes in the air, these guys really dont get along, the Bounty Hunters hate the refugees and Bounty Hunters hate you as well.
This is gonna turn ugly..............fast, actually its only the Bounty Hunter’s that hate the fugees, in this case the fugees are running for their lives.
9. Meeting the enemy
Now we set up the hate, we still need to get these guys to meet. They may not be within reach of each other so lets set up a meet.
Were starting from the:
Act_ActTrig = Bounty_hunters_goes_to_fugees
That leads to here:
[Trigger]
nickname = Bounty_hunters_goes_to_fugees
Cnd_timer = 3
Act_GiveObjList = Bounty_hunter1, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter2, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter3, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter4, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter5, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter6, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter7, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter8, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter9, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter10, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter11, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter12, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter13, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter14, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter15, Bounty_hunters_on_fugees3
Act_GiveObjList = Bounty_hunter16, Bounty_hunters_on_fugees3
Ok, above you can see that were dealing out this ObjList to the Bounty Hunters:
[ObjList]
system = ANY
nickname = Bounty_hunters_on_fugees3
SetPriority = NORMAL
GotoShip = goto, refugees_03, 8500, false
10. Assigning hate to single ship + "Icing the cake"(optional)
Were sending in one of the good guys to help the fugees when they get inside the below mentioned distance:
Starting from the:
Act_ActTrig = Bounty_hunters_within_range
We link to this trigger:
[Trigger]
nickname = Bounty_hunters_within_range
Cnd_DistShip = inside, Bounty_hunter1, Dokai_Surabaya, 9500
Act_EtherComm = pilot_c_leg_m01, 261999, Player, gcs_combat_announce_enemysighted_04-, -1, ge_male2_head, pi_orillion_body, comm_li_hatcher
Act_ActTrig = Kota_calls
We get an ethercom message
[Trigger]
nickname = Kota_calls
Cnd_timer = 1
Act_EtherComm = pilot_c_leg_m01, 261999, Player, gcs_misc_attentionallwingmen_01+, -1, ge_male2_head, pi_orillion_body, comm_li_hatcher
Act_ActTrig = Kota_engages
We get another ethercom message
[Trigger]
nickname = Kota_engages
Cnd_timer = 1
Act_EtherComm = pilot_c_leg_m01, 261999, Player, gcs_combat_order_engage_05-, -1, ge_male2_head, pi_orillion_body, comm_li_hatcher
Act_ActTrig = kota_wants_some
Act_ActTrig = go_get_em
And another com message, no reason to be stingy ?
[Trigger]
nickname = kota_wants_some
Cnd_True = no_params
Act_SetVibe = Kota_max, Bounty_hunter1, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter2, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter3, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter4, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter5, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter6, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter7, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter8, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter9, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter10, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter11, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter12, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter13, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter14, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter15, REP_HOSTILE_MAXIMUM
Act_SetVibe = Kota_max, Bounty_hunter16, REP_HOSTILE_MAXIMUM
And now we assign hostility, go get em Kota!
11. Kill a certain amount of baddies to proceed
Here is how you set it up so the player has to kill a certain amount of enemies before the storyline proceeds.
Example:
[Trigger]
nickname = Go_get_some
Cnd_Destroyed = pirates, 3, EXPLODE
Act_ActTrig = proceed_with_da_storyline_mon
Here the “pirates, 3, EXPLODE” line refers to a group, you or your people gotta kill 3 ships from this group to proceed.
12. 12. [MsnFormation], [NPC]s and [MsnShip]s
Were starting from the:Act_SpawnFormation = Bounty_hunters_formation
Which of course leads to:
[MsnFormation]
nickname = Bounty_hunters_formation
position = -26106, 50, 28335
orientation = 0, 0, 1, 0
formation = fighter_wall <<<<<<<some formations are faction specific so watch this one
ship = Bounty_hunter1
ship = Bounty_hunter2
ship = Bounty_hunter3<<<<<<<<links to msnship entries
ship = Bounty_hunter4
ship = Bounty_hunter5
ship = Bounty_hunter6
ship = Bounty_hunter7
ship = Bounty_hunter8
ship = Bounty_hunter9
ship = Bounty_hunter10
ship = Bounty_hunter11
ship = Bounty_hunter12
ship = Bounty_hunter13
ship = Bounty_hunter14
ship = Bounty_hunter15
ship = Bounty_hunter16
These leads to:
[MsnShip]
nickname = Bounty_hunter1
NPC = Bounty_hunter1
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter2
NPC = Bounty_hunter2 <<<<<<<<<here we see the npc name
radius = 0
label = Bounty_hunters<<<<<<<<<this label can be used to set vibe among other things
jumper = true<<<<<<<<<<<<<<<<this guy can use gates
[MsnShip]
nickname = Bounty_hunter3
NPC = Bounty_hunter3
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter4
NPC = Bounty_hunter4
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter5
NPC = Bounty_hunter5
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter6
NPC = Bounty_hunter6
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter7
NPC = Bounty_hunter7
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter8
NPC = Bounty_hunter8
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter9
NPC = Bounty_hunter1
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter10
NPC = Bounty_hunter2
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter11
NPC = Bounty_hunter3
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter12
NPC = Bounty_hunter3
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter13
NPC = Bounty_hunter5
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter14
NPC = Bounty_hunter6
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter15
NPC = Bounty_hunter7
radius = 0
label = Bounty_hunters
jumper = true
[MsnShip]
nickname = Bounty_hunter16
NPC = Bounty_hunter8
radius = 0
label = Bounty_hunters
jumper = true
Which leads to:
[NPC]
nickname = Bounty_hunter1
npc_ship_arch = Bounty_hunter1
space_costume = manhattan_bartender_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262018
[NPC]
nickname = Bounty_hunter2 <<<<<<<<<name linked to
npc_ship_arch = Bounty_hunter1 <<<<<<this links to the npcships.ini located in your mission folder, its LOCATION NEEDS TO BE STATED AT TOP OF MISSION INI
space_costume = li_scrote_head, sh_male2_body, comm_ge_generic1 <<<<<<<<<<<<<Pilot look
affiliation = gd_bh_grp <<<<<<<<<<<<<<<<<<<<<<<<<<<<Faction affiliation
individual_name = 262019 <<<<<<<<<<<<<<<<<<<<<name dll
[NPC]
nickname = Bounty_hunter3
npc_ship_arch = Bounty_hunter1
space_costume = sh_male4_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262020
[NPC]
nickname = Bounty_hunter4
npc_ship_arch = Bounty_hunter1
space_costume = sh_male2_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262021
[NPC]
nickname = Bounty_hunter5
npc_ship_arch = Bounty_hunter1
space_costume = manhattan_bartender_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262022
[NPC]
nickname = Bounty_hunter6
npc_ship_arch = Bounty_hunter1
space_costume = li_scrote_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262023
[NPC]
nickname = Bounty_hunter7
npc_ship_arch = Bounty_hunter1
space_costume = sh_male4_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262024
[NPC]
nickname = Bounty_hunter8
npc_ship_arch = Bounty_hunter1
space_costume = sh_male2_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262025
[NPC]
nickname = Bounty_hunter9
npc_ship_arch = Bounty_hunter1
space_costume = manhattan_bartender_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262032
[NPC]
nickname = Bounty_hunter10
npc_ship_arch = Bounty_hunter1
space_costume = li_scrote_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262033
[NPC]
nickname = Bounty_hunter11
npc_ship_arch = Bounty_hunter1
space_costume = sh_male4_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262034
[NPC]
nickname = Bounty_hunter12
npc_ship_arch = Bounty_hunter1
space_costume = sh_male2_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262035
[NPC]
nickname = Bounty_hunter13
npc_ship_arch = Bounty_hunter1
space_costume = manhattan_bartender_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262036
[NPC]
nickname = Bounty_hunter14
npc_ship_arch = Bounty_hunter1
space_costume = li_scrote_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262037
[NPC]
nickname = Bounty_hunter15
npc_ship_arch = Bounty_hunter1
space_costume = sh_male4_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262038
[NPC]
nickname = Bounty_hunter16
npc_ship_arch = Bounty_hunter1
space_costume = sh_male2_head, sh_male2_body, comm_ge_generic1
affiliation = gd_bh_grp
individual_name = 262039
themilkman comments:
Posts: 33 Nice job! But perhaps using SetVibeLblToShip and SetVibeShipToLbl instead of a ton of SetVibe commands would have been less space-consuming.
Act_SetVibeLblToShip = rheinlanders, Player, REP_HOSTILE_THRESHOLD
And the rheinlanders are of the rh_n_grp, which is friendly by faction, then the rheinlanders would appear hostile to the Player, but not do anything. (I am unsure of alot of things, and this is one) Or, the player would appear hostile to the rheinlanders but the rheinlanders would appear friendly to the player.
I usually do a two-way vibe setting just to be sure it won't do this in some cases.
When spawning large amounts of ships, I always specify the system = [system] entry in the Trigger because sometimes it crashes the game. I always specify those no matter what trigger nowadays just in case.
I prefer to use Act_SendComm instead of EtherComm.
Or Act_StartDialog
and specify a [Dialog]
Then the frame around the npc will turn yellow
Mission parameters commands and more......
Have Fun - Rasauul
;Chapters
1.Trigger FIRE Parameters
2.Trigger ACTION Parameters
3. NNobjective entry options
4. ObjList Parameters
5. Trigger Add Options
6. a little on [NPC] entries
7. TroubleShooting
8. Darkstone Story tute
Here we go with the many trigger entry fire parameters:
IN This State:
Cnd_True = no_params...............if nothing else is goin down then fire this trigger
Cnd_InSpace = true ............if ur spaceside then.......................
Cnd_InTradelane
Cnd_InZone
ON ENTRY:
Cnd_BaseEnter = st01_01_base
Cnd_LocEnter = Cityscape, li01_01_base
Cnd_SystemEnter = St03
Cnd_TLEntered Player, Li01_Trade_Lane_Ring_141
Cnd_SpaceEnter
Cnd_NPCSystemEnter
Cnd_JumpInComplete
ON EXIT:
Cnd_SystemExit = ANY..............if u exit any system then........................
Cnd_LocExit
Cnd_BaseExit = st01_01_base.............if u exit this base
Cnd_TLExited = Player, Li01_Trade_Lane_Ring_141........when u exit this tradelane
Cnd_LaunchComplete = Player
Cnd_PlayerLaunch
Cnd_EncLaunched = se_nomads_5_more...........when these baddies have launched then ....
DISTANCE Related:
Cnd_DistShip
Cnd_DistVec
Cnd_DistVecLbl
Cnd_DistCircle
MISSION OFFER Related:
Cnd_MsnResponse = accept...............if u accept the mission then.......
Cnd_MsnResponse = reject...........if u reject
MANEUVER Related:
Cnd_PlayerManeuver = Dock, Li01_02_dock_ring ...............when u dock with this ring
Cnd_LootAcquired = power_cell, Player
Cnd_CargoScanned
COMBAT Related:
Cnd_ProjHit = nomad_vc_1, 1, refugees_03
Cnd_ProjHitShipToLbl
Cnd_Destroyed = final_generator5, 1
Cnd_HealthDec = nomadcap, 0.250000
RTC (thn) Related:
Cnd_RTCDone
COMMUNICATION Related:
Cnd_CommComplete = DX_M01_0387_KING
Cnd_PopUpDialog
TIME Related:
Cnd_Timer
MISC:
Cnd_CharSelect
Cnd_WatchTrigger
Cnd_HasMsn
Cnd_TetherBroke
Cnd_WatchVibe
2. Trigger ACTION Parameters
Act_ActTrig
Act_NagDistLeaving
Act_Invulnerable
Act_MarkObj
Act_PlayerCanTradelane
Act_ChangeState
Act_DeactTrig
Act_SendComm
Act_PlayerCanDock
Act_PlayMusic
Act_SpawnShip
Act_SetVibe
Act_SpawnSolar
Act_GCSClamp
Act_RandomPop
Act_MovePlayer
Act_CallThorn
Act_PlaySoundEffect
Act_StartDialog
Act_GiveObjList
Act_Destroy
Act_SetVibeLblToShip
Act_Cloak
Act_RelocateShip
Act_LightFuse
Act_SetVibeLbl
Act_ForceLand
Act_SetShipAndLoadout
Act_AddAmbient
Act_AddRTC
Act_NNIds
Act_PopUpDialog
Act_SetNNObj
Act_RemoveRTC
Act_SetOffer
Act_SetTitle
Act_RemoveAmbient
Act_NagOff
Act_RpopAttClamp
Act_PobjIdle
Act_NagClamp
Act_LockDock
Act_SpawnFormation
Act_SetVibeShipToLbl
Act_NagGreet
Act_EtherComm
Act_EnableManeuver
Act_RevertCam
Act_Save
Act_PlayerEnemyClamp
Act_AdjHealth
Act_SpawnLoot
Act_LockManeuvers
Act_HostileClamp
Act_DisableTradelane
Act_NagDistTowards
Act_SetLifeTime
Act_AdjAcct
Act_SetNNState
Act_SetNNHidden
Act_GiveNNObjs
Act_EnableEnc
Act_DebugMsg
Act_RandomPopSphere
Act_SetInitialPlayerPos
Act_StaticCam
Act_SetVibeOfferBaseHack
Act_NNPath
Act_SetOrient
Act_RemoveCargo
Act_SetRep
Act_DisableFriendlyFire
Act_Jumper
Act_GiveMB
Act_SetPriority
Act_RPopTLAttacksEnabled
Act_DockRequest
Act_ForceLand
Act_DisableEnc
3. NNobjectives entry options
Here we go with the Objectives and the different ways u can set em up:
0.
Objectives are really the storylines way of communicating with you, they tell you where to go and what to do to fullfill the
mission requirements and keep you proceeding through the storyline.
All Objective entries are linked to a trigger, if not then they are not activated and might as well not be in ur ini.
0. A little explanation on objectives
1. Typical trigger linking to an objective
1a. This one gives you a message
2. This one clears away any current objective
3. This trigger is set to pop this objective only once
3a. This one sets a waypoint attached to a solar and gives you a message
4. Nav-marker in open space and gives you a message
5. Jumphole waypoint and text
1.
Typical trigger linking to an objective:
[Trigger]
nickname = lcx_bar_St02_0112
system = St02
Cnd_LocEnter = deck, st02_01_base
Act_SetNNState = mlog_mission_accept12, ACTIVE <<<this one turns on the objective to pop contineously
Act_SetNNObj = mlog_mission_accept12 This one fire the objective once
Act_NNIds = 31200, HISTORY
Act_DeactTrig = spawn_osiris12_in_St01
Act_ActTrig = launched_from_osiris12
1a.
This one gives you a message,
Theres no waypoint and the text message is unframed.
[NNObjective]
nickname = mlog_mission_accept12
state = HIDDEN
type = ids, 24215 <<<"Meet Juni and King in Space outside the Battleship Osiris"
2.
This one clears away any current objective
and says:
[NNObjective]
nickname = null
state = HIDDEN
type = ids, 21660<<<<<<"Awaiting Mission Objective"
3.
Here the trigger is set to pop this objective only once:
[Trigger]
system = St03
nickname = reactivate_hack
Cnd_True = no_params
Act_DockRequest = St03_dyson_airlock_1
Act_SetNNObj = penetrate <<<<<<<<<<< see? no "active state" command
3a.
This one sets a waypoint attached to a solar and gives you a message
[NNObjective]
nickname = penetrate
state = HIDDEN
type = rep_inst, St01, 24475, 1, 0, 0, 0, St03_dyson_airlock_1
Translated:
type= solar waypoint, in St01 system, ids-text, this value i dunno (1), x,y,z(coords in space), named solar part
4.
This one sets a "nav-marker" in open space
[NNObjective]
nickname = mlog_assist_von_claussen12
state = HIDDEN
type = navmarker, St01, 24265, 27265, 0, 0, 0
Translated:
type= waypoint in space, in St01 system, ids-text, ids-info, x,y,z(coords in space)
5.
Jumphole waypoint
[NNObjective]
nickname = mlog_jump_back_to_st0112
state = HIDDEN
type = rep_inst, St02, 24250, 27250, -969, 0, 10849, St02_to_St01_hole
Translated:
type= solar waypoint, in this system, ids-text, ids-info, x,y,z, named solar part
4. ObjList Parameters
Here we go with [ObjList] parameters:
0.
[objlist] contain orders given to non-player ships (anyone but you in singleplayer), this makes your friends follow you,
and break formation when engaging combat, it makes your enemies know where to go after spawning and/or where
to go.
All ObjList entries are linked to a trigger, if not then they are not activated and might as well not be in ur ini.
0. A little on [objlist] and what they do
1. Typical Trigger linking to objlist entry
1a. Get into formation parameter
2. Trigger relating to break formation objlist
2a. Break formation entry
3. Trigger linking to stay in range objlist
3a. stay in range entry
4. Trigger linking to "GOTO" objlist
4a. Go to ship entry
5. Trigger linking to always follow
5a. Always follow, Allways Execute objlist
6. Allways active/one time objective
1.
Typical Trigger linking to objlist below:
[Trigger]
nickname = test_spawn_juni12
system = St02
Cnd_True = no_params
Act_SpawnShip = juni12, juni12_form_on_trent, 500, 1500, 0, 0, 1, 0, 0 <<spawn juni at these coords and fire the objlist
Act_Invulnerable = juni12, true, false, 0.950000
Act_SetVibe = juni12, Player, REP_FRIEND_THRESHOLD
Act_SetVibe = Player, juni12, REP_FRIEND_THRESHOLD
Act_MarkObj = juni12, 1
1a.
Get into formation
This one tells Juni to form formation with trent (follow trent)
[ObjList]
system = ALL
nickname = juni12_form_on_trent <<<name linked to from trigger
Delay = 19 <<<<do this 19 seconds after activation
Follow = Player, 3000, -20, 0, 40 <<<<<<<<follow player at this position relating to player position
translation: behind, x, y, z
2.
Trigger relating to break formation objlist:
[Trigger]
system = St02
nickname = break_and_divert
Cnd_Timer = 1
Act_SetVibeShiptoLbl = juni12, nomad_wing, REP_HOSTILE_MAXIMUM
Act_SetVibeShiptoLbl = king12, nomad_wing, REP_HOSTILE_MAXIMUM <<<<<<u hate em so u wanna kill em
Act_GiveObjList = juni12, juni12_break_and_divert
Act_GiveObjList = king12, king12_break_and_divert<<<<<<<<<fire the objlist
2a.
Break formation entry:
Break formation and head for this ship
[ObjList]
system = ALL
nickname = king12_break_and_divert
BreakFormation = no_params
GotoShip = goto, nomad_S_7, 1000, true, -1 <<<<<get to the nomad
3.
Trigger linking to stay in range objlist:
[Trigger]
nickname = test_spawn12
system = St02
Cnd_True = no_params
Act_SpawnFormation = nomad_U_wing_1
Act_SpawnFormation = nomad_U_wing_2 <<<<<<<yes were spawning the evil nomads!
Act_SpawnFormation = nomad_U_wing_3
Act_SpawnFormation = nomad_D_wing_1
Act_SpawnFormation = nomad_D_wing_2
Act_SpawnFormation = nomad_D_wing_3
Act_SpawnFormation = nomad_S_wing_1
Act_SpawnFormation = nomad_S_wing_2
Act_SpawnFormation = nomad_S_wing_3
Act_GiveObjList = nomad_U_wing_1, zone_U_112
Act_GiveObjList = nomad_U_wing_2, zone_U_2 <<<<<<<<<<fire objlist (see below)
Act_GiveObjList = nomad_U_wing_3, zone_U_3
Act_GiveObjList = nomad_D_wing_1, zone_D_1
Act_GiveObjList = nomad_D_wing_2, zone_D_2
Act_GiveObjList = nomad_D_wing_3, zone_D_3
Act_GiveObjList = nomad_S_wing_1, zone_S_1
Act_GiveObjList = nomad_S_wing_2, zone_S_2
Act_GiveObjList = nomad_S_wing_3, zone_S_3
3a.
stay in range entry:
[ObjList]
system = St02
nickname = zone_U_2
StayInRange = -2242, 750, -1735, 1500 <<<<<<<the evil nomads stay at a max of 1500 from this area
4.
Trigger linking to "GOTO" objlist:
[Trigger]
nickname = send_in_interceptors_at_6000
system = St02
Cnd_DistVec = inside, Player, -970, 0, 10819, 8000
Act_SpawnFormation = nomad_J_wing_1
Act_SpawnFormation = nomad_J_wing_2
Act_SetVibeLblToShip = nomad_J_wing_1, Player, REP_HOSTILE_THRESHOLD
Act_SetVibeLblToShip = nomad_J_wing_2, Player, REP_HOSTILE_THRESHOLD
Act_SetVibeLbl = nomad_J_wing_1, allied12, REP_HOSTILE_THRESHOLD
Act_SetVibeLbl = nomad_J_wing_2, allied12, REP_HOSTILE_THRESHOLD
Act_GiveObjList = nomad_J_wing_1, send_interceptors12 <<<<< were sending these guys to where the objlist specifies
Act_GiveObjList = nomad_J_wing_2, send_interceptors12 <<<<< were sending these guys to where the objlist specifies
Act_Cloak = nomad_J_wing_1, false
Act_Cloak = nomad_J_wing_2, false
4a.
Go to ship entry:
[ObjList]
system = St02
nickname = send_interceptors12
GotoShip = goto, Player, 1000, true, -1 <<<<<<<yes we got nomad interceptors coming our way...WEAPONS FREE!...... ENGAGE!
5.
Trigger linking to always follow
[Trigger]
system = St03b
nickname = watcher_960
Cnd_CommComplete = DX_M13_0960_ORILLION
Act_GiveObjList = king, follow_player_to_city
Act_GiveObjList = juni, follow_player_to_city
5a.
Always follow, Allways Execute objlist
[ObjList]
system = St03b <<<<<<<<<in this system
nickname = follow_player_to_city
SetPriority = ALWAYS_EXECUTE <<<<<<<<<<<<<<keep doing this until we tell you to do something else
Follow = Player, 1500, -100, 50, -200
6:
Act_SetNNState = obj_get_to_leeds, ACTIVE<<<<<<<allways active
Act_SetNNObj = obj_get_to_leeds <<<<<<<untill completed only
5.Trigger add options
Here we go with the different trigger storyline add commands:
Give player a credit amount:
Act_AdjAcct = 325000
Set off a thn:
Act_AddRTC = missions\m04\M004_s021x_Br04_01_nrml.ini <<adress of thn
6. A little on [NPC] entries
[NPC] <<there exists an npc
nickname = escort_m01a <<<he has a name
space_costume = li_scrote_head, li_scrote_body, comm_li_hatcher <<he looks like this
affiliation = li_lsf_grp <<<<he's friends with this faction
npc_ship_arch = MSN01a_King <<<this is his ship
individual_name = 216000 <<<this is the Dll entry with his ingame name
voice = king <<<<he has this voice and relating speaks(sound clips)
[NPC] <<there exists an npc
nickname = fauxplayer <<its you
affiliation = li_lsf_grp <<ur friendly with this faction
npc_ship_arch = fauxplayer <<<ur shipname
individual_name = 1 <<your ingame name dll, i think this is noname
voice = trent_voice <<your voice and relating soundclips
7. TroubleShooting
1. Crash by wrong dock_ring coords
2. Crash by too big distance to moved object (fx the one above).
3. cant proceed/locked npc docking sequence
4. Not allowed to dock because of too big distance to planet center
5.When integrating two mission inis remember to "turn off" initstate in 2nd misison:
1.
This happens if the destination coords in Mission files do not
corespond with the destination coords in the System.ini file
f.x. [NNObjective]
nickname = mlog_meet_juni_in_space_above_ca_minor
state = HIDDEN
type = navmarker, Li02, 22425, 25425, 3619, 9150, 37853
<< THE LAST 3 VALUES ARE DOCK RING/DESTINATION COORDS AND NEED
TO BE THE SAME AS THE DOCKRING COORDS IN THE SYSTEM.INI FILE
, even if its just a meet outside the planet at this object.
N:B: ANY DESIGNATIONS NOT CORESPONDING IN Mission ini will cause that mission to have a
crash, even though u may start the mission by going somewhere first.
2.
Crash by too small distance to moved object (fx the one above).
[Trigger]
nickname = dialog_toward_ca_minor
Cnd_DistShip = inside, Player, Li02_02, 46000 <<<<<<<<<<this is the value u gotta watch,
it describes a minimum distance to a ship u need to be within range of.
3.
This happens when moving planets and docking rings.
,Juni wouldnt dock with cali minor
[Trigger]
nickname = juni_ready_dock_ca
Cnd_DistShip = inside, juni_from_willard, Li02_02, 60000 <<<<this last value is changed from 6k to 60k
Act_SendComm = juni_from_willard, Player, DX_M03_1130_JUNI
Act_ActTrig = commcomplete_dx_m03_1130_juni
4.
Here the value: "inside" pertains to the center of the planet.
[Trigger]
nickname = start_at_kyushu_dialog
Cnd_DistShip = inside, Player, Ku03_01, 30000 <<this value was too low
Act_SendComm = juni, Player, DX_M07_1760_JUNI
Act_ActTrig = commcomplete_DX_M07_1760_JUNI
Act_PlayMusic = music_victory, none, none, none
5.
When integrating two mission ini remember to "turn off" initstate in 2nd misison:
;changed (init state OFF)
[Trigger]
nickname = key_offer
;InitState = ACTIVE <<<the ";" turns off this line making it a comment instead of command
Cnd_True = no_params
Act_RpopAttClamp = true
Act_SetOffer = 1
Act_SetTitle = 1
Act_ActTrig = planetscape_st01_01
Act_ActTrig = beginning_ether
8. This is Darkstone's old Tute on Storylining, ill add it just for the helluvit
[Mission]
mission_title = 1
mission_offer = 1
reward = xxx <- Set this as you want...Cheater *gg*
npc_ship_file = missions\m01a\npcships.ini
This section identifies it as a mission. Now we need to declace the NPCs appearing in this mission. Here´s a ship entry template:
[NPC]
nickname = xxx <-- this important to spell right in the rest of the file
affiliation = xxx <-- the faction the ship belong to
npc_ship_arch = xxx <-- what ship they fly as declared in npcships.ini
space_costume = <<head>>, <<body>>, <<optional props>> <-- how ther appear in the Com Window
voice = xxx <-- the associated voice
individual_name = xxx <--This is an ids_name entry in a DLL.
NPCs can be used as often as needed. The next thing is to declare their ship.
Here´s a template:
[MsnShip]
nickname = xxx <-- this is the nme you´ll need to refer to in the actual mission
NPC = xxx <-- name of the NPC as declared in a [NPC] section
label = xxx <-- this will be explained below
INFO: Labels
Labels are very useful and allow you to manipulate large groups of ships precisely. Ships can have as many labels as it needs. Usually thers an "us" label, which identifies the ships that fly with the player.
Now, to make your mission seem "living", you´ll want to declare a good number of Mission Ships, friends, foes and neutral wanderers alike. You only need to create one NPC per class of ship you include (LF, HF, FR, Gunboat, etc), but you need to enter a [MsnShip] sections for each ship that appears in the mission. Less that about 20 and your mission is likely to seem empty. Bear that in mind. Having declared ships, do the same for Solars. As usual, another template:
[MsnSolar]
nickname = xxx
string_id = xxx <-- an entry in a DLL. This is its name
faction = xxx
system = xxx
position = x, z, y
archtype = xxx
loadout = xxx
base = xxx <-- I´m not sure about that
label = xxx
radius = xxx <--- I´m not sure about this
visit = xxx <--- if and how it appears on the Navmap, normally "UNKNOWABLE"
Solar are not nessecary, it depends on the mission you want to code.
Whew, enough for one post. I´ll continue it another time.
_________________
----------------------------------------
The U.S.D.F. is now recruiting.
Call 75.5256.323.001 today
and share their honor and glory.
----------------------------------------
Ladm. Jonathan Drake Post subject: Re: **TUTORIAL** Storyline MissionsPosted: Wed Jul 09, 2008 5:31 am
Flight Lieutenant
Joined: Tue May 20, 2008 11:17 am
Posts: 100
Location: Planet Toledo/Omicron Minor
Okay, here comes part 2:
Having declared ships, NPCs and Solars, there are a couple more things to do. MsnFormations, which allow you to spawn groups of ships at once, rather than using a load of SpawnShip lines. Typical Entry:
[MsnFormation]
nickname = gmg_patrol <-- name of formation, used when spawning it
position = 29560, -12, -77300 <-- where it spawns if not overridden
orientation = 1, 0, 1, 0 <-- not sure about this one
formation = fighter_li_lsf <-- the arrangement of ships, use fighter_basic if unsure
ship = gmg_leader <-- the ships in the formation as listed under [MsnShip]
...
You also need to set objectives, so the player knows what to do. Typical objective:
[NNObjective]
nickname = nn_searchpt1alt <-- name, for later use
state = HIDDEN <-- initial state, almost always should be HIDDEN
type = navmarker, Li01, 22025, 25025, 55160, -800, -67782 <-- the type of the objective
There are several different types that objectives can take:
ids = *string value*, simply displays text
navmarker = sets a waypoint. Use it *system*, *string value*, *other string value*, *coordinates*
rep_inst = placed a mission waypoint as a ship, do the same as "navmarker" but add another bit on the end, the name of the ship
Unless you,re going to be using objectives which are exactly the same as existing ones text-wise, you´ll need to use fled-ids to create the text strings.
Now, once you´re happy you´ve included enough ships, NPCs and solars, and grouped them into formations, you need to set things called ObjLists. These are basically instructions to NPCs, like "join formation with player", which occurs quite frequently, or "fly to point X", like in missions where you part company with someone. Now there are a LOT of different ObjLists you can enter. I´ll list some of the more useful ones, take a look at the mission ini files, search for "ObjList", and you´ll see what else you can use them for. Make an ObjList like this:
[ObjList]
nickname = ol_goto_prisonship <-- give these instructions to NPCs with this name
GotoShip = goto, prisonship, 800, true, -1
StayInRange = prison ship, 750 <-- the instructions
BrakFormation = no_params
Some common ObjList instructions:
GotoShip = goto, "MsnShip/Solar name*, *distance of ship to come within*, true, -1 <-- this will cause an NPc to fly to the selected ship/solar
StayInRange = *MsnShip/Solar name*, *range* <-- this will prevent an NPC from moving outside a specified range of a ship/solar
MakeNewFormation = *formation name* <-- this will make the ship it´s applied to form up in the specified way
BreakFormation = no_params <-- this will make the NPCs break their formation, no matter what it is
Dock = *base/gate/hole/lane name* <-- do I really have to explain this one?
There are more, but those are the essential ones if you want to make the NPCs really seem alive. Now it´s time to move onto the 'Main Course' as it were, the triggers. These are what will make your mission work. They´re also very fickle, because a mission is generally one long chain of triggers, if you make a typo somewhere, the entire chain is broken and your mission will simply stop working at that point.
The first triggers to make are the ones that are active all the time throughout the mission, like escorting critical ships or key characters like King and Juni and the general state of the mission. The first Trigger should be something like this (this is taken from the first mission, after landing on Pittsburgh):
[Trigger]
nickname = general_triggers
system = Li01 <-- make sure to enter ths correctly. It´s important
Cnd_True = no_params <-- this basically means "this is always active"
Act_PlayerCanTradelane = false <-- disallows the player from using tradelanes
Act_MarkObj = escort, 1 <-- this trigger marks "escort" (King) as Important on the contact list
Act_Invulnerable = escort, true, false, 0.900000 <-- gives King a certain amount of invulnerability
Act_ActTrig = king_dies <-- see below
Act_RandomPop = false <-- this turns off random encounters, so you only fight what you´re meant to
Act_NagDistLeaving = std, escort, escort, 22195, 5000, NAG_IN_COMBAT <-- not sure, might be to make sure the player doesn´t get to far away
There are a few vital Conditions and Actions which it´s essential you understand how to use properly
Cnd_True = no_params <-- this basically announces Actions which are always active, no matter what
Cnd_Destroyed = *label/MsnShip name*, *number destroyed, EXPLODE <-- this will come into effect when a specified number of ships of a label are destroyed. If you use a MsnShipName, the number must ALWAYS be 1.
Cnd_SpaceEnter/Exit = *system name* <-- when the player takes off/docks
Cnd_SystemEnter/Exit = *system name* <-- when the player uses a jumpgate/hole
Act_ActTrig = *trigger name* <-- This forms the basis of the trigger chain system. You have to use this in your triggers to activate others, or the others will remain passive even if the conditions are fulfilled.
Act_DeactTrig = *trigger name* <-- exactly the opposite of above. For example, if you accept a mission, the Trigger for declining the mission is disabled.
ActSpawnShip/Solar/Formation = *Ship/Solar/Formation name* <-- does exactly what it says on the tin. You´ll need to use this frequently, ships wont appear at all without is.
Act_SetNNObj = *objective name* <-- this will cause an objective to flash up on the screen, and the waypoint, if any, to appear.
Those are all the ESSENTIAL ones that you´ll almost definitely need to use. The next triggers to make are the ones that fail the mission if certain ships are destroyed. Make them on this model:
[Trigger]
nickname = king_dies
system = Li01
Cnd_Destroyed = escort, 1
Act_ChangeState = FAIL, 2196
Set those up for your principal characters. The next ones to make are those concerning the mission offer and the player accepting or rejecting it. This bt is rather thorny, and it´s probably best, at least in the short term, to pike a mission offer from another story mission. If your mission takes place on a base other that ones in the story, you can always RelocatePlayer to put yourself ther only for that bit. Anyway, here´s the Mission 2 briefing, you can always use fled-ids to change the text
[Trigger]
nickname = lce_bare_li01_01
Cnd_LocEnter = Bar, Li01_01_base
Act_AddRTC = missions\m02\M002_s009a_Li01_01_offer.ini
Act_ActTrig = mrp_reject
Act_ActTrig = mrp_accept
Act_ActTrig = write_mission_log
Act_DeactTrig = entered_the_system
Act_DeactTrig = meet_on_manhattan
Act_SetNNObj = talk_to_juni
[Trigger]
nickname = mrp_reject
Cnd_MsnResponse = reject
Act_RemoveRTC = missions\m02\M002_s009d_Li01_01_offer.ini
ActAddRTC = missions\m02\M002_s009d_Li01_01_reoffer, repeatable
[Trigger]
nickname = mrp_accept
Cnd_MsnResponse = accept
Act_RemoveRTC = missions\m02\M002_s009d_Li01_01_reoffer.ini
Act_AddRTC = missions\m02\M002_s010x_Li01_01_nrml.ini
Act_ActTrig = spe_li01_01
Act_SetTitle = 22200
Act_SetOffer = 22205
Act_SetNNObj = first_launch
Act_DeactTrig = mrp_reject
Act_RandomPopSphere = -30642, 0, -29671, 6000, off
Act_RandomPop = false
Act_ActTrig = exit_base
Act_DeactTrig = beginning_ether
Act_NNIds = 30205, HISTORY
Act_ActTrig = entering_cityscape
Act_DeactTrig = keep_door_open
Now you can´t use exactly that because you Objectives and so forth have different names, bu if you look at it, you´ll see that you nee to set up 3 triggers. Act_NNIds is a Log entry, and RTCs are reserved spaces in the bar for main characters so you can talk to them again if you reject the mission.
Enough for now. My fingers need a pause, this keyboard is absolutely not for writing long texts.
_________________
----------------------------------------
The U.S.D.F. is now recruiting.
Call 75.5256.323.001 today
and share their honor and glory.
----------------------------------------
Ladm. Jonathan Drake Post subject: Re: **TUTORIAL** Storyline MissionsPosted: Wed Jul 09, 2008 12:17 pm
Flight Lieutenant
Joined: Tue May 20, 2008 11:17 am
Posts: 100
Location: Planet Toledo/Omicron Minor
Section 3:
I´ve covered all the essentials, now on to putting them together to form a mission. After your mission accept/reject triggers, you´ll want to put a Cnd_LaunchComplete trigger in, and have it spawn the ships that are there immediately with either SpawnShip, SpawnFormation or SpawnSolar. Also use another useful trigger, SetVibeLblToShip. Use it like this:
Act_SetVibeLblToShip = *label of ships*, Player, REP_FRIEND_THRESHOLD. This will ensure that the ships show up as green. When you meet enemies, put these three actions in:
Act_SetVibeLblToShip = *label of enemies*, *label of allies*, REP_HOSTILE_THRESHOLD
Act_SetVibeLblToShip = *label of allies, *label of enemies*, REP_HOSTILE_THRESHOLD
Act_SetVibeLblToShip = *label of enemies*, Player, REP_HOSTILE_THRESHOLD
Here some references, because I don´t know what you´ll want your story missions to be about. I´ll cover here how to set the events most likely to occur in your mission.
1) Using Gates/Holes:
Firstly, make sure that the ships that will jump with the player, if any, have the attribute "jumper = true" in the [MsnShip] entry. To make them join formation with the player when he meets them use this:
[ObjList]
nickname = enter_player_formation
MakeNewFormation = fighter_basic
[Trigger]
nickname = join_formation
system = *system*
Cnd_DistShip = inside, Player, *ship*, 10000
Act_GivePbjList = *allies' label*, enter_player_formation
Making the jumoing thing is easy. Set an NNObjective as a rep_inst on the hole/gate and give it the appropriate "Take the Jumphole/gate to the *system* system" text. Set it like this:
[Trigger]
nickname = at_jumphole
Cnd_DistShip = inside, Player, *jumphole/gate name*, 2000
Act_SetNNObj = take_jumphole <-- use whatever you named that objective
Simple as that. The ships that are in formation with you will automatically jump, provided they that "jumper = true" in the ship entry.
2) Destroying bases/big ships + their escort
This is fairly easy to accomplish. Make sure you have all the ships you´re fighting named under a common label. Then, use the Cnd_Destroyed
[Trigger]
nickname = ships_destroyed
Cnd_Destroyed = *label name*, *number of ships*, EXPLODE
Act_SetNNObj = *next objective*
If you want a "break and run, they´re too strong" scenario, lower the number in the condition line to however may have to be destroyed.
3) Winning
To make the mission succeed, simply place Act_ChangeState = SUCCEED in the Trigger(s) that must be fulfilled. Equally, put Act_ChangeState = FAIL in Triggers you have to prevent from happening
4) Moving the player
What I mean here are places like in the 10th mission, you embark on the Osiris in the Hamburg system, but without leaving the ship, you magically appear in Texas. (yes it´s a ship that can move, but I´m speaking from a coding viewpoint here) If your mission involves moving like this, there are a number of options you have available.
Act_ForceLand = *base name* <-- this will land you on a base of your choosing. The difference between this and RelocatePlayer is that with this one you see the landing sequence - an important difference on some places.
Act_RelocatePlayer = *base room name* <-- this will place you in a specific room of a specific base. This is how the Osiris works.
Act_MovePlayer = *coordinates* <-- different form the other two, this works within a system. It´s rarely useful, but is often used after a thorn file which features the players moving so you don´t appear back where you were.
So that was it, as far as relating to the original text of Darkstone. I´ll put in some updates as I find out things.
Good luck!
Rasauul