Advertiser Content

Development Move Resource Thread Page 9

Started by Spherical Ice April 22nd, 2013 10:29 PM
  • 163531 views
  • 425 replies
Male
Forina
Seen 11 Hours Ago
Posted July 13th, 2019
110 posts
12.1 Years
The following is Boomburst animation for Emerald that translated from MrDollSteak's Rombase.

Spoiler:
02 74 72 59 08 02 05 01 00 01 00 00 00 0C 00 1A 21 05 00 D6 27 00 DB 27 0A 03 03 91 6D 10 08 02 01 00 00 02 98 38 59 08 03 06 00 00 00 00 00 00 00 00 1F 00 08 00 19 F1 00 C0 02 ZZ YY XX 08 02 04 00 00 1D 00 F4 FF 00 00 02 ZZ YY XX 08 02 04 00 00 F4 FF E3 FF 01 00 04 10 03 91 6D 10 08 02 01 00 00 02 98 38 59 08 03 06 00 00 00 00 00 00 00 00 1F 00 08 00 19 F1 00 C0 02 ZZ YY XX 08 02 04 00 00 0C 00 E3 FF 01 00 02 ZZ YY XX 08 02 04 00 00 E3 FF F4 FF 00 00 04 10 03 91 6D 10 08 02 01 00 00 02 98 38 59 08 03 06 00 00 00 00 00 00 00 00 1F 00 08 00 19 F1 00 C0 02 ZZ YY XX 08 02 04 00 00 18 00 E8 FF 01 00 02 ZZ YY XX 08 02 04 00 00 E8 FF E8 FF 00 00 05 0B 03 02 74 72 59 08 02 05 01 00 01 00 0C 00 00 00 1A 21 05 0B 03 0D 08

At offset XX YY ZZ:
D6 27 D6 27 14 49 52 08 18 37 59 08 00 00 00 00 A8 C6 2E 08 C9 77 0A 08
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
Hi, i have a question about the psystrike effect.

@swapphysicalspecialdefence
copyarray 0x020247DC @fourbytesoffreespace 2
copyarray 0x020247DA 0x020247DC 2
copyarray @fourbytesoffreespace 0x020247DA 2
copyarray 0x02024840 @anotherfourbytesoffreespace 2
copyarray 0x0202483E 0x02024840 2
copyarray @anotherfourbytesoffreespace 0x0202483E 2
return
Ok, but what are :
_ 0x020247DC
_0x020247DA
_0x02024840
_0x0202483E
Yeah i imagine what they are, but when i tried to find them with the VBA's memory vewer there are just lines of "00".
It is for FireRed, right ?

Edit : I tried to make this effect in Emerald :
Spoiler:

#dynamic 0x800000
#freespacebyte 0xFF

#org @start
attackcanceler
accuracycheck 0x82D8A5E 0x0
call @swap
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
cmd5c 0x0
waitstate
datahpupdate 0x0
graphicalhpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
call @swap
goto 0x82D8A47

@swapphysicalspecialdefence
copyarray 0x020247A0 @ennemy1 2
copyarray 0x020247A6 0x020247A0 2
copyarray @ennemy1 0x020247A6 2
copyarray 0x02024804 @ennemy2 2
copyarray 0x0202480A 0x02024804 2
copyarray @ennemy2 0x0202480A 2
copyarray 0x02024548 @ally1 2
copyarray 0x0202454E 0x02024548 2
copyarray @ally1 0x0202454E 2
copyarray 0x020245AC @ally2 2
copyarray 0x020245B2 0x020245AC 2
copyarray @ally2 0x020245B2 2
return


I don't know if it works. I'll try it tomorrow.

daniilS

busy trying to do stuff not done yet

Age 20
Male
Seen November 6th, 2018
Posted October 7th, 2015
409 posts
6.1 Years
Hi, i have a question about the psystrike effect.



Ok, but what are :
_ 0x020247DC
_0x020247DA
_0x02024840
_0x0202483E
Yeah i imagine what they are, but when i tried to find them with the VBA's memory vewer there are just lines of "00".
It is for FireRed, right ?

Edit : I tried to make this effect in Emerald :
Spoiler:

#dynamic 0x800000
#freespacebyte 0xFF

#org @start
attackcanceler
accuracycheck 0x82D8A5E 0x0
call @swap
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
cmd5c 0x0
waitstate
datahpupdate 0x0
graphicalhpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
call @swap
goto 0x82D8A47

@swapphysicalspecialdefence
copyarray 0x020247A0 @ennemy1 2
copyarray 0x020247A6 0x020247A0 2
copyarray @ennemy1 0x020247A6 2
copyarray 0x02024804 @ennemy2 2
copyarray 0x0202480A 0x02024804 2
copyarray @ennemy2 0x0202480A 2
copyarray 0x02024548 @ally1 2
copyarray 0x0202454E 0x02024548 2
copyarray @ally1 0x0202454E 2
copyarray 0x020245AC @ally2 2
copyarray 0x020245B2 0x020245AC 2
copyarray @ally2 0x020245B2 2
return


I don't know if it works. I'll try it tomorrow.
Please forget that post. I was a noob at the time. I'm sorry.
There was only a slight amount of testing done and it doesn't account for any unique causes, so it's probably bugged as hell the Distortion World.
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
I think, if we swap the Def and the spe Def of the two allies and the two enemies, it will work. The AI will use it very badly, but I'm doing it to make two signature moves (mewtwo and keldeo if I remember). So this move will be used by the user, not the AI.

just I need explanation about "copyarray". What does the "2" do at the end of this command ? I think I have to find free ram space by myself, maybe bsp can't find it alone.
Thanks

Chacha Dinosaur

Adamant and adaptive dinosaur.

Age 24
Male
Seen March 4th, 2018
Posted September 8th, 2017
454 posts
6.1 Years
I think, if we swap the Def and the spe Def of the two allies and the two enemies, it will work. The AI will use it very badly, but I'm doing it to make two signature moves (mewtwo and keldeo if I remember). So this move will be used by the user, not the AI.

just I need explanation about "copyarray". What does the "2" do at the end of this command ? I think I have to find free ram space by myself, maybe bsp can't find it alone.
Thanks
Only swapping def and sp def won't do the job mate, defense stat changes, plus abilties affecting the defense and sp def also do matter.

daniilS

busy trying to do stuff not done yet

Age 20
Male
Seen November 6th, 2018
Posted October 7th, 2015
409 posts
6.1 Years
Only swapping def and sp def won't do the job mate, defense stat changes, plus abilties affecting the defense and sp def also do matter.
That's what I meant. Please forgive my noobishness at that time, I've realized a long time ago already it requires some glorious ASMAGIX.

