Wrestling MPire: Promos


Writing your own promos and creating your storylines is just about the easiest thing you can do with the freshly released source code. However, even this is not as simple as it seems. If you want to do it properly, you should study the following advice carefully...

The Skeleton
The first thing to do is to head into the file and copy and paste an existing promo that has a similar structure to what you have in mind. Remember to give it a brand new name and number. The yellow header is for your eyes only, but it's ESSENTIAL that you change matchPromo=?? to a unique new number. This will become the number that the game identifies the storyline by. You will notice that within that bracket, each stage of the conversation has its own time on screen as dictated by promoTim. In most games prior to The You Testament, this counts DOWN from a given number instead of UP. This is not ideal and makes things unnecessarily complicated, but you'll have to work within it. Once your conversation is finalized, you'll have to come back here and ensure that each segment is displayed for a sensible amount of time (250 is recommended), with a gap of 25 between each one (including at the end)...

Writing Lines

As you'd expect, the most important thing is the text that determines what will be said. Most games prior to Wrestling MPire 2008 had to worry about how long these sentences were, but later advances allowed the game to squeeze ANY given line of text into the confines of the screen. It's still recommended that you don't deviate too far beyond the given examples though - otherwise the text will end up annoyingly small! If you're a perfectionist, you also need to consider making each line a similar length. That is if you need to use 2 lines at all. If you'd prefer to display one line, you can simply leave lineB$ with nothing to display but "". The game will then centre the only legitimate line of text. One-liners are not good practice in my opinion though, so you should try to have something substantial said each time. I also like the sentiment to be quite self-contained, so that the next segment is a continuation of the conversation rather than the continuation of a mere sentence!

Name References
One of the biggest headaches when writing for games is that you often need to refer to "variables" that defy the English language! This is normally the name of the character being spoken to. It's no good writing "Hello Steve Austin" because that will hardly ever be appropriate. Instead you have to make reference to the charName$(?) variable that contains the name of the character identified within the brackets. You insert a variable into a line of text by cutting into it with the formula "+Variable+" (or simply Variable+"... if it forms the start of a sentence). If you have any doubts, it's best to copy and paste the way a name has been referred to elsewhere. Just remember to make sure the number inside the promoActor(?) variable refers to the actor in question. I'll elaborate on this later...

Gender References

Gender is also an issue in my games. It's no good typing "He" or "His" because this may not apply to the many female characters! Instead, you have to call on several text-based variables that I've prepared for the game. These can be located in if you are intent on adding your own. Most normal uses are already covered though. To make reference to someone's gender in a conversation, you first have to establish the gender with the formula g=charGender(?). You can then insert this temporary g variable into one of my preset gender references such as He$(g), His$(g), or Him$(g). The right word will then be used based on the character's details, such as "She" even though the variable is still called He$(g). Another little thing to point out here is that this will display the word with a CAPITAL "He" or "She" as though it were the beginning of a sentence. If this is NOT the case, you should surround the variable with Blitz's Lower$( ) function to make it lower case...

