Added dynamic palette support for virtual objects.
Added flag to hide follower on certain maps.
This commit is contained in:
parent
16babe87fc
commit
d846b9c781
@ -1,2 +1,2 @@
|
||||
аабааааааабааааабааааабааааааабааааабаааввгвввввввгвввввгвввдежзийкдежзийкдежзий стуфхцч щъыьэюя ёђѓєѕії !"#$%& љњћќ§ўџ()*+,-. 0123456
|
||||
89:;<=>>
|
||||
а2а2ба2а2а2а2а2а2а2ба2а2а2а2а2ба2а2а2аRаRбаRаRаRаRаRаRаRбаRаRаRаRаRбаRаRаRв2в2гв2в2в2в2в2в2в2гв2в2в2в2в2гв2в2в2дежзийкдежзийкдежзий 3 3с2т2у2ф2х2ц2ч23333333 3 3 3 3 3 3щ2ъыьэBюBяBCCC3 3 3 3 3 3 3ё2ђBѓBєBѕBіBїB C!C"C#C$C%C&3 3 3 3 3 3 3љ2њћќ§BўBџB(C)C*C+,-.3 3 3 3 3 3 3333301233435363 3 3 3 3 3 3 3
|
||||
333
3338393:3;3<3=3>3>3 3 3 3
|
||||
@ -12,7 +12,7 @@
|
||||
"allow_running": false,
|
||||
"show_map_name": false,
|
||||
"battle_scene": "MAP_BATTLE_SCENE_NORMAL",
|
||||
"connections": null,
|
||||
"connections": 0,
|
||||
"object_events": [
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_REPORTER_M",
|
||||
@ -210,7 +210,13 @@
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [],
|
||||
"coord_events": [],
|
||||
"bg_events": []
|
||||
"warp_events": [
|
||||
|
||||
],
|
||||
"coord_events": [
|
||||
|
||||
],
|
||||
"bg_events": [
|
||||
|
||||
]
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ BattleFrontier_BattleDomeBattleRoom_MapScripts::
|
||||
.byte 0
|
||||
|
||||
BattleFrontier_BattleDomeBattleRoom_OnTransition:
|
||||
setflag FLAG_TEMP_HIDE_FOLLOWER
|
||||
dome_setopponentgfx
|
||||
frontier_get FRONTIER_DATA_BATTLE_NUM
|
||||
copyvar VAR_TEMP_F, VAR_RESULT
|
||||
|
||||
@ -5,6 +5,7 @@ FortreeCity_Gym_MapScripts::
|
||||
|
||||
FortreeCity_Gym_OnTransition:
|
||||
special RotatingGate_InitPuzzle
|
||||
setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower bc of rotating gates
|
||||
end
|
||||
|
||||
FortreeCity_Gym_OnWarp:
|
||||
|
||||
@ -1,9 +1,14 @@
|
||||
MossdeepCity_Gym_MapScripts::
|
||||
map_script MAP_SCRIPT_ON_TRANSITION, MossdeepCity_Gym_OnTransition
|
||||
map_script MAP_SCRIPT_ON_LOAD, MossdeepCity_Gym_OnLoad
|
||||
.byte 0
|
||||
|
||||
@ NOTE: Mossdeep Gym was redesigned between R/S and E. Leftover (and now functionally unused) scripts are commented below
|
||||
|
||||
MossdeepCity_Gym_OnTransition:
|
||||
setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower since it can collide with moving statues
|
||||
end
|
||||
|
||||
@ All the below checks are leftover from RS. FLAG_MOSSDEEP_GYM_SWITCH_X is never set
|
||||
MossdeepCity_Gym_OnLoad:
|
||||
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_SetSwitch1Metatiles
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
#define FLAG_TEMP_B (TEMP_FLAGS_START + 0xB) // Unused Flag
|
||||
#define FLAG_TEMP_C (TEMP_FLAGS_START + 0xC) // Unused Flag
|
||||
#define FLAG_TEMP_D (TEMP_FLAGS_START + 0xD) // Unused Flag
|
||||
#define FLAG_TEMP_E (TEMP_FLAGS_START + 0xE) // Unused Flag
|
||||
#define FLAG_TEMP_HIDE_FOLLOWER (TEMP_FLAGS_START + 0xE) // When set, follower pokemon won't be spawned
|
||||
#define FLAG_TEMP_F (TEMP_FLAGS_START + 0xF) // Unused Flag
|
||||
#define FLAG_TEMP_10 (TEMP_FLAGS_START + 0x10) // Unused Flag
|
||||
#define FLAG_TEMP_11 (TEMP_FLAGS_START + 0x11)
|
||||
|
||||
@ -1650,10 +1650,12 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio
|
||||
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
|
||||
CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables);
|
||||
*(u16 *)&spriteTemplate.paletteTag = TAG_NONE;
|
||||
x += MAP_OFFSET;
|
||||
y += MAP_OFFSET;
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
|
||||
if (spriteTemplate.paletteTag != TAG_NONE)
|
||||
LoadObjectEventPalette(spriteTemplate.paletteTag);
|
||||
|
||||
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@ -1661,17 +1663,10 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio
|
||||
sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
|
||||
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
|
||||
sprite->y += sprite->centerToCornerVecY;
|
||||
sprite->oam.paletteNum = graphicsInfo->paletteSlot;
|
||||
if (sprite->oam.paletteNum >= 16)
|
||||
sprite->oam.paletteNum -= 16;
|
||||
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->sVirtualObjId = virtualObjId;
|
||||
sprite->sVirtualObjElev = elevation;
|
||||
if (graphicsInfo->paletteSlot == 10)
|
||||
LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
|
||||
else if (graphicsInfo->paletteSlot >= 16)
|
||||
_PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0);
|
||||
|
||||
if (subspriteTables != NULL)
|
||||
{
|
||||
@ -1835,11 +1830,12 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any
|
||||
bool8 shiny;
|
||||
u8 form;
|
||||
// Avoid spawning large (64x64) follower pokemon inside buildings
|
||||
if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64)) {
|
||||
if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) {
|
||||
if (objEvent == NULL) { // Spawn follower
|
||||
struct ObjectEventTemplate template = {
|
||||
.localId = OBJ_EVENT_ID_FOLLOWER,
|
||||
.graphicsId = OBJ_EVENT_GFX_OW_MON,
|
||||
.flagId = 0,
|
||||
.x = gSaveBlock1Ptr->pos.x,
|
||||
.y = gSaveBlock1Ptr->pos.y,
|
||||
// If player active, copy player elevation
|
||||
@ -9678,10 +9674,12 @@ void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId)
|
||||
struct Sprite *sprite = &gSprites[spriteId];
|
||||
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
|
||||
u16 tileNum = sprite->oam.tileNum;
|
||||
u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag);
|
||||
if (i != 0xFF)
|
||||
UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite);
|
||||
|
||||
sprite->oam = *graphicsInfo->oam;
|
||||
sprite->oam.tileNum = tileNum;
|
||||
sprite->oam.paletteNum = graphicsInfo->paletteSlot;
|
||||
sprite->images = graphicsInfo->images;
|
||||
|
||||
if (graphicsInfo->subspriteTables == NULL)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user