Registrarse

[ASM] Insertar clima de Nieve/Granizo

Vent

グラフィックの神
Hola amigos de WaH! Hoy os vengo a traer este aporte, de este post:

Basicamente con este ASM lograremos implementar el efecto de Nieve y Granizo en Pokémon Fire Red, osea esto:
Pokemon Dystopia2.png
Pokemon Dystopia.png
Pokemon Dystopia3.png


Que necesitamos?
- HxD
- ROM de Fire Red
- ASSEMBLER
- Bloc de Notas

Primero compilamos esta rutina:
.text
.align 2
.thumb

set_hail_environment:
ldr r3, weather
ldrh r1, [r30]
nov r2, #0x80
and r0. r1
cmp r0, #0x0
bne default
strh r2, [r3, #0x0]
ldr r1, unk_2023FC4 @esta dirección +10 es la animación que se reproduce
mov r0, #0xD @Animación de granizo
strb r0, [r1, #0x10]
mov r3, r10
strb r3, [r1, #0x17]
return:
ldr r0, return1
bx r0
default:
ldr r0, default_weather
bx r0

.align 2
weather:
.word 0x02023F1C
unk_2023FC4:
.word 0x02023FC4
default_weather:
.word 0x0801A251
return1:
.word 0x0801A247

Aqui dejo la rutina compilada:
08 4B 19 88 80 22 10 1C 08 40 00 28 07 D1 1A 80 05 49 0D 20 08 74 53 46 CB 75 05 48 00 47 03 48 00 47 00 00 1C 3F 02 02 C4 3F 02 02 51 A2 01 08 47 A2 01 08

La rutina la copian en un offset vacío y anotan dicho offset, por ejemplo en mi caso 720000.

Ahora viene la parte divertida:
La dirección 0x01A1B8 tiene una tabla de salto con un puntero en 0x01A1B4.
Aqui os lo pongo para que vean:

-OFFSET-
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x01A1B0:
E4 A1 01 08 50 A2 01 08
0x01A1C0:
E4 A1 01 08 14 BE 76 08 58 5F 76 08 08 A2 01 08
0x01A1D0:
50 A2 01 08 50 A2 01 08 50 A2 01 08 2C A2 01 08
0x1A1E0:
E4 A1 01 08

NOTA: NINGUNO DE ELLOS TIENE +1!
Esta tabla de entradas de punteros corresponde cada una a un valor de Clima desde 0x3 a 0xD (Tiempo lluvioso con destellos subterraneos/Sol Extremo)

Esta es una lista de valores de Climas (tomados del .ini de AdvanceMap):
00= In House Weather
01= Sunny Weather with Clouds in water
02= Regular weather
03= Rainy Weather
04= Three snow flakes
05= Rain with thunder storm
06= Steady mist
07= Steady snowing
08= Sand storm
09= Wist from top right corner
0A= Dense bright mist
0B= Cloudy
0C= Underground flashes
0D= Heavy rain with Thunder Storm
0E= Underwater Mist

Así que, qué haremos? ''Steady Snowing'' es la entrada 0x7 en la lista.
Empezamos contando desde 0x3, por ende ''Steady Snowing'' es la entrada 0x7.
Y ''Three snow flakes'' es la entrada 0x2.

El offset de ''Steady Snowing'' está en 0x1A1C8; ''Three snow flakes'' está en 0x01A1BC.
Colocan el puntero invertido donde insertaron la rutina (sin +1) en la entrada de la tabla, osea:
0x01A1C8: 00 00 72 08
0x01A1BC: 00 00 72 08
Y listo! Configura el clima con AdvanceMap y empezará a Nevar/Granizar (dependiendo de la elección)

Una última cosa, hacer que se muestre el mensaje correcto en batalla:
Para que se muestre el mensaje de ''¡Ha empezado a granizar!'' al inicio de la batalla, escriben F3 00 en el offset 0x3FE602 (Three snow flakes) y 0x3FE608 (Steady Snowing)

Y eso ha sido todo!!! Créditos a BluRose y pokemontutorialTV.
Espero le den buen uso a esto!!!! Hora de esquiar!!! *se va*

Edito:
Buscando en Pokeco encontré que si quieren que la nieve caiga indefinidamente, tienen que hacer esto:
0x07C23E
4B E0
0x07BE56
20
0x07BE46
00
0x07A85E
80 5C 03 28 0D DB 04 28 0B D0 06 28 03 DD 0D 28 07 DC 0B 28 05 DB 01 22 04 E0
0x07A0D0
6C A1
0x079DBE
04 1C E1 F7 32 F8 0D 4A D9 21 C9 00 88 5C
 
Última edición:
Arriba