Once you've got your sentences in order, it's time to think about how they should be delivered. The Speak( ) function is used to make one actor speak to another - complete with gestures and moving lips. A conversation can have up to 3 actors in it, each with their own number from 1 to 3 (the promo's data will help you establish exactly who these actors are later). The first use of promoActor(?) is the one you would like to speak and say the words that follow. The second use of promoActor(?) is optional and gives the first actor someone to aim his words at (who will then turn to face him). If you'd like the character to talk to no one in particular (i.e. the crowd), you can simply put the number 0 in the middle. The final number at the end is a facial expression that conveys the tone of the conversation (1=Angry, 2=Neutral, 3=Docile). In the wrestling games, most will be angry rants so you can leave a 1 at the end! However, if you'd like them to lighten up or be sincere, you should use 3. Once you know which actor will START the conversation, it's best to go back to the very top of the promo code and make sure that camFoc refers to this actor. This will ensure that the camera focuses on him in advance instead of switching to him at the last minute!

Once the right people are saying the right things in the right way at the right time, you may want to consider making that mean something. This is especially true of the booking version, where promos are used to turn wrestlers "Face" or "Heel" and change relationships. This is what the PushTurn( ) function is for. It pits the first actor (usually the one who is speaking) against a second actor (the one he is speaking to) and changes their allegiances based on what they were before. For instance, if a good guy berates a fellow good guy, the one who is speaking will turn bad. Inversely, if a bad guy berates a fellow bad guy, one of them will emerge as the good guy. If you'd like to guarantee a certain result, you can replace the second actor with a number - such as PushTurn(actor,-1). 0 guarantees that the first actor becomes good whereas -1 guarantees that he turns bad. Simply copy the way it has been used in a similar promo if you have any doubts...


At a pivotal moment in a conversation, you may also want to permanently change the relationship between the characters involved. Every single character in the game has a unique relationship with every other character, which comes into play in the "Career" mode of any given game. We use the ChangeRelationship( ) function to affect it in promos. The two characters involved are referenced and then the number at the end determines what their relationship will be changed to. If the number is positive (i.e. 1) then it denotes a friendship, whereas a negative number (-1) denotes a rivalry. 0 means they have no feelings one way or the other. It's best to do this at the very end of a promo in case a premature change affects the way the conversation unfolds...

Crowd Reactions
You can also make the crowd respond to a conversation to give it a bit more personality. Halfway through a segment, you can time the game to play a certain sound effect. It's important that you use the formula promoTim<??? instead of promoTim=??? because the promo code falls outside the timing system and may not be 100% accurate. If you say promoTim=??? in any given promo, it will almost certainly fail to come to pass. To prevent something happening repeatedly once promoTim goes beyond a certain time, we simply use promoReact(?) to record the fact that it has already happened. Simply copy the way it has been used in an existing promo, but be sure to update the numbers within promoReact(?). Each segment of the conversation has its own record. In any case, the Pop( ) function is the important piece of code here that elicits a sound from the crowd. The first variable in the bracket identifies who the crowd are reacting to. If you want this to be an issue, you enter the actor's ID or simply the word speaker. The crowd will then respond positively if they like them or negatively if they don't. If you want to guarantee a certain response, start with 0. The last number is the volume of their response and should probably be left at 0, which doesn't denote silence so much as a random volume based on their popularity. This is usually for the best. If you want them to respond as loudly as possible no matter what, replace it with 1. The all-important number in the middle is the ID of the sound effect you want to play. They are as follows:
2 = Cheer
3 = Boo
4 = "Yay"
5 = Groan
6 = Excitement
7 = Murmur
8 = Laughter
9 = Applause
10 = Chant
11 = "Boring" Chant

Promo Properties
At this juncture, your new promo is technically done and all you have to worry about is entering it into the system so that you can access it! This can be quite complicated in itself, however, so keep paying attention. You need to scroll back up to the very top of and make a new entry in the list headed PromoData. Copy an entry from a promo similar to your own and then change the number after the brackets to the unique ID of your new promo (matchPromo). Then you can set about entering a title for it and a brief explanation of what it contains. This is largely irrelevant and is only for the benefit of others though. The numbers underneath are much more important. You must enter the correct length of the promo after promoLength. This should be the highest reference to promoTim in your script - PLUS an extra 25 as a little buffer zone. That will stop the actors speaking instantly and will give the camera time to swoop in. So if your promo begins promoTim<1100 (as most do) then the length should be entered as 1125. The promoRole variables at the end are the most important of all because they determine which characters in the match will be used as actors. 1 means that the actor will be from the FIRST side of the match-up (usually the star player in "Career" mode), whereas 2 means they will be from the OPPOSING side (usually the star's opponent). By making both actors 1 or 2, you can arrange it so that two people from the same team will speak to one another. Setting promoRole(1)=1 and then promoRole(2)=1 will ensure that both members of Team A will talk to one another. Meanwhile, -1 denotes that the referee of the match should become an actor. This is very rare, however! As I said, simply copy an existing promo if there are any doubts...

Script Library
At this point the game has everything it needs to use the promo, but you don't have everything you need to access it in the menu screens. In order to make your new promo show up in the match setup options, you'll have to scroll down to the "Promo Library" section of - which should be directly below the "Promo Data" you just added. Here you need to make a correctly numbered entry to one of the categories. If the last entry you see is promoLib(119)=97 (as in the above example) then the next entry should be promoLib(120)= and the unique ID of your promo. You'll notice that the "Relationships" category is quite overpopulated with only 5 slots left, so you should probably pile most of your custom promos into the "Arguments" section...

Number Of Promos
One final thing you need to do is open up and scroll down to the "Matches" variables that are stored there. Here you'll find a no_promos variable that keeps track of how many promos there are in the game. Simply update it to match however many there are now. You may also find that your new promo is "locked" by default, since it cannot possibly have been encountered in the "Career" mode. All you have to do is employ the cheat that unlocks ALL promos and yours will be among them! Simply head to the match setup screen where you select a promo for an "Exhibition" and press ALT and P. Your promo should then be available in the relevant category and you can set about loading it yup to check that it works OK. The chances of it being perfect first time are pretty slim, so you can expect to polish it up over 3 or 4 sessions...

Booking The Angle
The most exciting thing about creating your own promo is that you can also weave it into the fabric of the "Career" mode! This is advanced stuff, however, so you may want to tread carefully. You first have to load up and then scroll down to the AssignPromo( ) section. This is where the game looks before loading up each match to see if it should add a storyline into the mix. Some of the circumstances that surround this will be quite complicated, so you shouldn't worry about it too much at this early stage. However, if your promo is quite versatile and will make sense under any circumstances, it's perfectly easy to give it a chance of being used. You simply enter the chunk of code highlighted above, making sure that matchPromo=?? refers to the promo in question. The randy stuff is the odds of it being used. I've essentially told the game to pick a random number between 0 and 20. If that number happens to be 1 or less then the storyline will be used. Theoretically, this means there is a 1 in 10 chance of it happening each time. You can make the storyline more or less likely by playing around with those figures...

Post-Match Consequences
The above example allows us to decide on a promo BEFORE a match. If you'd like to trigger your storyline AFTER a match then we have to come to and scroll down to the BookAngles( ) section. This is a similar process, but instead of setting matchPromo to your custom promo we find a date in the future and book it in advance. If a storyline is already on the calendar in this manner then the game won't bother using the AssignPromo( ) function we talked about earlier. It's just as easy to add a basic one of these. You simply enter the piece of code highlighted above, but note that the variable is now gamPromo(date)=?? instead of matchPromo=??. This is a reference to your character's schedule in the future rather than today. If you'd like to ensure that the storyline is also acted against the same opponent (i.e. a rematch), you should add the equation gamOpponent(date)=gamOpponent(gamDate) or pChar(matchLoser). Notice that gamDate refers to the opponent you were given TODAY, whereas date refers to next time. These post-match angles tend to be highly circumstantial and can get very complicated. See how some of the others were programmed if there are any doubts...

Copyright MDickie 2000 - 2010