Added day/night palette swapping.
Updated lighting for lava, Petalburg, Slateport, Dewford, Verdanturf, Oldale, Mossdeep, Lilycove, Fallarbor. Improved lantern appearance & added neon signs on PokeCenter & Mart. Optimized gamma shift code. Removed obselete CacheLightMetatiles.
|
|
@ -8,3 +8,4 @@ gLocalLinkPlayerId
|
|||
gFieldLinkPlayerCount
|
||||
gTimeOfDay
|
||||
currentTimeBlend
|
||||
gTimeUpdateCounter
|
||||
|
|
|
|||
|
|
@ -89,6 +89,19 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "DewfordTown_EventScript_TrendyPhraseBoy",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 4,
|
||||
"y": 10,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -19,7 +19,21 @@
|
|||
"map": "MAP_ROUTE128"
|
||||
}
|
||||
],
|
||||
"object_events": [],
|
||||
"object_events": [
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 29,
|
||||
"y": 48,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
{
|
||||
"x": 18,
|
||||
|
|
|
|||
|
|
@ -310,6 +310,19 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "LilycoveCity_EventScript_FatMan",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 26,
|
||||
"y": 14,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -177,6 +177,32 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "0x0",
|
||||
"flag": "FLAG_HIDE_MAUVILLE_CITY_SCOTT"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 24,
|
||||
"y": 5,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 25,
|
||||
"y": 14,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "2",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -250,6 +250,32 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "MossdeepCity_EventScript_BlackBelt",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 30,
|
||||
"y": 16,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 39,
|
||||
"y": 18,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "2",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -63,6 +63,19 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "PacifidlogTown_EventScript_NinjaBoy",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 10,
|
||||
"y": 15,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
@ -109,7 +122,9 @@
|
|||
"dest_warp_id": 0
|
||||
}
|
||||
],
|
||||
"coord_events": [],
|
||||
"coord_events": [
|
||||
|
||||
],
|
||||
"bg_events": [
|
||||
{
|
||||
"type": "sign",
|
||||
|
|
|
|||
|
|
@ -141,6 +141,32 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "0x0",
|
||||
"flag": "FLAG_HIDE_PETALBURG_CITY_SCOTT"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 22,
|
||||
"y": 16,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 27,
|
||||
"y": 12,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "2",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -237,6 +237,227 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "RustboroCity_EventScript_Boy1",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 19,
|
||||
"y": 37,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 22,
|
||||
"y": 37,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 19,
|
||||
"y": 30,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 22,
|
||||
"y": 30,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 19,
|
||||
"y": 23,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 22,
|
||||
"y": 23,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 22,
|
||||
"y": 44,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 19,
|
||||
"y": 44,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 29,
|
||||
"y": 48,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 14,
|
||||
"y": 19,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 15,
|
||||
"y": 17,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 9,
|
||||
"y": 19,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 8,
|
||||
"y": 17,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 19,
|
||||
"y": 15,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 22,
|
||||
"y": 15,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 14,
|
||||
"y": 54,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 17,
|
||||
"y": 54,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -484,6 +484,32 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "0x0",
|
||||
"flag": "FLAG_HIDE_SLATEPORT_CITY_SCOTT"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 21,
|
||||
"y": 19,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 15,
|
||||
"y": 26,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "2",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -76,6 +76,32 @@
|
|||
"trainer_sight_or_berry_tree_id": "0",
|
||||
"script": "VerdanturfTown_EventScript_Camper",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 18,
|
||||
"y": 3,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "1",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
},
|
||||
{
|
||||
"graphics_id": "OBJ_EVENT_GFX_LIGHT_SPRITE",
|
||||
"x": 14,
|
||||
"y": 3,
|
||||
"elevation": 3,
|
||||
"movement_type": "MOVEMENT_TYPE_NONE",
|
||||
"movement_range_x": 0,
|
||||
"movement_range_y": 0,
|
||||
"trainer_type": "TRAINER_TYPE_NONE",
|
||||
"trainer_sight_or_berry_tree_id": "2",
|
||||
"script": "NULL",
|
||||
"flag": "0"
|
||||
}
|
||||
],
|
||||
"warp_events": [
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
.align 2
|
||||
gTileset_General::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 0x41 @ is compressed, swapPalettes 4
|
||||
.byte FALSE @ is secondary tileset
|
||||
.2byte 0 @ padding
|
||||
.2byte 0x10 @ lightPalettes 4
|
||||
.4byte gTilesetTiles_General
|
||||
.4byte gTilesetPalettes_General
|
||||
.4byte gMetatiles_General
|
||||
|
|
@ -11,9 +11,9 @@ gTileset_General::
|
|||
|
||||
.align 2
|
||||
gTileset_Petalburg::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 0x21 @ is compressed, swapPalettes 9
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 3 @ lightPalettes 6,7
|
||||
.2byte 0x00B @ lightPalettes 6,7,9, custom 9
|
||||
.4byte gTilesetTiles_Petalburg
|
||||
.4byte gTilesetPalettes_Petalburg
|
||||
.4byte gMetatiles_Petalburg
|
||||
|
|
@ -35,7 +35,7 @@ gTileset_Rustboro::
|
|||
gTileset_Dewford::
|
||||
.byte TRUE @ is compressed
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 64 @ lightPalettes 12
|
||||
.2byte 0 @ padding
|
||||
.4byte gTilesetTiles_Dewford
|
||||
.4byte gTilesetPalettes_Dewford
|
||||
.4byte gMetatiles_Dewford
|
||||
|
|
@ -44,9 +44,9 @@ gTileset_Dewford::
|
|||
|
||||
.align 2
|
||||
gTileset_Slateport::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 5 @ is compressed, swapPalettes 6
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 0x41 @ lightPalettes 6,12
|
||||
.2byte 0x1 @ lightPalettes 6
|
||||
.4byte gTilesetTiles_Slateport
|
||||
.4byte gTilesetPalettes_Slateport
|
||||
.4byte gMetatiles_Slateport
|
||||
|
|
@ -68,7 +68,7 @@ gTileset_Mauville::
|
|||
gTileset_Lavaridge::
|
||||
.byte TRUE @ is compressed
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 0 @ padding
|
||||
.2byte 0x0101 @ lightPalettes 6, customLights 6
|
||||
.4byte gTilesetTiles_Lavaridge
|
||||
.4byte gTilesetPalettes_Lavaridge
|
||||
.4byte gMetatiles_Lavaridge
|
||||
|
|
@ -77,7 +77,7 @@ gTileset_Lavaridge::
|
|||
|
||||
.align 2
|
||||
gTileset_Fallarbor::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 9 @ is compressed, swapPalettes 7
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 2 @ lightPalettes 7
|
||||
.4byte gTilesetTiles_Fallarbor
|
||||
|
|
@ -99,7 +99,7 @@ gTileset_Fortree::
|
|||
|
||||
.align 2
|
||||
gTileset_Lilycove::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 5 @ is compressed, swapPalettes 6
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 0x01 @ lightPalettes 6
|
||||
.4byte gTilesetTiles_Lilycove
|
||||
|
|
@ -107,12 +107,13 @@ gTileset_Lilycove::
|
|||
.4byte gMetatiles_Lilycove
|
||||
.4byte gMetatileAttributes_Lilycove
|
||||
.4byte InitTilesetAnim_Lilycove
|
||||
.2byte 0
|
||||
|
||||
.align 2
|
||||
gTileset_Mossdeep::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 0x11 @ is compressed, swapPalettes 8
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 0 @ lightPalettes 8,9
|
||||
.2byte 0x4 @ lightPalettes 8
|
||||
.4byte gTilesetTiles_Mossdeep
|
||||
.4byte gTilesetPalettes_Mossdeep
|
||||
.4byte gMetatiles_Mossdeep
|
||||
|
|
@ -129,10 +130,11 @@ gTileset_EverGrande::
|
|||
.4byte gMetatiles_EverGrande
|
||||
.4byte gMetatileAttributes_EverGrande
|
||||
.4byte InitTilesetAnim_EverGrande
|
||||
.2byte 0
|
||||
|
||||
.align 2
|
||||
gTileset_Pacifidlog::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 0x21 @ is compressed, swapPalettes 9
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 8 @ lightPalettes 9
|
||||
.4byte gTilesetTiles_Pacifidlog
|
||||
|
|
@ -143,7 +145,7 @@ gTileset_Pacifidlog::
|
|||
|
||||
.align 2
|
||||
gTileset_Sootopolis::
|
||||
.byte TRUE @ is compressed
|
||||
.byte 5 @ is compressed, swapPalettes 6
|
||||
.byte TRUE @ is secondary tileset
|
||||
.2byte 0x101 @ lightPalettes 6, customLights 6
|
||||
.4byte gTilesetTiles_Sootopolis
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
24 41 82
|
||||
248 0 248
|
||||
232 0 128
|
||||
216 224 232
|
||||
222 230 238
|
||||
255 0 255
|
||||
255 0 255
|
||||
255 0 255
|
||||
184 200 224
|
||||
152 176 216
|
||||
112 184 240
|
||||
156 164 189
|
||||
80 104 208
|
||||
65 90 189
|
||||
|
|
@ -16,4 +16,4 @@ JASC-PAL
|
|||
139 164 222
|
||||
106 131 213
|
||||
82 106 213
|
||||
248 0 248
|
||||
96 168 232
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
232 0 128
|
||||
232 228 216
|
||||
222 230 238
|
||||
224 214 184
|
||||
216 200 152
|
||||
244 226 171
|
||||
156 164 189
|
||||
80 104 208
|
||||
65 90 189
|
||||
57 82 156
|
||||
41 65 139
|
||||
172 197 230
|
||||
139 164 222
|
||||
106 131 213
|
||||
82 106 213
|
||||
221 205 143
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.5 KiB |
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 224 0
|
||||
0 0 0
|
||||
222 230 238
|
||||
189 205 230
|
||||
156 180 222
|
||||
131 131 139
|
||||
98 98 123
|
||||
65 74 106
|
||||
152 176 216
|
||||
115 189 246
|
||||
98 172 238
|
||||
0 0 0
|
||||
0 0 0
|
||||
213 180 106
|
||||
205 156 82
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 3.7 KiB |
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
115 197 164
|
||||
255 255 255
|
||||
222 230 238
|
||||
189 205 230
|
||||
156 180 222
|
||||
0 192 0
|
||||
222 230 164
|
||||
180 197 115
|
||||
148 156 82
|
||||
123 131 65
|
||||
131 131 139
|
||||
98 98 123
|
||||
65 74 106
|
||||
189 189 131
|
||||
115 189 246
|
||||
98 172 238
|
||||
115 189 246
|
||||
98 164 222
|
||||
82 139 197
|
||||
74 115 172
|
||||
115 197 164
|
||||
88 168 168
|
||||
221 205 143
|
||||
244 226 171
|
||||
255 205 82
|
||||
230 156 49
|
||||
222 123 32
|
||||
156 98 41
|
||||
128 192 216
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 0 0
|
||||
65 74 106
|
||||
197 205 0
|
||||
230 238 238
|
||||
255 255 255
|
||||
255 115 65
|
||||
230 115 65
|
||||
180 98 90
|
||||
164 82 82
|
||||
205 49 0
|
||||
148 49 0
|
||||
246 24 24
|
||||
246 148 0
|
||||
148 164 65
|
||||
106 123 139
|
||||
222 222 0
|
||||
0 192 24
|
||||
64 72 104
|
||||
192 200 0
|
||||
224 232 232
|
||||
248 248 248
|
||||
248 112 64
|
||||
224 112 64
|
||||
176 96 88
|
||||
160 80 80
|
||||
200 48 0
|
||||
144 48 0
|
||||
240 24 24
|
||||
240 144 0
|
||||
144 160 64
|
||||
104 120 136
|
||||
224 40 0
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
115 197 164
|
||||
255 213 180
|
||||
255 197 148
|
||||
222 148 115
|
||||
123 65 65
|
||||
57 74 123
|
||||
41 57 98
|
||||
24 41 82
|
||||
16 32 57
|
||||
222 230 238
|
||||
255 197 90
|
||||
189 156 90
|
||||
255 98 90
|
||||
197 65 65
|
||||
255 255 255
|
||||
24 200 0
|
||||
244 226 171
|
||||
221 205 143
|
||||
115 148 213
|
||||
90 115 189
|
||||
131 131 139
|
||||
232 228 216
|
||||
65 74 106
|
||||
222 213 222
|
||||
221 205 143
|
||||
244 226 171
|
||||
248 248 248
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
131 197 98
|
||||
0 192 0
|
||||
255 255 255
|
||||
222 230 238
|
||||
189 205 230
|
||||
156 180 222
|
||||
131 131 139
|
||||
205 205 197
|
||||
180 180 164
|
||||
180 189 222
|
||||
139 139 148
|
||||
98 98 123
|
||||
65 74 106
|
||||
41 49 90
|
||||
115 189 246
|
||||
98 172 238
|
||||
255 189 131
|
||||
238 148 115
|
||||
222 106 98
|
||||
205 65 82
|
||||
115 197 164
|
||||
255 248 180
|
||||
224 217 159
|
||||
255 213 49
|
||||
238 148 16
|
||||
205 213 131
|
||||
148 148 74
|
||||
90 82 8
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
24 41 82
|
||||
180 255 131
|
||||
131 197 98
|
||||
57 139 49
|
||||
57 82 0
|
||||
222 148 115
|
||||
106 90 90
|
||||
164 98 90
|
||||
65 57 49
|
||||
255 197 148
|
||||
222 106 98
|
||||
205 65 82
|
||||
164 213 197
|
||||
115 197 164
|
||||
65 180 131
|
||||
24 164 106
|
||||
0 32 0
|
||||
248 248 248
|
||||
248 0 248
|
||||
224 0 232
|
||||
64 128 96
|
||||
120 120 144
|
||||
96 96 120
|
||||
64 72 104
|
||||
255 227 148
|
||||
184 184 192
|
||||
160 160 152
|
||||
240 216 152
|
||||
208 144 112
|
||||
184 80 80
|
||||
128 56 64
|
||||
240 144 48
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@ JASC-PAL
|
|||
0100
|
||||
16
|
||||
0 32 0
|
||||
255 255 255
|
||||
248 248 248
|
||||
248 0 248
|
||||
248 0 248
|
||||
65 131 98
|
||||
123 123 148
|
||||
98 98 123
|
||||
65 74 106
|
||||
224 0 232
|
||||
64 128 96
|
||||
120 120 144
|
||||
96 96 120
|
||||
64 72 104
|
||||
189 189 197
|
||||
164 164 156
|
||||
246 222 156
|
||||
213 148 115
|
||||
189 82 82
|
||||
131 57 65
|
||||
246 148 49
|
||||
80 72 104
|
||||
184 184 192
|
||||
160 160 152
|
||||
240 216 152
|
||||
208 144 112
|
||||
184 80 80
|
||||
128 56 64
|
||||
240 144 48
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
24 41 82
|
||||
180 255 131
|
||||
131 197 98
|
||||
57 139 49
|
||||
57 82 0
|
||||
222 148 115
|
||||
106 90 90
|
||||
164 98 90
|
||||
65 57 49
|
||||
255 197 148
|
||||
222 106 98
|
||||
205 65 82
|
||||
164 213 197
|
||||
115 197 164
|
||||
65 180 131
|
||||
24 164 106
|
||||
0 0 128
|
||||
222 230 164
|
||||
180 189 123
|
||||
156 164 98
|
||||
131 139 74
|
||||
90 98 41
|
||||
98 98 123
|
||||
65 74 106
|
||||
32 32 82
|
||||
238 230 164
|
||||
238 197 98
|
||||
205 156 57
|
||||
164 123 24
|
||||
131 82 49
|
||||
131 131 139
|
||||
244 226 171
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
24 41 82
|
||||
180 255 131
|
||||
131 197 98
|
||||
57 139 49
|
||||
57 82 0
|
||||
222 148 115
|
||||
106 90 90
|
||||
164 98 90
|
||||
65 57 49
|
||||
255 197 148
|
||||
222 106 98
|
||||
205 65 82
|
||||
164 213 197
|
||||
115 197 164
|
||||
65 180 131
|
||||
24 164 106
|
||||
0 192 0
|
||||
232 224 200
|
||||
208 200 144
|
||||
200 176 120
|
||||
168 136 120
|
||||
128 128 136
|
||||
96 96 120
|
||||
64 72 104
|
||||
40 48 88
|
||||
244 226 171
|
||||
221 205 143
|
||||
248 224 176
|
||||
248 184 168
|
||||
240 160 128
|
||||
200 136 104
|
||||
248 192 32
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
24 41 82
|
||||
238 230 205
|
||||
213 205 148
|
||||
205 180 123
|
||||
172 139 123
|
||||
131 131 139
|
||||
98 98 123
|
||||
65 74 106
|
||||
41 49 90
|
||||
156 205 246
|
||||
98 156 238
|
||||
255 230 180
|
||||
255 189 172
|
||||
246 164 131
|
||||
205 139 106
|
||||
115 197 164
|
||||
0 192 0
|
||||
232 224 200
|
||||
208 200 144
|
||||
200 176 120
|
||||
168 136 120
|
||||
128 128 136
|
||||
96 96 120
|
||||
64 72 104
|
||||
40 48 88
|
||||
152 200 240
|
||||
120 152 232
|
||||
248 224 176
|
||||
248 184 168
|
||||
240 160 128
|
||||
200 136 104
|
||||
248 192 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.0 KiB |
|
|
@ -1,18 +1,18 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 128 64
|
||||
96 160 72
|
||||
222 205 148
|
||||
184 168 80
|
||||
0 0 0
|
||||
0 0 0
|
||||
168 224 200
|
||||
216 216 176
|
||||
148 148 156
|
||||
98 98 123
|
||||
64 72 104
|
||||
0 0 0
|
||||
184 184 152
|
||||
0 0 0
|
||||
148 205 255
|
||||
0 0 0
|
||||
184 224 216
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
115 197 164
|
||||
255 213 180
|
||||
255 197 148
|
||||
222 148 115
|
||||
123 65 65
|
||||
57 74 123
|
||||
41 57 98
|
||||
24 41 82
|
||||
16 32 57
|
||||
222 230 238
|
||||
255 197 90
|
||||
189 156 90
|
||||
255 98 90
|
||||
197 65 65
|
||||
0 32 0
|
||||
255 255 255
|
||||
0 0 0
|
||||
230 230 238
|
||||
205 205 222
|
||||
197 180 222
|
||||
123 131 156
|
||||
98 98 123
|
||||
65 74 106
|
||||
255 231 138
|
||||
205 205 148
|
||||
172 148 90
|
||||
222 213 238
|
||||
197 180 189
|
||||
164 156 164
|
||||
131 106 172
|
||||
112 192 160
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
|
|
@ -1,19 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
115 197 164
|
||||
255 213 180
|
||||
255 197 148
|
||||
222 148 115
|
||||
123 65 65
|
||||
57 74 123
|
||||
41 57 98
|
||||
24 41 82
|
||||
16 32 57
|
||||
222 230 238
|
||||
255 197 90
|
||||
189 156 90
|
||||
255 98 90
|
||||
197 65 65
|
||||
0 192 0
|
||||
255 255 255
|
||||
0 0 0
|
||||
238 238 213
|
||||
222 222 180
|
||||
180 180 148
|
||||
131 131 139
|
||||
98 98 123
|
||||
65 74 106
|
||||
41 49 90
|
||||
244 226 171
|
||||
221 205 143
|
||||
156 164 156
|
||||
123 131 123
|
||||
98 106 98
|
||||
82 90 82
|
||||
248 240 176
|
||||
|
|
|
|||
|
|
@ -1500,6 +1500,21 @@ u16 LoadSpriteSheet(const struct SpriteSheet *sheet)
|
|||
}
|
||||
}
|
||||
|
||||
// Like LoadSpriteSheet, but checks if already, and uses template image frames
|
||||
u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u8 frame) {
|
||||
u16 tileStart;
|
||||
struct SpriteSheet tempSheet;
|
||||
// error if template is null or tile tag or images not set
|
||||
if (!template || template->tileTag == TAG_NONE || !template->images)
|
||||
return 0xFFFF;
|
||||
if ((tileStart = GetSpriteTileStartByTag(template->tileTag)) != 0xFFFF) // return if already loaded
|
||||
return tileStart;
|
||||
tempSheet.data = template->images[frame].data;
|
||||
tempSheet.size = template->images[frame].size;
|
||||
tempSheet.tag = template->tileTag;
|
||||
return LoadSpriteSheet(&tempSheet);
|
||||
}
|
||||
|
||||
void LoadSpriteSheets(const struct SpriteSheet *sheets)
|
||||
{
|
||||
u8 i;
|
||||
|
|
@ -1621,6 +1636,13 @@ void LoadSpritePalettes(const struct SpritePalette *palettes)
|
|||
break;
|
||||
}
|
||||
|
||||
u8 LoadSpritePaletteInSlot(const struct SpritePalette *palette, u8 paletteNum) {
|
||||
paletteNum = min(15, paletteNum);
|
||||
sSpritePaletteTags[paletteNum] = palette->tag;
|
||||
DoLoadSpritePalette(palette->data, paletteNum * 16);
|
||||
return paletteNum;
|
||||
}
|
||||
|
||||
void DoLoadSpritePalette(const u16 *src, u16 paletteOffset)
|
||||
{
|
||||
LoadPalette(src, paletteOffset + 0x100, 32);
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ void FreeOamMatrix(u8 matrixNum);
|
|||
void InitSpriteAffineAnim(struct Sprite *sprite);
|
||||
void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotation);
|
||||
u16 LoadSpriteSheet(const struct SpriteSheet *sheet);
|
||||
u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u8 frame);
|
||||
void LoadSpriteSheets(const struct SpriteSheet *sheets);
|
||||
u16 AllocTilesForSpriteSheet(struct SpriteSheet *sheet);
|
||||
void AllocTilesForSpriteSheets(struct SpriteSheet *sheets);
|
||||
|
|
@ -309,6 +310,7 @@ void RequestSpriteSheetCopy(const struct SpriteSheet *sheet);
|
|||
u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet);
|
||||
void FreeAllSpritePalettes(void);
|
||||
u8 LoadSpritePalette(const struct SpritePalette *palette);
|
||||
u8 LoadSpritePaletteInSlot(const struct SpritePalette *palette, u8 paletteNum);
|
||||
void LoadSpritePalettes(const struct SpritePalette *palettes);
|
||||
u8 AllocSpritePalette(u16 tag);
|
||||
u8 IndexOfSpritePaletteTag(u16 tag);
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@ JASC-PAL
|
|||
0100
|
||||
16
|
||||
110 198 165
|
||||
255 213 18
|
||||
255 214 38
|
||||
254 217 39
|
||||
254 218 53
|
||||
255 220 65
|
||||
255 221 76
|
||||
255 223 86
|
||||
254 225 95
|
||||
254 228 104
|
||||
254 229 112
|
||||
254 230 120
|
||||
255 232 132
|
||||
255 235 148
|
||||
255 237 162
|
||||
255 240 176
|
||||
64 61 42
|
||||
77 73 50
|
||||
85 81 58
|
||||
100 94 66
|
||||
111 105 75
|
||||
119 112 77
|
||||
140 131 92
|
||||
154 145 103
|
||||
171 159 111
|
||||
186 174 123
|
||||
197 183 128
|
||||
209 195 139
|
||||
224 209 146
|
||||
234 219 155
|
||||
249 232 161
|
||||
|
|
|
|||
19
graphics/object_events/palettes/light2.pal
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
106 202 166
|
||||
58 54 31
|
||||
67 62 33
|
||||
96 89 53
|
||||
110 102 57
|
||||
121 111 67
|
||||
128 119 66
|
||||
156 143 82
|
||||
166 155 96
|
||||
185 169 100
|
||||
199 183 112
|
||||
211 192 113
|
||||
223 203 123
|
||||
237 218 129
|
||||
247 227 137
|
||||
255 237 147
|
||||
19
graphics/object_events/palettes/neon_light.pal
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
104 203 168
|
||||
19 48 64
|
||||
35 87 115
|
||||
58 132 140
|
||||
69 156 166
|
||||
77 193 254
|
||||
106 239 254
|
||||
27 68 89
|
||||
64 22 19
|
||||
115 39 34
|
||||
166 57 49
|
||||
191 66 57
|
||||
222 77 67
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 6.1 KiB |
BIN
graphics/object_events/pics/misc/mart_light.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
graphics/object_events/pics/misc/poke_center_light.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
|
|
@ -242,6 +242,7 @@
|
|||
#define OBJ_EVENT_GFX_HOOH 238
|
||||
#define OBJ_EVENT_GFX_ANIMATED_BALL OBJ_EVENT_GFX_ITEM_BALL // replaces ITEM_BALL
|
||||
#define OBJ_EVENT_GFX_OW_MON OBJ_EVENT_GFX_REGICE
|
||||
#define OBJ_EVENT_GFX_LIGHT_SPRITE OBJ_EVENT_GFX_QUINTY_PLUMP
|
||||
|
||||
#define NUM_OBJ_EVENT_GFX 239
|
||||
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ void FadeScreen(u8 mode, s8 delay);
|
|||
bool8 IsWeatherNotFadingIn(void);
|
||||
void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex, bool8 allowFog);
|
||||
void ApplyWeatherGammaShiftToPal(u8 paletteIndex);
|
||||
void ApplyWeatherGammaShiftToPals(u8 startPalIndex, u8 numPalettes);
|
||||
void LoadCustomWeatherSpritePalette(const u16 *palette);
|
||||
void ResetDroughtWeatherPaletteLoading(void);
|
||||
bool8 LoadDroughtWeatherPalettes(void);
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
#include "main.h"
|
||||
|
||||
extern struct BackupMapLayout gBackupMapLayout;
|
||||
extern struct Coords16 gLightMetatiles[32];
|
||||
|
||||
u32 MapGridGetMetatileIdAt(int, int);
|
||||
u32 MapGridGetMetatileBehaviorAt(int, int);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,8 @@ typedef void (*TilesetCB)(void);
|
|||
|
||||
struct Tileset
|
||||
{
|
||||
/*0x00*/ bool8 isCompressed;
|
||||
/*0x00*/ u8 isCompressed:2;
|
||||
/*0x00*/ u8 swapPalettes:6; // bitmask determining whether palette has an alternate, night-time palette
|
||||
/*0x01*/ bool8 isSecondary;
|
||||
/*0x02*/ u8 lightPalettes; // Bitmask determining whether a palette should be time-blended as a light
|
||||
/*0x03*/ u8 customLightColor; // Bitmask determining which light palettes have custom light colors (color 15)
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ struct __attribute__((packed)) TimeBlendSettings {
|
|||
u16 weight:9;
|
||||
u16 time1:3;
|
||||
u16 time0:3;
|
||||
u16 unused:1;
|
||||
u16 altWeight;
|
||||
};
|
||||
|
||||
// Exported RAM declarations
|
||||
|
|
@ -63,6 +65,7 @@ extern bool8 (*gFieldCallback2)(void);
|
|||
extern u8 gLocalLinkPlayerId;
|
||||
extern u8 gFieldLinkPlayerCount;
|
||||
extern u8 gTimeOfDay;
|
||||
extern u16 gTimeUpdateCounter;
|
||||
|
||||
extern struct TimeBlendSettings currentTimeBlend;
|
||||
|
||||
|
|
@ -145,6 +148,7 @@ void CB1_Overworld(void);
|
|||
void CB2_OverworldBasic(void);
|
||||
u8 UpdateTimeOfDay(void);
|
||||
bool8 MapHasNaturalLight(u8 mapType);
|
||||
void UpdateAltBgPalettes(u16 palettes);
|
||||
void UpdatePalettesWithTime(u32);
|
||||
void CB2_Overworld(void);
|
||||
void SetMainCallback1(void (*cb)(void));
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTa
|
|||
void TimeBlendPalette(u16 palOffset, u32 coeff, u32 blendColor);
|
||||
void TintPalette_RGB_Copy(u16 palOffset, u32 blendColor);
|
||||
void TimeMixPalettes(u32, u16 *, u16 *, struct BlendSettings *, struct BlendSettings *, u16);
|
||||
void AvgPaletteWeighted(u16 *src0, u16 *src1, u16 *dst, u16 weight0);
|
||||
void TintPalette_GrayScale(u16 *palette, u16 count);
|
||||
void TintPalette_GrayScale2(u16 *palette, u16 count);
|
||||
void TintPalette_SepiaTone(u16 *palette, u16 count);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,41 @@ const struct SpriteFrameImage gFieldEffectObjectPicTable_BallLight[] = {
|
|||
obj_frame_tiles(gFieldEffectObjectPic_BallLight),
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BallLight = {TAG_NONE, OBJ_EVENT_PAL_TAG_LIGHT, &gObjectEventBaseOam_32x32, sAnimTable_Inanimate, gFieldEffectObjectPicTable_BallLight, gDummySpriteAffineAnimTable, UpdateLightSprite};
|
||||
const struct SpriteFrameImage gFieldEffectObjectPicTable_PokeCenterLight[] = {
|
||||
obj_frame_tiles(gFieldEffectObjectPic_PokeCenterLight),
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage gFieldEffectObjectPicTable_MartLight[] = {
|
||||
obj_frame_tiles(gFieldEffectObjectPic_MartLight),
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_BallLight = {OBJ_EVENT_PAL_TAG_LIGHT, OBJ_EVENT_PAL_TAG_LIGHT, &gObjectEventBaseOam_32x32, sAnimTable_Inanimate, gFieldEffectObjectPicTable_BallLight, gDummySpriteAffineAnimTable, UpdateLightSprite};
|
||||
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_PokeCenterLight = {
|
||||
.tileTag = TAG_NONE,
|
||||
.paletteTag = OBJ_EVENT_PAL_TAG_NEON_LIGHT,
|
||||
.oam = &gObjectEventBaseOam_16x16,
|
||||
.anims = sAnimTable_Inanimate,
|
||||
.images = gFieldEffectObjectPicTable_PokeCenterLight,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = UpdateLightSprite,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_MartLight = {
|
||||
.tileTag = TAG_NONE,
|
||||
.paletteTag = OBJ_EVENT_PAL_TAG_NEON_LIGHT,
|
||||
.oam = &gObjectEventBaseOam_16x16,
|
||||
.anims = sAnimTable_Inanimate,
|
||||
.images = gFieldEffectObjectPicTable_MartLight,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = UpdateLightSprite,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate *const gFieldEffectLightTemplates[] = {
|
||||
&gFieldEffectObjectTemplate_BallLight,
|
||||
&gFieldEffectObjectTemplate_PokeCenterLight,
|
||||
&gFieldEffectObjectTemplate_MartLight,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {
|
||||
.tileTag = TAG_NONE,
|
||||
|
|
|
|||
|
|
@ -282,6 +282,8 @@ const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effe
|
|||
const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp");
|
||||
const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_extra_large.4bpp");
|
||||
const u32 gFieldEffectObjectPic_BallLight[] = INCBIN_U32("graphics/object_events/pics/misc/light.4bpp");
|
||||
const u32 gFieldEffectObjectPic_PokeCenterLight[] = INCBIN_U32("graphics/object_events/pics/misc/poke_center_light.4bpp");
|
||||
const u32 gFieldEffectObjectPic_MartLight[] = INCBIN_U32("graphics/object_events/pics/misc/mart_light.4bpp");
|
||||
static const u32 sFiller[0x48] = {};
|
||||
const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effects/pics/cut_grass.4bpp");
|
||||
const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effects/pics/cut_grass.4bpp");
|
||||
|
|
@ -783,4 +785,6 @@ const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/h
|
|||
const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal");
|
||||
|
||||
const u16 gObjectEventPaletteLight[] = INCBIN_U16("graphics/object_events/palettes/light.gbapal");
|
||||
const u16 gObjectEventPaletteLight2[] = INCBIN_U16("graphics/object_events/palettes/light2.gbapal");
|
||||
const u16 gObjectEventPaletteEmotes[] = INCBIN_U16("graphics/misc/emotes.gbapal");
|
||||
const u16 gObjectEventPaletteNeonLight[] = INCBIN_U16("graphics/object_events/palettes/neon_light.gbapal");
|
||||
|
|
|
|||
|
|
@ -245,3 +245,5 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {TAG_NONE,
|
|||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {TAG_NONE, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_HoOh, sPicTable_HoOhOld, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AnimatedBall = {TAG_NONE, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Following, sPicTable_AnimatedBall, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Follower = {TAG_NONE, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Togetic, gDummySpriteAffineAnimTable};
|
||||
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallLight = {TAG_NONE, OBJ_EVENT_PAL_TAG_LIGHT, OBJ_EVENT_PAL_TAG_LIGHT_2, 512, 32, 32, 2, SHADOW_SIZE_NONE, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Inanimate, gFieldEffectObjectPicTable_BallLight, gDummySpriteAffineAnimTable};
|
||||
|
|
|
|||
|
|
@ -240,6 +240,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh;
|
|||
// Begin pokemon event objects
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AnimatedBall;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Follower;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallLight;
|
||||
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster;
|
||||
|
|
@ -255,7 +256,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
|
|||
[OBJ_EVENT_GFX_BRENDAN_MACH_BIKE] = &gObjectEventGraphicsInfo_BrendanMachBike,
|
||||
[OBJ_EVENT_GFX_BRENDAN_SURFING] = &gObjectEventGraphicsInfo_BrendanSurfing,
|
||||
[OBJ_EVENT_GFX_BRENDAN_FIELD_MOVE] = &gObjectEventGraphicsInfo_BrendanFieldMove,
|
||||
[OBJ_EVENT_GFX_QUINTY_PLUMP] = &gObjectEventGraphicsInfo_QuintyPlump,
|
||||
// [OBJ_EVENT_GFX_QUINTY_PLUMP] = &gObjectEventGraphicsInfo_QuintyPlump,
|
||||
[OBJ_EVENT_GFX_NINJA_BOY] = &gObjectEventGraphicsInfo_NinjaBoy,
|
||||
[OBJ_EVENT_GFX_TWIN] = &gObjectEventGraphicsInfo_Twin,
|
||||
[OBJ_EVENT_GFX_BOY_1] = &gObjectEventGraphicsInfo_Boy1,
|
||||
|
|
@ -492,6 +493,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
|
|||
[OBJ_EVENT_GFX_HOOH] = &gObjectEventGraphicsInfo_HoOh,
|
||||
[OBJ_EVENT_GFX_ANIMATED_BALL] = &gObjectEventGraphicsInfo_AnimatedBall,
|
||||
[OBJ_EVENT_GFX_OW_MON] = &gObjectEventGraphicsInfo_Follower,
|
||||
[OBJ_EVENT_GFX_LIGHT_SPRITE] = &gObjectEventGraphicsInfo_BallLight,
|
||||
};
|
||||
|
||||
const struct ObjectEventGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = {
|
||||
|
|
|
|||
|
|
@ -1990,6 +1990,8 @@ static const struct SpriteFrameImage sPicTable_AnimatedBall[] = {
|
|||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 5),
|
||||
};
|
||||
|
||||
extern const struct SpriteFrameImage gFieldEffectObjectPicTable_BallLight[];
|
||||
|
||||
static const struct SpriteFrameImage sPicTable_Bulbasaur[] = {
|
||||
overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 0),
|
||||
overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 1),
|
||||
|
|
|
|||
|
|
@ -455,7 +455,9 @@ const u8 gInitialMovementTypeFacingDirections[] = {
|
|||
#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123
|
||||
#define OBJ_EVENT_PAL_TAG_DYNAMIC 0x1124
|
||||
#define OBJ_EVENT_PAL_TAG_LIGHT 0x8001
|
||||
#define OBJ_EVENT_PAL_TAG_EMOTES 0x8002
|
||||
#define OBJ_EVENT_PAL_TAG_LIGHT_2 0x8002
|
||||
#define OBJ_EVENT_PAL_TAG_EMOTES 0x8003
|
||||
#define OBJ_EVENT_PAL_TAG_NEON_LIGHT 0x8004
|
||||
#define OBJ_EVENT_PAL_TAG_NONE 0x11FF
|
||||
|
||||
#include "data/object_events/object_event_graphics_info_pointers.h"
|
||||
|
|
@ -505,7 +507,9 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = {
|
|||
{gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY},
|
||||
{gObjectEventPal_Npc1, OBJ_EVENT_PAL_TAG_DYNAMIC},
|
||||
{gObjectEventPaletteLight, OBJ_EVENT_PAL_TAG_LIGHT},
|
||||
{gObjectEventPaletteLight2, OBJ_EVENT_PAL_TAG_LIGHT_2},
|
||||
{gObjectEventPaletteEmotes, OBJ_EVENT_PAL_TAG_EMOTES},
|
||||
{gObjectEventPaletteNeonLight, OBJ_EVENT_PAL_TAG_NEON_LIGHT},
|
||||
{NULL, 0x0000},
|
||||
};
|
||||
|
||||
|
|
@ -1975,84 +1979,122 @@ bool8 ScrFunc_followerfly(struct ScriptContext *ctx) {
|
|||
|
||||
// Sprite callback for light sprites
|
||||
void UpdateLightSprite(struct Sprite *sprite) {
|
||||
s16 left = gSaveBlock1Ptr->pos.x - 2;
|
||||
s16 right = gSaveBlock1Ptr->pos.x + 17;
|
||||
s16 top = gSaveBlock1Ptr->pos.y;
|
||||
s16 bottom = gSaveBlock1Ptr->pos.y + 15;
|
||||
s16 x = sprite->data[6];
|
||||
s16 y = sprite->data[7];
|
||||
u16 sheetTileStart;
|
||||
u32 paletteNum;
|
||||
bool8 finished = TRUE;
|
||||
// Ripped from RemoveObjectEventIfOutsideView
|
||||
if (x >= left && x <= right
|
||||
&& y >= top && y <= bottom)
|
||||
finished = FALSE;
|
||||
finished = finished ? finished : gTimeOfDay != TIME_OF_DAY_NIGHT;
|
||||
if (finished) {
|
||||
sheetTileStart = sprite->sheetTileStart;
|
||||
paletteNum = sprite->oam.paletteNum;
|
||||
DestroySprite(sprite);
|
||||
FieldEffectFreeTilesIfUnused(sheetTileStart);
|
||||
FieldEffectFreePaletteIfUnused(paletteNum);
|
||||
Weather_SetBlendCoeffs(7, 12); // TODO: Restore original blend coeffs at dawn
|
||||
return;
|
||||
}
|
||||
s16 left = gSaveBlock1Ptr->pos.x - 2;
|
||||
s16 right = gSaveBlock1Ptr->pos.x + 17;
|
||||
s16 top = gSaveBlock1Ptr->pos.y;
|
||||
s16 bottom = gSaveBlock1Ptr->pos.y + 15;
|
||||
s16 x = sprite->data[6];
|
||||
s16 y = sprite->data[7];
|
||||
u16 sheetTileStart;
|
||||
u32 paletteNum;
|
||||
// Ripped from RemoveObjectEventIfOutsideView
|
||||
if (!(x >= left && x <= right && y >= top && y <= bottom)) {
|
||||
sheetTileStart = sprite->sheetTileStart;
|
||||
paletteNum = sprite->oam.paletteNum;
|
||||
DestroySprite(sprite);
|
||||
FieldEffectFreeTilesIfUnused(sheetTileStart);
|
||||
FieldEffectFreePaletteIfUnused(paletteNum);
|
||||
Weather_SetBlendCoeffs(7, 12); // TODO: Restore original blend coeffs at dawn
|
||||
return;
|
||||
}
|
||||
|
||||
if (gPlayerAvatar.tileTransitionState) { // As long as the second coefficient stays 12, shadows will not change
|
||||
Weather_SetBlendCoeffs(7, 12);
|
||||
sprite->invisible = FALSE;
|
||||
} else {
|
||||
Weather_SetBlendCoeffs(12, 12);
|
||||
sprite->invisible = gSaveBlock2Ptr->playTimeVBlanks & 1;
|
||||
}
|
||||
if (gTimeOfDay != TIME_OF_DAY_NIGHT) {
|
||||
sprite->invisible = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (sprite->data[5]) { // lightType
|
||||
case 0:
|
||||
if (gPaletteFade.active) { // if palette fade is active, don't flicker since the timer won't be updated
|
||||
Weather_SetBlendCoeffs(7, 12);
|
||||
sprite->invisible = FALSE;
|
||||
} else if (gPlayerAvatar.tileTransitionState) {
|
||||
Weather_SetBlendCoeffs(7, 12); // As long as the second coefficient stays 12, shadows will not change
|
||||
sprite->invisible = FALSE;
|
||||
if (GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum) == OBJ_EVENT_PAL_TAG_LIGHT_2)
|
||||
LoadSpritePaletteInSlot(&sObjectEventSpritePalettes[FindObjectEventPaletteIndexByTag(OBJ_EVENT_PAL_TAG_LIGHT)], sprite->oam.paletteNum);
|
||||
} else if ((sprite->invisible = gTimeUpdateCounter & 1)) {
|
||||
Weather_SetBlendCoeffs(12, 12);
|
||||
if (GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum) == OBJ_EVENT_PAL_TAG_LIGHT)
|
||||
LoadSpritePaletteInSlot(&sObjectEventSpritePalettes[FindObjectEventPaletteIndexByTag(OBJ_EVENT_PAL_TAG_LIGHT_2)], sprite->oam.paletteNum);
|
||||
}
|
||||
break;
|
||||
case 1 ... 2:
|
||||
Weather_SetBlendCoeffs(12, 12);
|
||||
sprite->invisible = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Spawn a light at a map coordinate based on metatile behavior
|
||||
static void SpawnLightSprite(s16 x, s16 y, s16 camX, s16 camY, u32 behavior) {
|
||||
struct Sprite *sprite;
|
||||
u8 i;
|
||||
for (i = 0; i < MAX_SPRITES; i++) {
|
||||
sprite = &gSprites[i];
|
||||
if (sprite->inUse && sprite->callback == UpdateLightSprite && sprite->data[6] == x && sprite->data[7] == y)
|
||||
return;
|
||||
}
|
||||
sprite = &gSprites[CreateSprite(&gFieldEffectObjectTemplate_BallLight, 0, 0, 0)];
|
||||
UpdateSpritePaletteByTemplate(&gFieldEffectObjectTemplate_BallLight, sprite);
|
||||
GetMapCoordsFromSpritePos(x + camX, y + camY, &sprite->x, &sprite->y);
|
||||
sprite->data[6] = x;
|
||||
sprite->data[7] = y;
|
||||
sprite->affineAnims = gDummySpriteAffineAnimTable;
|
||||
sprite->affineAnimBeginning = TRUE;
|
||||
sprite->centerToCornerVecX = -(32 >> 1);
|
||||
sprite->centerToCornerVecY = -(32 >> 1);
|
||||
sprite->oam.priority = 1;
|
||||
sprite->oam.objMode = 1; // BLEND
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->x += 8;
|
||||
sprite->y += 22 + sprite->centerToCornerVecY;
|
||||
// Spawn a light at a map coordinate
|
||||
static void SpawnLightSprite(s16 x, s16 y, s16 camX, s16 camY, u32 lightType) {
|
||||
struct Sprite *sprite;
|
||||
const struct SpriteTemplate *template;
|
||||
u8 i;
|
||||
for (i = 0; i < MAX_SPRITES; i++) {
|
||||
sprite = &gSprites[i];
|
||||
if (sprite->inUse && sprite->callback == UpdateLightSprite && sprite->data[6] == x && sprite->data[7] == y)
|
||||
return;
|
||||
}
|
||||
lightType = min(lightType, ARRAY_COUNT(gFieldEffectLightTemplates) - 1); // bounds checking
|
||||
template = gFieldEffectLightTemplates[lightType];
|
||||
LoadSpriteSheetByTemplate(template, 0);
|
||||
sprite = &gSprites[CreateSprite(template, 0, 0, 0)];
|
||||
if (lightType == 0 && (i = IndexOfSpritePaletteTag(template->paletteTag + 1)) < 16)
|
||||
sprite->oam.paletteNum = i;
|
||||
else
|
||||
UpdateSpritePaletteByTemplate(template, sprite);
|
||||
GetMapCoordsFromSpritePos(x + camX, y + camY, &sprite->x, &sprite->y);
|
||||
sprite->data[5] = lightType;
|
||||
sprite->data[6] = x;
|
||||
sprite->data[7] = y;
|
||||
sprite->affineAnims = gDummySpriteAffineAnimTable;
|
||||
sprite->affineAnimBeginning = TRUE;
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
switch (lightType) {
|
||||
case 0: // Rustboro lanterns
|
||||
sprite->centerToCornerVecX = -(32 >> 1);
|
||||
sprite->centerToCornerVecY = -(32 >> 1);
|
||||
sprite->oam.priority = 1;
|
||||
sprite->oam.objMode = 1; // BLEND
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
sprite->x += 8;
|
||||
sprite->y += 22 + sprite->centerToCornerVecY;
|
||||
break;
|
||||
case 1 ... 2: // Pokemon Center & mart
|
||||
sprite->centerToCornerVecX = -(16 >> 1);
|
||||
sprite->centerToCornerVecY = -(16 >> 1);
|
||||
sprite->oam.priority = 2;
|
||||
sprite->subpriority = 0xFF;
|
||||
sprite->oam.objMode = 1; // BLEND
|
||||
}
|
||||
}
|
||||
|
||||
void TrySpawnLightSprites(s16 camX, s16 camY) {
|
||||
s16 left = gSaveBlock1Ptr->pos.x - 2;
|
||||
s16 right = gSaveBlock1Ptr->pos.x + 17;
|
||||
s16 top = gSaveBlock1Ptr->pos.y;
|
||||
s16 bottom = gSaveBlock1Ptr->pos.y + 16;
|
||||
u8 i = 0;
|
||||
s16 x, y;
|
||||
u32 behavior;
|
||||
if (gTimeOfDay != TIME_OF_DAY_NIGHT)
|
||||
return;
|
||||
for (i = 0; gLightMetatiles[i].x > 0; i++) {
|
||||
x = gLightMetatiles[i].x;
|
||||
y = gLightMetatiles[i].y;
|
||||
if (x >= left && x <= right && y >= top && y <= bottom) {
|
||||
behavior = MapGridGetMetatileBehaviorAt(x, y);
|
||||
if (behavior == 0x04) // TODO: Use an actual constant for light metatiles
|
||||
SpawnLightSprite(x, y, camX, camY, behavior);
|
||||
u8 i;
|
||||
u8 objectCount;
|
||||
s16 left = gSaveBlock1Ptr->pos.x - 2;
|
||||
s16 right = gSaveBlock1Ptr->pos.x + MAP_OFFSET_W + 2;
|
||||
s16 top = gSaveBlock1Ptr->pos.y;
|
||||
s16 bottom = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H + 2;
|
||||
if (gMapHeader.events == NULL)
|
||||
return;
|
||||
|
||||
if (InBattlePyramid())
|
||||
objectCount = GetNumBattlePyramidObjectEvents();
|
||||
else if (InTrainerHill())
|
||||
objectCount = 2;
|
||||
else
|
||||
objectCount = gMapHeader.events->objectEventCount;
|
||||
|
||||
for (i = 0; i < objectCount; i++) {
|
||||
struct ObjectEventTemplate *template = &gSaveBlock1Ptr->objectEventTemplates[i];
|
||||
s16 npcX = template->x + MAP_OFFSET;
|
||||
s16 npcY = template->y + MAP_OFFSET;
|
||||
if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX && !FlagGet(template->flagId))
|
||||
if (template->graphicsId == OBJ_EVENT_GFX_LIGHT_SPRITE) // event is light sprite instead
|
||||
SpawnLightSprite(npcX, npcY, camX, camY, template->trainerRange_berryTreeId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TrySpawnObjectEvents(s16 cameraX, s16 cameraY)
|
||||
|
|
@ -2080,12 +2122,14 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY)
|
|||
s16 npcX = template->x + MAP_OFFSET;
|
||||
s16 npcY = template->y + MAP_OFFSET;
|
||||
|
||||
if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX
|
||||
&& !FlagGet(template->flagId))
|
||||
TrySpawnObjectEventTemplate(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
|
||||
if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX && !FlagGet(template->flagId)) {
|
||||
if (template->graphicsId == OBJ_EVENT_GFX_LIGHT_SPRITE) { // light sprite instead
|
||||
SpawnLightSprite(npcX, npcY, cameraX, cameraY, template->trainerRange_berryTreeId);
|
||||
} else
|
||||
TrySpawnObjectEventTemplate(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
|
||||
}
|
||||
}
|
||||
}
|
||||
TrySpawnLightSprites(cameraX, cameraY);
|
||||
}
|
||||
|
||||
void RemoveObjectEventsOutsideView(void)
|
||||
|
|
|
|||
|
|
@ -466,18 +466,21 @@ static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
|
|||
|
||||
if (gammaIndex > 0)
|
||||
{
|
||||
// Create the palette mask
|
||||
u32 palettes = PALETTES_ALL;
|
||||
numPalettes += startPalIndex;
|
||||
palettes = (palettes >> startPalIndex) << startPalIndex;
|
||||
palettes = (palettes << (32-numPalettes)) >> (32-numPalettes);
|
||||
numPalettes -= startPalIndex;
|
||||
gammaIndex--;
|
||||
palOffset = startPalIndex * 16;
|
||||
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 32 * numPalettes);
|
||||
numPalettes += startPalIndex;
|
||||
UpdateAltBgPalettes(palettes & PALETTES_BG);
|
||||
// Thunder gamma-shift looks bad on night-blended palettes, so ignore time blending in some situations
|
||||
if (!(gammaIndex > 3 && gWeatherPtr->currWeather == WEATHER_RAIN_THUNDERSTORM)) {
|
||||
// Create the palette mask
|
||||
u32 palettes = PALETTES_ALL;
|
||||
palettes = (palettes >> startPalIndex) << startPalIndex;
|
||||
palettes = (palettes << (32-numPalettes)) >> (32-numPalettes);
|
||||
if (!(gammaIndex > 3 && gWeatherPtr->currWeather == WEATHER_RAIN_THUNDERSTORM) && MapHasNaturalLight(gMapHeader.mapType))
|
||||
UpdatePalettesWithTime(palettes);
|
||||
}
|
||||
else
|
||||
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 32 * numPalettes);
|
||||
numPalettes += startPalIndex;
|
||||
curPalIndex = startPalIndex;
|
||||
// Loop through the speficied palette range and apply necessary gamma shifts to the colors.
|
||||
while (curPalIndex < numPalettes)
|
||||
|
|
@ -546,6 +549,7 @@ static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
|
|||
numPalettes += startPalIndex;
|
||||
palettes = (palettes >> startPalIndex) << startPalIndex;
|
||||
palettes = (palettes << (32-numPalettes)) >> (32-numPalettes);
|
||||
UpdateAltBgPalettes(palettes & PALETTES_BG);
|
||||
UpdatePalettesWithTime(palettes);
|
||||
} else { // copy
|
||||
CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16));
|
||||
|
|
@ -570,6 +574,7 @@ static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaI
|
|||
|
||||
while (curPalIndex < numPalettes)
|
||||
{
|
||||
UpdateAltBgPalettes((1 << (palOffset >> 4)) & PALETTES_BG);
|
||||
CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
|
||||
UpdatePalettesWithTime(1 << (palOffset >> 4)); // Apply TOD blend
|
||||
if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
|
||||
|
|
@ -670,6 +675,7 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) // TODO: Optimize this
|
|||
u16 curPalIndex;
|
||||
|
||||
// First blend all palettes with time
|
||||
UpdateAltBgPalettes(PALETTES_BG);
|
||||
CpuFastCopy(gPlttBufferUnfaded, gPlttBufferFaded, 0x400);
|
||||
UpdatePalettesWithTime(PALETTES_ALL);
|
||||
// Then blend tile palettes [0, 12] faded->faded
|
||||
|
|
@ -816,6 +822,7 @@ void FadeScreen(u8 mode, s8 delay)
|
|||
gWeatherPtr->fadeScreenCounter = 0; // Triggers gamma-shift-based fade-in
|
||||
else {
|
||||
if (MapHasNaturalLight(gMapHeader.mapType)) {
|
||||
UpdateAltBgPalettes(PALETTES_BG);
|
||||
BeginTimeOfDayPaletteFade(PALETTES_ALL, delay, 16, 0,
|
||||
(struct BlendSettings *)&gTimeOfDayBlend[currentTimeBlend.time0],
|
||||
(struct BlendSettings *)&gTimeOfDayBlend[currentTimeBlend.time1],
|
||||
|
|
@ -883,11 +890,15 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex, bool8 allowFog)
|
|||
}
|
||||
}
|
||||
|
||||
void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
|
||||
void ApplyWeatherGammaShiftToPal(u8 paletteIndex) // now unused / obselete
|
||||
{
|
||||
ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
|
||||
}
|
||||
|
||||
void ApplyWeatherGammaShiftToPals(u8 startPalIndex, u8 numPalettes) {
|
||||
ApplyGammaShift(startPalIndex, numPalettes, gWeatherPtr->gammaIndex);
|
||||
}
|
||||
|
||||
// Unused
|
||||
static bool8 IsFirstFrameOfWeatherFadeIn(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ EWRAM_DATA struct MapHeader gMapHeader = {0};
|
|||
EWRAM_DATA struct Camera gCamera = {0};
|
||||
EWRAM_DATA static struct ConnectionFlags gMapConnectionFlags = {0};
|
||||
EWRAM_DATA static u32 sFiller = 0; // without this, the next file won't align properly
|
||||
EWRAM_DATA struct Coords16 gLightMetatiles[32] = {0};
|
||||
|
||||
struct BackupMapLayout gBackupMapLayout;
|
||||
|
||||
|
|
@ -63,7 +62,6 @@ static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax,
|
|||
#define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
|
||||
|
||||
#define MapGridGetTileAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.width * y] : MapGridGetBorderTileAt(x, y))
|
||||
static void CacheLightMetatiles(void);
|
||||
|
||||
struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection)
|
||||
{
|
||||
|
|
@ -75,7 +73,6 @@ void InitMap(void)
|
|||
InitMapLayoutData(&gMapHeader);
|
||||
SetOccupiedSecretBaseEntranceMetatiles(gMapHeader.events);
|
||||
RunOnLoadMapScript();
|
||||
CacheLightMetatiles();
|
||||
}
|
||||
|
||||
void InitMapFromSavedGame(void)
|
||||
|
|
@ -85,7 +82,6 @@ void InitMapFromSavedGame(void)
|
|||
SetOccupiedSecretBaseEntranceMetatiles(gMapHeader.events);
|
||||
LoadSavedMapView();
|
||||
RunOnLoadMapScript();
|
||||
CacheLightMetatiles();
|
||||
UpdateTVScreensOnMap(gBackupMapLayout.width, gBackupMapLayout.height);
|
||||
}
|
||||
|
||||
|
|
@ -382,23 +378,6 @@ u32 MapGridGetMetatileBehaviorAt(int x, int y)
|
|||
return GetBehaviorByMetatileId(metatile) & METATILE_BEHAVIOR_MASK;
|
||||
}
|
||||
|
||||
// Caches light metatile coordinates
|
||||
static void CacheLightMetatiles(void) { // TODO: Better way to dynamically generate lights
|
||||
u8 i = 0;
|
||||
s16 x, y;
|
||||
for (x = 0; x < gBackupMapLayout.width; x++) {
|
||||
for (y = 0; y < gBackupMapLayout.height; y++) {
|
||||
if (MapGridGetMetatileBehaviorAt(x, y) == 0x04) {
|
||||
gLightMetatiles[i].x = x;
|
||||
gLightMetatiles[i].y = y;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
gLightMetatiles[i].x = -1;
|
||||
gLightMetatiles[i].y = -1;
|
||||
}
|
||||
|
||||
u8 MapGridGetMetatileLayerTypeAt(int x, int y)
|
||||
{
|
||||
u16 metatile = MapGridGetMetatileIdAt(x, y);
|
||||
|
|
|
|||
|
|
@ -184,7 +184,6 @@ static u16 (*sPlayerKeyInterceptCallback)(u32);
|
|||
static bool8 sReceivingFromLink;
|
||||
static u8 sRfuKeepAliveTimer;
|
||||
|
||||
static u16 sTimeUpdateCounter; // playTimeVBlanks will eventually overflow, so this is used to update TOD
|
||||
|
||||
|
||||
// IWRAM common
|
||||
|
|
@ -199,6 +198,7 @@ u8 gFieldLinkPlayerCount;
|
|||
|
||||
u8 gTimeOfDay;
|
||||
struct TimeBlendSettings currentTimeBlend;
|
||||
u16 gTimeUpdateCounter; // playTimeVBlanks will eventually overflow, so this is used to update TOD
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA static u8 sObjectEventLoadFlag = 0;
|
||||
|
|
@ -822,8 +822,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
|
|||
CopySecondaryTilesetToVramUsingHeap(gMapHeader.mapLayout);
|
||||
LoadSecondaryTilesetPalette(gMapHeader.mapLayout);
|
||||
|
||||
for (paletteIndex = 6; paletteIndex < 13; paletteIndex++) // TODO: Optimize gamma shifts
|
||||
ApplyWeatherGammaShiftToPal(paletteIndex);
|
||||
ApplyWeatherGammaShiftToPals(6, 6); // palettes [6,12]
|
||||
|
||||
InitSecondaryTilesetAnimation();
|
||||
UpdateLocationHistoryForRoamer();
|
||||
|
|
@ -1481,29 +1480,34 @@ u8 UpdateTimeOfDay(void) {
|
|||
minutes = gLocalTime.minutes;
|
||||
if (hours >= 22 || hours < 4) { // night
|
||||
currentTimeBlend.weight = 256;
|
||||
currentTimeBlend.altWeight = 0;
|
||||
return gTimeOfDay = currentTimeBlend.time0 = currentTimeBlend.time1 = TIME_OF_DAY_NIGHT;
|
||||
} else if (hours >= 4 && hours < 7) { // night->twilight
|
||||
currentTimeBlend.time0 = TIME_OF_DAY_NIGHT;
|
||||
currentTimeBlend.time1 = TIME_OF_DAY_TWILIGHT;
|
||||
currentTimeBlend.weight = 256 - 256 * ((hours - 4) * 60 + minutes) / ((7-4)*60);
|
||||
currentTimeBlend.altWeight = (256 - currentTimeBlend.weight) / 2;
|
||||
return gTimeOfDay = TIME_OF_DAY_DAY;
|
||||
} else if (hours >= 7 && hours < 10) { // twilight->day
|
||||
currentTimeBlend.time0 = TIME_OF_DAY_TWILIGHT;
|
||||
currentTimeBlend.time1 = TIME_OF_DAY_DAY;
|
||||
currentTimeBlend.weight = 256 - 256 * ((hours - 7) * 60 + minutes) / ((10-7)*60);
|
||||
currentTimeBlend.altWeight = (256 - currentTimeBlend.weight) / 2 + 128;
|
||||
return gTimeOfDay = TIME_OF_DAY_DAY;
|
||||
} else if (hours >= 10 && hours < 18) { // day
|
||||
currentTimeBlend.weight = 256;
|
||||
currentTimeBlend.weight = currentTimeBlend.altWeight = 256;
|
||||
return gTimeOfDay = currentTimeBlend.time0 = currentTimeBlend.time1 = TIME_OF_DAY_DAY;
|
||||
} else if (hours >= 18 && hours < 20) { // day->twilight
|
||||
currentTimeBlend.time0 = TIME_OF_DAY_DAY;
|
||||
currentTimeBlend.time1 = TIME_OF_DAY_TWILIGHT;
|
||||
currentTimeBlend.weight = 256 - 256 * ((hours - 18) * 60 + minutes) / ((20-18)*60);
|
||||
currentTimeBlend.altWeight = currentTimeBlend.weight / 2 + 128;
|
||||
return gTimeOfDay = TIME_OF_DAY_TWILIGHT;
|
||||
} else if (hours >= 20 && hours < 22) { // twilight->night
|
||||
currentTimeBlend.time0 = TIME_OF_DAY_TWILIGHT;
|
||||
currentTimeBlend.time1 = TIME_OF_DAY_NIGHT;
|
||||
currentTimeBlend.weight = 256 - 256 * ((hours - 20) * 60 + minutes) / ((22-20)*60);
|
||||
currentTimeBlend.altWeight = currentTimeBlend.weight / 2;
|
||||
return gTimeOfDay = TIME_OF_DAY_NIGHT;
|
||||
} else { // This should never occur
|
||||
currentTimeBlend.weight = 256;
|
||||
|
|
@ -1516,16 +1520,41 @@ bool8 MapHasNaturalLight(u8 mapType) { // Whether a map type is naturally lit/ou
|
|||
|| mapType == MAP_TYPE_OCEAN_ROUTE;
|
||||
}
|
||||
|
||||
// Update & mix day / night bg palettes (into unfaded)
|
||||
void UpdateAltBgPalettes(u16 palettes) {
|
||||
struct Tileset *primary = gMapHeader.mapLayout->primaryTileset;
|
||||
struct Tileset *secondary = gMapHeader.mapLayout->secondaryTileset;
|
||||
u32 i = 1;
|
||||
if (!MapHasNaturalLight(gMapHeader.mapType))
|
||||
return;
|
||||
palettes &= ~((1 << NUM_PALS_IN_PRIMARY) - 1) | primary->swapPalettes;
|
||||
palettes &= ((1 << NUM_PALS_IN_PRIMARY) - 1) | (secondary->swapPalettes << NUM_PALS_IN_PRIMARY);
|
||||
palettes &= 0x1FFE; // don't blend palette 0, [13,15]
|
||||
palettes >>= 1; // start at palette 1
|
||||
if (!palettes)
|
||||
return;
|
||||
while (palettes) {
|
||||
if (palettes & 1) {
|
||||
if (i < NUM_PALS_IN_PRIMARY)
|
||||
AvgPaletteWeighted(&((u16*)primary->palettes)[i*16], &((u16*)primary->palettes)[((i+9)%16)*16], gPlttBufferUnfaded + i * 16, currentTimeBlend.altWeight);
|
||||
else
|
||||
AvgPaletteWeighted(&((u16*)secondary->palettes)[i*16], &((u16*)secondary->palettes)[((i+9)%16)*16], gPlttBufferUnfaded + i * 16, currentTimeBlend.altWeight);
|
||||
}
|
||||
i++;
|
||||
palettes >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdatePalettesWithTime(u32 palettes) {
|
||||
if (MapHasNaturalLight(gMapHeader.mapType)) {
|
||||
u16 i;
|
||||
u16 tempPaletteBuffer[16];
|
||||
u32 i;
|
||||
u32 mask = 1 << 16;
|
||||
for (i = 0; i < 16; i++, mask <<= 1) {
|
||||
if (GetSpritePaletteTagByPaletteNum(i) >> 15) // Don't blend special sprite palette tags
|
||||
palettes &= ~(mask);
|
||||
}
|
||||
palettes &= 0xFFFF1FFF; // Don't blend tile palettes [13,15]
|
||||
if (palettes >= 0x10000)
|
||||
for (i = 0; i < 16; i++, mask <<= 1)
|
||||
if (GetSpritePaletteTagByPaletteNum(i) >> 15) // Don't blend special sprite palette tags
|
||||
palettes &= ~(mask);
|
||||
|
||||
palettes &= 0xFFFF1FFF; // Don't blend UI BG palettes [13,15]
|
||||
if (!palettes)
|
||||
return;
|
||||
TimeMixPalettes(palettes,
|
||||
|
|
@ -1565,18 +1594,20 @@ static void OverworldBasic(void)
|
|||
UpdateTilesetAnimations();
|
||||
DoScheduledBgTilemapCopiesToVram();
|
||||
// Every minute if no palette fade is active, update TOD blending as needed
|
||||
if (!(gPaletteFade.active || (++sTimeUpdateCounter % 3600))) {
|
||||
if (!(gPaletteFade.active || (++gTimeUpdateCounter % 3600))) {
|
||||
struct TimeBlendSettings cachedBlend = {
|
||||
.time0 = currentTimeBlend.time0,
|
||||
.time1 = currentTimeBlend.time1,
|
||||
.weight = currentTimeBlend.weight,
|
||||
};
|
||||
sTimeUpdateCounter = 0;
|
||||
gTimeUpdateCounter = 0;
|
||||
UpdateTimeOfDay();
|
||||
if (cachedBlend.time0 != currentTimeBlend.time0
|
||||
|| cachedBlend.time1 != currentTimeBlend.time1
|
||||
|| cachedBlend.weight != currentTimeBlend.weight)
|
||||
UpdatePalettesWithTime(PALETTES_ALL);
|
||||
|| cachedBlend.weight != currentTimeBlend.weight) {
|
||||
UpdateAltBgPalettes(PALETTES_BG);
|
||||
UpdatePalettesWithTime(PALETTES_ALL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1211,6 +1211,31 @@ void TimeMixPalettes(u32 palettes, u16 *src, u16 *dst, struct BlendSettings *ble
|
|||
} while (palettes);
|
||||
}
|
||||
|
||||
// Apply weighted average to palettes, preserving high bits of dst throughout
|
||||
void AvgPaletteWeighted(u16 *src0, u16 *src1, u16 *dst, u16 weight0) {
|
||||
u16 *srcEnd = src0 + 16;
|
||||
u16 weight1 = 256 - weight0;
|
||||
src0++;
|
||||
src1++;
|
||||
dst++; // leave dst transparency unchanged
|
||||
while (src0 != srcEnd) {
|
||||
u32 src0Color = *src0++;
|
||||
s32 r0 = (src0Color << 27) >> 27;
|
||||
s32 g0 = (src0Color << 22) >> 27;
|
||||
s32 b0 = (src0Color << 17) >> 27;
|
||||
u32 src1Color = *src1++;
|
||||
s32 r1 = (src1Color << 27) >> 27;
|
||||
s32 g1 = (src1Color << 22) >> 27;
|
||||
s32 b1 = (src1Color << 17) >> 27;
|
||||
|
||||
// Average and bitwise-OR
|
||||
r0 = (weight0*r0 + weight1*r1) >> 8;
|
||||
g0 = (weight0*g0 + weight1*g1) >> 8;
|
||||
b0 = (weight0*b0 + weight1*b1) >> 8;
|
||||
*dst++ = (*dst & 0x8000) | RGB2(r0, g0, b0); // preserve high bit of dst
|
||||
}
|
||||
}
|
||||
|
||||
void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color)
|
||||
{
|
||||
void *src = gPlttBufferUnfaded;
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ static const union AnimCmd *const sSpriteAnimTable_Emotes[] = {
|
|||
|
||||
// TODO: Move these declarations into even_object_movement.h
|
||||
#define OBJ_EVENT_PAL_TAG_MAY 0x1110
|
||||
#define OBJ_EVENT_PAL_TAG_EMOTES 0x8002
|
||||
#define OBJ_EVENT_PAL_TAG_EMOTES 0x8003
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark =
|
||||
{
|
||||
|
|
|
|||