Go Back   The PokéCommunity Forums > ROM Hacking > Research & Development
Reload this Page Development: Move Resource Thread

Notices
For all updates, view the main page.

Research & Development Got a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!
Research & Development programs in this forum are subject to moderator approval before they are displayed.



Reply
 
Thread Tools
  #101    
Old July 15th, 2014 (01:17 PM). Edited November 18th, 2014 by mamamama.
mamamama
 
Join Date: Feb 2014
Toxic that has perfect accuracy for poison-types.

Works for Emerald

Spoiler:
Code:
#dynamic 0x
#freespacebyte 0xFF

#org @Start
jumpiftype 0x1 0x3 @PerfectAcc
goto 0x82D8EF1

#org @PerfectAcc
attackcanceler
attackstring
ppreduce
accuracycheck 0x82D9F1C 0xFFFF 
jumpifability 0x0 0x11 0x82D8F63
jumpifsecondarystatus 0x0 0x1000000 0x82D9F1C
jumpifstatus 0x0 0x8 0x82D8F52
jumpifstatus 0x0 0x80 0x82D8F52
jumpifstatus 0x0 0xFF 0x82D9F1C
jumpiftype 0x0 0x3 0x82D9F2E
jumpiftype 0x0 0x8 0x82D9F2E
jumpifhalverset 0x0 0x20 0x82DAD01
attackanimation
waitanimation
setbyte 0x2024335 0x6
seteffecttarget
resultmessage
waitmessage 0x40
goto 0x82D8A4E
Reply With Quote
  #102    
Old July 15th, 2014 (02:16 PM). Edited July 15th, 2014 by GOLDstandard.
GOLDstandard's Avatar
GOLDstandard
GoldStandard
 
Join Date: Jul 2013
Location: California
Gender: Male
Nature: Bold
This is a particle I made for the move water shuriken
shuriken.png
00 10 27 00 97 27 0A 03 28 01 0C 0C 08 19 B4 00 C0 02 28 7A 3E 08 02 00 04 14 19 9F 00 3F 02 08 7C 3E 08 02 04 00 00 00 00 01 00 01 00 03 F9 89 09 08 05 05 01 00 05 00 00 00 05 00 01 00 04 11 19 73 00 C0 02 54 4E 3D 08 02 02 06 00 FC FF 05 0B 03 0D 08

i recommend using bonemerang's anim (above) as a base.

watershuriken.gif

Edit:
added v-create particle

victini.png
__________________
Pokemon is fun
Reply With Quote
  #103    
Old July 16th, 2014 (08:15 PM).
Tlachtli's Avatar
Tlachtli
Crit happens.
 
Join Date: Jan 2012
Location: Faraway place
Age: 24
Gender: Male
Nature: Modest
Here's an effect I wrote for Flower Shield, usable in Emerald. It individually raises the defense of all Grass Pokemon present in battle (works for 1v1 and 2v2), and if there are no Grass-types out (or their defenses are all maxed) it gives the "But it failed!" message instead of animating.
Spoiler:
Code:
#org @Effect11
setbyte 0x202448E 0x12
jumpifhalfword B_= 0x020241EA MOVE_FLOWERSHIELD @FlowerShield
goto 0x82D8CA1

#org @FlowerShield
setbyte 0x02024200 0x0
attackcanceler
attackstring
ppreduce
cmd25
jumpiftype 0x1 0xC @SelfGrass
goto @Call

#org @SelfGrass
jumpifsecondarystatus 0x1 0x1000000 @NextTarget
jumpifstat 0x1 B_>= 0x2 0xC @NextTarget
jumpifbyte B_= 0x02024200 0x1 @SelfNoAnimation
attackanimation
waitanimation
setbyte 0x02024200 0x1
goto @SelfNoAnimation

#org @SelfNoAnimation
cmd47
playstatchangeanimation 0x1 0x4 0x0
setbyte 0x202448E 0x12
statbuffchange 0x80 true @NextTarget
jumpifbyte B_>= 0x2024337 0x2 @NextTarget
printfromtable 0x85CC89C
waitmessage 0x40
goto @NextTarget

#org @NextTarget
cmd25
goto @Call

#org @Call
jumpifarrayequal 0x0202420B 0x0202420C 0x1 @NextTarget
call @TargetBuff
setbyte 0x2024488 0x0
cmd49 0x2 0x10
jumpwhiletargetvalid @NextTarget
jumpifbyte B_= 0x02024200 0x0 @NoBuffs
end

#org @TargetBuff
jumpiftype 0x0 0xC @Grass
goto @Return

#org @Grass
jumpifsecondarystatus 0x0 0x1000000 @Return
jumpifstat 0x0 B_>= 0x2 0xC @Return
jumpifbyte B_= 0x02024200 0x1 @NoAnimation
attackanimation
waitanimation
setbyte 0x02024200 0x1
goto @NoAnimation

#org @NoAnimation
cmd47
playstatchangeanimation 0x0 0x4 0x0
setbyte 0x202448E 0x12
statbuffchange 0x0 false @Return
jumpifbyte B_>= 0x2024337 0x2 @Return
printfromtable 0x85CC89C
waitmessage 0x40
goto @Return

#org @Return
return

#org @NoBuffs
pause 0x20
orbyte 0x202427C 0x20
resultmessage
waitmessage 0x40
end

I tacked it on as a special condition of Effect 11 (Withdraw, Harden, etc.) that branches for Flower Shield's move id; mixing it with an existing effect helps the AI understand how to use it better. All you need to do is make Flower Shield target everyone on the field (a la Earthquake) and give it the new Effect 11.
__________________
Pokemon Sigma Σmerald:

A Gen 3 remake de-make, (soon to be) featuring many Gen VI mechanics
Reply With Quote
  #104    
Old July 18th, 2014 (01:03 AM). Edited July 18th, 2014 by mamamama.
mamamama
 
Join Date: Feb 2014
Quote originally posted by Tlachtli:
Here's an effect I wrote for Flower Shield, usable in Emerald. It individually raises the defense of all Grass Pokemon present in battle (works for 1v1 and 2v2), and if there are no Grass-types out (or their defenses are all maxed) it gives the "But it failed!" message instead of animating.
Whenever you give an attacking move the "Hit all other on the field" which Earthquake has, it ends up only hitting the opponent to the right. Have you tested so this doesn't happen with Flower Shield?

Could be different since it is a status move...

Anyway, nice work. I'll make sure to try it later.

EDIT: I believe you made a little typo. Shouldn't "goto 0x82D8CA1" be "goto 0x82D8C85" (pointer to beginning of withdraw effect). Otherwise you miss out on the setbyte 0x202448E 0x12 when making a normal defense-raising moves such as Harden or Withdraw.
Reply With Quote
  #105    
Old July 18th, 2014 (06:42 AM).
Tlachtli's Avatar
Tlachtli
Crit happens.
 
Join Date: Jan 2012
Location: Faraway place
Age: 24
Gender: Male
Nature: Modest
Quote originally posted by mamamama:
Whenever you give an attacking move the "Hit all other on the field" which Earthquake has, it ends up only hitting the opponent to the right. Have you tested so this doesn't happen with Flower Shield?

Could be different since it is a status move...

Anyway, nice work. I'll make sure to try it later.

EDIT: I believe you made a little typo. Shouldn't "goto 0x82D8CA1" be "goto 0x82D8C85" (pointer to beginning of withdraw effect). Otherwise you miss out on the setbyte 0x202448E 0x12 when making a normal defense-raising moves such as Harden or Withdraw.
The Withdraw effect is only one line (setbyte 0x202448E 0x12), then it branches off to a generic self-stat raiser shared by most self-targeting status moves. Flower Shield needs that setbyte the same as the other Defense raising moves do, so by putting it at the beginning of my effect it saves a jump, and means one less line in the Flower Shield-specific part.

