• Welcome to Freedom Reborn Archive.
 

Hulk's Adrenaline Surge

Started by TaskMasterX, March 27, 2007, 02:33:48 PM

Previous topic - Next topic

TaskMasterX

I've been playing around with the various attributes of FFX to try and figure out the best way to simulate Hulk's Adrenaline Surge. Defence Mechanism or Desperate seem to be the best suited for attributes. Some people use 300% or make a Melee Power with Extreme Magnitude. Desperate gives Energy Points back and increases the damage output while Defence Mechanism allows you to choose a certain function (increase Strength, etc.,) when damaged. I even made a couple of new functions for Defence Mechanism to try and get it right. I created a function that increases Strength and Invulnerable Points and I just made another that increases Strength and Energy Points along with Healing. I was wondering what other people are doing with this or if people had suggestions of a new kind of function that might work. When Hulk gets damaged, does he heal faster AND get increased Strength, does he also become more resistant to damage? How exactly does this power work?

quiet

how I understand it is that the more he gets hit the madder he gets which fuels his "hulk" state, essentially becoming more "hulky" for lack of a better term. so his endurance and strength increase as does his fury.  It seems like if you don't take him out early, he's just about unstoppable by physical means.
I translate this to ff by giving him pain response and desperate with the 300 percenter for an adrenaline surge power.  I start him with a strength of 8 and I give him berzerker attribute as well to show that he can fly off the handle and "hulk out" destroying everything in his path.  I make my hero files follow the comics or timmerverse so there is no balance here.  batman would barely be able to hurt my hulk and would be absolutely destroyed.  only superman, cap marvel and doomsday have a chance in a brawl.  thor could hang with him but could not take the damage hulk can generate.  with the above combination hulk once layed into superman in the danger room and did 404 points of damage (supes has solid skeleton too) so this might not be for you if you heavyweights are balanced so normal types can hurt them.

Xenolith

I just use Defense Mechanism but the Hulk starts out with a lower strength then you'd think (7 - Superman is a 9).  I don't increase his invulnerability and I've gotten rid of his healing factor because it unbalanced my set up.  I do like your idea that he could run out of energy (and have a higher chance to get KO'd?) due to his heightened rage...maybe accidental change is a better way to go?  Once he shifts back, his regeneration kicks in again and he regains energy at a normal rate.  I like it.

Blitzgott

As far as I know, the only things that increase the angrier Hulk gets are his healing factor and strength.

I'd use only defense mechanism set to inceased strength. Another interesting alternative is giving Hulk the acidental change attribute, so that, whenever he goes berserk, he morphs into a stronger version of himself (like, say, calm Hulk has strength 7 and lesser regen, while angry Hulk has strength 10 and regen). For that to work, you'd have, obviously, to give him the berserk attribute.

You could also give him both accidental change and defense mechanism, so that he gets increasingly stronger the more he is hurt, and when he finally goes berserk, you can assume that he completely snapped out of control and now you have a strength 10 hulk with damage bonus roaming around the field unable to tell friend from foe. Then again, it might not work as well as expected, since I don't think the invuluntary form carries the damage bonus from the regular form, so your damage would probably fluctuate quite a bit.

yell0w_lantern

I'm going to be trying out a custom Hulk HF with Defence Mechanism (strength through pain) and an Accidental Change that transforms him into Banner when out of energy with enraged set as the revert.

TaskMasterX

I'm trying to stay away from having Hulk "shape-shift" into a stronger form. When a character shape-shifts, the enemies that had targeted his original form stand dumb-founded for a second until they an re-target the new form. To me, this should only be used for characters that actually change their form and enemies stare in wonder/confusion at transformation. Instead, I'm trying to write up a new function that could do everything.

Quiet, I had a very similar setup except I didn't give him a 300% Power because Desperate already has the potential to give the character 300% if he takes enough damage. But it ended up dishing out to much damage for my tastes. So, as of now, I'm using Desperate along with LesserRegeneration and a increased Magnitude Melee Power that uses High Energy. Since Desperate gives Energy to the character, it increases the chance he'll be able to use his Highe EP cost power and also LesserRegeneration heals when the character's EP is high enough.

