Brad Wardell's site for talking about the customization of Windows.

image

Fallen Enchantress has random events. It’s just that there aren’t many and the odds of one showing up in a given turn are in 1/10,000.

So as we get ready for Beta 5, which is all about bug fixing, polish, and balance, we are finally starting to add a lot of new random events.

image

 

image

 

This is the part I should probably mention that any monkey can make a quest. You do need the powerful tool known as notepad. That’s how I’m doing it. It’s just XML and it’s pretty straight forward to make a fairly simple quest or random event (i.e. kill fooz or fetch me a holy hand grenade or escort my goat, etc.).  But there’s nothing stopping you from making a massive, epic quest.

In this random event, I set it so that after turn 50 there is a 0.1% chance of the event being triggered each turn. So odds are, you will rarely get this event (maybe once every 4 or 5 games).  But in addition to spawning a nasty cave with these nasty monsters in it, I also had it spam the world with a bunch of escaped darklings.

What’s nice about this is that modders (and guys like me) can control the “experience” of the game through the use of the turn trigger.

I’m thinking about coding in a power based trigger. That is, if the player is just dominating (or alternatively, getting really hurt) I could have the game trigger some interesting events to whoever is winning (or losing) to mix things up. I did this with Galactic Civilizations with quite a bit of success in keeping things moving.

Of course, with GalCiv, only I could make this stuff. With Fallen Enchantress, not only can a stupid monkey like myself crank this out, but you guys could too.

