¡¡Heyy!!
Hoy os traigo algo que me ha tomado un par de días averiguar, pero que por fin, es funcional (aviso que esto sólo servirá para importar el bloque de caminar y correr, las animaciones como surfear, pescar, o ir en bici, no se cambian, aunque se podría hacer, probablemente actualice con el script completo)
Como bien habéis leído vamos a cambiar minisprites de forma dinámica desde un script, ¿y cómo lo haremos? muy sencillo, lo primero será aprender a crear crear comandos, para ello, podéis ver este tutorial que he escrito para crear nuevos comandos de scripting
Una vez sabemos cómo hacer esto, sólo necesitamos añadir los respectivos comandos, que si os ha dado por copiar y pegar los del tuto anterior, ya lo tenéis casi hecho.
Vamos pa' allá
Ahora que tenemos el comando creado...
Y listo. Ahora sólo tendremos que ir a cualquier script, y escribir:
Para saber el número del mini que tenéis que usar, podéis recurrir a esta lista:
En cualquier caso, si habéis editado o añadido alguno, simplemente podéis mirar el número correspondiente en "include/constants/event_objects.h" y los encontraréis algo así como:
Si por ejemplo quiero que mi mini sea el del youngster, en un script, escribiría:
Y voilà, mini cambiao'
Cualquier cosa, decidme por aquí, y trataré de ayudar. No lo he testeado lo suficiente, pero por el momento, no parece dar ningún problema.
Hoy os traigo algo que me ha tomado un par de días averiguar, pero que por fin, es funcional (aviso que esto sólo servirá para importar el bloque de caminar y correr, las animaciones como surfear, pescar, o ir en bici, no se cambian, aunque se podría hacer, probablemente actualice con el script completo)
Como bien habéis leído vamos a cambiar minisprites de forma dinámica desde un script, ¿y cómo lo haremos? muy sencillo, lo primero será aprender a crear crear comandos, para ello, podéis ver este tutorial que he escrito para crear nuevos comandos de scripting
Una vez sabemos cómo hacer esto, sólo necesitamos añadir los respectivos comandos, que si os ha dado por copiar y pegar los del tuto anterior, ya lo tenéis casi hecho.
Vamos pa' allá
script_cmd_table.inc añadiendo:
event.inc añadiendo:
y scrcmd.c, también añadiendo:
Código:
.4byte ScrCmd_changeMini @ 0xC6
Código:
@ Changes the player minisprite.
.macro changeMini minivalue
.byte 0xc6
.2byte \minivalue
.endm
Código:
void ScrCmd_changeMini(struct ScriptContext *ctx)
{
u16 miniValue = VarGet(ScriptReadHalfword(ctx));
struct EventObject *eventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
sub_805B980(eventObj, miniValue);
EventObjectTurn(eventObj, eventObj->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
gSaveBlock2.playerMini = miniValue;
}
Ahora que tenemos el comando creado...
para guardar el mini que estamos usando, esto será tan sencillo como ir a "include/global.h" y al final de todos los parámetros de "struct SaveBlock2", añadir:
Código:
u16 playerMini;
Código:
struct SaveBlock2 /* 0x02024EA4 */
{
/*0x00*/ u8 playerName[8];
/*0x08*/ u8 playerGender; // MALE, FEMALE
/*0x09*/ u8 specialSaveWarp;
/*0x0A*/ u8 playerTrainerId[4];
/*0x0E*/ u16 playTimeHours;
/*0x10*/ u8 playTimeMinutes;
/*0x11*/ u8 playTimeSeconds;
/*0x12*/ u8 playTimeVBlanks;
/*0x13*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A]
/*0x14*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST]
u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes
u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO]
u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET]
u16 optionsBattleSceneOff:1; // whether battle animations are disabled
u16 regionMapZoom:1; // whether the map is zoomed in
/*0x18*/ struct Pokedex pokedex;
/*0x90*/ u8 filler_90[0x8];
/*0x98*/ struct Time localTimeOffset;
/*0xA0*/ struct Time lastBerryTreeUpdate;
/*0xA8*/ struct BattleTowerData battleTower;
u16 playerMini;
};
Y listo. Ahora sólo tendremos que ir a cualquier script, y escribir:
Código:
changeMini numeroDeMini
BRENDAN_NORMAL: 0
BRENDAN_MACH_BIKE: 1
BRENDAN_SURFING: 2
BRENDAN_FIELD_MOVE: 3
QUINTY_PLUMP: 4
LITTLE_BOY_1: 5
LITTLE_GIRL_1: 6
BOY_1: 7
GIRL_1: 8
BOY_2: 9
GIRL_2: 10
LITTLE_BOY_2: 11
LITTLE_GIRL_2: 12
BOY_3: 13
GIRL_3: 14
BOY_4: 15
WOMAN_1: 16
FAT_MAN: 17
WOMAN_2: 18
MAN_1: 19
WOMAN_3: 20
OLD_MAN_1: 21
OLD_WOMAN_1: 22
MAN_2: 23
WOMAN_4: 24
MAN_3: 25
WOMAN_5: 26
COOK: 27
WOMAN_6: 28
OLD_MAN_2: 29
OLD_WOMAN_2: 30
CAMPER: 31
PICNICKER: 32
MAN_4: 33
WOMAN_7: 34
YOUNGSTER: 35
BUG_CATCHER: 36
PSYCHIC_M: 37
SCHOOL_KID_M: 38
MANIAC: 39
HEX_MANIAC: 40
WOMAN_8: 41
SWIMMER_M: 42
SWIMMER_F: 43
BLACK_BELT: 44
BEAUTY: 45
SCIENTIST_1: 46
LASS: 47
GENTLEMAN: 48
SAILOR: 49
FISHERMAN: 50
RUNNING_TRIATHLETE_M: 51
RUNNING_TRIATHLETE_F: 52
TUBER_F: 53
TUBER_M: 54
HIKER: 55
CYCLING_TRIATHLETE_M: 56
CYCLING_TRIATHLETE_F: 57
NURSE: 58
ITEM_BALL: 59
BERRY_TREE: 60
BERRY_TREE_EARLY_STAGES: 61
BERRY_TREE_LATE_STAGES: 62
BRENDAN_ACRO_BIKE: 63
PROF_BIRCH: 64
MAN_5: 65
MAN_6: 66
REPORTER_M: 67
REPORTER_F: 68
BARD: 69
HIPSTER: 70
TRADER: 71
STORYTELLER: 72
GIDDY: 73
UNUSED_MAUVILLE_OLD_MAN_1: 74
UNUSED_MAUVILLE_OLD_MAN_2: 75
UNUSED_NATU_DOLL: 76
UNUSED_MAGNEMITE_DOLL: 77
UNUSED_SQUIRTLE_DOLL: 78
UNUSED_WOOPER_DOLL: 79
UNUSED_PIKACHU_DOLL: 80
UNUSED_PORYGON2_DOLL: 81
CUTTABLE_TREE: 82
MART_EMPLOYEE: 83
ROOFTOP_SALE_WOMAN: 84
TEALA: 85
BREAKABLE_ROCK: 86
PUSHABLE_BOULDER: 87
MR_BRINEYS_BOAT: 88
MAY_NORMAL: 89
MAY_MACH_BIKE: 90
MAY_ACRO_BIKE: 91
MAY_SURFING: 92
MAY_FIELD_MOVE: 93
TRUCK: 94
MACHOKE_CARRYING_BOX: 95
MACHOKE_FACING_AWAY: 96
BIRCHS_BAG: 97
POOCHYENA: 98
ARTIST: 99
RIVAL_BRENDAN_NORMAL: 100
RIVAL_BRENDAN_MACH_BIKE: 101
RIVAL_BRENDAN_ACRO_BIKE: 102
RIVAL_BRENDAN_SURFING: 103
RIVAL_BRENDAN_FIELD_MOVE: 104
RIVAL_MAY_NORMAL: 105
RIVAL_MAY_MACH_BIKE: 106
RIVAL_MAY_ACRO_BIKE: 107
RIVAL_MAY_SURFING: 108
RIVAL_MAY_FIELD_MOVE: 109
CAMERAMAN: 110
BRENDAN_UNDERWATER: 111
MAY_UNDERWATER: 112
MOVING_BOX: 113
CABLE_CAR: 114
SCIENTIST_2: 115
MAN_7: 116
AQUA_MEMBER_M: 117
AQUA_MEMBER_F: 118
MAGMA_MEMBER_M: 119
MAGMA_MEMBER_F: 120
SIDNEY: 121
PHOEBE: 122
GLACIA: 123
DRAKE: 124
ROXANNE: 125
BRAWLY: 126
WATTSON: 127
FLANNERY: 128
NORMAN: 129
WINONA: 130
LIZA: 131
TATE: 132
WALLACE: 133
STEVEN: 134
WALLY: 135
LITTLE_BOY_3: 136
BRENDAN_FISHING: 137
MAY_FISHING: 138
HOT_SPRINGS_OLD_WOMAN: 139
SS_TIDAL: 140
SUBMARINE_SHADOW: 141
PICHU_DOLL: 142
PIKACHU_DOLL: 143
MARILL_DOLL: 144
TOGEPI_DOLL: 145
CYNDAQUIL_DOLL: 146
CHIKORITA_DOLL: 147
TOTODILE_DOLL: 148
JIGGLYPUFF_DOLL: 149
MEOWTH_DOLL: 150
CLEFAIRY_DOLL: 151
DITTO_DOLL: 152
SMOOCHUM_DOLL: 153
TREECKO_DOLL: 154
TORCHIC_DOLL: 155
MUDKIP_DOLL: 156
DUSKULL_DOLL: 157
WYNAUT_DOLL: 158
BALTOY_DOLL: 159
KECLEON_DOLL: 160
AZURILL_DOLL: 161
SKITTY_DOLL: 162
SWABLU_DOLL: 163
GULPIN_DOLL: 164
LOTAD_DOLL: 165
SEEDOT_DOLL: 166
PIKA_CUSHION: 167
ROUND_CUSHION: 168
KISS_CUSHION: 169
ZIGZAG_CUSHION: 170
SPIN_CUSHION: 171
DIAMOND_CUSHION: 172
BALL_CUSHION: 173
GRASS_CUSHION: 174
FIRE_CUSHION: 175
WATER_CUSHION: 176
BIG_SNORLAX_DOLL: 177
BIG_RHYDON_DOLL: 178
BIG_LAPRAS_DOLL: 179
BIG_VENUSAUR_DOLL: 180
BIG_CHARIZARD_DOLL: 181
BIG_BLASTOISE_DOLL: 182
BIG_WAILMER_DOLL: 183
BIG_REGIROCK_DOLL: 184
BIG_REGICE_DOLL: 185
BIG_REGISTEEL_DOLL: 186
LATIAS: 187
LATIOS: 188
BOY_5: 189
CONTEST_JUDGE: 190
BRENDAN_WATERING: 191
MAY_WATERING: 192
BRENDAN_DECORATING: 193
MAY_DECORATING: 194
ARCHIE: 195
MAXIE: 196
KYOGRE_1: 197
GROUDON_1: 198
FOSSIL: 199
REGIROCK: 200
REGICE: 201
REGISTEEL: 202
SKITTY: 203
KECLEON_1: 204
KYOGRE_2: 205
GROUDON_2: 206
RAYQUAZA: 207
ZIGZAGOON: 208
PIKACHU: 209
AZUMARILL: 210
WINGULL: 211
KECLEON_2: 212
TUBER_M_SWIMMING: 213
AZURILL: 214
MOM: 215
LINK_BRENDAN: 216
LINK_MAY: 217
BRENDAN_MACH_BIKE: 1
BRENDAN_SURFING: 2
BRENDAN_FIELD_MOVE: 3
QUINTY_PLUMP: 4
LITTLE_BOY_1: 5
LITTLE_GIRL_1: 6
BOY_1: 7
GIRL_1: 8
BOY_2: 9
GIRL_2: 10
LITTLE_BOY_2: 11
LITTLE_GIRL_2: 12
BOY_3: 13
GIRL_3: 14
BOY_4: 15
WOMAN_1: 16
FAT_MAN: 17
WOMAN_2: 18
MAN_1: 19
WOMAN_3: 20
OLD_MAN_1: 21
OLD_WOMAN_1: 22
MAN_2: 23
WOMAN_4: 24
MAN_3: 25
WOMAN_5: 26
COOK: 27
WOMAN_6: 28
OLD_MAN_2: 29
OLD_WOMAN_2: 30
CAMPER: 31
PICNICKER: 32
MAN_4: 33
WOMAN_7: 34
YOUNGSTER: 35
BUG_CATCHER: 36
PSYCHIC_M: 37
SCHOOL_KID_M: 38
MANIAC: 39
HEX_MANIAC: 40
WOMAN_8: 41
SWIMMER_M: 42
SWIMMER_F: 43
BLACK_BELT: 44
BEAUTY: 45
SCIENTIST_1: 46
LASS: 47
GENTLEMAN: 48
SAILOR: 49
FISHERMAN: 50
RUNNING_TRIATHLETE_M: 51
RUNNING_TRIATHLETE_F: 52
TUBER_F: 53
TUBER_M: 54
HIKER: 55
CYCLING_TRIATHLETE_M: 56
CYCLING_TRIATHLETE_F: 57
NURSE: 58
ITEM_BALL: 59
BERRY_TREE: 60
BERRY_TREE_EARLY_STAGES: 61
BERRY_TREE_LATE_STAGES: 62
BRENDAN_ACRO_BIKE: 63
PROF_BIRCH: 64
MAN_5: 65
MAN_6: 66
REPORTER_M: 67
REPORTER_F: 68
BARD: 69
HIPSTER: 70
TRADER: 71
STORYTELLER: 72
GIDDY: 73
UNUSED_MAUVILLE_OLD_MAN_1: 74
UNUSED_MAUVILLE_OLD_MAN_2: 75
UNUSED_NATU_DOLL: 76
UNUSED_MAGNEMITE_DOLL: 77
UNUSED_SQUIRTLE_DOLL: 78
UNUSED_WOOPER_DOLL: 79
UNUSED_PIKACHU_DOLL: 80
UNUSED_PORYGON2_DOLL: 81
CUTTABLE_TREE: 82
MART_EMPLOYEE: 83
ROOFTOP_SALE_WOMAN: 84
TEALA: 85
BREAKABLE_ROCK: 86
PUSHABLE_BOULDER: 87
MR_BRINEYS_BOAT: 88
MAY_NORMAL: 89
MAY_MACH_BIKE: 90
MAY_ACRO_BIKE: 91
MAY_SURFING: 92
MAY_FIELD_MOVE: 93
TRUCK: 94
MACHOKE_CARRYING_BOX: 95
MACHOKE_FACING_AWAY: 96
BIRCHS_BAG: 97
POOCHYENA: 98
ARTIST: 99
RIVAL_BRENDAN_NORMAL: 100
RIVAL_BRENDAN_MACH_BIKE: 101
RIVAL_BRENDAN_ACRO_BIKE: 102
RIVAL_BRENDAN_SURFING: 103
RIVAL_BRENDAN_FIELD_MOVE: 104
RIVAL_MAY_NORMAL: 105
RIVAL_MAY_MACH_BIKE: 106
RIVAL_MAY_ACRO_BIKE: 107
RIVAL_MAY_SURFING: 108
RIVAL_MAY_FIELD_MOVE: 109
CAMERAMAN: 110
BRENDAN_UNDERWATER: 111
MAY_UNDERWATER: 112
MOVING_BOX: 113
CABLE_CAR: 114
SCIENTIST_2: 115
MAN_7: 116
AQUA_MEMBER_M: 117
AQUA_MEMBER_F: 118
MAGMA_MEMBER_M: 119
MAGMA_MEMBER_F: 120
SIDNEY: 121
PHOEBE: 122
GLACIA: 123
DRAKE: 124
ROXANNE: 125
BRAWLY: 126
WATTSON: 127
FLANNERY: 128
NORMAN: 129
WINONA: 130
LIZA: 131
TATE: 132
WALLACE: 133
STEVEN: 134
WALLY: 135
LITTLE_BOY_3: 136
BRENDAN_FISHING: 137
MAY_FISHING: 138
HOT_SPRINGS_OLD_WOMAN: 139
SS_TIDAL: 140
SUBMARINE_SHADOW: 141
PICHU_DOLL: 142
PIKACHU_DOLL: 143
MARILL_DOLL: 144
TOGEPI_DOLL: 145
CYNDAQUIL_DOLL: 146
CHIKORITA_DOLL: 147
TOTODILE_DOLL: 148
JIGGLYPUFF_DOLL: 149
MEOWTH_DOLL: 150
CLEFAIRY_DOLL: 151
DITTO_DOLL: 152
SMOOCHUM_DOLL: 153
TREECKO_DOLL: 154
TORCHIC_DOLL: 155
MUDKIP_DOLL: 156
DUSKULL_DOLL: 157
WYNAUT_DOLL: 158
BALTOY_DOLL: 159
KECLEON_DOLL: 160
AZURILL_DOLL: 161
SKITTY_DOLL: 162
SWABLU_DOLL: 163
GULPIN_DOLL: 164
LOTAD_DOLL: 165
SEEDOT_DOLL: 166
PIKA_CUSHION: 167
ROUND_CUSHION: 168
KISS_CUSHION: 169
ZIGZAG_CUSHION: 170
SPIN_CUSHION: 171
DIAMOND_CUSHION: 172
BALL_CUSHION: 173
GRASS_CUSHION: 174
FIRE_CUSHION: 175
WATER_CUSHION: 176
BIG_SNORLAX_DOLL: 177
BIG_RHYDON_DOLL: 178
BIG_LAPRAS_DOLL: 179
BIG_VENUSAUR_DOLL: 180
BIG_CHARIZARD_DOLL: 181
BIG_BLASTOISE_DOLL: 182
BIG_WAILMER_DOLL: 183
BIG_REGIROCK_DOLL: 184
BIG_REGICE_DOLL: 185
BIG_REGISTEEL_DOLL: 186
LATIAS: 187
LATIOS: 188
BOY_5: 189
CONTEST_JUDGE: 190
BRENDAN_WATERING: 191
MAY_WATERING: 192
BRENDAN_DECORATING: 193
MAY_DECORATING: 194
ARCHIE: 195
MAXIE: 196
KYOGRE_1: 197
GROUDON_1: 198
FOSSIL: 199
REGIROCK: 200
REGICE: 201
REGISTEEL: 202
SKITTY: 203
KECLEON_1: 204
KYOGRE_2: 205
GROUDON_2: 206
RAYQUAZA: 207
ZIGZAGOON: 208
PIKACHU: 209
AZUMARILL: 210
WINGULL: 211
KECLEON_2: 212
TUBER_M_SWIMMING: 213
AZURILL: 214
MOM: 215
LINK_BRENDAN: 216
LINK_MAY: 217
En cualquier caso, si habéis editado o añadido alguno, simplemente podéis mirar el número correspondiente en "include/constants/event_objects.h" y los encontraréis algo así como:
Código:
#define EVENT_OBJ_GFX_BRENDAN_NORMAL 0
Código:
changeMini 35
Cualquier cosa, decidme por aquí, y trataré de ayudar. No lo he testeado lo suficiente, pero por el momento, no parece dar ningún problema.