GoGoJJTech

(☞゚ヮ゚)☞ http://GoGoJJTech.com ☜(゚ヮ゚☜)

Age 20
Female
Earth
Seen December 9th, 2016
Posted December 5th, 2016
2,473 posts
6.8 Years
I googled ASMAGIX because I was wondering that too, the first page has one link to PC where someone mentions it then says, more serious answer ... . Maybe a troll term?
It's a play on the term "ASM" or "Assembly" which is the language the GBA runs on.
I believe in Jesus Christ my Savior. If you do too, and aren't scared to admit it, then copy and paste this into your signature.
The HGSS Music Patch - The BW/2 Music Patch - ASM: Switch Music Based on Seasons
Romhack.me Profile - Pokecommunity Profile - Youtube Channel

Support me at my site!
Pokémon Platinum Red and Blue
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
It's a play on the term "ASM" or "Assembly" which is the language the GBA runs on.
I know this, but i thought that it is an language between ASM and C or a simplified ASM.

Edit :

I tried something to make the swap. I know it's a wrong way to create the move but I did it like a training.
But when I use it, the effect resets the game.
Here my effect :
Spoiler:

#dynamic 0xF10526
#freespacebyte 0xFF

#org @start
attackcanceler
accuracycheck 0x82D8A5E 0x0
call @swap
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
cmd5c 0x0
waitstate
datahpupdate 0x0
graphicalhpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
call @swap
goto 0x82D8A47

#org @swap
copyarray 0x020247A0 0x20375F0 2 //ennemy1
copyarray 0x020247A6 0x020247A0 2
copyarray 0x20375F0 0x020247A6 2

copyarray 0x02024804 0x20375F0 2 //ennemy2
copyarray 0x0202480A 0x02024804 2
copyarray 0x20375F0 0x0202480A 2

copyarray 0x02024548 0x20375F0 2 //ally1
copyarray 0x0202454E 0x02024548 2
copyarray 0x20375F0 0x0202454E 2

copyarray 0x020245AC 0x20375F0 2 //ally2
copyarray 0x020245B2 0x020245AC 2
copyarray 0x20375F0 0x020245B2 2
return

//0x20375F0 = Var 800D


Why ?

I also tried to did it just for the first Pokemon in my team in ASM, but it also resets the game.
Here my ASM code :
Spoiler:

.text
.align 2
.thumb
.thumb_func
.global swap

main:
	push {r0-r3, lr}
	ldr r0, .DEF
	ldr r1, .DEF
	
	ldr r2, .SPEDEF
	ldr r3, .SPEDEF
	
	strh r0, [r3]
	strh r2, [r1]
	
	
	pop {r0-r3, pc}
	
.align 2
.DEF:
	.word 0x02024548
.SPEDEF:
	.word 0x0202454E


Why ? It's my codes ? It's the action which is forbidden ?

Edit : Ok, forget this, i found the solution.
But i have another question ! How to port the callasm command ? I compile the routine with the address 0x02024214 for the scriptlocation. Ok, but I have to repoint and extend the battle script command table to had the new command F9 XX XX XX 08. Where is this table ? And how do you find it ?
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
So I made the effect for Oblivion Wings for Emerald.

First insert this routine :
Spoiler:

.text
.align 2
.thumb
.thumb_func
.global main

main:
	push {r0-r3, lr}
	
	ldr r0, = (0x020241F0)
	
	ldrh r1, [r0]
	mov r2, #0x3
        mul r1, r2
        lsr r1, #2
        cmp r1, #0x0
        beq nineth
	b eighth

nineth:
	add r1, #0x1
	b eighth
	
eighth:
	ldr r2, = (0x0202420B)
	ldrb r2, [r2]
	
	cmp r2, #0x0
	beq fourth
	cmp r2, #0x1
	beq fifth
	cmp r2, #0x2
	beq sixth
	cmp r2, #0x3
	beq seventh
	b end

fourth:
	ldr r0, = (0x02024542)
	b third
	
fifth:
	ldr r0, = (0x0202479A)
	b third
	
sixth:
	ldr r0, = (0x020245A6)
	b third

seventh:
	ldr r0, = (0x020247FE)
	b third
	
third:
	mov r2, r0
	ldrh r3, [r0]
	
	add r2, #0x2
	ldrh r2, [r2]
	
	add r1, r3
	
	cmp r1, r2
	bhs first
	cmp r1, r2
	blo second
	b end
	
second:
	strh  r1, [r0]
	b end
	
first:
	strh  r2, [r0]
	b end
	
end:
	pop {r0-r3, pc}
	
.align 2
In compiled version:
0F B5 16 48 01 88 03 22 51 43 89 08 00 29 00 D0 01 E0 01 31 FF E7 12 4A 12 78 00 2A 06 D0 01 2A 06 D0 02 2A 06 D0 03 2A 06 D0 15 E0 0D 48 05 E0 0D 48 03 E0 0D 48 01 E0 0D 48 FF E7 02 1C 03 88 02 32 12 88 C9 18 91 42 04 D2 91 42 00 D3 03 E0 01 80 01 E0 02 80 FF E7 0F BD C0 46 F0 41 02 02 0B 42 02 02 42 45 02 02 9A 47 02 02 A6 45 02 02 FE 47 02 02


Then here is the effect:
Spoiler:

#dynamic 0xF00000
#freespacebyte 0xFF

#org @start
attackcanceler
accuracycheck 0x82D8A5E 0x0
attackstring
ppreduce
calculatedamage
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
negativedamage
orword 0x2024280 0x100
callasm 0x08XXXXXX
graphicalhpupdate 0x1
datahpupdate 0x1
setbyte 0x2024337 0x0
goto 0x82D8B2E
end
Where XXXXXX is a pointer to the routine +1

It looks working, but i'm not 100% sure. And I think that "Liqid Ooze" does nothing.

Edit : Wrong !
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
Some new effects:
1. Crush Grip: Just use the callasm statement after the announcement of attack and before the damage calculation.
Spoiler:

ASM:
.text
.align 2
.thumb
.thumb_func
.global crushgrip

