GC2 AAR’s For All!

Moving Ahead on One of the Expansion Pack Features

While I believe the list hasn’t been finalized, Brad has given me the go ahead to begin work on one of the many new features that will be included in the expansion pack: the Epic Story Generator.

As a simple lad with simple programming skills, the task seemed easy enough…write enough text so that, each time the player finishes the game, the player gets an multi-page story similar to the After Action Report’s Brad has posted. However, after playing a few games and mapping out the many MANY events that can occur, the task grew before my eyes. Here’s a list of the events that I’m currently hooking into the code…

enum GC2StoryGeneratorEvents
{
GC2_Story_Data_RaceStatus, // a races standing in the universe
GC2_Story_Data_GalaxyStatus, // size, ect of galaxy

GC2_Story_EthicalAllignmentChosen, // race gets xenoethics, choses morality
GC2_Story_UPLawPassed, // a law gets passed
GC2_Story_UPLawRejected, // a law gets rejected
GC2_Story_UPLawTimedOut, // a law times out
GC2_Story_LeftUP, // race leaves the UP
GC2_Story_RandomEvent, // a random event occoured, store what option the race picked
GC2_Story_TreasuryDropsBelowZero, // money drops into the red
GC2_Story_TreasuryOutOfDebt, // race climbs out of debt
GC2_Story_BudgetBalanced, // race balances a lopsided budget
GC2_Story_ChangedGovernment, // race changes form of government
GC2_Story_ElectionSuccessful, // won an election
GC2_Story_ElectionFailed, // lost an election

GC2_Story_WarVoteSuccessful, // vote to go to war passed
GC2_Story_WarVoteFailed, // vote to go to war turned down

GC2_Story_MoraleMightDropsBelowFifty, // approval dropps into the red

GC2_Story_FirstContactWithRace, // first time races meet
GC2_Story_RelationsRaised, // race raises relations with someone
GC2_Story_RelationsDropped, // race drops relations with someone
GC2_Story_StartedAlliance, //alliance treaty signed

GC2_Story_AcceptedGift, // took gift
GC2_Story_RejectedGift, // rejected gift

GC2_Story_SuccessfulNegotiations, // sucessfully traded with another race
GC2_Story_UnsucessfulNegotiations, // unsucessfully traded

GC2_Story_WarStartedBecauseOfAlliance, // race gets pulled into war
GC2_Story_RejectedWarDespiteAlliance, // allies plea is rejected

GC2_Story_RaceNoticesShipBuildup, // race takes note of a buildup
GC2_Story_RaceNoticesCultureStarbase, // race takes not of a culture starbase
GC2_Story_RaceNoticesMilitaryStarbase, // whats the warbase doing there?!

GC2_Story_CultureStarbaseStarted, // started party base
GC2_Story_EconomyStarbaseStarted, // started banking/factory base
GC2_Story_MilitaryStarbaseStarted, // started gunbase
GC2_Story_MiningStarbaseStarted, // started mining a resource
GC2_Story_WarshipDesigned, // designed a new warship
GC2_Story_FirstWarshipOfTypeBuilt, // first new warship built

GC2_Story_WarStarted, // war started

GC2_Story_PlanetInvasionFailed, // race tried to invade but got stomped
GC2_Story_PlanetInvasionSuceeded, // race took another race's planets through invasion
GC2_Story_PlanetInvasionTied, // both sides lose all troops

GC2_Story_TradedForPeace, // 'Lets just be friends'
GC2_Story_RejectedTradeForPeace, // 'Hell no..you're gonna die.'
GC2_Story_RaceSurrendered, // race surrenders to another race
GC2_Story_RaceDestroyed, // race is destroyed

GC2_Story_ShipDuelBattle_DefWin, // 2 ships meet, attacker loses
GC2_Story_ShipDuelBattle_AttWin, // same as above, attacker wins
GC2_Story_SmallShipBattle_DefWin, // fleet battle < 6 ships
GC2_Story_SmallShipBattle_AttWin,
GC2_Story_MediumShipBattle_DefWin, // fleet battle < 12 ships
GC2_Story_MediumShipBattle_AttWin,
GC2_Story_LargeShipBattle_DefWin, // fleet battle tons of shops
GC2_Story_LargeShipBattle_AttWin,
GC2_Story_LoneShipOnFleetBattle_DefWin,  // one ship vs a swarm
GC2_Story_LoneShipOnFleetBattle_AttWin,

GC2_Story_StarbaseBattle_DefWin, // starbase battle
GC2_Story_StarbaseBattle_AttWin,

GC2_Story_PlanetDefenceless, // planets orbiting ships all killed

GC2_Story_PlanetColonized, // planet colonized
GC2_Story_PlanetBuiltWonder, // planet...im not going to explain these ones ;)
GC2_Story_PlanetBuiltTradeGood,
GC2_Story_PlanetBuiltSuperProject,

GC2_Story_CultureFlipDanger, // planet is in danger of rebeling
GC2_Story_PlanetRevolts, // planet flips to another culturally superior race

GC2_Story_TradeRouteStarted, // started trade route
GC2_Story_TradeRouteShipDestroyed, // en-route frieghter taken out
GC2_Story_TradeRouteEndedTooRisky, // trade route ended due to warfare in the area

GC2_Story_AnomalyFound, // found anomaly!
GC2_Story_WeaponTechResearched, // weapon research completed
GC2_Story_HullSizeTechResearched, // researched new hull size tech

GC2_Story_EconomicBoomBegins, // special events begin and end
GC2_Story_EconomicBoomEnds,
GC2_Story_CultureBoomBegins,
GC2_Story_CultureBoomEnds,
GC2_Story_CultureBacklashBegins,
GC2_Story_CultureBacklashEnds,

GC2_Story_Victory_Culture, // victory conditions
GC2_Story_Victory_Military,
GC2_Story_Victory_Technology,
GC2_Story_Victory_Alliance,

GC2_Story_Loss_Culturet, // losing conditions
GC2_Story_Loss_Miitary,
GC2_Story_Loss_Technology,
GC2_Story_Loss_Surrender
};