There is one issue with using DefenceMechanism and Desperate that I don't like and it's that these Attributes increase the Damage Output, not the actual Strength. Not only does Hulk dish out more damage, but he can lift heavier objects, too. So, I came up with a new function to be used for Defence Mechanism that does these things:
1. Gives the character back EP, similar to energythroughPain for Defence Mechanism(this should cover simulating his Endurance increasing)
2. Increases Strength +2 (since his he gets bonus EP when damaged, maybe this could be made similar to Metabolic, where his Strength increases, the higher his EP). Or maybe his Strength should increase the lower his Health gets?
3. Increases Healing Rate depending on how much EP he has. Also, the amount of HP recovered is proportional to his Energy Stat. The way I have it now is a character will recover half his Energy Stat in HP every 1 second if his 3 EP bars are full, every 2 seconds with 2 bars full and every 3 seconds if only 1 bar is full. This way when he's damaged and recieves the bonus EP, his healing rate increases. What do you all think of this?


I have a few other questions:
1. Should he also get bonus Invulnerable Points and/or increased HitPoints?
2. What if Hulk gets Stunned, Mental Blanked, or Panicked? Should the effects be canceled when he gets into one of these States?
3. If Hulk's Health Bar gets back to full, meaning he's no longer injured, should the effects be canceled then? Or should he still have the adrenaline surge if he's still fighting?

quiet

I would say that he would gain additional hit points and an increase in strength without an increase to invulnerabilty. the idea you have with the regeneration increasing is great.  If you could make his endurance, strength, and energy increase and tie the regeneration to his current energy bar that would fit my idea of how he would work.  It would make it so if you did not take him out early you are going to have a big green problem on your hands.  I know the comics are not consistent but it seems that the underlying theme for this character is the longer it goes on the tougher hulk is going to get.

I would have it so mental blank or panic would cancel out his rage bonus but I would think that stunning him would make him angrier.  Also, I would have him stay in the enraged state as long as he is fighting.

questions from me:
1. could you have him increase his strength so it goes past 10 like when "heavy lifter" is added to a multi?
2. could you tie him going into a berzerk state with also gaining "mindless" attribute?

example: hulk is fighting a manbull and they are trading blows, the manbull bellows and sends hulk into a panic state ending is enraged bonus. hulk recovers and manbull thinks hes a pushover now so he runs up and gores poor hulk.  hulk's "berzerker" attribute is triggered and he goes nuts, realizing he bit off more than he can chew, manbull tries another bellow but because hulk has "mindless" attached to his "berzerk" it has no effect.  manbull has his head crushed and his carcass is thrown into space, hulk gets a soda.

I thought this was done for the original FF ffx through something like "feral".

Blitzgott

You could also give Hulk regenerative, slow started and metabolic (strength) along with low energy (two or three) and a passive defense that very frequently absorbs all kinds of attacks. Energy tanks might be good, too. That way, he'll start off kind of weak due to the penatly metabolic inflict to characters that have low energy, but, as the fight unfolds and Hulk starts getting hit, his energy bar will increase, along with his strength and healing factor, since regenerative regenerates more hp the higher the character's energy is.


Edit: Forget it. No point in doing it when you can just give him desperate in order to refill energy. So you'd give him slow started, two or three points of energy, metabolic (strength) and desperate. That way, both his strength and healing factor improve as his energy refills.

yell0w_lantern

Quote from: TaskMasterX on March 28, 2007, 06:30:16 AM
I'm trying to stay away from having Hulk "shape-shift" into a stronger form.
I don't blame you. That's why I'm having him turn into Bruce Banner when he runs out of energy ("Hulk tired") and he stays Banner until Banner becomes enraged (I gave him Berserker and Mad).

TaskMasterX

Quote from: quiet on March 28, 2007, 07:29:48 AM
I would have it so mental blank or panic would cancel out his rage bonus but I would think that stunning him would make him angrier. Also, I would have him stay in the enraged state as long as he is fighting.

questions from me:
1. could you have him increase his strength so it goes past 10 like when "heavy lifter" is added to a multi?
2. could you tie him going into a berzerk state with also gaining "mindless" attribute?

1. Probably. I'll have to test it out.
2. Hmm. I wasn't thinking of adding Berserk in. I was thinking of keeping it as a seperate Attribute you buy. Though the scripted version could probably have this incorporated in. But I think the current scripted version of Berserker is broken. Should he really get Mindless? That's immunity to all mental attacks and he then would lose the only hole in his defences. Have there been times where mentalists(such as Prof X) were able to calm a raging Hulk with their Powers? If Prof. X could cause a Mental Blank on Hulk to calm him down, then the X-Men could try to hit him all at once to KO him. :lol:
I agree w/ what you're saying about Stun and I wonder if he might actually be more resistant to Panic while enraged.

