Page 1 of 1

How ME RPG abilities are made

Posted: Sun May 04, 2014 4:54 pm
by Silly_Warlock
First- how it works:
You buy abilities in RPG menu. They are activated at the start of the match / join and (should be) when bought. Abilities are responsible for passive effects and giving you artifacts (those thingies you activate :stongue: ).
RPG menu lets you buy abilities it finds in 'MonsterAssaultRPG.ini' (that's standard for UT2k4 RPG systems). Classes and Promote Ranking count as (special) abilities. Lets see that list:

Code: Select all

Abilities=Class'MonsterAssaultRPG.AbilityClassPaladin'
Abilities=Class'MonsterAssaultRPG.AbilityClassSupport'
Abilities=Class'MonsterAssaultRPG.AbilityClassBerserk'
Abilities=Class'MonsterAssaultRPG.AbilityPromoteRanking'
Abilities=Class'MonsterAssaultRPG.AbilityAdvancedMedkit'
Abilities=Class'MonsterAssaultRPG.AbilityAggravator'
Abilities=Class'MonsterAssaultRPG.AbilityAirborne'
Abilities=Class'MonsterAssaultRPG.AbilityEnhancedHealthPickup'
Abilities=Class'MonsterAssaultRPG.AbilityMedicAwareness'
Abilities=Class'MonsterAssaultRPG.AbilityMedkit'
Abilities=Class'MonsterAssaultRPG.AbilityPersonalMedkit'
Abilities=Class'MonsterAssaultRPG.AbilitySpiritMastery'
Abilities=Class'MonsterAssaultRPG.AbilitySummonSpirit'
Abilities=Class'MonsterAssaultRPG.AbilityArmorSupremacy'
Abilities=Class'MonsterAssaultRPG.AbilityReinforcedArmor'
Abilities=Class'MonsterAssaultRPG.AbilitySummonGuardian'
Abilities=Class'MonsterAssaultRPG.AbilityExperiencedHealing'
Abilities=Class'MonsterAssaultRPG.AbilityLifeCord'
Abilities=Class'MonsterAssaultRPG.AbilityHighMetabolism'
Abilities=Class'MonsterAssaultRPG.AbilityLoadedMedic'
Abilities=Class'MonsterAssaultRPG.AbilityRegeneration'
Abilities=Class'MonsterAssaultRPG.AbilitySummonOakSage'
Abilities=Class'MonsterAssaultRPG.AbilityAegis'
Abilities=Class'MonsterAssaultRPG.AbilityEnhancedArmor'
Abilities=Class'MonsterAssaultRPG.AbilityFieldMedic'
Abilities=Class'MonsterAssaultRPG.AbilitySummonSpecter'
Abilities=Class'MonsterAssaultRPG.AbilityAdrenalDrip'
Abilities=Class'MonsterAssaultRPG.AbilityAdrenalSurge'
Abilities=Class'MonsterAssaultRPG.AbilityAdrenalSyringe'
Abilities=Class'MonsterAssaultRPG.AbilityAmmoDump'
Abilities=Class'MonsterAssaultRPG.AbilityEnergyLeech'
Abilities=Class'MonsterAssaultRPG.AbilityEnergyTransfer'
Abilities=Class'MonsterAssaultRPG.AbilityEnhancedAdrenalinePickups'
Abilities=Class'MonsterAssaultRPG.AbilityTransMechanic'
Abilities=Class'MonsterAssaultRPG.AbilityLoadedEnforcer'
Abilities=Class'MonsterAssaultRPG.AbilityCompanionSacrifice'
Abilities=Class'MonsterAssaultRPG.AbilityVigor'
Abilities=Class'MonsterAssaultRPG.AbilityImplosion'
Abilities=Class'MonsterAssaultRPG.AbilityReadiness'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralBranch'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsSkaarjBranch'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralAirGasbag'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralAirRazorFly'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralAirDragon'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralLandShrike'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralLandRaptor'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsFeralLandTitan'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsSkaarjSlith'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsSkaarjSkaarjWarrior'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsSkaarjQueen'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsWarSkaarjSkaarjTrooper'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsWarSkaarjBrute'
Abilities=Class'MonsterAssaultRPG.AbilitySummonsWarSkaarjWarlord'
Abilities=Class'MonsterAssaultRPG.AbilityAmmoPouch'
Abilities=Class'MonsterAssaultRPG.AbilityEnhancedAmmoPickups'
Abilities=Class'MonsterAssaultRPG.AbilityFury'
Abilities=Class'MonsterAssaultRPG.AbilityLifeSiphon'
Abilities=Class'MonsterAssaultRPG.AbilityLoadedBerserker'
Abilities=Class'MonsterAssaultRPG.AbilityRetaliation'
Abilities=Class'MonsterAssaultRPG.AbilityShout'
Abilities=Class'MonsterAssaultRPG.AbilityTriggerHappy'
Abilities=Class'MonsterAssaultRPG.AbilityVengeance'
Abilities=Class'MonsterAssaultRPG.AbilityCryofRepulsion'
Abilities=Class'MonsterAssaultRPG.AbilityPerpetuatingSoul'
Abilities=Class'MonsterAssaultRPG.AbilitySeekingRevenge'
Abilities=Class'MonsterAssaultRPG.AbilityWeaponSmithing'
Abilities=Class'MonsterAssaultRPG.AbilityFrenzy'
Abilities=Class'MonsterAssaultRPG.AbilityLockedAndLoaded'
Abilities=Class'MonsterAssaultRPG.AbilityCriticalShot'
Abilities=Class'MonsterAssaultRPG.AbilitySacrifice'
Abilities=Class'MonsterAssaultRPG.AbilityMonsterResistances'
Abilities=Class'MonsterAssaultRPG.AbilityMonsterVitality'
Abilities=Class'MonsterAssaultRPG.AbilityAirMaster'
Abilities=Class'MonsterAssaultRPG.AbilityAuthoritativeKeeper'
Abilities=Class'MonsterAssaultRPG.AbilityHaste'
Abilities=Class'MonsterAssaultRPG.AbilityIronLegs'
Abilities=Class'MonsterAssaultRPG.AbilityPowerJump'
Abilities=Class'MonsterAssaultRPG.AbilityShieldsUp'
Abilities=Class'MonsterAssaultRPG.AbilityLungCapacity'
Abilities=Class'MonsterAssaultRPG.AbilityRecall'
Abilities=Class'MonsterAssaultRPG.AbilitySpeedSwitcher'
Abilities=Class'MonsterAssaultRPG.AbilityCautiousness'
Abilities=Class'MonsterAssaultRPG.AbilityHighRankBonus'
Abilities=Class'MonsterAssaultRPG.AbilityTreasureHunter'
Abilities=Class'MonsterAssaultRPG.AbilityAuraFX'
Abilities=Class'ME_RPGExpansion.AbilityClassNecromancer'
Abilities=Class'ME_RPGExpansion.AbilityClassMechanic'
Abilities=Class'ME_RPGExpansion.AbilityHallowedWarrior'
Abilities=Class'ME_RPGExpansion.AbilityAgonizingDemise'
Abilities=Class'ME_RPGExpansion.AbilityArcaneReclamation'
Abilities=Class'ME_RPGExpansion.AbilityCarrionMetamorphosis'
Abilities=Class'ME_RPGExpansion.AbilityCarrionStores'
Abilities=Class'ME_RPGExpansion.AbilityDeathWard'
Abilities=Class'ME_RPGExpansion.AbilityDecay'
Abilities=Class'ME_RPGExpansion.AbilityExtendedRetention'
Abilities=Class'ME_RPGExpansion.AbilityPrematureBurial'
Abilities=Class'ME_RPGExpansion.AbilityRehabilitatingMucus'
Abilities=Class'ME_RPGExpansion.AbilitySoulTransfer'
Abilities=Class'ME_RPGExpansion.AbilitySummonMastery'
Abilities=Class'ME_RPGExpansion.AbilitySummonRegeneration'
Abilities=Class'ME_RPGExpansion.AbilityUnnaturalShout'
Abilities=Class'ME_RPGExpansion.AbilityVenomContainment'
Abilities=Class'ME_RPGExpansion.AbilityFatigue'
Abilities=Class'ME_RPGExpansion.AbilityGhostsofAnguish'
Abilities=Class'ME_RPGExpansion.AbilityPlague'
Abilities=Class'ME_RPGExpansion.AbilityPreservation'
Abilities=Class'ME_RPGExpansion.AbilityPutridExpiration'
Abilities=Class'ME_RPGExpansion.AbilityReapingEnergy'
Abilities=Class'ME_RPGExpansion.AbilityTaintedSummons'
Abilities=Class'ME_RPGExpansion.AbilityToxicProficiency'
Abilities=Class'ME_RPGExpansion.AbilityWraith'
Abilities=Class'ME_RPGExpansion.AbilityBloodFrenzy'
Abilities=Class'ME_RPGExpansion.AbilityIronMaiden'
Abilities=Class'ME_RPGExpansion.AbilityPoisonSupremacy'
Abilities=Class'ME_RPGExpansion.AbilityImmortality'
Abilities=Class'ME_RPGExpansion.AbilityPierceArmor'
Abilities=Class'ME_RPGExpansion.AbilityPoisonMastery'
Abilities=Class'ME_RPGExpansion.AbilitySummonSkeleton'
Abilities=Class'ME_RPGExpansion.AbilitySummonZombie'
Abilities=Class'ME_RPGExpansion.AbilityRevivification'
Abilities=Class'ME_RPGExpansion.AbilitySummonForgotten'
Abilities=Class'ME_RPGExpansion.AbilitySummonDemon'
Abilities=Class'ME_RPGExpansion.AbilitySummonSkeletalMage'
Abilities=Class'ME_RPGExpansion.AbilitySummonChampion'
Abilities=Class'ME_RPGExpansion.AbilityArmorShards'
Abilities=Class'ME_RPGExpansion.AbilityCraftSpiderMines'
Abilities=Class'ME_RPGExpansion.AbilityGrenadeBundles'
Abilities=Class'ME_RPGExpansion.AbilityHauler'
Abilities=Class'ME_RPGExpansion.AbilityRecycle'
Abilities=Class'ME_RPGExpansion.AbilitySentinel'
Abilities=Class'ME_RPGExpansion.AbilityStockpile'
Abilities=Class'ME_RPGExpansion.AbilityWeaponCraftsman'
Abilities=Class'SillyRPG.AbilityCraftAutoTurret'
Abilities=Class'ME_RPGExpansion.AbilityAmplifyDamage'
Abilities=Class'ME_RPGExpansion.AbilityMonsterRegeneration'
Abilities=Class'ME_RPGExpansion.AbilityMonsterStrength'
Abilities=Class'MonsterAssaultRPG.AbilityVehicleVitality'
Abilities=Class'MonsterAssaultRPG.AbilityVehicleArmory'
Abilities=Class'MonsterAssaultRPG.AbilityVehicleMastery'
Abilities=Class'ME_RPGExpansion.AbilityEnforcedHull'
Abilities=Class'ME_RPGExpansion.AbilityResurgence'
As we can see when you want to add new Ability to use, you create new line (wherever in list) like that:
Abilities=Class'PackageName.AbilityName'

Obviously "PackageName" is the name of package (.u) in which your ability is.

E.G. " Abilities=Class'SillyRPG.AbilityCraftAutoTurret' "
"AbilityCraftAutoTurret" is the name of ability ("Ability" isn't added) and it's inside file 'SillyRPG.u'

Where are your purchased abilities stored? - In the same file (server-side). Every character has its own 'character sheet' at the bottom of this .ini , that looks like this:

Code: Select all

[Mechanic RPGPlayerDataObject]
OwnerID=xxx //Game ID
Level=200
Experience=5
WeaponSpeed=0
HealthBonus=100
AdrenalineMax=800
AmmoMax=50
Physical=-25
Fire=0
Cold=-25
Lightning=0
Poison=-25
Explosive=-25
CloseQuarters=-25
RapidFire=-25
Rifle=-25
Sharpshooter=-25
Deployment=-25
HealthCap=500
AdrenalineCap=800
AmmoCap=500
ResistanceCap=60
WeaponMasteryCap=155
PointsAvailable=730
NeededExp=10
ExperienceFraction=0.091683
ExplosiveExp=0.000000
CloseQuartersExp=1.587629
RapidFireExp=0.000000
RifleExp=0.000000
SharpshooterExp=0.000000
DeploymentExp=0.000000
LastPlayDate=5-3-2014
NextRankNameExp=3000
ClassPrefixName=Beginner
BotAbilityGoal=None
BotGoalAbilityCurrentLevel=0
TotalExperienceEarned=5
Kills=55
Deaths=3
Objectives=0
Victories=0
Matches=1
Time=4227
Donations=0
Flawless=0
CriticalPlayer=0
LastManStanding=0
TeamPlayer=0
Headhunter=0
Contributor=0
Abilities=Class'ME_RPGExpansion.AbilityClassMechanic'
Abilities=Class'MonsterAssaultRPG.AbilityPromoteRanking'
Abilities=Class'ME_RPGExpansion.AbilityRecycle'
Abilities=Class'ME_RPGExpansion.AbilityHauler'
Abilities=Class'ME_RPGExpansion.AbilityStockpile'
Abilities=Class'ME_RPGExpansion.AbilitySentinel'
Abilities=Class'ME_RPGExpansion.AbilityCraftSpiderMines'
Abilities=Class'SillyRPG.AbilityCraftAutoTurret'
Abilities=Class'MonsterAssaultRPG.AbilityShieldsUp'
Abilities=Class'ME_RPGExpansion.AbilityWeaponCraftsman'
AbilityLevels=1
AbilityLevels=3
AbilityLevels=1
AbilityLevels=2
AbilityLevels=6
AbilityLevels=10
AbilityLevels=1
AbilityLevels=4
AbilityLevels=2
AbilityLevels=10
Relics=21
Class is always ability number 0 , Promote Ranking number 1(When you have it, meaning you are R2).
First "AbilityLevels=" describes first "Abilities=" , etc.
[/color]Warning: If Parent ability is listed after ability extending it, the Parent will derp. This can be avoided by requiring in ability to buy its Parent first. (Warning: the same goes for artifacts with their Parent artifacts and abilities order decides artifacts order ).

BTW: If stats cost for ability changes, RPG system should recount how much stats points chars have (It seems to really like recounting that XD).

Artifacts are activated with commands 'InventoryActivate' and 'AltActivateItem' . Those actually call respective functions in artifact class.
(yay we have name clash. lets say that you have rocket launcher, it's one of many rocket launchers, so it's an object of given type (rocket launcher). Class is what that type is. Artifacts and Abilities have classes while RPG classes are Abilities. :banana:
e.g. there is Artifact class called 'ArtifactExample' , It has variables: 'AbilityLevel' and 'ManaCost' , also functions: 'GetManaCost' and 'Activate'.
On match start one of your abilities gives you this artifact: creates an object of the class 'ArtifactExample' belonging to you and sets its 'AbilityLevel' to the level of Ability you have.
Some time later you select 'ArtifactExample' and activate it: that calls function 'Activate' in it and that function does something it was supposed to do :stongue: and calls function 'GetManaCost' which sets 'ManaCost' of your artifact, then function 'Activate' continues and charges you mana using recently set variable 'ManaCost' (//And I know it can be done with GetManaCost without ManaCost)).

Re: How ME RPG abilities are made

Posted: Mon May 05, 2014 12:25 am
by DW_Ant
I was lost at your example at the end of your post. Do you mind rephrasing that for me?
I think you're describing the difference between abstract classes (rpg abilities), and instanced objects (artifacts and rocket launchers).


In short, the RPGAbility is the class that grant you the skills. Here's most of the code of the base RPGAbility class:

Code: Select all

/* Modify the player's pawn.
This will allow you to edit the player's default behavior when they spawn.  For example, you can increase their speed, extra jump, or spawn an item.  Most of the abilities edit this function.  This is where artifacts are given.  This is also where some passive inventory items are given (such as regeneration).
 */
static simulated function ModifyPawn(Pawn Other, int AbilityLevel);

/* Modify the owning player's current weapon.
For example:  SpeedSwitcher uses this function to change the weapons' switching speed.
 */
static simulated function ModifyWeapon(Weapon Weapon, int AbilityLevel);

/* Modify the owning player's current vehicle.
For example:  Vehicle Armory and Vehicle Mastery
 */
static simulated function ModifyVehicle(Vehicle V, int AbilityLevel);

/* Remove any modifications to this vehicle, because the player is no longer driving it.
This is used to undo your changes from ModifyVehicle.  For example, a player with VehicleMastery will increase the vehicle's damage, but you want to make sure to undo your damage buffs to that vehicle when they exit the vehicle (otherwise the next driver will benefit from your damage buff).
 */
static simulated function UnModifyVehicle(Vehicle V, int AbilityLevel);

/* React to damage about to be done to the injured player's pawn.
 * Use bOwnedByInstigator to determine which pawn is the owner of this ability.
This is where many passive abilities comes in regarding to damage.  For example:  Berserker's damage perk, Necromancer's Perk, Life Siphon, etc...
 */
static function HandleDamage(out int Damage, Pawn Injured, Pawn Instigator, out vector Momentum, class<DamageType> DamageType, bool bOwnedByInstigator, int AbilityLevel);

/* React to a kill.
Used by Adren Surge, Necromancer's Perk (to capture souls), Berserker's health award perk.
 */
static function ScoreKill(Controller Killer, Controller Killed, bool bOwnedByKiller, int AbilityLevel);

/* If this returns true, prevent Killed's death.
This ability is called whenever the player dies.  Abilities like Wraith and Vengeance is used here.
 */
static function bool PreventDeath(Pawn Killed, Controller Killer, class<DamageType> DamageType, vector HitLocation, int AbilityLevel, bool bAlreadyPrevented)
{
	return false;
}

/*
The function where you can edit any pickup the player runs into.
Abilities like Enhanced Health, Adren, Ammo pickups this this function
 */
static function bool OverridePickupQuery(Pawn Other, Pickup item, out byte bAllowPickup, int AbilityLevel)
{
	return false;
}


Some caveats to keep in mind when creating rpg abilities.

When the client generates a list of RPG abilities, they are dynamically generated by the name. Make sure you specify the PackageName in the abilities' default properties, and make sure your abilities begin with the prefix Ability. An ability called MySpecialAbility will cause clients not to be able to load in the ability. Instead, name your ability with AbilityMySpecialAbility.

Also these abilities do run for summoned monsters and player monsters. Don't forget to consider conditional checks to see if the instigator is a monster or not.

Re: How ME RPG abilities are made

Posted: Tue May 06, 2014 4:48 am
by tasty
man.

Dont really understand the coding...

:salute:

Re: How ME RPG abilities are made

Posted: Tue May 06, 2014 5:04 am
by christmas
is it in responce to the tutorial on how to create new skills for the mechanic class for ME ?

then there should be a list of essential files that comprise all skills of characters
are skills located in here ? -> MonsterAssaultRPG.u and ME_RPGExpansion.u

how do you open MonsterAssaultRPG.u ?

how do you create new skills? new_skill.ue

how do you implement them inside MonsterAssaultRPG.u ?

Re: How ME RPG abilities are made

Posted: Tue May 06, 2014 1:27 pm
by Silly_Warlock
DW_Ant wrote:I was lost at your example at the end of your post. Do you mind rephrasing that for me?
I think you're describing the difference between abstract classes (rpg abilities), and instanced objects (artifacts and rocket launchers).

I was trying to explain how artifacts work. About abstract classes Ant mentioned: you can't create an instanced object of abstract class. Artifact classes aren't abstract so you can create artifact as an object.
Now back to how artifacts work then:

The road starts at buying an ability. The ability spawns artifact of given class(1), gives it to you(2) and relays information (like ability level) to it(3) as planned by author of the two.

Code: Select all

//(1)
Artifact = Other.spawn(class'ArtifactCraftSpiderMines', Other,,, rot(0,0,0));
//(2)
Artifact.giveTo(Other);
//(3)
Artifact.AbilityLevel = AbilityLevel;
Artifact.InvMetal = InvMetal;
if (StatsInv != None)
     Artifact.AmmoBonus = StatsInv.DataObject.AmmoMax; 
Now you have the artifact sitting in your inventory. When you activate artifact, function in it (functions in object come untouched from its class) is called (told to do its job :stongue: ) and alt-activating the artifact calls another function.
Note that sometimes one of them does nothing but call the other one.
[/color]

Re: How ME RPG abilities are made

Posted: Tue May 06, 2014 4:47 pm
by Silly_Warlock
Christmas, This idea is a bit older, but talk about tutorial gave me the pretext to do something about both of them.
I'm not sure what do you mean by "implementation inside MonsterAssaultRPG.u" . Are you talking about adding new abilities(skills) to RPG system? I wrote about it in my first post here.

Anyways, let's continue to exporting classes from packages and making packages.
First- common part of doing both: Exported/your classes should be in the following directory in your UT2004 directory:
PackageName\Classes

Open 'UT2004.ini' and find lines like this one: "EditPackages=GUI2K4" at the end of EditPackages list add:
EditPackages=MonsterAssaultRPG
EditPackages=ME_RPGExpansion
As christmas mentioned these are the packages where you will find classes used by ME RPG system. Adding them here is needed both to export and extend those classes.
When you want to compile your classes into package, after ME packages add:
EditPackages=MyRPG
Replace "MyRPG" with your package name.
Note: If a package is listed here but isn't compiled (.u doesn't exist) UED won't start (will tell you it can't find that package). BTW: UED will open on startup all packages listed here.

Now- how to use UCC:
You need to open 'cmd', e.g. by opening 'run' (windows + r) and typing "cmd" in it.
Next, in cmd you need to cd into your UT2004\system directory (e.g.
d:
cd D:\GAMES\Unreal Anthology\UT2004\System
)
Now to
export classes from package:
"ucc batchexport PackageName class uc ..\PackageName\Classes"
e.g. "ucc batchexport MonsterAssaultRPG class uc ..\MonsterAssaultRPG\Classes"
"ucc batchexport ME_RPGExpansion class uc ..\ME_RPGExpansion\Classes"

To
compile your classes into package:
"ucc make"

To read and edit classes(.uc) you can use notepad.
Remember that classes you are writing need to be in 'PackageName\Classes' in order to compile them later.

Now you can check the code of Abilities, Artifacts and other classes used in ME RPG. I will try to explain how to make them later. Obviously they are made in Unreal Script, there is a section about it on main page of Unreal Wiki: http://wiki.beyondunreal.com/