Below is the complete XML for this particular quest (90% of which is copy and paste):

   1:   <QuestDef InternalName="RandomEvent_AdventureProblem_2">
   2:      <DisplayName>Troublesome Adventerers</DisplayName>
   3:      <Description>
   4:        Into the throne room comes three very sad looking adventurers. They explain, at considerable length, that they met at a local pub and decided to go on a quest together. Unfortunately, this quest brought them to the ancient dungeon of Orilinor, Curgen's jailer.
   5:   
   6:        This dungeon was thought to be lost and, frankly, it would have been better had it stayed lost because upon opening it, a couple centuries worth of monster breeding has now been unleashed into the country side.
   7:   
   8:        "And, a demon known as Anithan is still there," he says.
   9:   
  10:        What do you want to do?
  11:      </Description>
  12:      <ShortTextAccept>Sigh. Can't you people get real jobs? You'll be helping clean up this mess.</ShortTextAccept>
  13:      <AllowQuestRejection>0</AllowQuestRejection>
  14:      <RewardText>Book of Demon Summoning</RewardText>
  15:      <RewardImage>Tech_Third_Book.png</RewardImage>
  16:      <SuccessText>
  17:        Anithan is defeated and the book is yours. Using the books of your private study to translate the runes in the book, you are able to summon a demon to do your bidding. Unfortunately, the book disintegrates upon use.
  18:      </SuccessText>
  19:      <QuestClass>Minor</QuestClass>
  20:      <Repeatable>0</Repeatable>
  21:      <TriggerType>TurnNumber</TriggerType>
  22:      <TriggerData>50</TriggerData>
  23:      <TriggerChance>10</TriggerChance>
  24:      <PostTriggerChance>10</PostTriggerChance>
  25:      <SpawnRating>1</SpawnRating>
  26:      <Image>BG18_Dark.png</Image>
  27:      <Treasure>
  28:        <GameModifier InternalName="Reward1">
  29:          <ModType>Unit</ModType>
  30:          <Attribute>GiveExperience</Attribute>
  31:          <Value>30</Value>
  32:        </GameModifier>
  33:      </Treasure>
  34:      <Treasure>
  35:        <GameModifier InternalName="Reward2">
  36:          <ModType>Unit</ModType>
  37:          <Attribute>UnitJoinArmy</Attribute>
  38:          <StrVal>DeathDemon</StrVal>
  39:          <StrVal2>Pox the Demon</StrVal2>
  40:          <UnitClass>Unit</UnitClass>
  41:        </GameModifier>
  42:      </Treasure>
  43:      <QuestObjectiveDef>
  44:        <ObjectiveID>0</ObjectiveID>
  45:        <NextObjectiveID>1</NextObjectiveID>
  46:        <Description>Find and defeat Anithan.</Description>
  47:        <Treasure>
  48:          <GameModifier>
  49:            <ModType>Map</ModType>
  50:            <Attribute>CreateGoodieHut</Attribute>
  51:            <StrVal>Orilinor's Dungeon</StrVal>
  52:            <Unitclass>GH_Quest_Cave</Unitclass>
  53:            <Radius>12</Radius>
  54:          </GameModifier>
  55:          <GameModifier>
  56:            <ModType>Map</ModType>
  57:            <Attribute>SpawnMonster</Attribute>
  58:            <Value>24</Value>
  59:            <Unitclass>Darkling</Unitclass>
  60:            <StrVal>Escaped Darklings</StrVal>
  61:            <Radius>12</Radius>
  62:          </GameModifier>
  63:          <GameModifier InternalName="Join">
  64:            <ModType>Unit</ModType>
  65:            <Attribute>UnitJoinArmy</Attribute>
  66:            <StrVal>Iru</StrVal>
  67:            <StrVal2>Amanda</StrVal2>
  68:            <UnitClass>Unit</UnitClass>
  69:            <Level>6</Level>
  70:          </GameModifier>
  71:          <GameModifier InternalName="Join">
  72:            <ModType>Unit</ModType>
  73:            <Attribute>UnitJoinArmy</Attribute>
  74:            <StrVal>Syndicate_SpyMaster</StrVal>
  75:            <StrVal2>Lucila</StrVal2>
  76:            <UnitClass>Unit</UnitClass>
  77:            <Level>6</Level>
  78:          </GameModifier>
  79:          <GameModifier InternalName="Join">
  80:            <ModType>Unit</ModType>
  81:            <Attribute>UnitJoinArmy</Attribute>
  82:            <StrVal>Mercenary</StrVal>
  83:            <StrVal2>Kelen</StrVal2>
  84:            <UnitClass>Unit</UnitClass>
  85:            <Level>6</Level>
  86:          </GameModifier>
  87:        </Treasure>
  88:        <QuestConditionDef>
  89:          <Objective>
  90:            <Icon>Mana_32.png</Icon>
  91:            <Text>Find the cave that leads to the dungeon, defeat Anithan.</Text>
  92:            <IsOptional>0</IsOptional>
  93:          </Objective>
  94:          <Class>Success</Class>
  95:          <Type>ClearGoodieHut</Type>
  96:          <TextData>GH_Quest_Cave</TextData>
  97:          <Flag>RevealTarget</Flag>
  98:        </QuestConditionDef>
  99:        <ChoiceText>You manage to cause a cave in, sealing off the entrance to the vast lambrynth underneath but not before Anithan and his servants confront you.</ChoiceText>
 100:        <ChoiceMedallion>F_Domination_Full.png</ChoiceMedallion>
 101:        <ChoiceMedallionFrame>Medallion_Frame_17.png</ChoiceMedallionFrame>
 102:        <QuestChoiceDef>
 103:          <Description>Defeat Anithan</Description>
 104:          <NextObjectiveID>1</NextObjectiveID>
 105:          <Encounter>
 106:            <Liklihood>100</Liklihood>
 107:            <BattleIdentifier>Anithan</BattleIdentifier>
 108:            <WillRespawn>0</WillRespawn>
 109:            <WanderingRadius>0</WanderingRadius>
 110:            <UnitInstance>
 111:              <UnitType>DeathDemon</UnitType>
 112:              <UnitName>Anithan</UnitName>
 113:              <Level>1</Level>
 114:            </UnitInstance>
 115:            <UnitInstance>
 116:              <UnitType>Juggernaut_Escaped</UnitType>
 117:              <UnitName>Failed prototype</UnitName>
 118:              <Level>1</Level>
 119:            </UnitInstance>
 120:            <UnitInstance>
 121:              <UnitType>DarklingWarrior</UnitType>
 122:              <UnitName>Darkling Horde</UnitName>
 123:              <UnitGroupingType>UnitGroupingType_Squad</UnitGroupingType>
 124:              <Level>1</Level>
 125:            </UnitInstance>
 126:          </Encounter>
 127:        </QuestChoiceDef>
 128:        <QuestChoiceDef>
 129:          <Description>Ah. Yes...well..quite. We will just be leaving you to your cave.</Description>
 130:          <NextObjectiveID>0</NextObjectiveID>
 131:        </QuestChoiceDef>
 132:      </QuestObjectiveDef>
 133:      <QuestObjectiveDef>
 134:        <ObjectiveID>1</ObjectiveID>
 135:        <NextObjectiveID>2</NextObjectiveID>
 136:        <PopupObjectiveMsg>0</PopupObjectiveMsg>
 137:        <QuestConditionDef>
 138:          <Objective>
 139:            <Icon>Mana_32.png</Icon>
 140:            <Text>Defeat Anithan</Text>
 141:            <IsOptional>0</IsOptional>
 142:          </Objective>
 143:          <Class>Success</Class>
 144:          <Type>BattleFinished</Type>
 145:          <TextData>Anithan</TextData>
 146:          <MoreTextData>Victory</MoreTextData>
 147:        </QuestConditionDef>
 148:        <QuestConditionDef>
 149:          <Objective>
 150:            <Icon></Icon>
 151:            <Text>Battle Lost</Text>
 152:            <IsOptional>0</IsOptional>
 153:          </Objective>
 154:          <Class>Failure</Class>
 155:          <Type>BattleFinished</Type>
 156:          <TextData>Anithan</TextData>
 157:          <MoreTextData>Defeat</MoreTextData>
 158:        </QuestConditionDef>
 159:      </QuestObjectiveDef>
 160:      <QuestObjectiveDef>
 161:        <ObjectiveID>2</ObjectiveID>
 162:        <NextObjectiveID>3</NextObjectiveID>
 163:        <Description>Return to your capital with the untranslated book of demons.</Description>
 164:        <QuestConditionDef>
 165:          <Objective>
 166:            <Icon>Mana_32.png</Icon>
 167:            <Text>Return to the capital with the untranslated book of demon summoning.</Text>
 168:            <IsOptional>0</IsOptional>
 169:          </Objective>
 170:          <Class>Success</Class>
 171:          <Type>UnitEntersCapital</Type>
 172:        </QuestConditionDef>
 173:      </QuestObjectiveDef>
 174:      <QuestObjectiveDef>
 175:        <ObjectiveID>3</ObjectiveID>
 176:        <QuestEnd>1</QuestEnd>
 177:      </QuestObjectiveDef>
 178:    </QuestDef>