Quote from: Blitzgott on March 28, 2007, 07:49:10 AM
Forget it. No point in doing it when you can just give him desperate in order to refill energy. So you'd give him slow started, two or three points of energy, metabolic (strength) and desperate. That way, both his strength and healing factor improve as his energy refills.
That's an interesting combination. But I'd still like a bonus to Strength rather than the bonus to damage that Desperate provides. And if I could save all those Attribute slots by making it into one function for Defence Mechanism, then that would be an added bonus. As it is, I already have to give Hulk Jumper, Super Leaper, Heavy Lifter, and Invulnerable and maybe Solid Skeleton etc., and I try not to make combo attributes if I don't have to.
Quote from: yell0w_lantern on March 28, 2007, 01:12:21 PM
I don't blame you. That's why I'm having him turn into Bruce Banner when he runs out of energy ("Hulk tired") and he stays Banner until Banner becomes enraged (I gave him Berserker and Mad).
That's a neat idea. The only thing is, in my Danger Room battles, Superman would KO Banner before he got enraged and changed forms. :lol:

quiet

you're right about the "mindless" thing, but how about "fearless". I figure an enraged hulk would be hard to scare!

Xenolith

I don't think the hulk has ever been scared on of anything, has he?  Its hard to be scared of something called fish-man, or bird-beak, etc...

The bruce banner idea is nice.  I do that for the Human Torch and Captain Marvel.  Whenever they run out of energy or get stunned I have them morph into Johnny Storm and Billy Batson.  I hadn't tought of doing that for the Hulk/Bruce Banner.

TaskMasterX

I do it also for Photon (formerly known as Capt. Marvel) and others that transform into Energy Forms, but also still have powers even in their "normal" form. I was thinking, what if there was a version of Mad that, instead of randomly making the state occur, occurred when the character got in range of an enemy. That way when Banner sees an enemy, he'll get angry and change into the Hulk, and not have to wait.

TaskMasterX

Okay, I completed a script for AdrenalineSurge. Here's what it does:
The first damage Hulk takes increases his Strength +1, gives him EP proportional to the intensity and allows him to start healing depending on the amount of EP he has as described above. He also gets resistance to Stun and Panic attacks.
The second time Hulk takes damage his Strength will be +2, he continues to get EP proportional to the intensity and continues to heal.
The Strength will stay at +2 no matter how many more times he's hit, but EP accrual and fast healing continue until they are full or he's KOed.
When Hulk gets Mental Blanked or there are no more targets within Visible range (400), Strength drops to normal levels and he'll continue to heal but at a much slower rate.

I decided to not tie his Strength to his Energy Points since he may Overpower his attacks and use up energy, effectively lowering his Strength. His Strength should stay at peak until the battle is over or he's Blanked. I didn't include any additional Health Points as a bonus since I thought these were enough bonuses already, but if anyone wants to try it out and see if there's anything else that could be done then go ahead!

Here's the code for ffx.py:
def adrenalineSurge(char,param,intensity):
    print 'adrenalineSurge: intensity=%d'%intensity
    print 'adrenalineSurge: old_Str=%d'%(Object_GetAttr(char,'strength'))
    print 'adrenalineSurge: old painResponse_AS=%d'%(FFX_ObjectGetAttr(char,'painResponse_AS'))
    ### Strength Bonus ###
    bonus=0
    if FFX_ObjectGetAttr(char,'painResponse_AS')==1:
        FFX_ObjectSetAttr(char,'painResponse_AS',2)
        bonus=1
    else:
        if FFX_ObjectGetAttr(char,'painResponse_AS')==0:
            FFX_ObjectSetAttr(char,'painResponse_AS',1)
            bonus=1
            RegTimer('cancelAdrenalineSurgeCheck',6,0,char)
            RegCharState(char,PCSTATE_BLANK,'cancelAdrenalineSurge')
    print 'adrenalineSurge: Str_Bonus=%d'%bonus
    print 'adrenalineSurge: new painResponse_AS=%d'%(FFX_ObjectGetAttr(char,'painResponse_AS'))
    if Object_GetPrimaryState(char)!=PCSTATE_ENRAGED:
        str=Object_GetAttr(char,'strength')+bonus
        Object_SetAttr(char,'strength',str)
        Object_SetAttr(char,'baseStrength',str)
    else:
        print 'Cannot Boost Strength! Already Enraged!'
        RegCharState(char,PCSTATE_NORMAL,'postEnragedStrReset')
    print 'adrenalineSurge: new_Str=%d'%(Object_GetAttr(char,'strength'))
    ### Energy Bonus ###
    ep=Object_GetAttr(char,'energyPoints')+intensity
    maxEP=Object_GetAttr(char,'maxEnergyPoints')
    print 'adrenalineSurge: ep+intensity=%d'%ep
    excess=ep-maxEP
    if excess>0:
        ep=maxEP
    Object_SetAttr(char,'energyPoints',ep)
    print 'adrenalineSurge: new_EP=%d'%(Object_GetAttr(char,'energyPoints'))
    ### Healing Bonus ###
    if FFX_ObjectGetAttr(char,'painResponse_heal')==1:
        print 'already healing!'
        return
    health=Object_GetAttr(char,'health')
    maxHealth=Object_GetAttr(char,'maxHealth')
    if health>=maxHealth:
        print 'healing stopped'
        return
    healingfactor=Object_GetAttr(char,'energyPoints')
    if healingfactor < 34:
        timer=3
    if healingfactor > 33:
        if healingfactor < 66:
            timer=2
    if healingfactor > 65:
        timer=1
    print 'adrenalineSurge: healing_timer=%d'%timer
    RegTimer('healingrate',timer,0,char)
    FFX_ObjectSetAttr(char,'painResponse_heal',1)
    RegCharState(char,PCSTATE_STUNNED,'OnFFQPrimaryResist')
    RegCharState(char,PCSTATE_PANICKED,'OnFFQPrimaryResist')