main:
push {lr}
ldr r0, targetBank
ldrb r0, [r0]
ldr r1, battleData
mov r2, #0x58
mul r0, r2
add r3, r0, r1
ldrh r0, [r3, #0x28]
mov r2, #0x78
mul r0, r2
ldrh r1, [r3, #0x2c]
bl divide
mov r1, #0x1
add r1, r0
ldr r2, basePower
strb r1, [r2]
pop {r0}
bx r0

divide:
ldr r2, divider
bx r2

.align 2
targetBank: .word 0x02023D6C
battleData: .word 0x02023BE4
divider: .word 0x081E4019
basePower: .word 0x02023F50
There is a problem with the script. When you call the routine, it sets the base damages. But when you calculate damages, it resets the damages to the base damages of the move.

Chacha Dinosaur

Adamant and adaptive dinosaur.

Age 24
Male
Seen March 4th, 2018
Posted September 8th, 2017
454 posts
6.1 Years
There is a problem with the script. When you call the routine, it sets the base damages. But when you calculate damages, it resets the damages to the base damages of the move.
Could you please be more clear that what are you trying to stay. I am unable to understand.
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
Could you please be more clear that what are you trying to stay. I am unable to understand.
I call the routine, the base power of the move is set. The calculation is good. So 0x020244E0 (Emerald) takes 0x79 if the enemy is full life.
And then the calculate damage is called, and the base damages are reset. So 0x020244E0 takes 0x1 because in PGE I set the move's base power to 1.
So the damages inflicted to the foe are very low.

Chacha Dinosaur

Adamant and adaptive dinosaur.

Age 24
Male
Seen March 4th, 2018
Posted September 8th, 2017
454 posts
6.1 Years
I call the routine, the base power of the move is set. The calculation is good. So 0x020244E0 (Emerald) takes 0x79 if the enemy is full life.
And then the calculate damage is called, and the base damages are reset. So 0x020244E0 takes 0x1 because in PGE I set the move's base power to 1.
So the damages inflicted to the foe are very low.
You used the wrong offset for base power, use 0x02024400 instead
Male
Paris
Seen March 13th, 2018
Posted August 12th, 2017
40 posts
5.3 Years
Here is my effect for V-Create. I used the Spherical Ice's effect for Close Combat.
It is for Emerald.

First we need to insert seven battle scripts.
Spoiler:

Defense
#dynamic 0xAAAAAA
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0x4 0x1
setbyte 0x202448E 0x92
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40

#org @end
goto 0x82D8A4E
Special Defense
#dynamic 0xBBBBBB
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0x20 0x1
setbyte 0x202448E 0x95
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40

#org @end
goto 0x82D8A4E
Speed
#dynamic 0xCCCCCC
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0x8 0x1
setbyte 0x202448E 0x93
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40

#org @end
goto 0x82D8A4E
Defense and Special Defense
#dynamic 0xDDDDDD
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0x24 0x1
setbyte 0x202448E 0x92
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40
setbyte 0x202448E 0x95
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40

#org @end
goto 0x82D8A4E
Defense and Speed
#dynamic 0xEEEEEE
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0xC 0x1
setbyte 0x202448E 0x92
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40
setbyte 0x202448E 0x93
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40

#org @end
goto 0x82D8A4E
Special Defense and Speed
#dynamic 0xFFFFFF
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0x28 0x1
setbyte 0x202448E 0x95
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40
setbyte 0x202448E 0x93
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40

#org @end
goto 0x82D8A4E
Defense and Special Defense and Speed
#dynamic 0xGGGGGG
#freespacebyte 0xFF

#org @start
setbyte 0x202448F 0x0
playstatchangeanimation 0x1 0x2C 0x1
setbyte 0x202448E 0x92
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40
setbyte 0x202448E 0x95
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40
setbyte 0x202448E 0x93
statbuffchange 0x80 true @end
jumpifbyte 0x0 0x2024337 0x2 @end
printfromtable 0x85CC89C
waitmessage 0x40


#org @end
goto 0x82D8A4E


The we have to insert this routine at 0xHHHHHH.
Spoiler:

.text
.align 2
.thumb
.thumb_func

main:
	ldr r1, .battleData
	ldr r0, .userBank
	ldrb r0, [r0]
	mov r3, #0x58
	mul r3, r0
	add r1, #0x1a
	add r3, r1
	ldrb r0, [r3]
	ldrb r1, [r3, #0x3]
	ldrb r2, [r3, #0x1]
	mov r3, #0x0
	cmp r0, r3
	beq defIsZero
	cmp r1, r3
	beq spdefIsZero3
	cmp r2, r3
	beq speedIsZero3
	ldr r4, .lowerAll
	b end

defIsZero:
	cmp r1, r3
	beq spdefIsZero1
	b spdefIsZero2
	b end

spdefIsZero1:
	cmp r2, r3
	beq any
	ldr r4, .lowerSpeed
	b end
	
spdefIsZero2:
	cmp r2, r3
	beq speedIsZero1
	ldr r4, .lowerSpdDefSpeed
	b end

speedIsZero1:
	ldr r4, .lowerSpDef
	b end
	
spdefIsZero3:
	cmp r2, r3
	beq speedIsZero2
	ldr r4, .lowerDefSpeed
	b end
	
speedIsZero2:
	ldr r4, .lowerDef
	b end
	
speedIsZero3:
	ldr r4, .lowerDefSpDef
	b end
	
any:
	ldr r4, .endBS
	b end

end:
	ldr r5, .activeBSPointer
	str r4, [r5, #0x0]
	bx lr

.align 2
.battleData:		        .word 0x02024084
.userBank:			.word 0x0202420B
.activeBSPointer:	        .word 0x02024214
.lowerSpDef:		        .word 0x08BBBBBB
.lowerDef:			.word 0x08AAAAAA
.lowerDefSpDef:		.word 0x08DDDDDD
.lowerDefSpeed:		.word 0x08EEEEEE
.lowerSpdDefSpeed:	.word 0x08FFFFFF
.lowerAll:			        .word 0x08GGGGGG
.lowerSpeed:		        .word 0x08CCCCCC
.endBS:				.word 0x082D8A4E


And last, we have to insert the effect for the attack.
Spoiler:

#dynamic 0xF1138F
#freespacebyte 0xFF

#org @start
attackcanceler
accuracycheck 0x82D8A5E 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 0xHHHHHH + 1


With this effect, you have different animation for each possibility.
Male
Singapore
Seen June 26th, 2018
Posted June 18th, 2018
87 posts
5.5 Years
Here's an updated version of Fire Fang that better resembles the DS Fire Fang:
Spoiler:

02 74 72 59 08 02 05 01 00 01 00 00 00 0A 00 9F 09 05 00 9B 27 00 97 27 00 2D 27 0A 01 0C 0C 08 19 A1 00 3F 02 80 70 59 08 02 06 00 00 E0 FF 00 00 00 00 33 03 0A 00 02 80 70 59 08 02 06 00 00 20 00 04 00 00 00 CD FC 0A 00 04 0A 0E 18 2D 2D 08 04 04 19 93 00 3F 05 02 74 72 59 08 02 05 01 00 01 00 0A 00 00 00 9F 09 05 0B 03 0D 08

Also a couple of new moves:
Dark Pulse:
Spoiler:

14 00 17 00 E9 27 00 A7 27 19 98 00 C0 03 99 7B 0A 08 05 05 00 00 08 28 0C 00 05 00 01 00 04 04 03 65 60 0D 08 05 05 F9 FF F9 FF 0B 00 00 00 00 00 19 D9 00 C0 02 ZZ YY XX 08 82 01 00 00 02 ZZ YY XX 08 82 01 20 00 02 ZZ YY XX 08 82 01 40 00 02 ZZ YY XX 08 82 01 60 00 02 ZZ YY XX 08 82 01 80 00 02 ZZ YY XX 08 82 01 A0 00 02 ZZ YY XX 08 82 01 C0 00 02 ZZ YY XX 08 82 01 E0 00 0E DD 7C 2D 08 08
At offset XX YY ZZ:
E9 27 A7 27 CC 49 52 08 9C C6 2E 08 00 00 00 00 00 3A 59 08 79 68 10 08

Rock Smash:
Spoiler:

00 4A 27 00 97 27 00 9F 27 0A 03 0C 0C 08 04 01 02 58 73 59 08 83 04 0A 00 F8 FF 01 00 01 00 19 83 00 3F 03 AD 51 0D 08 02 05 01 00 00 00 03 00 05 00 01 00 02 B0 6C 59 08 82 04 F4 FF 0E 00 03 00 04 00 02 B0 6C 59 08 82 04 08 00 0E 0C 02 00 02 00 02 B0 6C 59 08 82 04 FC FF 0E 00 02 00 03 00 02 B0 6C 59 08 82 04 0C 00 0E 00 04 00 03 00 19 7B 00 05 0B 03 0D 08

By the way, is Spherical Ice busy or something? Because no one seems to be updating the OP with new animations/effects/sprites.

Spherical Ice

Age 21
Bristol, UK
Seen 1 Hour Ago
Posted 4 Weeks Ago
5,249 posts
11.7 Years
By the way, is Spherical Ice busy or something? Because no one seems to be updating the OP with new animations/effects/sprites.
Sorry about that, I just kept putting it off haha. I've updated everything, but please PM / VM me if I forgot something!
Male
Singapore
Seen June 26th, 2018
Posted June 18th, 2018
87 posts
5.5 Years
It's alright, all of us procrastinate to some extent. By the way since you have added a updated animations section, I might as well share my updated Mud Shot animation:
Spoiler:


00 13 28 0A 03 28 01 1C 90 00 C0 07 07 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 03 21 66 11 08 0A 05 04 00 01 00 00 00 09 00 B0 01 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 03 D1 52 0D 08 02 05 01 00 02 00 00 00 15 00 01 00 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 04 02 02 ZZ YY XX 08 82 05 00 00 00 00 00 00 00 00 14 00 05 03 21 66 11 08 0A 05 04 00 01 00 09 00 00 00 B0 01 05 0B 03 08
At offset XX YY ZZ:
13 28 13 28 D4 49 52 08 B4 6E 59 08 00 00 00 00 EC 6E 59 08 25 32 11 08
You'll also need to insert the custom sprite for it at slot 13 28 in the attack particles table and change the size (the bytes after the image pointer, before the index) to 00 0A.

Male
Seen August 19th, 2018
Posted August 19th, 2018
1,312 posts
12.3 Years
Payback (FireRed):
Spoiler:

Insert this ASM somewhere:
.text
.align 2
.thumb
.thumb_func
.global test

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

OrderCheck:
ldr r0, .TargetBank
ldr r1, .UserBank
ldrb r4, [r0, #0x0] /*put target bank into R4*/
ldrb r5, [r1, #0x0] /*put user bank into R5*/
ldr r1, .TurnOrder /*put turn order offset into R1*/

Loop:
ldrb r2, [r1, #0x0] 	/*put attacking PKMN into r2*/
cmp r2, r4 		/*is the attacking PKMN the target?*/
beq SuperAttack 	/*if so, prepare double damage*/
cmp r2, r5 		/*is the attacking PKMN the user?*/
beq Attack		/*if so, attack*/
add r1, #0x1		/*move on to next attacking PKMN*/
b Loop

SuperAttack:
mov r1, #0x2
ldr r0, .DamageMultiplier
strb 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
.DamageMultiplier: .word 0x02023FD2
Use this battle script:
#org @main
callasm 0x8(offset that you inserted the ASM + 1)
goto 0x81D6900
Payback animation (it's just Counter with the Dark BG):
14 00 17 00 97 27 00 9F 27 0A 03 0C 0C 08 03 7D 90 09 08 02 05 00 00 12 00 06 00 01 00 04 00 19 73 00 C0 05 02 9C 4E 3D 08 02 05 00 00 14 00 00 00 00 00 04 00 04 04 02 08 7C 3E 08 02 04 F1 FF 12 00 01 00 00 00 19 74 00 3F 04 01 03 F9 89 09 08 02 05 01 00 05 00 00 00 19 00 01 00 02 10 67 3E 08 03 05 F1 FF 12 00 08 00 01 00 00 00 04 03 02 08 7C 3E 08 02 04 00 00 FC FF 01 00 00 00 19 74 00 3F 04 01 02 10 67 3E 08 03 05 00 00 FC FF 08 00 01 00 00 00 04 03 02 08 7C 3E 08 02 04 0F 00 09 00 01 00 00 00 19 74 00 3F 04 01 02 10 67 3E 08 03 05 0F 00 09 00 08 00 01 00 00 00 04 05 02 84 4E 3D 08 02 03 00 00 00 00 05 00 05 0B 03 0D 0E C7 59 1D 08 08
Credit to DoesntKnowHowToPlay because I modified his Sucker Punch ASM for this.


Trump Card (FireRed):
Spoiler:
First, insert this ASM somewhere:
.text
.align 2
.thumb
.thumb_func
.global test

main:
push {lr}
ldr r0, .UserBank 	/*get user slot*/
ldrb r0, [r0, #0x0]
ldr r1, .BattleData	/*load battle struct*/
mov r2, #0x58		/*separate into 4*/
mul r0, r2		/*get beginning of user stats*/
add r5, r0, r1		/*R5 should now have user's offset*/

GetWhichSlot:
mov r0, #0xBC		/*make sure this is your Trump Card move ID divided by 2*/
lsl r0, r0, #0x1	/*r0 should now have Trump Card ID*/
add r5, #0xC		/*check slot 1 move ID*/
ldrh r1, [r5]
cmp r0, r1
beq ver1
add r5, #0x2		/*check slot 2 move ID*/
ldrh r1, [r5]
cmp r0, r1
beq ver2
add r5, #0x2		/*check slot 3 move ID*/
ldrh r1, [r5]
cmp r0, r1
beq ver3
add r5, #0x2		/*check slot 4 move ID*/
ldrh r1, [r5]
cmp r0, r1
beq ver4

ver1:
add r5, #0x18
ldrb r0, [r5]		/*r0 should now have how much PP is left*/
b getPP

ver2:
add r5, #0x17
ldrb r0, [r5]		/*r0 should now have how much PP is left*/
b getPP

ver3:
add r5, #0x16
ldrb r0, [r5]		/*r0 should now have how much PP is left*/
b getPP

ver4:
add r5, #0x15
ldrb r0, [r5]		/*r0 should now have how much PP is left*/
b getPP

getPP:
cmp r0, #0x4
bgt FourOrMore
cmp r0, #0x4
beq FourOrMore
cmp r0, #0x3
beq Three
cmp r0, #0x2
beq Two
cmp r0, #0x1
beq One
cmp r0, #0x0
beq Zero

FourOrMore:
mov r0, #0x28
b StorePower

Three:
mov r0, #0x32
b StorePower

Two:
mov r0, #0x3C
b StorePower

One:
mov r0, #0x50
b StorePower

Zero:
mov r0, #0xC8
b StorePower

StorePower:
ldr r1, .BasePower
strb r0, [r1]

End:
pop {r0}
bx r0

.align 2
.BattleData:		.word 0x02023BE4
.UserBank:		.word 0x02023D6B
.BasePower:		.word 0x02023F50
If your Trump Card move ID isn't 0x178, then change the bolded line to your Trump Card move ID divided by 2.

The Battle Script ID has to be 17 (Swift/Feint Attack/attacks that never miss), otherwise it won't work properly. Replace the script with this:
#org @main
jumpifhalfword 0x0 0x2023D4A 0x178 @new
jumpifhalfword 0x1 0x2023D4A 0x39 0x81D6926
jumpifspecialstatusflag 0x0 0x40000 0x1 0x81D6926
orword 0x2023DD0 0x40000
setbyte 0x2023FD2 0x2

#org @new
attackcanceler
accuracycheck 0x81D695E 0x0
attackstring
ppreduce
callasm 0x8(offset of Trump Card ASM routine +1)
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


EDIT: Also here's my really lame Trump Card particle, for Trump Card I just used Swift's animation but with this particle instead:
Male
Seen August 19th, 2018
Posted August 19th, 2018
1,312 posts
12.3 Years
Natural Gift for FireRed:

Step 1: First, add this command in commands.bsh for Battle Script Pro (credit to KDS for first discovering this when he posted his Incinerate script):
Spoiler:
#command removeitem 0x6A 0x1 "Bank" 0x1
(this command to remove items is already in the game so you don't need to add code or anything, it's just unidentified by BSP)

Step 2:
Compile the following table and put it into free space, make sure you take note of the offset you put it in. We'll refer to this table as NATURAL GIFT TABLE:
Spoiler:
.align 2
.text

main:
/*CHERI*/
.hword 0x0085
.byte 0x0A
.byte 0x50

/*CHESTO*/
.hword 0x0086
.byte 0x0B
.byte 0x50

/*PECHA*/
.hword 0x0087
.byte 0x0D
.byte 0x50

/*RAWST*/
.hword 0x0088
.byte 0x0C
.byte 0x50

/*ASPEAR*/
.hword 0x0089
.byte 0x0F
.byte 0x50

/*LEPPA*/
.hword 0x008A
.byte 0x01
.byte 0x50

/*ORAN*/
.hword 0x008B
.byte 0x03
.byte 0x50

/*PERSIM*/
.hword 0x008C
.byte 0x04
.byte 0x50

/*LUM*/
.hword 0x008D
.byte 0x02
.byte 0x50

/*SITRUS*/
.hword 0x008E
.byte 0x0E
.byte 0x50

/*FIGY*/
.hword 0x008F
.byte 0x06
.byte 0x50

/*WIKI*/
.hword 0x0090
.byte 0x05
.byte 0x50

/*MAGO*/
.hword 0x0091
.byte 0x07
.byte 0x50

/*AGUAV*/
.hword 0x0092
.byte 0x10
.byte 0x50

/*IAPAPA*/
.hword 0x0093
.byte 0x11
.byte 0x50

/*RAZZ*/
.hword 0x0094
.byte 0x08
.byte 0x50

/*BLUK*/
.hword 0x0095
.byte 0x0A
.byte 0x5A

/*NANAB*/
.hword 0x0096
.byte 0x0B
.byte 0x5A

/*WEPEAR*/
.hword 0x0097
.byte 0x0D
.byte 0x5A

/*PINAP*/
.hword 0x0098
.byte 0x0C
.byte 0x5A

/*POMEG*/
.hword 0x0099
.byte 0x0F
.byte 0x5A

/*KELPSY*/
.hword 0x009A
.byte 0x01
.byte 0x5A

/*QUALOT*/
.hword 0x009B
.byte 0x03
.byte 0x5A

/*HONDEW*/
.hword 0x009C
.byte 0x04
.byte 0x5A

/*GREPA*/
.hword 0x009D
.byte 0x02
.byte 0x5A

/*TAMATO*/
.hword 0x009E
.byte 0x0E
.byte 0x5A

/*CORNN*/
.hword 0x009F
.byte 0x06
.byte 0x5A

/*MAGOST*/
.hword 0x00A0
.byte 0x05
.byte 0x5A

/*RABUTA*/
.hword 0x00A1
.byte 0x07
.byte 0x5A

/*NOMEL*/
.hword 0x00A2
.byte 0x10
.byte 0x5A

/*SPELON*/
.hword 0x00A3
.byte 0x11
.byte 0x5A

/*PAMTRE*/
.hword 0x00A4
.byte 0x08
.byte 0x5A

/*WATMEL*/
.hword 0x00A5
.byte 0x0A
.byte 0x64

/*DURIN*/
.hword 0x00A6
.byte 0x0B
.byte 0x64

/*BELUE*/
.hword 0x00A7
.byte 0x0D
.byte 0x64

/*LIECHI*/
.hword 0x00A8
.byte 0x0C
.byte 0x64

/*GANLON*/
.hword 0x00A9
.byte 0x0F
.byte 0x64

/*SALAC*/
.hword 0x00AA
.byte 0x01
.byte 0x64

/*PETAYA*/
.hword 0x00AB
.byte 0x03
.byte 0x64

/*APICOT*/
.hword 0x00AC
.byte 0x04
.byte 0x64

/*LANSAT*/
.hword 0x00AD
.byte 0x02
.byte 0x64

/*STARF*/
.hword 0x00AE
.byte 0x0E
.byte 0x64

/*ENIGMA*/
.hword 0x00AF
.byte 0x06
.byte 0x64

/*end table*/
.hword 0xFFFF
.hword 0xFFFF

When compiled, the format of this table will be [XX XX] [YY] [ZZ], with XXXX being the index number of the item, YY being the type that Natural Gift will change into, and ZZ being the base power. This table only covers the berries that are in Gen 3, so if you've added new berries then you'll have to add them into the table. MAKE SURE YOU LEAVE THE FOUR FF BYTES AT THE END, DO NOT OVERWRITE IT. (or change them to FE bytes, and in Step 3 modify the line "mov r4, 0xFF" to "mov r4, 0xFE").

Step 3:
Insert this routine into free space, and take note of its offset. We'll refer to this as ASM ROUTINE 1:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

main:
push {lr}
ldr r0, .UserBank
ldr r1, .BattleData
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x2E
add r1, r2
ldrh r0, [r1] /*r0 should now have held item. r1 is the RAM offset of the held item*/
cmp r0, #0x0
beq Abort
ldr r2, .NaturalGiftTable
mov r4, #0xFF

loop:
ldrh r3, [r2] /*item ID*/
ldrb r5, [r2, #0x3]
cmp r5, r4
beq Abort /*fail if 4th byte is FF*/
cmp r0, r3
beq Confirmed
add r2, #0x4
b loop

Confirmed:
ldrb r4, [r2, #0x2] /*Type*/
ldrb r5, [r2, #0x3] /*Power*/
ldr r0, .MemAddress
ldr r0, [r0]
add r0, #0x13
strb r4, [r0] /*change Type*/
add r0, #0x7B
strb r4, [r0]
ldr r0, .BasePower
strb r5, [r0]
b Attack

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

Attack:
End:
pop {r0}
bx r0

.align 2
.BattleData: .word 0x02023BE4
.UserBank: .word 0x02023D6B
.BasePower: .word 0x02023F50
.MemAddress: .word 0x02023FE8
.CurrentScript: .word 0x02023D74
.FailScript: .word 0x081D7DF0
.NaturalGiftTable: .word 0x08(OFFSET OF NATURAL GIFT TABLE)

Make sure you put in the offset of the Natural Gift table at the last line.

Step 4:
Now, insert this routine into free space as well, and take note of its offset. We'll refer to this as ASM ROUTINE 2:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

GetOpponentType:
push {lr}
ldr r0, .TargetBank
ldr r1, .BattleData
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x21
add r1, r2
ldrb r0, [r1] /*r0 should now have opponent Type 1*/
ldrb r2, [r1, #0x1] /*r2 should now have opponent Type 2*/

GetNaturalGiftType:
ldr r1, .MemAddress
ldr r1, [r1]
add r1, #0x13
ldrb r1, [r1] /*r1 should now have modified Natural Gift type*/
ldr r3, .TypeChart

/*check attacking type*/
Check1:
ldrb r4, [r3] /*r4 has Type Chart attacking type*/
ldrb r5, [r3, #0x1] /*r5 has Type Chart defending type*/
ldrb r6, [r3, #0x2] /*r6 has Type Chart effectiveness*/
cmp r4, #0xFE
beq Abort
cmp r1, r4 /*check NG type with Attacking type*/
bne Recheck
cmp r0, r5 /*check opponent Type 1 with Defending type*/
beq Type1Match
cmp r2, r5 /*check opponent Type 2 with Defending type*/
beq OkNowCheckType1
add r3, #0x3
b Check1

OkNowCheckType1:
ldr r3, .TypeChart
b StillCheckinglol

/*we should be here if Type 2 was a match but Type 1 wasn't*/
StillCheckinglol:
ldrb r4, [r3] /*r4 has Type Chart attacking type*/
ldrb r5, [r3, #0x1] /*r5 has Type Chart defending type*/
ldrb r7, [r3, #0x2] /*r7 has Type Chart effectiveness*/
cmp r4, #0xFE
beq SameOutcome
cmp r1, r4 /*check NG type with Attacking type*/
bne Recheck3
cmp r0, r5 /*check opponent Type 1 Defending type*/
beq Type2Match
add r3, #0x3
b Check2

Type1Match:
ldr r3, .TypeChart
b Check2

Check2:
ldrb r4, [r3] /*r4 has Type Chart attacking type*/
ldrb r5, [r3, #0x1] /*r5 has Type Chart defending type*/
ldrb r7, [r3, #0x2] /*r7 has Type Chart effectiveness*/
cmp r4, #0xFE
beq SameOutcome
cmp r1, r4 /*check NG type with Attacking type*/
bne Recheck2
cmp r2, r5 /*check opponent Type 2 Defending type*/
beq Type2Match
add r3, #0x3
b Check2

Type2Match:
cmp r6, r7
beq SameOutcome
cmp r6, #0x5
beq TOneIsWeak
cmp r6, #0x0
beq Sameoutcome
cmp r6, #0x14
beq TOneIsSuper

TOneIsWeak:
cmp r7, #0x5
beq SameOutcome
cmp r7, #0x0
beq NoDamage
cmp r7, #0x14
beq Abort

TOneIsSuper:
cmp r7, #0x5
beq Abort
cmp r7, #0x0
beq NoDamage
cmp r7, #0x14
beq SameOutcome

Recheck:
add r3, #0x3
b Check1

Recheck2:
add r3, #0x3
b Check2

Recheck3:
add r3, #0x3
b StillCheckinglol

SameOutcome:
cmp r6, #0x5
beq WeakDamage
cmp r6, #0x0
beq NoDamage
cmp r6, #0x14
beq SuperDamage
cmp r7, #0x5
beq WeakDamage
cmp r7, #0x0
beq NoDamage
cmp r7, #0x14
beq SuperDamage

WeakDamage:
ldr r0, .Outcome
mov r1, #0x04
strb r1, [r0]
b End

NoDamage:
ldr r0, .Outcome
mov r1, #0x08
strb r1, [r0]
b End

SuperDamage:
ldr r0, .Outcome
mov r1, #0x02
strb r1, [r0]
b End

Abort:
End:
pop {r0}
bx r0

.align 2
.Outcome: .word 0x02023DCC
.TypeChart: .word 0x0824F050 /*make sure you replace this with the offset of your own type chart*/
.BattleData: .word 0x02023BE4
.TargetBank: .word 0x02023D6C
.MemAddress: .word 0x02023FE8

Note: If you have repointed your type chart, then you will have to put its new offset where I've bolded above.

Step 5:
Now here's the battle script:
Spoiler:
#org @main
attackcanceler
accuracycheck 0x81D695E 0x0
attackstring
ppreduce
callasm 0x8(offset of ASM ROUTINE 1+1)
calculatedamage
callasm 0x8(offset of ASM ROUTINE 2+1)
attackanimation
waitanimation
missmessage
cmd5c 0x0
waitstate
graphicalhpupdate 0x0
datahpupdate 0x0
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
jumpifbyte 0x4 0x02023DCC 0x8 0x81D694E
removeitem 0x1
goto 0x81D6947


And here's an animation:
02 24 7B 3E 08 02 05 01 00 01 00 00 00 0A 00 ED 33 05 03 19 34 0B 08 02 00 19 EC 00 C0 04 10 19 EC 00 C0 05 00 97 27 0A 01 0C 0C 08 19 7F 00 3F 02 08 7C 3E 08 02 04 00 00 00 00 01 00 02 00 03 F9 89 09 08 02 05 01 00 03 00 00 00 06 00 01 00 05 0B 01 0D 02 24 7B 3E 08 02 05 01 00 01 00 0A 00 00 00 ED 33 05 0B 03 0D 08
Here's an explanation as to how this works:
So as you can see, "ASM ROUTINE 1" looks up the custom table we inserted and matches your held item to it (the move will fail if you're not holding an item or if you're holding an item that's not in the table), and then updates the type and base power accordingly. Now, with this routine alone, the damage and type calculations are correct, but the outcome message will always act as a regular move (regular as in not super-effective or not not-very-effective) unless if you don't have an item in the table (then it will just fail), and turns out the reason why is for some reason the outcome RAM offset (02023DCC) wasn't getting updated even though the battle engine should theoretically already have done so (if you have the routine be the first thing in the script). So what "ASM ROUTINE 2" does is that it looks up the type chart and the opponent's types and determines the outcome that way (and yes, I checked and double checked and triple checked with various berry & type combinations, so it works). It wasn't ideal, but it was necessary in order to get the correct message to show up.

"But Chaos, couldn't you just look at how Weather Ball and Hidden Power does it"? Well, I did (for anyone curious, the Weather Ball command's routine is at 0802D090, while the Hidden Power command's routine is at 0802B678), and what both do is that they update the value held by the pointer at 02023FE8(a dynamic memory location) + 0x13, usually the pointer at 02023FE8 leads to 02000010, so the type value is (usually) at 02000023. No matter what I tried with updating that value, it always played the normal hit sound (but would still do more or less damage depending on type, such as Electric type Natural Gift doing more damage to Pidgey than Water type Natural Gift), unless if it was a type immunity in which case it worked as expected. For testing reasons I tried giving a new test move Hidden Power's battle script ID, and turns out the correct sound effect doesn't play either (but it does with Hidden Power itself, even though I gave them the same battle script ID), and turns out the outcome offset was only being updated when using the actual Hidden Power, which leads me to believe that Hidden Power and Weather Ball's move ID's are hard-coded to update the outcome offset. So the whole purpose of "ASM ROUTINE 2" is to circumvent that. "ASM ROUTINE 2" manually looks up the type chart and what outcome it should be, and updates the outcome value at 02023DCC accordingly.
Male
Seen August 19th, 2018
Posted August 19th, 2018
1,312 posts
12.3 Years
All for FireRed:
Gastro Acid: (note that all this does is change the target's ability to ability #0x0)
First insert this string:
FD 10 B4 E7 00 FE BB D6 DD E0 DD E8 ED 00 EB D5 E7 00 E7 E9 E4 E4 E6 D9 E7 E7 D9 D8 AB FF 00
(it says, "[the target]'s Ability was suppressed!")

Next insert this ASM code:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

main:
push {lr}
ldr r0, .TargetBank
ldr r1, .BattleData
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x20
add r1, r2
mov r3, #0x0
ldrb r4, [r1]
cmp r3, r4
beq Abort
strb r3, [r1]
b End

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

End:
pop {r0}
bx r0

.align 2
.BattleData: .word 0x02023BE4
.UserBank: .word 0x02023D6B
.TargetBank: .word 0x02023D6C
.BasePower: .word 0x02023F50
.CurrentScript: .word 0x02023d74
.FailScript: .word 0x081D7DF0


And finally, use this battle script:
Spoiler:
#org @main
attackcanceler
attackstring
ppreduce
callasm 0x8(offset of ASM routine + 1)
attackanimation
waitanimation
setword 0x203C020 0x8[offset of string]
printstring 0x184
waitmessage 0x40
goto 0x81D694E


As for the animation, I just use Acid's animation but modified with Sleep Powder's palette, which makes it look a nice greenish-brown color just like the official games.

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

Power Trick: (note that this doesn't account for Baton Passing like the official games, sorry :P)
Exactly the same as above for Gastro Acid, but use this string and ASM instead.

String:
FD 0F 00 E7 EB DD E8 D7 DC D9 D8 00 DD E8 E7 00 BB E8 E8 D5 D7 DF 00 FE D5 E2 D8 00 BE D9 DA D9 E2 E7 D9 AB FF 00
ASM:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

main:
push {lr}
ldr r0, .UserBank
ldr r1, .BattleData
ldrb r0, [r0]
mov r2, #0x58
mul r2, r0
add r1, #0x2
add r1, r2
ldrb r0, [r1] /*Attack*/
ldrb r2, [r1, #0x2] /*Defense*/
strb r2, [r1]
strb r0, [r1, #0x2]
pop {r0}
bx r0

.align 2
.BattleData: .word 0x02023BE4
.UserBank: .word 0x02023D6B


Battle script:
Spoiler:
#org @main
attackcanceler
attackstring
ppreduce
callasm 0x8(offset of ASM routine + 1)
attackanimation
waitanimation
setword 0x203C020 0x8[offset of string]
printstring 0x184
waitmessage 0x40
goto 0x81D694E


As for the animation, I used Psych Up's animation movement with the particle I've attached to the bottom of this post.

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

Me First:

We're going to have to insert three ASM routines.

ASM routine 1:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

Main:
push {lr}
ldr r0, .TargetBank /*what slot is the target*/
ldrb r0, [r0, #0x0]
ldr r1, .BattleStruct
mov r2, #0x58
mul r0, r2
add r5, r0, r1 /*calculates target stats offset*/

StatusCheck: /*checks if target is readying a status move*/
ldr r0, .TargetBank /*get target slot ID*/
ldrb r0, [r0, #0x0] /*r0 has target bank*/
lsl r0, #0x1
ldr r1, .MovesUsed /*r1 has MovesUsed*/
add r0, r1 /*Target's moved used?*/
ldrh r6, [r0]
ldrh r0, [r0] /*r0 has the move that target is going to use*/
ldr r1, .MoveTable /*r1 now has MoveTable*/
mov r2, #0xc /*move data is C bytes*/
mul r0, r2 /*move ID x C*/
add r0, r1 /*get move offset*/
ldrb r0, [r0, #0xa] /*check the move's class*/
cmp r0, #0x2 /*is it a status move?*/
beq Abort /*if so, the move fails*/
sub r6, #0x1
lsr r6, #0x1
cmp r6, #0xB5 /*fail if Natural Gift*/
beq Abort


OrderCheck:
ldr r0, .TargetBank
ldr r1, .UserBank
ldrb r4, [r0, #0x0] /*put target bank into R4*/
ldrb r5, [r1, #0x0] /*put user bank into R5*/
ldr r1, .TurnOrder /*put turn order offset into R1*/

Loop:
ldrb r2, [r1, #0x0] /*put attacking PKMN into r2*/
cmp r2, r4 /*is the attacking PKMN the target?*/
beq Abort /*if so, quit*/
cmp r2, r5 /*is the attacking PKMN the user?*/
beq End /*if so, attack*/
add r1, #0x1 /*move on to next attacking PKMN*/
b Loop

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

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 0x08(offset of your move data table)
.CurrentScript: .word 0x02023d74
.FailScript: .word 0x081D7DF0
.CurrentAttack: .word 0x02023D4A

Note: The bolded section can be removed if you want, I rigged it to fail if the opponent is going to use Natural Gift.

ASM routine 2:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

Main:
push {lr}
ldr r0, .TargetBank /*what slot is the target*/
ldrb r0, [r0, #0x0]
ldr r1, .BattleStruct
mov r2, #0x58
mul r0, r2
add r5, r0, r1 /*calculates target stats offset*/

StatusCheck: /*checks if target is readying a status move*/
ldr r0, .TargetBank /*get target slot ID*/
ldrb r0, [r0, #0x0] /*r0 has target bank*/
lsl r0, #0x1
ldr r1, .MovesUsed /*r1 has MovesUsed*/
add r0, r1 /*Target's moved used?*/
ldrh r6, [r0]

Next:
ldr r1, .CurrentAttack
strh r6, [r1]
ldr r1, .CurrentAttack
strh r6, [r1, #0x2]
ldr r1, .CurrentAttack
strh r6, [r1, #0x4]
b End

End:
pop {r0}
bx r0

.align 2

.UserBank: .word 0x02023D6B
.TargetBank: .word 0x02023D6C
.BattleStruct: .word 0x02023BE4
.MovesUsed: .word 0x02023dc4
.MoveTable: .word 0x08(offset of your move data table)
.CurrentAttack: .word 0x02023D4A


ASM routine 3:
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global test

Main:
push {lr}
ldr r0, .TargetBank /*what slot is the target*/
ldrb r0, [r0, #0x0]
ldr r1, .BattleStruct
mov r2, #0x58
mul r0, r2
add r5, r0, r1

SetStuff:
ldr r0, .TargetBank /*get target slot ID*/
ldrb r0, [r0, #0x0] /*r0 has target bank*/
lsl r0, #0x1
ldr r1, .MovesUsed /*r1 has MovesUsed*/
add r0, r1 /*Target's moved used?*/
ldrh r6, [r0]
ldrh r0, [r0] /*r0 has the move that target is going to use*/
ldr r1, .MoveTable /*r1 now has MoveTable*/
mov r2, #0xc /*move data is C bytes*/
mul r0, r2 /*move ID x C*/
add r0, r1 /*get move offset*/
ldrb r0, [r0, #0xA]
ldrb r3, [r0, #0x0] /*r0 should now have move effect*/
cmp r0, #0x2
beq Abort

StealMove:
ldr r1, .EffectTable
mov r2, #0x4
mul r3, r2
add r1, r3 /*r1 should now be at the correct offset of the move table*/
ldr r1, [r1] /*r1 should now have the effect script offset*/
ldr r0, .CurrentScript
str r1, [r0]
b End

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

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 0x08(offset of your move data table)
.EffectTable: .word 0x08(offset of your move effect table)
.CurrentScript: .word 0x02023d74
.FailScript: .word 0x081D7DF0


And finally, use this battle script:
Spoiler:
#org @MeFirst
attackcanceler
attackstring
callasm 0x8(offset of the first ASM routine + 1)
attackanimation
waitanimation
callasm 0x8(offset of the second ASM routine + 1)
setbyte 0x2023FDC 0x0
setbyte 0x2023FDD 0x0
printstring 0x4
callasm 0x8(offset of the third ASM routine + 1)


I know this method seems rather ridiculous to require 3 callasm's (and maybe there might be some redundant checks left in there because they were all modified heavily from Doesnt's Sucker Punch routine), but basically this method insures that it first prints "[user] used Me First!", does Me First's unique animation, then updates the RAM to the stolen Move ID, then says, "[user] used [stolen move]!" and plays the stolen move's animation. Having three check routines in between commands was necessary for Me First to have it's own unique animation AND still play the new animation afterwards AND display the updated string afterwards.

-----------------------------------------------------
(these particles are just for Power Trick and Wring Out. Use Psych Up's movement for Power Trick, and use Gust's movement for Wring Out)
Male
Seen August 19th, 2018
Posted August 19th, 2018
1,312 posts
12.3 Years
(FireRed) Psycho Cut animation that looks more similar to the in-game one. Psycho Cut is not a contact move, so this would be more fitting (it's basically Air Cutter with the Psychic background). Basically the concept is that the user creates a blade with his/her Psychic powers.
0E BB 59 1D 08 00 13 27 00 9A 27 00 97 27 04 00 0A 03 0C 0C 08 04 00 03 F1 76 0A 08 02 05 20 00 E8 FF 00 06 02 00 80 00 05 19 79 00 3F 02 AC 32 3E 08 02 04 28 00 E0 FF 00 00 02 00 04 05 03 1D 8B 09 08 02 05 01 00 02 00 00 00 08 00 01 00 03 1D 8B 09 08 02 05 03 00 02 00 00 00 08 00 01 00 05 0D 0B 03 04 00 0E C7 59 1D 08 08
Also have some particles. They're already indexed. Use the Aura Sphere particle with Shadow Ball's movement and that bright-blue BG. Use the Energy Ball particle with Shadow Ball's movement as well. Use the Power Gem particle with Hidden Power's movement. And lastly, the Sucker Punch particle can be used for any Dark or Poison move where you want a purple hit marker.
Advertiser Content