Most moves don't work with the "hit all on field" targeting because of the way the attacks are structured. Most attacks will write the index of the target into the target byte, execute the script, then end. Earthquake is specifically written to iterate the target byte instead of ending the script, so it re-reads the script for each valid target rather than only hitting one. I started my script as a combination of Earthquake's iteration with Withdraw's defense raising then did some extra fine-tuning, the basic idea being that it first raises the user's defense (if it's Grass type), then follows Earthquake's iteration to target each of the other Pokes and check for Grass type (and raise Defense accordingly).

If you're interested, cmd25 is the command Earthquake uses to iterate the target byte. If you combine that with jumpwhiletargetvalid (which jumps to an address if the target is valid, ie not fainted or out-of-bounds) you can make the script repeat through all targets.
__________________
Pokemon Sigma Σmerald:

A Gen 3 remake de-make, (soon to be) featuring many Gen VI mechanics
Reply With Quote
  #106    
Old July 19th, 2014 (07:52 PM). Edited July 21st, 2014 by Spherical Ice.
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
I've made a fully functional Close Combat effect for FireRed, with the animation varying when one stat is already at its minimum (i.e. only lowering one), when both aren't at their minimum (i.e. lowering both) and when both are at their minimum (i.e. skipping the drops altogether). This does use ASM but I've since been told that it could be done with the jumpifstat command. I'm going to post this anyway. You'll need to have the battle script callasm command, too.

Battle Script (use this for the effect ID):
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
attackcanceler
accuracycheck 0x81D695E 0x0
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
faintpokemon 0x0 0x0 0x8000000
callasm 0x8AABBCC + 1
ASM at AABBCC:
Code:
.text
.align 2
.thumb
.thumb_func

Main:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x1a
add r1, r2
ldrb r0, [r1]
ldrb r2, [r1, #0x3]
mov r3, #0x0
cmp r0, r3
beq DefIsZero
cmp r2, r3
beq SpDefIsZero
ldr r4, .LowerBothBS
b End

DefIsZero:
cmp r2, r3
beq BothBS
ldr r4, .LowerSpDefBS
b End

SpDefIsZero:
ldr r4, .LowerDefBS
b End

BothBS:
ldr r4, .EndBS

End:
ldr r5, .ActiveBSPointer
str r4, [r5, #0x0]
bx lr

.align 2
.BattleData:		.word 0x02023BE4
.UserBank:		.word 0x02023D6B
.ActiveBSPointer:	.word 0x02023D74
.LowerSpDefBS:		.word 0x08SSSSSS
.LowerDefBS:		.word 0x08DDDDDD
.LowerBothBS:		.word 0x08BBBBBB
.EndBS:			.word 0x081D694E
Battle script at SSSSSS (lowers SDef only):
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x1 0x4 0x1
setbyte 0x2023FDE 0x92
statbuffchange 0x80 true @end
jumpifbyte 0x0 statchange 0x2 @end
printfromtable 0x83FE588
waitmessage 0x40

#org @end
goto 0x81D694E
Battle script at DDDDDD (lowers Def only):
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x1 0x20 0x1
setbyte 0x2023FDE 0x95
statbuffchange 0x80 true @end
jumpifbyte 0x0 statchange 0x2 @end
printfromtable 0x83FE588
waitmessage 0x40

#org @end
goto 0x81D694E
Battle script at BBBBBB (lowers both):
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x1 0x24 0x1
setbyte 0x2023FDE 0x92
statbuffchange 0x80 true @end
jumpifbyte 0x0 statchange 0x2 @end
printfromtable 0x83FE588
waitmessage 0x40
setbyte 0x2023FDE 0x95
statbuffchange 0x80 true @end
jumpifbyte 0x0 statchange 0x2 @end
printfromtable 0x83FE588
waitmessage 0x40

#org @end
goto 0x81D694E
The bolded offsets points to these battle scripts from vanilla FireRed:
Code:
#org 0x1D695E
attackstring
ppreduce
pause 0x20
missmessage
resultmessage
waitmessage 0x40
goto 0x81D694E
Code:
#org 0x1D694E
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end
Thanks to DoesntKnowHowToPlay for troubleshooting with me.
__________________
Reply With Quote
  #107    
Old July 19th, 2014 (08:07 PM).
GOLDstandard's Avatar
GOLDstandard
GoldStandard
 
Join Date: Jul 2013
Location: California
Gender: Male
Nature: Bold
Quote originally posted by Spherical Ice:
I've made a fully functional Close Combat effect for FireRed
:D Sphrical Ice Keep these awesome scripts coming man! Great work!
__________________
Pokemon is fun
Reply With Quote
  #108    
Old July 20th, 2014 (09:03 AM). Edited July 21st, 2014 by Spherical Ice.
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
Here's an effect for Assurance, again for FireRed:

Battle Script:
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
callasm 0x8AABBCC +1
ASM at AABBCC:
Code:
.text
.align 2
.thumb
.thumb_func

Main:
ldr r1, .PhysDamage
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x10
mul r2, r0
add r1, r2
ldrb r0, [r1]
ldrb r2, [r1, #0x2]
mov r3, #0x0
cmp r0, r3
bne DoubleDamage
cmp r2, r3
bne DoubleDamage
b End

DoubleDamage:
ldr r3, .DamageMultiplier
mov r0, #0x2
strb r0, [r3, #0x0]

End:
ldr r4, .ReturnBS
ldr r5, .ActiveBSPointer
str r4, [r5, #0x0]
bx lr

.align 2
.PhysDamage:		.word 0x02023E90
.TargetBank:		.word 0x02023D6C
.ActiveBSPointer:	.word 0x02023D74
.DamageMultiplier:	.word 0x02023FD2
.ReturnBS:		.word 0x081D6926
The bolded offset points to this battle script from vanilla FireRed:
Code:
#org 0x1D6926
attackcanceler
accuracycheck 0x81D695E 0x0
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
seteffectwithchancetarget
faintpokemon 0x0 0x0 0x0
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end

#org 0x1D695E
attackstring
ppreduce
pause 0x20
missmessage
resultmessage
waitmessage 0x40
goto 0x81D694E

#org 0x1D694E
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end
As usual, you'll need Jambo51's callasm command for this to work.
__________________
Reply With Quote
  #109    
Old July 20th, 2014 (12:12 PM).
mamamama
 
Join Date: Feb 2014
Quote originally posted by Spherical Ice:
Here's an effect for Assurance, again for FireRed:
Nice. Will try to translate to Emerald. Are you planning to do Sucker Punch in the future?
Reply With Quote
  #110    
Old July 20th, 2014 (12:20 PM). Edited January 2nd, 2015 by Spherical Ice.
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
This lists moves from the first three generations whose effects have been changed or updated in Generations 4, 5 and 6.

Code:
Whirlwind		no longer works on same/higher levelled wild PKMN
			ignores accuracy and evasion
			bypasses protect and detect
Bind			inflicts 1/8 of max. HP*
Stomp		x2 base power & ignores accuracy and evasion if target has used Minimize**
Jump Kick		Crash damage = 1/2 of user's max. HP, rounded down***
Thrash		disrupted by:	missing
						sleeping
						paralysis
						freeze
						flinching
						protecting target
						immune target
			if disrupted on final turn of Thrash, confusion still occurs****
Roar			ignores accuracy and evasion
			bypasses protect and detect
Supersonic		bypasses sub
Disable		always lasts 4 turns
			reflected by Magic Coat++
Acid			10% chance to drop Sp.D by 1 stage
Growth		raises Atk and Sp.A stats by 1 stage
			raises Atk and Sp.A stats by 2 stages in Sun
Surf			hits all Pokémon on the field except the user
Blizzard		ignores accuracy and evasion in Hail
String Shot	drops Speed by 2 stages
Thunder		ignores accuracy and evasion in Rain
			lowered accuracy in Sun
Dig			underground wild PKMN canot be captured
Toxic			ignores accuracy and evasion if used by a Poison-type
Rage			raging users get Attack stat boosts every time they get hit
Mimic		mimicked moves have max PP, not 5 PP
Focus Energy	increases crit ratio by 2 stages, not 1
Bide			only endures 2 turns
			hits Ghost-types, as well semi-invulnerable PKMN in Dive, Bounce or Shadow Force
			broken by sleep
Selfdestruct	user faints before dealing damage +
			no longer halves target's Def +
Waterfall		20% flinch chance
Sky Attack		displays "<user> became cloaked in a harsh light!" instead of "<user> is glowing!" on turn 1
Transform		copies shininess
			fails on subs
Conversion		can be stolen by Snatch
			can be used on Curse (because Curse is Ghost-type)
			changes the user's current type to match the type of the first of the user's moves
Substitute		multi-strike moves continue after breaking sub
			blocks intimidate
			blocks transform
			doesn't block sound-based moves
Struggle		ignores accuracy & evasion
			user takes 1/4 max. HP as recoil
Sketch		can copy Metronome and Transform
Spider Web	no longer traps Ghost-types+++
Thief			doesn't permanently steal a Trainer's Pokémon's item
			items can be stolen back
Flail			base damage = (48 * CurrentHP) / MaxHP
Conversion2	changes user's type to resist target's last move, including non-damaging moves
Spite			reflected by Magic Coat
			always deducts 4 PP
Destiny Bond	target faints after the user
Sandstorm		boosts Rock-type Pokémon's Sp.D by 50%
Sleep Talk		can use PP-less moves
Heal Bell		bypasses sub
			bypasses Soundproof
Encore		lasts 3 turns
			reflected by Magic Coat, but then fails
Sweet Scent	lowers evasion by 2 stages
Hidden Power	base power of 60
Crunch		20% chance to lower Def by 1 stage, not Sp.D
Future Sight	now does Psychic-type damage
			uses Sp.D stat of receiving Pokémon, not original target
Beat Up		base power = (party member's base Attack) / 10 + 5
			receives STAB from Dark-type users
Uproar		lasts exactly 3 turns
Stockpile		raises user's Def and Sp.D stat by 1 stage
Spit Up		removes Stockpile boosts
Swallow		removes Stockpile boosts
Torment		activates the turn it is used
			reflected by Magic Coat
Facade		ignores Burn Attack cut
Focus Punch	charging turn has +6 priority
Nature Power	calls different moves: http://bulbapedia.bulbagarden.net/wiki/Nature_Power_(move)#Generation_VI
Charge		boosts Sp.D by one stat
Taunt		lasts exactly 3 turns
			reflected by Magic Coat
Trick			no longer permanently switches a Trainer's Pokémon's items
Wish			heals for half of the user's max. HP, not the recipient's
			affected by Snatch
Ingrain		Ghost-types who have ingrained can switch
Recycle		affected by Snatch
Magic Coat		reflects Teeter Dance, Taunt, Torment
Brick Break		no longer removes screens if target is Ghost-type
Knock Off		deals 50% more damage if target has item
Skill Swap		switch-in abilities like intimidate activate after being swapped
Secret Power	different effects: http://bulbapedia.bulbagarden.net/wiki/Secret_Power_(move)#Generation_VI
Dive			underwater wild PKMN canot be captured
Camouflage	more types for different terrain: http://bulbapedia.bulbagarden.net/wiki/Camouflage_(move)#Generation_VI
Tail Glow		raises Sp.A by 3 stages
Mud Sport		active for exactly 5 turns++++
Poison Fang	50% chance to badly poison target
Aromatherapy	lists PKMN that are healed
Covet		no longer permanently steals a Trainer's Pokémon's items
Doom Desire	now does Steel-type damage
			uses Sp.D stat of receiving Pokémon, not original target

*applies to Bind, Wrap, Fire Spin, Clamp, Whirlpool, Sand Tomb
**applies to Stomp, Body Slam
***applies to Hi Jump Kick
****applies to Thrash, Outrage, Petal Dance
+applies to Selfdestruct, Explosion
++applies to Disable, Spite, Spkies, Foresight, Torment, Taunt, Odor Sleuth
+++applies to Spider Web, Block, Mean Look
++++applies to Mud Sport, Water Sport
This link may also be useful, as it lists all of the other changes that have been done to moves, such as base power and accuracy:
http://bulbapedia.bulbagarden.net/wiki/List_of_modified_moves
__________________
Reply With Quote
  #111    
Old July 20th, 2014 (12:53 PM).
DoesntKnowHowToPlay's Avatar
DoesntKnowHowToPlay
some loser
 
Join Date: Jan 2012
Oh right this thread exists.

Sucker Pun (assumes status moves are flagged 0x2 in dpss byte):
Spoiler:
push {lr}
ldr r0, .TargetBank
ldrb r0, [r0, #0x0]
ldr r1, .BattleStruct
mov r2, #0x58
mul r0, r2
add r5, r0, r1

StatusCheck:
ldr r0, .TargetBank
ldrb r0, [r0, #0x0]
lsl r0, #0x1
ldr r1, .MovesUsed
add r0, r1
ldrh r0, [r0, #0x0]
ldr r1, .MoveTable
mov r2, #0xc
mul r0, r2
add r0, r1
ldrb r0, [r0, #0xa]
cmp r0, #0x2
beq Abort

OrderCheck:

ldr r0, .TargetBank
ldr r1, .UserBank
ldrb r4, [r0, #0x0]
ldrb r5, [r1, #0x0]
ldr r1, .TurnOrder

Loop:
ldrb r2, [r1, #0x0]
cmp r2, r4
beq Abort
cmp r2, r5
beq Attack
add r1, #0x1
b Loop


Abort:
ldr r0, .CurrentScript
ldr r1, .FailScript
str r1, [r0, #0x0]

Attack:
End:
pop {r0}
bx r0

.align 2

.UserBank: .word 0x02023D6B
.TargetBank: .word 0x02023D6C
.BattleStruct: .word 0x02023BE4
.BasePower: .word 0x02023F50
.TurnOrder: .word 0x02023bde
.MonsMoved: .word 0x02023be2
.MovesUsed: .word 0x02023dc4
.MoveTable: .word 0x08C80000
.CurrentScript: .word 0x02023d74
.FailScript: .word 0x081D7DF2


Stored Power:
Spoiler:
push {lr}
ldr r0, .UserBank
ldrb r0, [r0, #0x0]
ldr r1, .BattleStruct
mov r2, #0x58
mul r0, r2
add r5, r0, r1
mov r4, #0x14
mov r1, #0x14

AtkMod:
ldrb r0, [r5, #0x19]
sub r0, #0x6
cmp r0, #0xf
bge DefMod
mul r0, r1
add r4, r0, r4

DefMod:
ldrb r0, [r5, #0x1A]
sub r0, #0x6
cmp r0, #0xf
bge SpeedMod
mul r0, r1
add r4, r0, r4

SpeedMod:
ldrb r0, [r5, #0x1B]
sub r0, #0x6
cmp r0, #0xf
bge SAtkMod
mul r0, r1
add r4, r0, r4

SAtkMod:
ldrb r0, [r5, #0x1C]
sub r0, #0x6
cmp r0, #0xf
bge SDefMod
mul r0, r1
add r4, r0, r4

SDefMod:
ldrb r0, [r5, #0x1D]
sub r0, #0x6
cmp r0, #0xf
bge AccMod
mul r0, r1
add r4, r0, r4

AccMod:
ldrb r0, [r5, #0x1E]
sub r0, #0x6
cmp r0, #0xf
bge EvaMod
mul r0, r1
add r4, r0, r4

EvaMod:
ldrb r0, [r5, #0x1F]
sub r0, #0x6
cmp r0, #0xf
bge End
mul r0, r1
add r4, r0, r4


End:
ldr r3, .BasePower
strh r4, [r3, #0x0]

pop {r0}
bx r0

.align 2

.UserBank: .word 0x02023D6B
.BattleStruct: .word 0x02023BE4
.BasePower: .word 0x02023F50


Punishment:
Spoiler:
push {lr}
ldr r0, .TargetBank
ldrb r0, [r0, #0x0]
ldr r1, .BattleStruct
mov r2, #0x58
mul r0, r2
add r5, r0, r1
mov r4, #0x3c

AtkMod:
ldrb r0, [r5, #0x19]
sub r0, #0x6
cmp r0, #0xf
bge DefMod
mov r1, #0x14
mul r0, r1
add r4, r0, r4

DefMod:
ldrb r0, [r5, #0x1A]
sub r0, #0x6
cmp r0, #0xf
bge SpeedMod
mov r1, #0x14
mul r0, r1
add r4, r0, r4

SpeedMod:
ldrb r0, [r5, #0x1B]
sub r0, #0x6
cmp r0, #0xf
bge SAtkMod
mov r1, #0x14
mul r0, r1
add r4, r0, r4

SAtkMod:
ldrb r0, [r5, #0x1C]
sub r0, #0x6
cmp r0, #0xf
bge SDefMod
mov r1, #0x14
mul r0, r1
add r4, r0, r4

SDefMod:
ldrb r0, [r5, #0x1D]
sub r0, #0x6
cmp r0, #0xf
bge End
mov r1, #0x14
mul r0, r1
add r4, r0, r4

End:
ldr r3, .BasePower
strh r4, [r3, #0x0]

pop {r0}
bx r0

.align 2

.TargetBank: .word 0x02023D6C
.BattleStruct: .word 0x02023BE4
.BasePower: .word 0x02023F50



Scripts are straightforward, just callasm the appropriate function at the start of a regular attack after reducing pp and announcing the attack. I don't use BSP so IDK what they decompile to, but it'll be similar to Flail with the command xAC replaced by callasm.
__________________

Yet Another Fire Red Hack

Physical/Special Split
Reply With Quote
  #112    
Old July 21st, 2014 (04:29 AM).
KDS's Avatar
KDS
 
Join Date: Jul 2013
Age: 20
Gender: Male
Updated Hi Jump Kick [FR]:
The script to insert
Code:
#dynamic 0x[YourOffset]
#freespacebyte 0xFF

#org @jumpkick
attackcanceler
accuracycheck @crash 0x0
goto 0x81D692E

#org @crash
attackstring
ppreduce
pause 0x40
resultmessage
waitmessage 0x40
jumpifbyte 0x4 0x2023DCC 0x8 0x81D694E
printstring 0x60
waitmessage 0x40
bicbyte 0x2023DCC 0x1
orword 0x2023DD0 0x100
callasam 0x(offset to asm+1)
graphicalhpupdate 0x1
datahpupdate 0x1
faintpokemon 0x1 0x0 0x0
orbyte 0x2023DCC 0x1
goto 0x81D694E
The ASM for crash damage calculation:
Code:
.align 2
.thumb
.thumb_func

main:
push {r0-r4}
ldr r0, .userBank
ldrb r0, [r0, #0x0]
ldr r1, .battleStruct
mov r2, #0x58
mul r0, r2
add r4, r0, r1
ldrh r3, [r4, #0x2c]
lsr r3, #0x1
ldr r0, .damageValue
stm r0!, {r3}
pop {r0-r4}
bx lr

.align
.damageValue:  .word 0x02023D50
.battleStruct:  .word 0x02023be4
.userBank: .word 0x02023D6B
The vanilla scripts:
Code:
#org 0x1D694E
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end
Code:
#org 0x1D692E
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
seteffectwithchancetarget
faintpokemon 0x0 0x0 0x0
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end
Also, to modernize to Gen 6, the scripts for powder and paralysis inducing moves need to be altered too, since now Grass pokemon are immune to powder moves and Electric pokemon cannot be paralysed.
Reply With Quote
  #113    
Old July 21st, 2014 (08:26 AM). Edited July 21st, 2014 by Spherical Ice.
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
I've made an effect for both Power Swap and Guard Swap, using only one effect ID for both. This requires Jambo51's callasm command, as well as his battle string hack, which can both be found here. This is, as usual, for FireRed, though porting it should be easy:

Battle Script:
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
jumpifhalfword 0x0 0x2023D4A 0xCCCC @guardswap
attackcanceler
attackstring
ppreduce
accuracycheck 0x81D7DF2 0xFFFF
callasm 0x8AAAAAA +1
attackanimation
waitanimation
setword 0x203C020 0x8DDDDDD
printstring 0x184
waitmessage 0x40
goto 0x81D694E

#org @guardswap
attackcanceler
attackstring
ppreduce
accuracycheck 0x81D7DF2 0xFFFF
callasm 0x8BBBBBB +1
attackanimation
waitanimation
setword 0x203C020 0x8EEEEEE
printstring 0x184
waitmessage 0x40
goto 0x81D694E
CCCC = hex ID of Guard Swap

Message at DDDDDD:
Code:
FD 0F 00 E7 EB DD E8 D7 DC D9 D8 00 D5 E0 E0 00 D7 DC D5 E2 DB D9 E7 00 E8 E3 00 DD E8 E7 FE BB E8 E8 D5 D7 DF 00 D5 E2 D8 00 CD E4 AD 00 BB E8 DF 00 EB DD E8 DC 00 DD E8 E7 00 E8 D5 E6 DB D9 E8 AB FF 00
This translates to:
"<user> switched all changes to its Attack and Sp. Atk with its target!"

Message at EEEEEE:
Code:
FD 0F 00 E7 EB DD E8 D7 DC D9 D8 00 D5 E0 E0 00 D7 DC D5 E2 DB D9 E7 00 E8 E3 00 DD E8 E7 FE BE D9 DA D9 E2 E7 D9 00 D5 E2 D8 00 CD E4 AD 00 BE D9 DA 00 EB DD E8 DC 00 DD E8 E7 00 E8 D5 E6 DB D9 E8 AB FF 00
This translates to:
"<user> switched all changes to its Defense and Sp. Def with its target!"

ASM at AAAAAA (Power Swap):
Code:
.text
.align 2
.thumb
.thumb_func

Start:
push {lr}

GetUserStats:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x19
ldrb r3, [r1]
ldrb r4, [r1, #0x3]

GetFoeStats:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x19
ldrb r5, [r1]
ldrb r6, [r1, #0x3]

SetUserAtkToFoeAtk:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x19
strb r5, [r1]

SetUserSpAtkToFoeSpAtk:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1c
strb r6, [r1]

SetFoeAtkToUserAtk:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x19
strb r3, [r1]

SetFoeSpAtkToUserSpAtk:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1c
strb r4, [r1]

End:
pop {r0}
bx lr

.align 2
.BattleData:		.word 0x02023BE4
.UserBank:		.word 0x02023D6B
.TargetBank:		.word 0x02023D6C
ASM at BBBBBB (Guard Swap):
Code:
.text
.align 2
.thumb
.thumb_func

Start:
push {lr}

GetUserStats:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1A
ldrb r3, [r1]
ldrb r4, [r1, #0x3]

GetFoeStats:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1A
ldrb r5, [r1]
ldrb r6, [r1, #0x3]

SetUserDefToFoeDef:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1A
strb r5, [r1]

SetUserSpDefToFoeSpDef:
ldr r1, .BattleData
ldr r0, .UserBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1D
strb r6, [r1]

SetFoeDefToUserDef:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1A
strb r3, [r1]

SetFoeSpDefToUserSpDef:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, r2
add r1, #0x1D
strb r4, [r1]

End:
pop {r0}
bx lr

.align 2
.BattleData:		.word 0x02023BE4
.UserBank:		.word 0x02023D6B
.TargetBank:		.word 0x02023D6C
There's probably a more efficient way to combine those two routines together and include the check in the assembly, but this works fine even if it is a little bulky.
__________________
Reply With Quote
  #114    
Old July 21st, 2014 (08:33 AM). Edited November 3rd, 2014 by mamamama.
mamamama
 
Join Date: Feb 2014
Quote originally posted by Spherical Ice:
I've made a fully functional Close Combat effect for FireRed, with the animation varying when one stat is already at its minimum (i.e. only lowering one), when both aren't at their minimum (i.e. lowering both) and when both are at their minimum (i.e. skipping the drops altogether). This does use ASM but I've since been told that it could be done with the jumpifstat command. I'm going to post this anyway. You'll need to have the battle script callasm command, too.
Could you please double-check your Close Combat asm. It does not work with Thumb.

I'm not good at asm but a quick look at the stuff down at the bottom (Align 2) has pointers defined which are not in the code (.UserBank) and (.LowerBothBS) and in the main itself there is .CurrentMonIndex which is not down in the Align 2. list.

Would you mind re-checking it with your notes and confirming with Thumb that it works for you?


Quote originally posted by DoesntKnowHowToPlay:
Oh right this thread exists.
I've also ported Sucker Punch to Emerald:
Spoiler:
Code:
.Align 2
.UserBank: .word 0x0202420B
.TargetBank: .word 0x0202420C
.BattleStruct: .word 0x02024084
.BasePower: .word 0x02024400
.TurnOrder: .word 0x0202407E
.MonsMoved: .word 0x02024082
.MovesUsed: .word 0x02024274
.MoveTable: .word 0x08XXXXXX
.CurrentScript: .word 0x02024214
.FailScript: .word 0x082D9F1C


However, I can't manage to get "The Moved Failed" in my script. It just shows "XX Used Sucker Punch" and then nothing (everything works fine, just that this textstring doesn't come up). I've tried to add Resultmessage and missmessage after the callasm, but neither of that worked.

This is my script (Uses Quick Attack effect spot):

Spoiler:
Code:
#org @start
jumpifhalfword 0x0 0x20241EA 0x[MoveHex] @SPunch
goto 0x82D8A00

#org @SPunch
attackcanceler
accuracycheck 0x82D8A5E 0x0
attackstring
ppreduce
callasm 0x8[Offset of asm +1]
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c BANK_TARGET
waitstate
graphicalhpupdate BANK_TARGET
datahpupdate BANK_TARGET
critmessage
waitmessage DELAY_1SECOND
resultmessage
waitmessage DELAY_1SECOND
fainpokemon BANK_TARGET 0x0 0x0 
setbyte 0x2024488
cmd49 0x0 0x0
end


Do I need to add a printstring somewhere? Sorry if noobish question.
Reply With Quote
  #115    
Old July 21st, 2014 (09:10 AM). Edited August 26th, 2014 by MrDollSteak.
MrDollSteak's Avatar
MrDollSteak
Formerly known as 11bayerf1
 
Join Date: Dec 2008
Location: Hong Kong
Age: 20
Gender: Male
Quote:
Here's an effect I wrote for Flower Shield, usable in Emerald. It individually raises the defense of all Grass Pokemon present in battle (works for 1v1 and 2v2), and if there are no Grass-types out (or their defenses are all maxed) it gives the "But it failed!" message instead of animating.
Hey Tlachtli, currently porting this to Fire Red, only thing I'm having trouble with, is what exactly 0x2024200 does, and what it corresponds to. My guess is either its 0x2023D50 (existing damage) or 0x2023D60 (which I'm not entirely sure what's purpose is). Would you mind sharing what specifically that byte does?

Quote originally posted by Spherical Ice:
I've made an effect for both Power Swap and Guard Swap, using only one effect ID for both.

There's probably a more efficient way to combine those two routines together and include the check in the assembly, but this works fine even if it is a little bulky.
I'd probably hook this into Psych Up! Might be a good way to save another move effect slot.
As Psych Up copies the opponents stat changes, I figure it'd have similar usage.

---------------------------------------------------------------------------

Anyway, I've been working on redoing stat changing moves in the OP for Fire Red, these are all based on the existing scripts and are hooked into existing battle scripts. The only thing you'll need to change is the move IDs. They should all have the correct animations etc.

The benefit of this as Doesn't mentioned is that the AI will be more intelligent in selecting moves.

Hone Claws

Spoiler:
Replace effect 10 with this battle script.
Note 0x199 is Hone Claws' move ID in my rombase, if you are using your own just change that.

Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x199 @honeclaws
goto 0x1D6B77

#org @honeclaws
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x1 0xC @attack
jumpifstat BANK_USER B_= 0x6 0xC 0x81D85E7

#org @attack
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x42 0x0
setbyte 0x2023FDE 0x11
statbuffchange 0x1 true @accuracy
jumpifbyte 0x0 0x2023E87 0x2 @accuracy
printfromtable 0x83FE57C
waitmessage 0x40

#org @accuracy
setbyte 0x2023FDE 0x16
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E


Flame Charge


Spoiler:
Replace effect 70 with this battle script.
Note 0x196 is Flame Charge in my rombase, if you are adding it yourself just change that.
You'll need to set the effect byte to 100.

Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x196 @speedboost
goto 0x81D7275

#org @speedboost
setbyte 0x2023E85 0xD1
goto 0x81D6900


Charge Beam, Acid Spray and Fiery Dance

Spoiler:
Replace effect 72 with this battle script.
Note 0x16C is Charge Beam in my rombase, 0x1A9 is Acid Spray and 1AA is Fiery Dance.
Again if you're adding them yourself just change those.

Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x16C @spatkboost
jumpifhalfword 0x0 0x2023D4A 0x1A9 @harshdrop
jumpifhalfword 0x0 0x2023D4A 0x1AA @spatkboost
goto 0x81D728B

#org @spatkboost
setbyte 0x2023E85 0x52
goto 0x81D6900

#org @harshdrop
setbyte 0x2023E85 0x32
goto 0x81D6900


Coil

Spoiler:
Replace effect 208 with this battle script.
Note 0x19B is coil in my rombase, if you're adding it yourself just change that.

Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x19B @coil
goto 0x1D851F

#org @coil
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x1 0xC @attack
jumpifstat BANK_USER 0x3 0x2 0xC @attack
jumpifstat BANK_USER B_= 0x6 0xC 0x81D85E7

#org @attack
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x46 0x0
setbyte 0x2023FDE 0x11
statbuffchange 0x1 true @defense
jumpifbyte 0x0 0x2023E87 0x2 @defense
printfromtable 0x83FE57C
waitmessage 0x40

#org @defense
setbyte 0x2023FDE 0x12
statbuffchange 0x1 true @accuracy
jumpifbyte 0x0 0x2023E87 0x2 @accuracy
printfromtable 0x83FE57C
waitmessage 0x40

#org @accuracy
setbyte 0x2023FDE 0x16
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E


Quiver Dance and Geomancy

Spoiler:
Replace move effect 211 with this battle script.

To make it work it'll be a bit more tricky. You'll need Jambo's message battle hack installed, as well Jambo's setword command (make this command FA in the new command table).

An alternative option is expanding the battle message table at 3FDF3C, and then adding a new index to the 2-turn message table to relate to Geomancy's 0x8 index, though you'll need to rewrite the section slightly.

I personally recommend Jambo's message battle hack for now.

Geomancy as of yet does not have an index in my rombase so make your own. As a two-turn move it should work perfectly, assuming you do its animation and message correctly.

Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x19F @quiverdance
jumpifhalfword 0x0 0x2023D4A 0x??? @geomancy
goto 0x1D8583

#org @quiverdance
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x4 0xC @spattack
jumpifstat BANK_USER 0x3 0x5 0xC @spattack
jumpifstat BANK_USER B_= 0x3 0xC 0x81D85E7

#org @spattack
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x38 0x0
setbyte 0x2023FDE 0x14
statbuffchange 0x1 true @spdefense
jumpifbyte 0x0 0x2023E87 0x2 @spdefense
printfromtable 0x83FE57C
waitmessage 0x40

#org @spdefense
setbyte 0x2023FDE 0x15
statbuffchange 0x1 true @speed
jumpifbyte 0x0 0x2023E87 0x2 @speed
printfromtable 0x83FE57C
waitmessage 0x40

#org @speed
setbyte 0x2023FDE 0x13
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E

#org @geomancy
jumpifsecondarystatus BANK_USER 0x1000 @turn2
jumpifword B_& 0x2023DD0 0x200 @turn2
call @geomancymessage
goto 0x81D694E

#org @geomancymessage
attackcanceler
printstring 0x130
ppreduce
attackanimation
waitanimation
orword 0x2023DD0 0x8000000
setbyte 0x2023E85 0x4C
seteffecttarget
copyarray 0x2023E87 0x2023FD3 0x1
setword 0x203C020 0x8DDDDDD
printstring 0x184
waitmessage DELAY_1SECOND
return

#org @turn2
attackcanceler
setbyte 0x2023E85 0xC
setbyte 0x2023FDC 0x1
clearstatus BANK_USER
orword 0x2023DD0 0x800
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x4 0xC @spattack2
jumpifstat BANK_USER 0x3 0x5 0xC @spattack2
jumpifstat BANK_USER B_= 0x3 0xC 0x81D85E7

#org @spattack2
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x38 0x0
setbyte 0x2023FDE 0x24
statbuffchange 0x1 true @spdefense2
jumpifbyte 0x0 0x2023E87 0x2 @spdefense2
printfromtable 0x83FE57C
waitmessage 0x40

#org @spdefense2
setbyte 0x2023FDE 0x25
statbuffchange 0x1 true @speed2
jumpifbyte 0x0 0x2023E87 0x2 @speed2
printfromtable 0x83FE57C
waitmessage 0x40

#org @speed2
setbyte 0x2023FDE 0x23
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E
At DDDDDD place the following hex:
FD 0F 00 DD E7 00 D5 D6 E7 E3 E6 D6 DD E2 DB 00 E4 E3 EB D9 E6 AB


Shift Gear and Shell Smash

Spoiler:
Replace move effect 212 with this battle script.
Currently Shift Gear does not have an index in my rombase so you'll have to make one.
Shell Smash's index is 1C4 in my rombase so just change that.

Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x??? @shiftgear
jumpifhalfword 0x0 0x2023D4A 0x1C4 @shellsmash
goto 0x1D85FB

#org @shiftgear
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x1 0xC @attack
jumpifstat BANK_USER B_= 0x3 0xC 0x81D85E7

#org @attack
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0xA 0x0
setbyte 0x2023FDE 0x11
statbuffchange 0x1 true @speed
jumpifbyte 0x0 0x2023E87 0x2 @speed
printfromtable 0x83FE57C
waitmessage 0x40

#org @speed
setbyte 0x2023FDE 0x23
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E

#org @shellsmash
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x2 0x2 0x0 @dropdefense
jumpifstat BANK_USER B_= 0x5 0x0 @boost

#org @dropdefense
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x1 0x24 0x9
setbyte 0x2023FDE 0x92
statbuffchange 0x81 true @dropspdefense
jumpifbyte 0x0 0x2023E87 0x2 @dropspdefense
printfromtable 0x83FE57C
waitmessage 0x40

#org @dropspdefense
setbyte 0x2023FDE 0x95
statbuffchange 0x81 true @boost
jumpifbyte 0x0 0x2023E87 0x2 @boost
printfromtable 0x83FE57C
waitmessage 0x40

#org @boost
jumpifstat BANK_USER 0x3 0x1 0xC @sharpattack
jumpifstat BANK_USER 0x3 0x4 0xC @sharpattack
jumpifstat BANK_USER B_= 0x3 0xC 0x81D85E7

#org @sharpattack
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x1A 0x0
setbyte 0x2023FDE 0x21
statbuffchange 0x1 true @sharpspattack
jumpifbyte 0x0 0x2023E87 0x2 @sharpspattack
printfromtable 0x83FE57C
waitmessage 0x40

#org @sharpspattack
setbyte 0x2023FDE 0x24
statbuffchange 0x1 true @sharpspeed
jumpifbyte 0x0 0x2023E87 0x2 @sharpspeed
printfromtable 0x83FE57C
waitmessage 0x40

#org @sharpspeed
setbyte 0x2023FDE 0x23
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E


I'm currently working on porting Tlachtli's Flower Shield to Fire Red,
as well as completing Work Up, Growth, and Rototiller.
I just need to find the best move effect this to. I'm currently thinking
of hooking into effect 12 (sp. atk) as most Pokemon that use Growth
in particular, would be doing so for the Special Attack boost.
Physical Pokemon would likely use the move anyway.

Haven't tested these particularly, so if anyone spots any bugs let me know.
__________________
Reply With Quote
  #116    
Old July 21st, 2014 (09:11 AM). Edited July 21st, 2014 by mamamama.
mamamama
 
Join Date: Feb 2014
Quote originally posted by Spherical Ice:
Oh, right, that was my mistake, sorry.
Thanks!

It compiles into Thumb now. However, it doesn't lower any stats. I've noticed that the .LowerBothBS is not in the script (but it is in the .Align 2) while the .LowerSpDefBS and .LowerDefBS are (Under BothBS, there is only ldr r4, .EndBS while the other two look differently. Perhaps that's the issue?

Quote originally posted by MrDollSteak:
I'm currently working on porting Tlachtli's Flower Shield to Fire Red,
as well as completing Work Up, Growth, Shell Smash and Rototiller.
I just need to find the best move effect this to. I'm currently thinking
of hooking into effect 12 (sp. atk) as most Pokemon that use Growth and
Shell Smash in particular, would be doing so for the Special Attack boost.
Physical Pokemon would likely use the move anyway.
Why not use Dragon Dance for Shell Smash? Although it raises attack, doesnt the game calculate that the Pokemon has raised Sp. Attack + Speed aswell after one Shell Smash and then proceed to attack if opponent is in OHKO range?
Reply With Quote
  #117    
Old July 21st, 2014 (09:17 AM). Edited July 21st, 2014 by Spherical Ice.
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
Quote originally posted by mamamama:
Thanks!

It compiles into Thumb now. However, it doesn't lower any stats. I've noticed that the .LowerBothBS is not in the script (but it is in the .Align 2) while the .LowerSpDefBS and .LowerDefBS are (Under BothBS, there is only ldr r4, .EndBS while the other two look differently. Perhaps that's the issue?
Oh, right, my mistake again, I'm just really dumb. Fixed in the original post. Turns out the stat animations were wrong too as they displayed stats being raised, and that's also been fixed. I've also added correct strings to the Power Swap / Guard Swap effects.
__________________
Reply With Quote
  #118    
Old July 21st, 2014 (09:41 AM).
mamamama
 
Join Date: Feb 2014
Quote originally posted by Spherical Ice:
Oh, right, my mistake again, I'm just really dumb. Fixed in the original post. Turns out the stat animations were wrong too as they displayed stats being raised, and that's also been fixed. I've also added correct strings to the Power Swap / Guard Swap effects.
Hmm.. Still Doesn't lower any stats :/
Reply With Quote
  #119    
Old July 21st, 2014 (09:45 AM).
MrDollSteak's Avatar
MrDollSteak
Formerly known as 11bayerf1
 
Join Date: Dec 2008
Location: Hong Kong
Age: 20
Gender: Male
Quote originally posted by mamamama:
Thanks!

It compiles into Thumb now. However, it doesn't lower any stats. I've noticed that the .LowerBothBS is not in the script (but it is in the .Align 2) while the .LowerSpDefBS and .LowerDefBS are (Under BothBS, there is only ldr r4, .EndBS while the other two look differently. Perhaps that's the issue?



Why not use Dragon Dance for Shell Smash? Although it raises attack, doesnt the game calculate that the Pokemon has raised Sp. Attack + Speed aswell after one Shell Smash and then proceed to attack if opponent is in OHKO range?
The worry for this is having a Gorebyss with only special moves, ultimately It'd probably use the move in the first place for the Speed Boost, but theres always the chance. I'll give it a mull over.

Quote:
Oh, right, my mistake again, I'm just really dumb. Fixed in the original post. Turns out the stat animations were wrong too as they displayed stats being raised
Spherical, I'd probably just handle the stat lowering through the battle script itself, easier to bug check.
__________________
Reply With Quote
  #120    
Old July 21st, 2014 (09:47 AM). Edited July 21st, 2014 by Spherical Ice.
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
Quote originally posted by mamamama:
Hmm.. Still Doesn't lower any stats :/
It does, but I edited it again since my post.

Quote originally posted by MrDollSteak:
Spherical, I'd probably just handle the stat lowering through the battle script itself, easier to bug check.
This is true, though the original did work fine and I just messed it up when trying to make it readable. It should work now (in that, I completely redid it in my ROM using the scripts in the original post and it works fine). I might rewrite it in the future so that it's better though, that was one of my first ASM routines and one of my first battle scripts so it probably does need revision.
__________________
Reply With Quote
  #121    
Old July 21st, 2014 (10:10 AM). Edited July 21st, 2014 by mamamama.
mamamama
 
Join Date: Feb 2014
Quote originally posted by Spherical Ice:
It does, but I edited it again since my post.
Got it to work now after the swapping of EndBS and LowerBothBS.

Congrats on your first ASM! I've had many hours of rage not getting Close Combat to lower the single Defense or Sp. Def. stats properly after one reaches -6, so your effort is definitely appreciated!

Hopefully I'll have time to learn some asm soon, too, so I can contribute more to the forum and to my own hack.

EDIT: Also, for those who want the Close Combat asm for Emerald:

Spoiler:
Code:
.align 2
.BattleData: .word 0x02024084
.UserBank: .word 0x0202420B
.ActiveBSPointer: .word 0x02024214
.LowerSpDefBS: .word 0x08AAAAAA
.LowerDefBS: .word 0x08BBBBBB
.LowerBothBS: .word 0x08CCCCCC
.EndBS: .word 0x082D8A4E
Reply With Quote
  #122    
Old July 21st, 2014 (12:17 PM).
Tlachtli's Avatar
Tlachtli
Crit happens.
 
Join Date: Jan 2012
Location: Faraway place
Age: 24
Gender: Male
Nature: Modest
Quote originally posted by MrDollSteak:
Hey Tlachtli, currently porting this to Fire Red, only thing I'm having trouble with, is what exactly 0x2024200 does, and what it corresponds to. My guess is either its 0x2023D50 (existing damage) or 0x2023D60 (which I'm not entirely sure what's purpose is). Would you mind sharing what specifically that byte does?
That's just an arbitrary, unused halfword I recycle as a temp variable in my ASMs and battle scripts. I can't say I'm 100% certain it's safe, but I watched it over the course of several battles and never saw it get used/changed by anything. Any halfword (or in this case, just a byte) that doesn't get used during battle and is cleared afterword will work fine.

In this case, I'm using it as a flag to check if the move's initial animation has already been played. If it cycles through all the targets and never sets the flag (because it never found a valid target and thus played the animation) then it knows to print the "But it failed" message.
__________________
Pokemon Sigma Σmerald:

A Gen 3 remake de-make, (soon to be) featuring many Gen VI mechanics
Reply With Quote
  #123    
Old July 21st, 2014 (03:06 PM).
Spherical Ice's Avatar
Spherical Ice
 
Join Date: Nov 2007
Location: UK
Send a message via Skype™ to Spherical Ice
Brine effect for FireRed, requires the callasm command as usual:

Battle Script:
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
callasm 0x8AABBCC +1
ASM at AABBCC:
Code:
.text
.align 2
.thumb
.thumb_func

Start:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x28
add r1, r2
ldrb r0, [r1]
ldrb r2, [r1, #0x4]
lsr r2, #1
cmp r0, r2
bgt End
mov r2, #0x2
ldr r3, .DamageMultiplier
strb r2, [r3, #0x0]

End:
ldr r0, .ReturnBS
ldr r1, .ActiveBSPointer
str r0, [r1, #0x0]
bx lr

.align 2
.BattleData:		.word 0x02023BE4
.TargetBank:		.word 0x02023D6C
.ActiveBSPointer:	.word 0x02023D74
.DamageMultiplier:	.word 0x02023FD2
.ReturnBS:		.word 0x081D6926
The bolded offset points to this battle script from vanilla FireRed:
Code:
#org 0x1D6926
attackcanceler
accuracycheck 0x81D695E 0x0
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
seteffectwithchancetarget
faintpokemon 0x0 0x0 0x0
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end

#org 0x1D695E
attackstring
ppreduce
pause 0x20
missmessage
resultmessage
waitmessage 0x40
goto 0x81D694E

#org 0x1D694E
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end
__________________
Reply With Quote
  #124    
Old July 21st, 2014 (04:18 PM).
BugMania's Avatar
BugMania
The Bug Master
 
Join Date: Jun 2013
Gender: Male
Nature: Quiet
Quote originally posted by Spherical Ice:
Brine effect for FireRed, requires the callasm command as usual:

Battle Script:
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @start
callasm 0x8AABBCC +1
ASM at AABBCC:
Code:
.text
.align 2
.thumb
.thumb_func

Start:
ldr r1, .BattleData
ldr r0, .TargetBank
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x28
add r1, r2
ldrb r0, [r1]
ldrb r2, [r1, #0x4]
lsr r2, #1
cmp r0, r2
bgt End
mov r2, #0x2
ldr r3, .DamageMultiplier
strb r2, [r3, #0x0]

End:
ldr r0, .ReturnBS
ldr r1, .ActiveBSPointer
str r0, [r1, #0x0]
bx lr

.align 2
.BattleData:        .word 0x02023BE4
.TargetBank:        .word 0x02023D6C
.ActiveBSPointer:    .word 0x02023D74
.DamageMultiplier:    .word 0x02023FD2
.ReturnBS:        .word 0x081D6926
The bolded offset points to this battle script from vanilla FireRed:
Code:
#org 0x1D6926
attackcanceler
accuracycheck 0x81D695E 0x0
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
seteffectwithchancetarget
faintpokemon 0x0 0x0 0x0
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end

#org 0x1D695E
attackstring
ppreduce
pause 0x20
missmessage
resultmessage
waitmessage 0x40
goto 0x81D694E

#org 0x1D694E
setbyte 0x2023FD8 0x0
cmd49 0x0 0x0
end
Great! If I understand correctly, you have found an easier way to do what I had previously shown the way!
__________________
Even the smallest of beings can achieve the greatest of obstacles!
Click in the spoiler, if you dare!
Spoiler:


L
et's dream bigger than our bodies can endure!
G
et to the extreme!

See my works here

Reply With Quote
  #125    
Old July 21st, 2014 (08:24 PM). Edited July 30th, 2014 by MrDollSteak.
MrDollSteak's Avatar
MrDollSteak
Formerly known as 11bayerf1
 
Join Date: Dec 2008
Location: Hong Kong
Age: 20
Gender: Male
Quote originally posted by Tlachtli:
That's just an arbitrary, unused halfword I recycle as a temp variable in my ASMs and battle scripts. I can't say I'm 100% certain it's safe, but I watched it over the course of several battles and never saw it get used/changed by anything. Any halfword (or in this case, just a byte) that doesn't get used during battle and is cleared afterword will work fine.

In this case, I'm using it as a flag to check if the move's initial animation has already been played. If it cycles through all the targets and never sets the flag (because it never found a valid target and thus played the animation) then it knows to print the "But it failed" message.
Awesome! Thanks Tlachtli. I'm using 02023D60 in this case, as theres nothing specific that it does.

Also I've edited my original post, since I've added Shell Smash to Dragon Dance's BS. As mamamama rightly said +Atk and +Speed is closer to Shell Smash's effect than +Spatk could have been. Anyway here are the new moves! All for Fire Red.

Flower Shield

Spoiler:
Replace effect 11 with this battle script.
Flower Shield doesn't yet have an index in my rombase so just give it one.
Credits to Tlachtli for his original Emerald battle script.
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @Effect11
setbyte 0x2023FDE 0x12
jumpifhalfword B_= 0x2023D4A 0x??? @FlowerShield
goto 0x1D6B9E

#org @FlowerShield
setbyte 0x02023D60 0x0
attackcanceler
attackstring
ppreduce
cmd25
jumpiftype 0x1 0xC @SelfGrass
goto @Call

#org @SelfGrass
jumpifsecondarystatus 0x1 0x1000000 @NextTarget
jumpifstat 0x1 B_>= 0x2 0xC @NextTarget
jumpifbyte B_= 0x02023D60 0x1 @SelfNoAnimation
attackanimation
waitanimation
setbyte 0x02023D60 0x1
goto @SelfNoAnimation

#org @SelfNoAnimation
cmd47
playstatchangeanimation 0x1 0x4 0x0
statbuffchange 0x80 true @NextTarget
jumpifbyte B_>= 0x2023E87  0x2 @NextTarget
printfromtable 0x83FE57C
waitmessage 0x40

#org @NextTarget
cmd25

#org @Call
jumpifarrayequal 0x2023D6B 0x2023D6C 0x1 @NextTarget
call @TargetBuff
setbyte 0x2023FD8 0x0
cmd49 0x2 0x10
jumpwhiletargetvalid @NextTarget
jumpifbyte B_= 0x02023D60 0x0 @NoBuffs
end

#org @TargetBuff
jumpiftype 0x0 0xC @Grass
goto @Return

#org @Grass
jumpifsecondarystatus 0x0 0x1000000 @Return
jumpifstat 0x0 B_>= 0x2 0xC @Return
jumpifbyte B_= 0x02023D60 0x1 @NoAnimation
attackanimation
waitanimation
setbyte 0x02023D60 0x1
goto @NoAnimation

#org @NoAnimation
cmd47
playstatchangeanimation 0x0 0x4 0x0
statbuffchange 0x0 false @Return
jumpifbyte B_>= 0x2023E87 0x2 @Return
printfromtable 0x83FE57C
waitmessage 0x40

#org @Return
return

#org @NoBuffs
pause 0x20
orbyte 0x2023DCC 0x20
resultmessage
waitmessage 0x40
end


Work Up and Growth and Rototiller

Spoiler:
Replace effect 13 with this battle script.
Growth is updated to its Gen V effect.
Work Up has an index of 19E in my rombase, and Rototiller is 0x1DF so just make note of that.
Rototiller works in the same way that Flower Shield does, so thanks to Tlachtli for the original notes on how to do this.
Code:
#include abilities.bsh
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x4A @growth
jumpifhalfword 0x0 0x2023D4A 0x19E @workup
jumpifhalfword 0x0 0x2023D4A 0x1DF @rototiller
goto 0x1D6B8D

#org @growth
jumpifabilitypresent ABILITY_CLOUDNINE @workup
jumpifabilitypresent ABILITY_AIRLOCK @workup
jumpifhalfword B_& 0x2023F1C 0x60 @sunlight

#org @sunlight
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x1 0xC @attack2
jumpifstat BANK_USER B_= 0x4 0xC 0x81D85E7

#org @attack2
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x12 0x0
setbyte 0x2023FDE 0x21
statbuffchange 0x1 true @spatk2
jumpifbyte 0x0 0x2023E87 0x2 @spatk2
printfromtable 0x83FE57C
waitmessage 0x40

#org @spatk2
setbyte 0x2023FDE 0x24
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E

#org @workup
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x1 0xC @attack
jumpifstat BANK_USER B_= 0x4 0xC 0x81D85E7

#org @attack
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x12 0x0
setbyte 0x2023FDE 0x11
statbuffchange 0x1 true @spatk
jumpifbyte 0x0 0x2023E87 0x2 @spatk
printfromtable 0x83FE57C
waitmessage 0x40

#org @spatk
setbyte 0x2023FDE 0x14
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E

#org @rototiller
setbyte 0x2023D60 0x0
attackcanceler
attackstring
ppreduce
cmd25
jumpiftype 0x1 0xC @selfgrass
goto @call

#org @selfgrass
jumpifsecondarystatus 0x1 0x1000000 @next
jumpifstat 0x1 B_>= 0x1 0xC @next
jumpifstat 0x1 B_>= 0x4 0xC @next
jumpifbyte B_= 0x2023D60 0x1 @selfnoanimation
attackanimation
waitanimation
setbyte 0x2023D60 0x1

#org @selfnoanimation
cmd47
playstatchangeanimation 0x1 0x12 0x0
setbyte 0x2023FDE 0x11
statbuffchange 0x80 true @selfnoanimation2
jumpifbyte B_>= 0x2023E87 0x2 @selfnoanimation2
printfromtable 0x83FE57C
waitmessage 0x40

#org @selfnoanimation2
setbyte 0x2023FDE 0x14
statbuffchange 0x80 true @next
jumpifbyte B_>= 0x2023E87 0x2 @next
printfromtable 0x83FE57C
waitmessage 0x40

#org @next
cmd25

#org @call
jumpifarrayequal 0x2023D6B 0x2023D6C 0x1 @next
call @target
setbyte 0x2023FD8 0x0
cmd49 0x2 0x10
jumpwhiletargetvalid @next
jumpifbyte B_= 0x2023D60 0x0 @nobuffs
end

#org @target
jumpiftype 0x0 0xC @grass
goto @return

#org @grass
jumpifsecondarystatus 0x0 0x1000000 @return
jumpifstat 0x0 B_>= 0x1 0xC @return
jumpifstat 0x0 B_>= 0x4 0xC @return
jumpifbyte B_= 0x02023D60 0x1 @noanimation
attackanimation
waitanimation
setbyte 0x02023D60 0x1

#org @noanimation
cmd47
playstatchangeanimation 0x0 0x12 0x0
setbyte 0x2023FDE 0x11
statbuffchange 0x0 false @noanimation2
jumpifbyte B_>= 0x2023E87 0x2 @noanimation2
printfromtable 0x83FE57C
waitmessage 0x40

#org @noanimation2
setbyte 0x2023FDE 0x14
statbuffchange 0x0 false @return
jumpifbyte B_>= 0x2023E87 0x2 @return
printfromtable 0x83FE57C
waitmessage 0x40

#org @return
return

#org @nobuffs
pause 0x20
orbyte 0x2023DCC 0x20
resultmessage
waitmessage 0x40
end


Cotton Guard

Spoiler:
Replace effect 51 with this battle script.
You'll need Jambo's battle message hack and set word command.
0x1B7 is the index for Cotton Guard so just change that.
It successfully raises Defense by 3 stages and displays the message 'drastically rose' not Sharply rose.
Though if you are already at +4 or +5 it will jump to the equivalent +2 or +1 battle script.
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x1B7 @cottonguard
goto 0x1D7103

#org @cottonguard
jumpifstat BANK_USER B_>= 0x2 0xA 0x1D7103
jumpifstat BANK_USER B_>= 0x2 0xB 0x1D6B82
attackcanceler
attackstring
ppreduce
setbyte 0x2023FDE 0x22
statbuffchange 0x1 true 0x81D6BCC
jumpifbyte 0x0 0x2023E87 0x2 0x81D6BC4

#org @singleboost
attackanimation
waitanimation
cmd47
playanimation BANK_USER 0x1 0x2023FD4
setbyte 0x2023FDE 0x12
statbuffchange 0x1 true 0x81D6BCC
jumpifbyte 0x0 0x2023E87 0x2 0x81D6BC4

#org @end
setword 0x203C020 0x8CCCCCC
printstring 0x184
waitmessage DELAY_1SECOND
goto 0x81D694E
At CCCCCC place this hex:
FD 0F B4 E7 00 BE D9 DA D9 E2 E7 D9 FE D8 E6 D5 E7 E8 DD D7 D5 E0 E0 ED 00 E6 E3 E7 D9 AB


Tail Glow

Spoiler:
Replace effect 53 with this battle script.
You'll need Jambo's battle message hack and set word command.
It updates Tail Glow to its Gen V+ usage.
It successfully raises Sp. Atk by 3 stages and displays the message 'drastically rose' not Sharply rose.
Though if you are already at +4 or +5 it will jump to the equivalent +2 or +1 battle script.
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x126 @tailglow
goto 0x1D7119

#org @tailglow
jumpifstat BANK_USER B_>= 0x4 0xA 0x1D7119
jumpifstat BANK_USER B_>= 0x4 0xB 0x1D6B8D
attackcanceler
attackstring
ppreduce
setbyte 0x2023FDE 0x24
statbuffchange 0x1 true 0x81D6BCC
jumpifbyte 0x0 0x2023E87 0x2 0x81D6BC4

#org @singleboost
attackanimation
waitanimation
cmd47
playanimation BANK_USER 0x1 0x2023FD4
setbyte 0x2023FDE 0x14
statbuffchange 0x1 true 0x81D6BCC
jumpifbyte 0x0 0x2023E87 0x2 0x81D6BC4

#org @end
setword 0x203C020 0x8DDDDDD
printstring 0x184
waitmessage DELAY_1SECOND
goto 0x81D694E
At DDDDDD place this hex:
FD 0F B4 E7 00 CD E4 AD 00 BB E8 DF FE D8 E6 D5 E7 E8 DD D7 D5 E0 E0 ED 00 E6 E3 E7 D9 AB


Charge

Spoiler:
Replace effect 174 with this battle script.
It's Charge but now with a permanent Sp. Def boost that's added after the charge effect to match the message style of Gen V.
Code:
#dynamic 0x800000
#freespacebyte 0xFF

#org @charge
attackcanceler
attackstring
ppreduce
setcharge
attackanimation
waitanimation
printstring 0xA5
waitmessage DELAY_1SECOND

#org @spdefboost
setbyte 0x2023FDE 0x15
statbuffchange 0x1 true 0x81D6BCC
jumpifbyte B_!= 0x2023E87 0x2 0x81D6BCC
goto 0x81D6BBC
__________________
Reply With Quote
Reply
Quick Reply

Sponsored Links
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are UTC -8. The time now is 01:38 PM.