def postEnragedStrReset(event):
    char=event.object
    print 'reseting Strength!'
    bonus=FFX_ObjectGetAttr(char,'painResponse_AS')
    Object_SetAttr(char,'strength',Object_GetAttr(char,'templateStrength')+bonus)
    Object_SetAttr(char,'baseStrength',Object_GetAttr(char,'templateStrength')+bonus)

def cancelAdrenalineSurge(event):
    char=event.object
    print 'canceling Adrenaline Surge!'
    Object_SetAttr(char,'strength',Object_GetAttr(char,'templateStrength'))
    Object_SetAttr(char,'baseStrength',Object_GetAttr(char,'templateStrength'))
    FFX_ObjectSetAttr(char,'painResponse_heal',2)
    FFX_ObjectSetAttr(char,'painResponse_AS',0)
    print 'painResponse_AS=%d'%(FFX_ObjectGetAttr(char,'painResponse_AS'))

def cancelAdrenalineSurgeDist(char):
    print 'canceling Adrenaline Surge!'
    Object_SetAttr(char,'strength',Object_GetAttr(char,'templateStrength'))
    Object_SetAttr(char,'baseStrength',Object_GetAttr(char,'templateStrength'))
    FFX_ObjectSetAttr(char,'painResponse_heal',2)
    FFX_ObjectSetAttr(char,'painResponse_AS',0)
    print 'painResponse_AS=%d'%(FFX_ObjectGetAttr(char,'painResponse_AS'))

def cancelAdrenalineSurgeCheck(event):
    char=event.object
    target=m25ai.FindTarget(char,maxdist=m25distance.DISTANCE_VISIBLE,default=None)
    if target == None:
        cancelAdrenalineSurgeDist(char)
    else:
        RegTimer('cancelAdrenalineSurgeCheck',6,0,char)

PainResponseHealerRatio=2  # cost in EP for each health point healed   

def healingrate(event):
    char=event.object
    if not Object_Exists(char):
        return
    if not Object_IsAlive(char):
        return
    healing=Object_GetAttr(char,'energy')+1
    print 'healing=%d'%healing
    health=Object_GetAttr(char,'health')
    maxHealth=Object_GetAttr(char,'maxHealth')
    if health>=maxHealth:
        print 'healing stopped'
        FFX_ObjectSetAttr(char,'painResponse_heal',0)
        return
    if health + healing > maxHealth:
        healing = maxHealth - health
        if healing<1:
            healing=1
        health=maxHealth
    EP=Object_GetAttr(char,'energyPoints')
    Object_SetAttr(char,'health',health+healing)
    Object_SetAttr(char,'energyPoints',EP-healing*PainResponseHealerRatio)
    healingfactor=Object_GetAttr(char,'energyPoints')
    if healingfactor < 34:
        timer=3
    if healingfactor > 33:
        if healingfactor < 66:
            timer=2
    if healingfactor > 65:
        timer=1
    if FFX_ObjectGetAttr(char,'painResponse_heal')==2:
        timer=5
    print 'adrenalineSurge: healing_timer=%d'%timer
    RegTimer('healingrate',timer,0,char)