From these I can gather data specific to the event, then use the morality of the races involved, those races relative military might, and the galactic status at the time, and I should have enough information to generate an interesting and unique story for each game.

Other hopes for this feature would include creating an HTML version with generated screenshots, and integration with your online account so that it can be uploaded to the website and other players can read of your exploits.

Of course, at this point, I’ll just be happy to get the basic storytelling part working right ;) And let me know If you see any major events that I forgot. I only used ones I ran into or ones I could think of while playing, but I definatly want to cover as many pivotal game events as possible by the time this is completed.

69,034 views 49 replies
Reply #1 Top
What a cool idea.

Getting the event evaluation function working right is gonna be reeeeeal tough though.
Reply #2 Top
Creation of minor races? Pirates? Fundamentalists?

Didn't see those... looks really cool, though.
Reply #3 Top

"In 1972 a crack commando unit was sent to prison by a military court for a crime they didn't commit. These men promptly escaped from a maximum security stockade..."

Oh, wait. That's too early in the timeline.

Reply #4 Top
Make sure that events like "morale/approval dropped below 50%" aren't repeated frequently. For example, if I'm right on the edge at 50% and it generates the event, and then the population increase (decreasing morale) enough that it drops and then I go adjust the slider the next turn, etc... that it doesn't keep saying "dropped below 50% / jumped above 50% / dropped below 50%", etc....

On that note, I only see an enumeration for morale drops below 50% -- there is nothing to indicate that it jumps back up. Also, maybe 100% morale (or various other morale events) would be useful.

Also, not all battles will need to be retold. It may be hard to do, but "significant" battles might be nice. For example, a single ship cleaning up two fleets in the same turn is a lot more impressive than a fleet of heavily armed attackers taking out a couple of single ships.

Espionage events such as stolen technology aren't there, and there is nothing there for trade embargos being started/stopped.


It's a cool idea! I like it!
Reply #5 Top
*nods*

I like it a lot as well. Please let this be implemented through moddable code-snippits wherever possible, I'd LOVE to play around with the text, if nothing else

Is anyone else kinda reminded of the GameScore Blog from the 360 with this feature? They're both pretty neat
Reply #6 Top

Thanks for the suggestions. Yeah, Pirates, Minor Races, Morale at 100%...these are all good.

And to dispell fears, these are just the event's we'll be logging. If the story creation code works right, the events will be programatically chosen by importance to the overall scope of the game. For example, if at some point your people start to rebel, then the text will forshadow this using the morale events that preceed the rebellion. If you win by military might, the creation of a stray Culture Starbase will probably be ignored in the story generation.

Like Vunlcannis said, getting the formula right is going to be REALLY tough (jsut enough info to make it fun to read, but not enough so every story reads the same).

I'll keep the status reports coming if you guys keep the suggestions coming

