Hello friends! This post was last updated 23/08/2019!
This thread is for discussing User Patch 1.5 and its application as a designer's tool. This first post will give you an overview of the most powerful element; UP-Effect, but following this are more posts going into more detail or other topics.
Post 2 - UP-Effect vs UP_Attribute
Post 3 - Attributes and Effects
Post 4 - Other features
Investigations are posts documenting research into particular elements of UP-Effects and their uses:
#1 - Using UPGRADE_UNIT: Achieving Off-Grid Resource Piles In-Game.
#2 - Using UPGRADE_UNIT: Preventing Villagers taking jobs.
#3 - Train Location: Does Class Matter?
#4 - Train Location: Type differences and cool ideas.
#5 - Using UPGRADE_UNIT: Examining Cross-Type Upgrading & Upgrade Leftovers.
#6 - Using UPGRADE_UNIT: Cross-Type Limits and Freeze-Frame Units.
Extra Info:
Full List of all non-UP Resources, from AGE 2019.
What is the "UP Effect"?
The UP Effect, or up-effect, is a special feature of UserPatch 1.5-onwards that -- put simply -- allows some basic data modding within the Scenario Editor through manipulation of tech effects.
Tech effects can alter a lot more attributes than the standard editor, accross every unit of that ID (or class).
UserPatch has opened the doors to entirely different games distributed through scenarios and random map scripts. It is, in a word,Brilliant.
I'm over-exaggerating how great it is. Well, kinda. Let's look at it from a technical view.
"up-effect" works by using AoC's Technology Effect system. Everything that can be achieved through technology effects can be achieved through up-effects (with some notable additions)
Scripter64, creator of UserPatch, has provided some outlining documentation on how to use the up-effect, how it can translate to random map scripts, and provided a few examples. However, I feel this doesn't go into much depth and doesn't serve well enough to get your creative juices going.
I have also been answering a lot of questions on the topic of using up-effects, and what they can achieve.
First:There are two types of up-effect.
These are up-effect, and up-attribute. I will talk more about up-attribute later.
Second:up-effect can be a little confusing to use at first.
But you'll get the hang of it!
How do I use one?
To use a up-effect, you need a Display Instructions trigger. To prepare it for an up-effect, set the timer to 99999999 (UPDATE: The latest beta now only needs 99999 or more!) and the number field to 9 -- like so:
One thing you might struggle with is remembering all the 9's for the timer field. You can't just put any old number in there (unless Scripter changes that in the future), youneed to put 8 9's. When typing it, I tend to 4 9's, then pause a split second, then the other 4 9's, to keep track.
Next, we start the "Message" field with "up-effect". Until you get used to it, I suggest also completing it with 0,0,0,0,0,1 -- Like this:
This should hopefully help you to keep track of all your numbering. The up-effects all rely on numbers, and there must always be six of them. Let's dissect them:
In Scripter's documentation, he writes:
So, Scripter provides an example:
So instead of just copying Scripter's example, let's do our own.
A quick unit modification example
First, we want to choose the player for our effect. You can use 0, 1, 2, 3, 4, 5, 6, 7 or 8. 0 means "All Players", 1-8 should be self explanatory. I haven't experimented with the Gaia attributes much, but as I understand it -- if you want to specifically effectONLY gaia, you need to set player number to 0 and use negative numbers in your "effect" field.
I'm going to use player 1.
Next, we want to decide on our "effect". I'm going to keep things simple, and ignore everything that doesn't affect a unit. In the documentation, under file "UserPatchConst.rms", Scripter writes:
So, these numbers:
0 will set an attribute outright. For example, Health, Range, Movement Speed, etc. will be set to the value you specify.2 will enable or disable a unit. This means that you can, for example, enable a Britons player to train Plumed Archers instead of longbowmen by doing up-effect 0,2,8,0,0,1 followed by up-effect 0,2,763,1,0,1.
3 will upgrade a unit. This is what happens when you, for example, research Man-At-Arms. There's various things you can do with this and all of them are cool. Shape shifting units? Changing looks but keeping stats? It's all there.4 is like 0, but ADDs to what already exists. For example, you can ADD 50 HP to a 100 HP unit, and get 150 HP. I don't want to insult your intelligence by providing an example image though.5 MULTIPLIES the attribute, and here you might want to be careful. You could, if you set the "Style" wrong, accidentally multiply a unit's speed by 110x, instead of 1.10x. It's also worth noting that stacking Multiplied attributes is exponential. It multiplies the previous stats, NOT the BASE stats. If you multiply 100 HP by 1.10, then do it a second time, the second time around it will be multiplying 110 HP by 1.10.
35+10% HP-> 39+10% HP->
So, have you decided what you want to try? I'm going to SET, so my second number in the up-effect line will be 0. It looks the same as before, but yours might not.
The third number is a big deal. This is what we're going to effect. There's two ways we can do this.Use the Unit ID number.Use the Class ID number, + 900.
up-effects can effect any individual unit whose ID is between 0-900, and 1000-1959. IDs in the 900-999 range are actually reserved for counting data (According to Scripter), so he's made use of them for Classes. This means that if you want to affect a Longbowman like in my above example, you want "8". But if you want to affect ALL archer units, you'd use "900", because an Archer is class 0.
For reference,Here is a post I made, showing the various classes (and Attributes) listed in AGE 2017.
In our experiment, I'm going to pick number 24 - The Crossbowman. Now my up-effect line looks like this:
(I'll award bonus points to anyone who can point out how dangerous this line is for my crossbowman, right now.)
Our fourth number is also an important one, and it changes depending on our second number. If our second number is 0 (Set), 4 (Add) or 5 (Mult.), this fourth number is an Attribute ID. But, if our second number was, for example, 2 (Enable Object), then this fourth number would be either 0 (To Disable), or 1 (To Enable). Scripter's documentation explains some of these, albeit a bit confusingly. EG, for "Enable Object" he writes:
But wait!
Scripter has also added some special ones:a lot you can do. I've made a post following this one listing all of the attributes, how they're used and what they can do. For this example, I'm just going to pick attribute ID 16 -- But I highly recommend experimenting.
If you look at the list of attributes, you'll be able to find Attribute 16 and get an idea of what it can do. I'll give you a clue -- It's used by the tech "Chemistry". I advise you skip Attribute's 9 and 8, as they need some special maths which I will explain later.
Our fifth number is the "Value". In my case, I need a Unit ID. In some cases you might want to use percentages, or float values. For that, you'll need to remember that a value of "100", with a "Style" (The sixth number) of 2, will make it "1.0". You may be wondering why you can't just write in "1.0", and I wonder that too. But clearly -- if that was possible then Scripter would of let us do it that way.
So, I've went ahead and picked a Unit ID for my Attribute 16:
My "Style" -- The sixth number -- will remain as 1. This is because I don't need to convert my fifth number into a percentage. If you were doing something like, adding 10% to the Longbowman as above, your Style here would be 2 and your Value would be 110. This turns into 1.10x, or 110% of the original value. The Effect (Second number) would be 5, because you're Multiplying.
Something to bare in mind is that this projectile change could be overwritten if I were to later research Chemistry.
Now, this example might be a bit extreme. Changing projectiles is a very specific effect. But, hopefully you've experimented and chosen your own values and attributes to change. Be careful when changing Projectile IDs, though. If you choose an ID that is not a valid projectile unit, the likely case will be that your attacks will fire no projectile and do no damage, and unlike Melee Units that have their projectile ID set to -1, a projectile ID set to something like a Watch Tower would cause the game to try spawning a watch tower and failing, thus the game would deduce that the projectile did not hit and do no damage.
This could be drastic in a scenario where the projectile might not change for a long time into the map, on a specific unit. The map designer might not even notice that he's firing blanks, because he's not firing a proper Projectile unit.
Off the top of my head, here's some other examples of up-effects for units:
When doing up-effects, each up-effect should be on a separate line, like this:
And a Display Instructions effect can only hold so much text. There will probably come a time where you need to use multiple effects.
Okay, that's nice and all. What about the other effects we ignored?
First, let's look at MOD_RESOURCE (Effect ID 1) and MUL_RESOURCE (Effect ID 6). Contrary to my original belief, thesearen't for modifying resource costs. These are actually working just like Tributes.
Here's an example:
up-effect 1,1,4,1,100,1
The Player is 1, the Effect is 1 (MOD_RESOURCE), the Item is 4 (Population Headroom), the Attribute is 1 (When using MOD_RESOURCE, use 0 or 1. 0 SETS, 1 ADDS.), the Value is 100, and the Style is 1.
What this does is simple -- adds 100 Population Headroom to Player 1. It doesn't go over the player's Pop Cap max, though.
So what's the point of this, if I can use Tributes for the same effect? (And oh boy, can you use Tributes. UserPatch allows you to select every available resource for Tributes, including ones added by Scripter.)
Well, unlike tributes you can now:Multiply resourcesUse float values. EG: Faith Recharge Rate (Resource 35) is by default set to 1.6 -- You can't do that with Tributes.
Furthermore, these tributes allow you to have control over the Weather and Fog lighting systems in UserPatch 1.5. A very good article on the UniversityHere has more details on it.
Secondly, let's look at Tech modifications. This one is a bit weird, because there'stwo ways of going about changing the costs.
Before we get onto that, though; let's look at Effect 7 (Enable Tech). This work just in the way that disabling/enabling techs through the Research Technology triggers work, with the exception that you can enable/disable techs that aren't listed in the vanilla editor. However, you can't Research techs with this, only Enable or Disable them. This and Effect 102 (Disable Tech) are aimed more for use in Random Map Scripts, where triggers don't apply.
So what should we care about?
I've been having difficulty working with the Tech effects. For example, I can't seem to get Effect 8 to work correctly. Hopefully Scripter can enlighten us.
What I have been able to get working, is Effect (The second number) 100, 101 and 103.Effect 100 SETS a tech costEffect 101 ADDS to a tech costEffect 103 MODS a tech time, using Attribute (the fourth number) 0 for Set or 1 for Add.
So, for example, you might want to take Loom for Player 1 and make it cost 500 Gold. You'd do that with this line: up-effect 1,100,22,3,500,1
However in my experience I've been unlucky with adding new resources to the costs. You can also use Effect 8 (MODIFY_TECH) to achieve the same effects, but again, I can only seem to affect costs that already exist. I can Change the gold cost of Loom, but I can't make it have a Stone cost.
One thing to bare in mind; If you alter a resource's cost, you have to Disable then Enable the tech for the costs to actually update. So with my Loom example, I have three triggers. One sets the cost, one Disables (Research Technology, with number field set to 2) and then Enables it again (Research Technology, with number field set to 1).
What about GAIA effects?
Using the GAIA effects is a little unknown to me. I assume they're specifically for affecting units owned by GAIA, so lets try it out: I'll use the line "up-effect 0,-1,4,0,200,1" -- In theory this should set GAIA archers to have 200 HP.
Seems to be a success:
vs
So I can assume from these results that you need the Player (the first number) to be 0, to affect all players. Then the Attribute set to one of the negatives that only affect GAIA.
From Scripter's Documentation:Performance
I've not noticed any performance penalties that don't normally occur. Due to the way up-effects work, the game handles it really well, just like any Tech effect. up-effect can also be used to affect over 300 units at once, and also affects units not even created yet. For example, in a multiplayer RPG I've been working on as a "showcase" of UP effects, I have a scaling difficulty where every 25 losses, the enemy player gains 10% HP on all their units, created or not. Looping up-effects also has a very little impact. Almost unnoticeable unless you have a lot of them going off at once.
The same performance nicety's can't be extended as much to up-attribute, though, and we'll talk about that in the next post...
Proud Member of Black Forest Studios
Co-creator of Silent Evil - Voted Best Multiplayer Scenario of 2009
and The Seas of Egressa - Voted Best Multiplayer Scenario of 2010
This thread is for discussing User Patch 1.5 and its application as a designer's tool. This first post will give you an overview of the most powerful element; UP-Effect, but following this are more posts going into more detail or other topics.
Investigations are posts documenting research into particular elements of UP-Effects and their uses:
Extra Info:
The UP Effect, or up-effect, is a special feature of UserPatch 1.5-onwards that -- put simply -- allows some basic data modding within the Scenario Editor through manipulation of tech effects.
Tech effects can alter a lot more attributes than the standard editor, accross every unit of that ID (or class).
UserPatch has opened the doors to entirely different games distributed through scenarios and random map scripts. It is, in a word,
"up-effect" works by using AoC's Technology Effect system. Everything that can be achieved through technology effects can be achieved through up-effects (with some notable additions)
I have also been answering a lot of questions on the topic of using up-effects, and what they can achieve.
These are up-effect, and up-attribute. I will talk more about up-attribute later.
But you'll get the hang of it!
To use a up-effect, you need a Display Instructions trigger. To prepare it for an up-effect, set the timer to 99999999 (
One thing you might struggle with is remembering all the 9's for the timer field. You can't just put any old number in there (unless Scripter changes that in the future), you
Next, we start the "Message" field with "up-effect". Until you get used to it, I suggest also completing it with 0,0,0,0,0,1 -- Like this:
This should hopefully help you to keep track of all your numbering. The up-effects all rely on numbers, and there must always be six of them. Let's dissect them:
In Scripter's documentation, he writes:
Looking at that, a quick glance might make you think that you can write something like "up-effect 0,SET_ATTRIBUTE,VILLAGER_CLASS,ATTR_HITPOINTS,200,1" but this isn't correct. The reason Scripter has written these block-capital words is probably due to the way up-effects can be put into random map scripts, using these words instead of numbers like we do in a scenario.Quoted from Scripter64:
up-effect player,effect,item,attr,value,style
- player: 0 for default (all) or 1-8 for a specific player
- effect: the id of an Effect such as SET_ATTRIBUTE (0)
- item: the id of the Item to modify such as VILLAGER_CLASS (904)
- attr: the id of the Attribute such as ATTR_HITPOINTS (0)
- value: the value to set
- style: 2 if value should be divided by 100; otherwise 1
So, Scripter provides an example:
The top line is what you'd do in our Display Instructions trigger. The bottom line is what you'd put in your random map script. I haven't experimented with the random map script functions yet, and probably won't ever. So I won't talk much about them here, but it is useful to note that there's potential for making random map scripts that, for example, incorporate X-Patch's balance changes, without needing the mod. This is something that, whilst I won't use it (probably), should definitely not be overlooked as a cool side-effect.Quoted from Scripter64:
up-effect 0,0,904,0,100,1
effect_amount SET_ATTRIBUTE VILLAGER_CLASS ATTR_HITPOINTS 100
So instead of just copying Scripter's example, let's do our own.
First, we want to choose the player for our effect. You can use 0, 1, 2, 3, 4, 5, 6, 7 or 8. 0 means "All Players", 1-8 should be self explanatory. I haven't experimented with the Gaia attributes much, but as I understand it -- if you want to specifically effect
I'm going to use player 1.
Next, we want to decide on our "effect". I'm going to keep things simple, and ignore everything that doesn't affect a unit. In the documentation, under file "UserPatchConst.rms", Scripter writes:
If you were writing a Random Map Script, you'd use these const names. We however are only interested in the numbers.Quoted from Scripter64:
#const SET_ATTRIBUTE 0
#const ADD_ATTRIBUTE 4
#const MUL_ATTRIBUTE 5
#const ENABLE_OBJECT 2
#const UPGRADE_UNIT 3
So, these numbers:
So, have you decided what you want to try? I'm going to SET, so my second number in the up-effect line will be 0. It looks the same as before, but yours might not.
The third number is a big deal. This is what we're going to effect. There's two ways we can do this.
up-effects can effect any individual unit whose ID is between 0-900, and 1000-1959. IDs in the 900-999 range are actually reserved for counting data (According to Scripter), so he's made use of them for Classes. This means that if you want to affect a Longbowman like in my above example, you want "8". But if you want to affect ALL archer units, you'd use "900", because an Archer is class 0.
For reference,
In our experiment, I'm going to pick number 24 - The Crossbowman. Now my up-effect line looks like this:
(I'll award bonus points to anyone who can point out how dangerous this line is for my crossbowman, right now.)
Our fourth number is also an important one, and it changes depending on our second number. If our second number is 0 (Set), 4 (Add) or 5 (Mult.), this fourth number is an Attribute ID. But, if our second number was, for example, 2 (Enable Object), then this fourth number would be either 0 (To Disable), or 1 (To Enable). Scripter's documentation explains some of these, albeit a bit confusingly. EG, for "Enable Object" he writes:
You have to scroll further into the document to even find where "ATTR_DISABLE" and "ATTR_ENABLE" translate from Random Map Script text to a Scenario number:Quoted from Scripter64:
/* Type: ATTR_DISABLE or ATTR_ENABLE, Value: 0 */
So, in our case we just want to do some simple messing with Attributes. So, your second number should be 0, 4 or 5. We want to then pick an Attribute from the list:Quoted from Scripter64:
/*--------------------------------------*/
/* Define Effect Type Constants */
/*--------------------------------------*/
#const ATTR_DISABLE 0
#const ATTR_ENABLE 1
But wait!
Scripter has also added some special ones:
There'sQuoted from Scripter64:
/* New: Category 80+ */
#const ATTR_GARRISON_TYPE 30
#const ATTR_DATA_FLAGS 31
/* New: Category 70+ */
#const ATTR_HERO_STATUS 40/* ADD_ATTRIBUTE append flags */
#const ATTR_ATTACK_DELAY 41/* ADD_ATTRIBUTE enabled */
#const ATTR_TRAIN_LOCATION 42
#const ATTR_TRAIN_BUTTON 43
#const ATTR_BLAST_LEVEL 44
#const ATTR_HERO_HEAL_TIME 45/* ADD_ATTRIBUTE enabled */
#const ATTR_SHOWN_ATTACK 46/* ADD_ATTRIBUTE enabled */
#const ATTR_SHOWN_RANGE 47/* ADD_ATTRIBUTE enabled */
#const ATTR_SHOWN_MELEE_ARMOR 48/* ADD_ATTRIBUTE enabled */
#const ATTR_SHOWN_PIERCE_ARMOR 49/* ADD_ATTRIBUTE enabled */
/* New: Category 10+ */
#const ATTR_NAME_ID 50
#const ATTR_CREATE_SDESC_ID 51
#const ATTR_CREATE_LDESC_ID 52/* unused (becomes ATTR_CREATE_SDESC_ID + 20000) */
#const ATTR_TERRAIN_ID 53
#const ATTR_TRAITS 54/* ADD_ATTRIBUTE append flags */
#const ATTR_CIV_ID 55
#const ATTR_PIECE 56
#const ATTR_DEAD_ID 57
If you look at the list of attributes, you'll be able to find Attribute 16 and get an idea of what it can do. I'll give you a clue -- It's used by the tech "Chemistry". I advise you skip Attribute's 9 and 8, as they need some special maths which I will explain later.
Our fifth number is the "Value". In my case, I need a Unit ID. In some cases you might want to use percentages, or float values. For that, you'll need to remember that a value of "100", with a "Style" (The sixth number) of 2, will make it "1.0". You may be wondering why you can't just write in "1.0", and I wonder that too. But clearly -- if that was possible then Scripter would of let us do it that way.
So, I've went ahead and picked a Unit ID for my Attribute 16:
My "Style" -- The sixth number -- will remain as 1. This is because I don't need to convert my fifth number into a percentage. If you were doing something like, adding 10% to the Longbowman as above, your Style here would be 2 and your Value would be 110. This turns into 1.10x, or 110% of the original value. The Effect (Second number) would be 5, because you're Multiplying.
Something to bare in mind is that this projectile change could be overwritten if I were to later research Chemistry.
Now, this example might be a bit extreme. Changing projectiles is a very specific effect. But, hopefully you've experimented and chosen your own values and attributes to change. Be careful when changing Projectile IDs, though. If you choose an ID that is not a valid projectile unit, the likely case will be that your attacks will fire no projectile and do no damage, and unlike Melee Units that have their projectile ID set to -1, a projectile ID set to something like a Watch Tower would cause the game to try spawning a watch tower and failing, thus the game would deduce that the projectile did not hit and do no damage.
This could be drastic in a scenario where the projectile might not change for a long time into the map, on a specific unit. The map designer might not even notice that he's firing blanks, because he's not firing a proper Projectile unit.
Off the top of my head, here's some other examples of up-effects for units:
Something to remember;Quoted from the top of my head:
up-effect 1,0,550,0,32767,1 --The maximum health a unit can have without using negative damage object triggers.
up-effect 2,5,555,5,555,2 -- Gives all of player 2's Elite Huskarls trained at the castle 555% their regular speed.
up-effect 1,0,504,57,4,1 -- Sets the dead unit ID of player 1's Watch Tower arrows to spawn an archer.
up-effect 1,0,173,42,903,1 & up-effect 1,0,173,43,14,1 & up-effect 1,2,173,1,0,1 --Enables the production of King arthur at player 1's castles.
When doing up-effects, each up-effect should be on a separate line, like this:
And a Display Instructions effect can only hold so much text. There will probably come a time where you need to use multiple effects.
First, let's look at MOD_RESOURCE (Effect ID 1) and MUL_RESOURCE (Effect ID 6). Contrary to my original belief, these
Here's an example:
up-effect 1,1,4,1,100,1
The Player is 1, the Effect is 1 (MOD_RESOURCE), the Item is 4 (Population Headroom), the Attribute is 1 (When using MOD_RESOURCE, use 0 or 1. 0 SETS, 1 ADDS.), the Value is 100, and the Style is 1.
What this does is simple -- adds 100 Population Headroom to Player 1. It doesn't go over the player's Pop Cap max, though.
So what's the point of this, if I can use Tributes for the same effect? (And oh boy, can you use Tributes. UserPatch allows you to select every available resource for Tributes, including ones added by Scripter.)
Well, unlike tributes you can now:
Furthermore, these tributes allow you to have control over the Weather and Fog lighting systems in UserPatch 1.5. A very good article on the University
Secondly, let's look at Tech modifications. This one is a bit weird, because there's
Before we get onto that, though; let's look at Effect 7 (Enable Tech). This work just in the way that disabling/enabling techs through the Research Technology triggers work, with the exception that you can enable/disable techs that aren't listed in the vanilla editor. However, you can't Research techs with this, only Enable or Disable them. This and Effect 102 (Disable Tech) are aimed more for use in Random Map Scripts, where triggers don't apply.
I've been having difficulty working with the Tech effects. For example, I can't seem to get Effect 8 to work correctly. Hopefully Scripter can enlighten us.
What I have been able to get working, is Effect (The second number) 100, 101 and 103.
So, for example, you might want to take Loom for Player 1 and make it cost 500 Gold. You'd do that with this line: up-effect 1,100,22,3,500,1
However in my experience I've been unlucky with adding new resources to the costs. You can also use Effect 8 (MODIFY_TECH) to achieve the same effects, but again, I can only seem to affect costs that already exist. I can Change the gold cost of Loom, but I can't make it have a Stone cost.
Using the GAIA effects is a little unknown to me. I assume they're specifically for affecting units owned by GAIA, so lets try it out: I'll use the line "up-effect 0,-1,4,0,200,1" -- In theory this should set GAIA archers to have 200 HP.
Seems to be a success:
So I can assume from these results that you need the Player (the first number) to be 0, to affect all players. Then the Attribute set to one of the negatives that only affect GAIA.
From Scripter's Documentation:
Quoted from Scripter64:
#const GAIA_SET_ATTRIBUTE -1
#const GAIA_ADD_ATTRIBUTE -5
#const GAIA_MUL_ATTRIBUTE -6
#const GAIA_MOD_RESOURCE -2
#const GAIA_MUL_RESOURCE -7
#const GAIA_SET_TECH_COST -101
#const GAIA_ADD_TECH_COST -102
#const GAIA_MOD_TECH_TIME -104
#const GAIA_ENABLE_OBJECT -3
#const GAIA_UPGRADE_UNIT -4
#const GAIA_DISABLE_TECH -103
#const GAIA_ENABLE_TECH -8
#const GAIA_MODIFY_TECH -9
#const GAIA_SET_PLAYER_DATA -10
I've not noticed any performance penalties that don't normally occur. Due to the way up-effects work, the game handles it really well, just like any Tech effect. up-effect can also be used to affect over 300 units at once, and also affects units not even created yet. For example, in a multiplayer RPG I've been working on as a "showcase" of UP effects, I have a scaling difficulty where every 25 losses, the enemy player gains 10% HP on all their units, created or not. Looping up-effects also has a very little impact. Almost unnoticeable unless you have a lot of them going off at once.
The same performance nicety's can't be extended as much to up-attribute, though, and we'll talk about that in the next post...
Co-creator of Silent Evil - Voted Best Multiplayer Scenario of 2009
and The Seas of Egressa - Voted Best Multiplayer Scenario of 2010
[This message has been edited by BF_Tanks (edited 08-24-2019 @ 05:32 PM).]