Also, look for this line in ffx.py:
def initpainresponse(char,update=0):
And add this line:
    FFX_ObjectSetAttr(char,'painResponse_AS',0)
right below it.

Then, you just need to open ffxdefault.py, look for this line:
FFX_DEATHRESPONSES=[
and add this line:
["adrenalineSurge"],
right below it.

EDIT: Fixed a small screw-up in the code that prevented the Adrenaline Surge from being canceled correctly. Posted correct script above.
I've been testing this with Bezerker and Heavy Lifter and it works pretty well, adding the Strength bonus on top of the Heavy Lifter bonus, and increasing damage even more when he gets bezerked.

Blitzgott

Quote from: TaskMasterX on March 29, 2007, 01:59:04 PM
Also, look for this line in ffx.py:
def initpainresponse(char,update=0):
And add this line:
    FFX_ObjectSetAttr(char,'painResponse_AS',0)
right below it.

Hey, great job, Taskmaster! It works quite well!

However, you made a mistake there. The code under "def initpainresponse(char,update=0):" is "Object_SetAttr(char,'painResponse_AS',0)", not "FFX_ObjectSetAttr(char,'painResponse_AS',0)".

Edit: I was playing the iron man mode just now with Hulk, and he started inflicting up to over 200 of damage without needing to overpower. Is it supposed to happen? Oh, and whenever I used super-leaper to, well, leap somewhere, he would lose the strength bonus, and, even if he got hit afterwards, his strength would start increasing again only if he went berserk once.

I found also found the following error on my scrip.log:

[spoiler]Traceback (innermost last):
  File "E:\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\ffx.py", line 28255, in cancelAdrenalineSurgeCheck
    cancelAdrenalineSurge(char)
  File "E:\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\ffx.py", line 28245, in cancelAdrenalineSurge
    char=event.object
AttributeError: 'string' object has no attribute 'object'[/spoiler]

TaskMasterX

Quote from: Blitzgott on March 31, 2007, 09:41:05 AM
However, you made a mistake there. The code under "def initpainresponse(char,update=0):" is "Object_SetAttr(char,'painResponse_AS',0)", not "FFX_ObjectSetAttr(char,'painResponse_AS',0)".

Edit: I was playing the iron man mode just now with Hulk, and he started inflicting up to over 200 of damage without needing to overpower. Is it supposed to happen? Oh, and whenever I used super-leaper to, well, leap somewhere, he would lose the strength bonus, and, even if he got hit afterwards, his strength would start increasing again only if he went berserk once.

I appreciate you testing this out for me, Blitzgott! I see what was happening with Superleaper and Bezerker. SuperLeaper fiddles with the Strength, so I made a small adjustment to prevent that from interfering. Also, I saw that when the Hulk went Berzerk, he continued to get bonuses while in the Bezerk state, even when he already had the +2 maximum Strength! I saw his Strength go up to 17 :o and then after the Berzerk state was over, he still had a higher strength than before he went Berzerk. I adjusted the code to not give any bonuses while Enraged. I found that the Berzerk State gives a +2 to Strength and that bonus is still applied on top of the +1 or +2 this Adrenaline Surge gives, but now the character does not get bonuses to Strength when damaged while Enraged.
Example:
The character has a 7 Strength and DefenceMechanism with Adrenaline Surge option, plus Bezerker. If the character goes Berzerk the 1st time he's hit, then he gets the +2 bonus Bezerker already gives and no bonus to Strength from Adrenaline Surge. If he takes no more damage while Berzerk, then once the Enraged State is over, he'll have a +1Strength, since the initial hit that caused the Enraged State increases his Strength +1. If he takes damage again then it goes to +2. If he get's enraged again, then the Enraged State will add +2 on top of what he already has, giving him a total of +4 for a Strength of 11. And once the Enraged State is over again, it goes back down to +2 Strength until he's Mental Blanked, KOed or there are no more enemies in visible range.

EDIT: I don't think there's a difference in the line you place after the "def initpainresponse(char,update=0):" line. I've tried both your way and my way and it still works. But since I have "FFX_ObjectSetAttr(char,'painResponse_AS',0)" also used when the Adrenaline Surge is canceled, and also use the FFX_ObjectSetAttr in other places, I prefer to keep the original way for consistency's sake. ;)