Armando: Everything will be in very a moddable XML format, so if you want to add a different way to write a section of text, hopefully it'll be easy to do.

Reply #7 Top
I think a lot of players would welcome this feature and that makes it a good idea ... but would you maybe add a more comfortable way to take screenshots for my own AARs first?

Just save screenies automaticly in some folder and name them like [stardate]-[screen]-[nr.].bmp, this would really help. Some more in-game artwork would also be great to "spread the word" and I would really like to have an option for viewing planets and the minimap in fullscreen...

Nevertheless, this game is awesome and I love it
Reply #8 Top
There are a couple notable random events that should probably be logged because they can change the course of the game, i.e. Precusor ships, the one that makes all the planets in a huge area PQ11-15, Vengence, etc.
Reply #9 Top
Excellent idea!

How about when a player wins by military victory, if he had traded major weapon techs it's mentioned as well? Or if he got Cultural Domination from a AI player and then takes them over using culture, it adds to the flavour.
Reply #10 Top
Good idea.

GC2_Story_RandomEvent, // a random event occoured, store what option the race picked

This should be labelled GC2_Story_EthicalChoice and then add:

GC2_Story_RandomEvent, // a random event occoured, store the event (e.g., civil war, prison break, etc.)
Reply #11 Top
Any chance of a map replay turn by turn at end of game ala Civ3 style, (showing influence, planets taken, wonders build etc) always liked that feature. Havn't played civ 4 so don't know if they kept it or expanded on it.

Story thing sounds good

Lenius.
Reply #12 Top
thanks for the reply, boogie, that sounds great to me!
Reply #13 Top
I like it a lot as well. Please let this be implemented through moddable code-snippits wherever possible, I'd LOVE to play around with the text, if nothing else


LUASCRIPT IT!!!!

I want a thing where it outputs the event list to a file and then runs a Lua script on the file to process it.
Reply #16 Top
In 1972 a crack commando unit was sent to prison by a military court for a crime they didn't commit. These men promptly escaped from a maximum security stockade..."



LoL at the A-Team reference
Reply #17 Top
If major battles are won by conspicuous ships (I.e., the same battleship involved in fleets with multiple engagements), I think mention of that ship's name could be included in the story line:

"At the third battle of Tacitus, the TAS RESPLENDENT lead the Terran fleet to victory despite heavy losses. The RESPLENDENT then led a successful offensive against the Drengin at Sauron". Etc.

Reply #18 Top

Axel: Definatly. The event's will store data that can later be collected and used by the story generator to this effect. By counting how many times a ship has been in battle, we can tell different stories. If there's a ship that has fought in several substantial battles throughout the course of a war, the generator will sculpt the text around this ship's battles, making it, and it's adventures, a central part of the story.

Of course, easier said than done   But I pretty confident.

Reply #19 Top
I love saving replays of RTS games, but that would be boring as futz in a TBS. This would be the same level of coolness.
Reply #20 Top
Major upgrades of entire ship classes. Like when you upgrade all ships of a class to a more powerful weapon system.
Reply #21 Top
Having a story generated from my gameplay would encourage me to give better names to my planets and ships and encourage me to make sure specific ships survived etc.

Would be good if it could keep track of upgraded ships as if they are the same ship.

Narrowly beating another survery ship or colony ship or transport or constructor unit to a target or being narrowly beaten would be great. Basically monitor orders that need to be cancelled because something changed.

"The great HamStar Kahn's formidibal armada bore down on Drengi Controlled Primus II, even as peace negotiations were underway. Mere weeks before the bloody devastation, the fleet was stopped dead in it's tracks when the Drengi Government agree to donate their entire war chest of 30 trillion credits in echange for peace."

"The "Dawntredder 1", our first high speed colony ship, could see the Korx's own colony ships as just another point of light among the stars above "Tycho I" as work began on our first factory in the Tycho system. Our new colony, narrowly won, was crisined "IOWNZORED!!!" by the landing party."
Reply #22 Top
I think that this is a brilliant Idea...I must say I always look forward to Brad's gameplay stories. This really will add a whole new dimension to the game. Can't wait..........
Reply #23 Top
any chance this idea could be applied to in-game dialogue?

Reply #24 Top
I think that events should be "weighted" according to how much of an impact they made on the game, So a few skirmishes over the course over three years would be written pretty much like that, However the defeat of the orbital defence fleet around planet Kona should be a major.
Reply #25 Top
this would make a great impact i would love to see it