Comments (Page 4)
6 PagesFirst 2 3 4 5 6 
on Aug 31, 2012

Cauldyth
I'm with Heavenfall on this.  Making creatures randomly appear out of nowhere to wail on the player just because he's winning is a big turnoff for me.  I'm okay with the other players getting together to oppose the leading player (whether AI or human), as that's occurring within the game rules, and is a natural aspect of how they should be playing anyway.  That said, it shouldn't be that all players suddenly go after the leader.  The leader should still have some allies, who are "playing for second place" so to speak, but riding the coat-tails of the leader.

Now, I'm not opposed to end-game dynamics that spice it up, but they shouldn't be just some random event, they should be something the player can anticipate.  Examples from other games:


MoO2: Attacking Antares (though this is under the player's control).
Warlock: Battling the opposing god's avatar.
Distant Worlds: Battling the Shakturi.
Late "game-changers" are an awesome addition, but they need to be tied to the game mechanics, and be able to be anticipated to some degree by the player.  The game just suddenly cracking you across the side of the head with a baseball bat because you're doing too well would make me turn off random events.  That would be unfortunate, because I like the other ones.

When mega-events were proposed for GalCiv2, I was very excited.  However, after actually trying them out in practice, I found myself invariably turning them off.

 

I loved the Mega - Events in GalCiv2.  Well I think that both sides could be satisfied with a toggle in the options.

on Aug 31, 2012

Madcatter

Quoting mfrast, reply 44How about a random event where one of yours or the AI army (or hero) defects from one side to the other while your at war. That could really get you pissed off.

 

I'm not opposed to events based on power levels but this one is very very bad for this game. Yes, it would tick the player off when their champions desert for no real reason. With a loyalty mechanic which can be controlled sure, but just out of the blue? That's a huge screw you to the player. At least the dragons attacking can be a fun (if challenging) encounter with potential reward.

Yeah, I'd go so far as to break my personal rule of never modding a game to actually mod that out.  It would drive me nuts.  Again, random slaps in the face are not good.  Game mechanics should be used to address these sorts of late-game problems, instead of having the game step in and arbitrarily take things away from you and/or arbitrarily give things to your opponents.  If you want to give the underdogs a chance in the late game, then implement some game mechanics that give them a chance.

Those mechanics can be as over the top as you want, as long as they aren't just random punches to the head.  As a simple, silly example: if 5 or more players ally together, they are able to summon a horde of otherworldly creatures to smite their opponents.  During normal play, it's extremely unlikely that 5 or more would ally, but they may do so in the late game when facing a dominating player.  A mechanic like that would (1) give underdog players a chance to stop an imminent win by the leading player, and (2) give the leading player a hell of a fun ride as he's about to win, but one which doesn't feel artificial, and one which he can anticipate to some degree.

 

on Aug 31, 2012

Madcatter

Quoting Bellack, reply 37I hope that you guys will be releasing an editor that will make this even easier for those of us who are not programmers.

 

Eh? Modding XML tags isn't hard at all. You don't even need to worry about game logic, managing memory, or any of those really annoying things actual programmers do.

I'm surprised they don't use xml schemas though.

on Aug 31, 2012

Making 1000 dragons appear might be overkill, but there is a way to make winning based events work. The key is to use fair effects when the only cause is that one player is dominating. For instance, we desperately need a not so random event that allies all remaining weaker factions against the one that is about to win. That is not cheating, that is something that would actually happen. We can add it as a random event to spark some interesting endgame scenarios. There are alot of endgame scenarios I would like to see added.

 

More to the kind that apparently killed Heavenfall's whole family, I would like some of those too. It would be unfair to pile on difficulty once the lead player starts to get ahead. But since we are talking about a .1% chance, it seems more like a rare and exciting challenge. Something you will only see happen once or twice, but it will always be in the back of your mind that such terrible things can happen. Honestly right now, once you pull ahead in the game there is not much challenge left. There is really just a long slog of easy battles leading up to a win. I don't think the game should be using events to balance other parts of the game that need work, but I do think adding a random "fuck you" into the game is both hilarious and exciting. I also think adding in a random "we see you are losing, here is some help" makes things more exciting as well. The difference is making these events rare and interesting. The key is make people both hate and fear them. It is what makes the game exciting.

 

Another kind of random event that could be added is a sort of themed chance card throughout the game. Each game could be marked by an overall story so that it feels more immersive. I would really like to see some classic fantasy added to the realm with random events. Now that we can spawn goodie huts, the possibilities are limitless. Here is what I mean:

Oldish Parchment IV: Oblivion Doors

The Dragon's Tear that holds the walls of this plane together has been stolen. Dozens of rifts have opened between our realm and the fire plane. This is surely the work of Sarog. It is up to the powers of the realm to recover it and close the doors to the fire plane. (Many Fire Gates open around the realm, offering a Pits of Namtur like quest across the realm.) It would be interesting to have this sort of theme explode into the game about 150 turns in. I think most players will even enjoy some parody of the classic fantasy stories. You can of course choose to make things more or less silly as you see fit.

 

Adding these three types of events would add so much to immersion and storytelling. It is especially nice that the overall theme of a game can stay in the quest log to stay in the mind of the player long after the event is over.

on Aug 31, 2012

seanw3
More to the kind that apparently killed Heavenfall's whole family

on Aug 31, 2012

The random event(s) I would like to see, to counter a player doing too well, is the "Desperation Power Grab" style event.  An empire that is losing badly would be given an opportunity to essentially sell its soul to the devil.  Obviously there'd be a benefit to this, more powerful units, or more money, more mana, etc... but the tradeoff would be that your empire would slowly sink into depravity or your production would go towards generating powerful and chaotic monsters, or something like that.


Basically, desperate empires (the AI and the player) would be given the opportunity to quickly improve their standing with the tradeoff of possibly destroying themselves or introducing an even greater threat than their opponents.

on Aug 31, 2012

When it comes to random events, I don't think they should be spread too far apart. Doing so leaves a sense of apathy forming in the player which he then in turn lets down his guard for those mean dragons that pop up at his door.

The random events should be consistent...sometimes good...sometimes bad....but always sometimes; giving the player clear and visual reminders NOT to let his guard down cause one day those dragons will be a knock'n.

This also grants the player the added bonus of having a dynamic kingdom to run. No longer would we clear an area and never have to worry about it again, only focusing on your kingdom's borders. Things CAN (or at least SHOULD) happen within your borders; things that would require your to manage your entire kingdom...not just your supply lines to the front.

The addition of consistent random events also keeps the player busy doing a variety of things. A full game is a good game. If all you have to do is worry about opponent X who is a war with you, well...let's just say that I'm done playing my games by turn 200 because of this very issue.

I think Stardock is on the right track with the random event idea...they just need to fine tune it.

 

on Aug 31, 2012

I'm incredibly excited for the modding tools. Custom quests/Items/Monsters/Research OH MY!

on Aug 31, 2012

I'd prefer it if it was based on land owned instead of power.

 

The two are related, but land owned is a little more intuitive/makes more sense.

 

 

on Aug 31, 2012

chanter45
I'm incredibly excited for the modding tools. Custom quests/Items/Monsters/Research OH MY!

 

Nice, simple coding, above.  Makes modding for the Bethsoft games look like rocket science.  I could easily get into this.

on Aug 31, 2012

It looks so daunting to people that have no idea what things mean, even though it really is simple as far as a design goes.

 

What is hard about XML, is not the language itself, but learning how the game designers decided to structure their data.

on Aug 31, 2012

Random events shouldn't trigger off of anything.  They should be RANDOM

Quests, the other hand, should be able to trigger off of anything in the game.  Buildings, army size, champion level, turn number, diplomatic escapades, etc.

on Aug 31, 2012

mqpiffle
Random events shouldn't trigger off of anything.  They should be RANDOM. 

Quests, the other hand, should be able to trigger off of anything in the game.  Buildings, army size, champion level, turn number, diplomatic escapades, etc.

Something has to call the rand() in the first place.

on Aug 31, 2012

I suggest you tie random events to forum posts so that the more people complain the more monsters harass them in-game.

on Sep 01, 2012

UmbralAngel
I suggest you tie random events to forum posts so that the more people complain the more monsters harass them in-game.

 

   Now, that was a Major Chuckle ! ... and of course, Justice would be served, if your suggestion were implemented ...

6 PagesFirst 2 3 4 5 6