Added pokemon followers & script commands.
This commit is contained in:
parent
a2c8ab6a09
commit
8a3dfbf252
@ -1625,6 +1625,11 @@
|
||||
.2byte \quantity
|
||||
.endm
|
||||
|
||||
@ Like callnative, but function expects a ctx
|
||||
.macro callfunc func:req
|
||||
.byte 0xe3
|
||||
.4byte \func
|
||||
.endm
|
||||
|
||||
@ Supplementary
|
||||
|
||||
|
||||
@ -1057,6 +1057,7 @@ Common_EventScript_LegendaryFlewAway:: @ 8273776
|
||||
.include "data/scripts/move_tutors.inc"
|
||||
.include "data/scripts/trainer_hill.inc"
|
||||
.include "data/scripts/test_signpost.inc"
|
||||
.include "data/scripts/follower.inc"
|
||||
.include "data/text/frontier_brain.inc"
|
||||
.include "data/text/save.inc"
|
||||
.include "data/text/birch_speech.inc"
|
||||
|
||||
@ -1,232 +1,233 @@
|
||||
.align 2
|
||||
gScriptCmdTable:: @ 81DB67C
|
||||
.4byte ScrCmd_nop @ 0x00
|
||||
.4byte ScrCmd_nop1 @ 0x01
|
||||
.4byte ScrCmd_end @ 0x02
|
||||
.4byte ScrCmd_return @ 0x03
|
||||
.4byte ScrCmd_call @ 0x04
|
||||
.4byte ScrCmd_goto @ 0x05
|
||||
.4byte ScrCmd_goto_if @ 0x06
|
||||
.4byte ScrCmd_call_if @ 0x07
|
||||
.4byte ScrCmd_gotostd @ 0x08
|
||||
.4byte ScrCmd_callstd @ 0x09
|
||||
.4byte ScrCmd_gotostd_if @ 0x0a
|
||||
.4byte ScrCmd_callstd_if @ 0x0b
|
||||
.4byte ScrCmd_returnram @ 0x0c
|
||||
.4byte ScrCmd_killscript @ 0x0d
|
||||
.4byte ScrCmd_setmysteryeventstatus @ 0x0e
|
||||
.4byte ScrCmd_loadword @ 0x0f
|
||||
.4byte ScrCmd_loadbyte @ 0x10
|
||||
.4byte ScrCmd_writebytetoaddr @ 0x11
|
||||
.4byte ScrCmd_loadbytefromaddr @ 0x12
|
||||
.4byte ScrCmd_setptrbyte @ 0x13
|
||||
.4byte ScrCmd_copylocal @ 0x14
|
||||
.4byte ScrCmd_copybyte @ 0x15
|
||||
.4byte ScrCmd_setvar @ 0x16
|
||||
.4byte ScrCmd_addvar @ 0x17
|
||||
.4byte ScrCmd_subvar @ 0x18
|
||||
.4byte ScrCmd_copyvar @ 0x19
|
||||
.4byte ScrCmd_setorcopyvar @ 0x1a
|
||||
.4byte ScrCmd_compare_local_to_local @ 0x1b
|
||||
.4byte ScrCmd_compare_local_to_value @ 0x1c
|
||||
.4byte ScrCmd_compare_local_to_addr @ 0x1d
|
||||
.4byte ScrCmd_compare_addr_to_local @ 0x1e
|
||||
.4byte ScrCmd_compare_addr_to_value @ 0x1f
|
||||
.4byte ScrCmd_compare_addr_to_addr @ 0x20
|
||||
.4byte ScrCmd_compare_var_to_value @ 0x21
|
||||
.4byte ScrCmd_compare_var_to_var @ 0x22
|
||||
.4byte ScrCmd_callnative @ 0x23
|
||||
.4byte ScrCmd_gotonative @ 0x24
|
||||
.4byte ScrCmd_special @ 0x25
|
||||
.4byte ScrCmd_specialvar @ 0x26
|
||||
.4byte ScrCmd_waitstate @ 0x27
|
||||
.4byte ScrCmd_delay @ 0x28
|
||||
.4byte ScrCmd_setflag @ 0x29
|
||||
.4byte ScrCmd_clearflag @ 0x2a
|
||||
.4byte ScrCmd_checkflag @ 0x2b
|
||||
.4byte ScrCmd_initclock @ 0x2c
|
||||
.4byte ScrCmd_dotimebasedevents @ 0x2d
|
||||
.4byte ScrCmd_gettime @ 0x2e
|
||||
.4byte ScrCmd_playse @ 0x2f
|
||||
.4byte ScrCmd_waitse @ 0x30
|
||||
.4byte ScrCmd_playfanfare @ 0x31
|
||||
.4byte ScrCmd_waitfanfare @ 0x32
|
||||
.4byte ScrCmd_playbgm @ 0x33
|
||||
.4byte ScrCmd_savebgm @ 0x34
|
||||
.4byte ScrCmd_fadedefaultbgm @ 0x35
|
||||
.4byte ScrCmd_fadenewbgm @ 0x36
|
||||
.4byte ScrCmd_fadeoutbgm @ 0x37
|
||||
.4byte ScrCmd_fadeinbgm @ 0x38
|
||||
.4byte ScrCmd_warp @ 0x39
|
||||
.4byte ScrCmd_warpsilent @ 0x3a
|
||||
.4byte ScrCmd_warpdoor @ 0x3b
|
||||
.4byte ScrCmd_warphole @ 0x3c
|
||||
.4byte ScrCmd_warpteleport @ 0x3d
|
||||
.4byte ScrCmd_setwarp @ 0x3e
|
||||
.4byte ScrCmd_setdynamicwarp @ 0x3f
|
||||
.4byte ScrCmd_setdivewarp @ 0x40
|
||||
.4byte ScrCmd_setholewarp @ 0x41
|
||||
.4byte ScrCmd_getplayerxy @ 0x42
|
||||
.4byte ScrCmd_getpartysize @ 0x43
|
||||
.4byte ScrCmd_additem @ 0x44
|
||||
.4byte ScrCmd_removeitem @ 0x45
|
||||
.4byte ScrCmd_checkitemspace @ 0x46
|
||||
.4byte ScrCmd_checkitem @ 0x47
|
||||
.4byte ScrCmd_checkitemtype @ 0x48
|
||||
.4byte ScrCmd_addpcitem @ 0x49
|
||||
.4byte ScrCmd_checkpcitem @ 0x4a
|
||||
.4byte ScrCmd_adddecoration @ 0x4b
|
||||
.4byte ScrCmd_removedecoration @ 0x4c
|
||||
.4byte ScrCmd_checkdecor @ 0x4d
|
||||
.4byte ScrCmd_checkdecorspace @ 0x4e
|
||||
.4byte ScrCmd_applymovement @ 0x4f
|
||||
.4byte ScrCmd_applymovement_at @ 0x50
|
||||
.4byte ScrCmd_waitmovement @ 0x51
|
||||
.4byte ScrCmd_waitmovement_at @ 0x52
|
||||
.4byte ScrCmd_removeobject @ 0x53
|
||||
.4byte ScrCmd_removeobject_at @ 0x54
|
||||
.4byte ScrCmd_addobject @ 0x55
|
||||
.4byte ScrCmd_addobject_at @ 0x56
|
||||
.4byte ScrCmd_setobjectxy @ 0x57
|
||||
.4byte ScrCmd_showobject_at @ 0x58
|
||||
.4byte ScrCmd_hideobject_at @ 0x59
|
||||
.4byte ScrCmd_faceplayer @ 0x5a
|
||||
.4byte ScrCmd_turnobject @ 0x5b
|
||||
.4byte ScrCmd_trainerbattle @ 0x5c
|
||||
.4byte ScrCmd_dotrainerbattle @ 0x5d
|
||||
.4byte ScrCmd_gotopostbattlescript @ 0x5e
|
||||
.4byte ScrCmd_gotobeatenscript @ 0x5f
|
||||
.4byte ScrCmd_checktrainerflag @ 0x60
|
||||
.4byte ScrCmd_settrainerflag @ 0x61
|
||||
.4byte ScrCmd_cleartrainerflag @ 0x62
|
||||
.4byte ScrCmd_setobjectxyperm @ 0x63
|
||||
.4byte ScrCmd_copyobjectxytoperm @ 0x64
|
||||
.4byte ScrCmd_setobjectmovementtype @ 0x65
|
||||
.4byte ScrCmd_waitmessage @ 0x66
|
||||
.4byte ScrCmd_message @ 0x67
|
||||
.4byte ScrCmd_closemessage @ 0x68
|
||||
.4byte ScrCmd_lockall @ 0x69
|
||||
.4byte ScrCmd_lock @ 0x6a
|
||||
.4byte ScrCmd_releaseall @ 0x6b
|
||||
.4byte ScrCmd_release @ 0x6c
|
||||
.4byte ScrCmd_waitbuttonpress @ 0x6d
|
||||
.4byte ScrCmd_yesnobox @ 0x6e
|
||||
.4byte ScrCmd_multichoice @ 0x6f
|
||||
.4byte ScrCmd_multichoicedefault @ 0x70
|
||||
.4byte ScrCmd_multichoicegrid @ 0x71
|
||||
.4byte ScrCmd_drawbox @ 0x72
|
||||
.4byte ScrCmd_erasebox @ 0x73
|
||||
.4byte ScrCmd_drawboxtext @ 0x74
|
||||
.4byte ScrCmd_showmonpic @ 0x75
|
||||
.4byte ScrCmd_hidemonpic @ 0x76
|
||||
.4byte ScrCmd_showcontestwinner @ 0x77
|
||||
.4byte ScrCmd_braillemessage @ 0x78
|
||||
.4byte ScrCmd_givemon @ 0x79
|
||||
.4byte ScrCmd_giveegg @ 0x7a
|
||||
.4byte ScrCmd_setmonmove @ 0x7b
|
||||
.4byte ScrCmd_checkpartymove @ 0x7c
|
||||
.4byte ScrCmd_bufferspeciesname @ 0x7d
|
||||
.4byte ScrCmd_bufferleadmonspeciesname @ 0x7e
|
||||
.4byte ScrCmd_bufferpartymonnick @ 0x7f
|
||||
.4byte ScrCmd_bufferitemname @ 0x80
|
||||
.4byte ScrCmd_bufferdecorationname @ 0x81
|
||||
.4byte ScrCmd_buffermovename @ 0x82
|
||||
.4byte ScrCmd_buffernumberstring @ 0x83
|
||||
.4byte ScrCmd_bufferstdstring @ 0x84
|
||||
.4byte ScrCmd_bufferstring @ 0x85
|
||||
.4byte ScrCmd_pokemart @ 0x86
|
||||
.4byte ScrCmd_pokemartdecoration @ 0x87
|
||||
.4byte ScrCmd_pokemartdecoration2 @ 0x88
|
||||
.4byte ScrCmd_playslotmachine @ 0x89
|
||||
.4byte ScrCmd_setberrytree @ 0x8a
|
||||
.4byte ScrCmd_choosecontestmon @ 0x8b
|
||||
.4byte ScrCmd_startcontest @ 0x8c
|
||||
.4byte ScrCmd_showcontestresults @ 0x8d
|
||||
.4byte ScrCmd_contestlinktransfer @ 0x8e
|
||||
.4byte ScrCmd_random @ 0x8f
|
||||
.4byte ScrCmd_addmoney @ 0x90
|
||||
.4byte ScrCmd_removemoney @ 0x91
|
||||
.4byte ScrCmd_checkmoney @ 0x92
|
||||
.4byte ScrCmd_showmoneybox @ 0x93
|
||||
.4byte ScrCmd_hidemoneybox @ 0x94
|
||||
.4byte ScrCmd_updatemoneybox @ 0x95
|
||||
.4byte ScrCmd_getpricereduction @ 0x96
|
||||
.4byte ScrCmd_fadescreen @ 0x97
|
||||
.4byte ScrCmd_fadescreenspeed @ 0x98
|
||||
.4byte ScrCmd_setflashradius @ 0x99
|
||||
.4byte ScrCmd_animateflash @ 0x9a
|
||||
.4byte ScrCmd_messageautoscroll @ 0x9b
|
||||
.4byte ScrCmd_dofieldeffect @ 0x9c
|
||||
.4byte ScrCmd_setfieldeffectarg @ 0x9d
|
||||
.4byte ScrCmd_waitfieldeffect @ 0x9e
|
||||
.4byte ScrCmd_setrespawn @ 0x9f
|
||||
.4byte ScrCmd_checkplayergender @ 0xa0
|
||||
.4byte ScrCmd_playmoncry @ 0xa1
|
||||
.4byte ScrCmd_setmetatile @ 0xa2
|
||||
.4byte ScrCmd_resetweather @ 0xa3
|
||||
.4byte ScrCmd_setweather @ 0xa4
|
||||
.4byte ScrCmd_doweather @ 0xa5
|
||||
.4byte ScrCmd_setstepcallback @ 0xa6
|
||||
.4byte ScrCmd_setmaplayoutindex @ 0xa7
|
||||
.4byte ScrCmd_setobjectpriority @ 0xa8
|
||||
.4byte ScrCmd_resetobjectpriority @ 0xa9
|
||||
.4byte ScrCmd_createvobject @ 0xaa
|
||||
.4byte ScrCmd_turnvobject @ 0xab
|
||||
.4byte ScrCmd_opendoor @ 0xac
|
||||
.4byte ScrCmd_closedoor @ 0xad
|
||||
.4byte ScrCmd_waitdooranim @ 0xae
|
||||
.4byte ScrCmd_setdooropen @ 0xaf
|
||||
.4byte ScrCmd_setdoorclosed @ 0xb0
|
||||
.4byte ScrCmd_addelevmenuitem @ 0xb1
|
||||
.4byte ScrCmd_showelevmenu @ 0xb2
|
||||
.4byte ScrCmd_checkcoins @ 0xb3
|
||||
.4byte ScrCmd_addcoins @ 0xb4
|
||||
.4byte ScrCmd_removecoins @ 0xb5
|
||||
.4byte ScrCmd_setwildbattle @ 0xb6
|
||||
.4byte ScrCmd_dowildbattle @ 0xb7
|
||||
.4byte ScrCmd_setvaddress @ 0xb8
|
||||
.4byte ScrCmd_vgoto @ 0xb9
|
||||
.4byte ScrCmd_vcall @ 0xba
|
||||
.4byte ScrCmd_vgoto_if @ 0xbb
|
||||
.4byte ScrCmd_vcall_if @ 0xbc
|
||||
.4byte ScrCmd_vmessage @ 0xbd
|
||||
.4byte ScrCmd_vloadword @ 0xbe
|
||||
.4byte ScrCmd_vbufferstring @ 0xbf
|
||||
.4byte ScrCmd_showcoinsbox @ 0xc0
|
||||
.4byte ScrCmd_hidecoinsbox @ 0xc1
|
||||
.4byte ScrCmd_updatecoinsbox @ 0xc2
|
||||
.4byte ScrCmd_incrementgamestat @ 0xc3
|
||||
.4byte ScrCmd_setescapewarp @ 0xc4
|
||||
.4byte ScrCmd_waitmoncry @ 0xc5
|
||||
.4byte ScrCmd_bufferboxname @ 0xc6
|
||||
.4byte ScrCmd_nop1 @ 0xc7
|
||||
.4byte ScrCmd_nop1 @ 0xc8
|
||||
.4byte ScrCmd_nop1 @ 0xc9
|
||||
.4byte ScrCmd_nop1 @ 0xca
|
||||
.4byte ScrCmd_nop1 @ 0xcb
|
||||
.4byte ScrCmd_nop1 @ 0xcc
|
||||
.4byte ScrCmd_setmoneventlegal @ 0xcd
|
||||
.4byte ScrCmd_checkmoneventlegal @ 0xce
|
||||
.4byte ScrCmd_gotoram @ 0xcf
|
||||
.4byte ScrCmd_nop1 @ 0xd0
|
||||
.4byte ScrCmd_warpspinenter @ 0xd1
|
||||
.4byte ScrCmd_setmonmetlocation @ 0xd2
|
||||
.4byte ScrCmd_moverotatingtileobjects @ 0xd3
|
||||
.4byte ScrCmd_turnrotatingtileobjects @ 0xd4
|
||||
.4byte ScrCmd_initrotatingtilepuzzle @ 0xd5
|
||||
.4byte ScrCmd_freerotatingtilepuzzle @ 0xd6
|
||||
.4byte ScrCmd_warpmossdeepgym @ 0xd7
|
||||
.4byte ScrCmd_selectapproachingtrainer @ 0xd8
|
||||
.4byte ScrCmd_lockfortrainer @ 0xd9
|
||||
.4byte ScrCmd_closebraillemessage @ 0xda
|
||||
.4byte ScrCmd_messageinstant @ 0xdb
|
||||
.4byte ScrCmd_fadescreenswapbuffers @ 0xdc
|
||||
.4byte ScrCmd_buffertrainerclassname @ 0xdd
|
||||
.4byte ScrCmd_buffertrainername @ 0xde
|
||||
.4byte ScrCmd_pokenavcall @ 0xdf
|
||||
.4byte ScrCmd_warpsootopolislegend @ 0xe0
|
||||
.4byte ScrCmd_buffercontesttype @ 0xe1
|
||||
.4byte ScrCmd_bufferitemnameplural @ 0xe2
|
||||
.4byte ScrCmd_nop
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_end
|
||||
.4byte ScrCmd_return
|
||||
.4byte ScrCmd_call
|
||||
.4byte ScrCmd_goto
|
||||
.4byte ScrCmd_goto_if
|
||||
.4byte ScrCmd_call_if
|
||||
.4byte ScrCmd_gotostd
|
||||
.4byte ScrCmd_callstd
|
||||
.4byte ScrCmd_gotostd_if
|
||||
.4byte ScrCmd_callstd_if
|
||||
.4byte ScrCmd_returnram
|
||||
.4byte ScrCmd_killscript
|
||||
.4byte ScrCmd_setmysteryeventstatus
|
||||
.4byte ScrCmd_loadword
|
||||
.4byte ScrCmd_loadbyte
|
||||
.4byte ScrCmd_writebytetoaddr
|
||||
.4byte ScrCmd_loadbytefromaddr
|
||||
.4byte ScrCmd_setptrbyte
|
||||
.4byte ScrCmd_copylocal
|
||||
.4byte ScrCmd_copybyte
|
||||
.4byte ScrCmd_setvar
|
||||
.4byte ScrCmd_addvar
|
||||
.4byte ScrCmd_subvar
|
||||
.4byte ScrCmd_copyvar
|
||||
.4byte ScrCmd_setorcopyvar
|
||||
.4byte ScrCmd_compare_local_to_local
|
||||
.4byte ScrCmd_compare_local_to_value
|
||||
.4byte ScrCmd_compare_local_to_addr
|
||||
.4byte ScrCmd_compare_addr_to_local
|
||||
.4byte ScrCmd_compare_addr_to_value
|
||||
.4byte ScrCmd_compare_addr_to_addr
|
||||
.4byte ScrCmd_compare_var_to_value
|
||||
.4byte ScrCmd_compare_var_to_var
|
||||
.4byte ScrCmd_callnative
|
||||
.4byte ScrCmd_gotonative
|
||||
.4byte ScrCmd_special
|
||||
.4byte ScrCmd_specialvar
|
||||
.4byte ScrCmd_waitstate
|
||||
.4byte ScrCmd_delay
|
||||
.4byte ScrCmd_setflag
|
||||
.4byte ScrCmd_clearflag
|
||||
.4byte ScrCmd_checkflag
|
||||
.4byte ScrCmd_initclock
|
||||
.4byte ScrCmd_dotimebasedevents
|
||||
.4byte ScrCmd_gettime
|
||||
.4byte ScrCmd_playse
|
||||
.4byte ScrCmd_waitse
|
||||
.4byte ScrCmd_playfanfare
|
||||
.4byte ScrCmd_waitfanfare
|
||||
.4byte ScrCmd_playbgm
|
||||
.4byte ScrCmd_savebgm
|
||||
.4byte ScrCmd_fadedefaultbgm
|
||||
.4byte ScrCmd_fadenewbgm
|
||||
.4byte ScrCmd_fadeoutbgm
|
||||
.4byte ScrCmd_fadeinbgm
|
||||
.4byte ScrCmd_warp
|
||||
.4byte ScrCmd_warpsilent
|
||||
.4byte ScrCmd_warpdoor
|
||||
.4byte ScrCmd_warphole
|
||||
.4byte ScrCmd_warpteleport
|
||||
.4byte ScrCmd_setwarp
|
||||
.4byte ScrCmd_setdynamicwarp
|
||||
.4byte ScrCmd_setdivewarp
|
||||
.4byte ScrCmd_setholewarp
|
||||
.4byte ScrCmd_getplayerxy
|
||||
.4byte ScrCmd_getpartysize
|
||||
.4byte ScrCmd_additem
|
||||
.4byte ScrCmd_removeitem
|
||||
.4byte ScrCmd_checkitemspace
|
||||
.4byte ScrCmd_checkitem
|
||||
.4byte ScrCmd_checkitemtype
|
||||
.4byte ScrCmd_addpcitem
|
||||
.4byte ScrCmd_checkpcitem
|
||||
.4byte ScrCmd_adddecoration
|
||||
.4byte ScrCmd_removedecoration
|
||||
.4byte ScrCmd_checkdecor
|
||||
.4byte ScrCmd_checkdecorspace
|
||||
.4byte ScrCmd_applymovement
|
||||
.4byte ScrCmd_applymovement_at
|
||||
.4byte ScrCmd_waitmovement
|
||||
.4byte ScrCmd_waitmovement_at
|
||||
.4byte ScrCmd_removeobject
|
||||
.4byte ScrCmd_removeobject_at
|
||||
.4byte ScrCmd_addobject
|
||||
.4byte ScrCmd_addobject_at
|
||||
.4byte ScrCmd_setobjectxy
|
||||
.4byte ScrCmd_showobject_at
|
||||
.4byte ScrCmd_hideobject_at
|
||||
.4byte ScrCmd_faceplayer
|
||||
.4byte ScrCmd_turnobject
|
||||
.4byte ScrCmd_trainerbattle
|
||||
.4byte ScrCmd_dotrainerbattle
|
||||
.4byte ScrCmd_gotopostbattlescript
|
||||
.4byte ScrCmd_gotobeatenscript
|
||||
.4byte ScrCmd_checktrainerflag
|
||||
.4byte ScrCmd_settrainerflag
|
||||
.4byte ScrCmd_cleartrainerflag
|
||||
.4byte ScrCmd_setobjectxyperm
|
||||
.4byte ScrCmd_copyobjectxytoperm
|
||||
.4byte ScrCmd_setobjectmovementtype
|
||||
.4byte ScrCmd_waitmessage
|
||||
.4byte ScrCmd_message
|
||||
.4byte ScrCmd_closemessage
|
||||
.4byte ScrCmd_lockall
|
||||
.4byte ScrCmd_lock
|
||||
.4byte ScrCmd_releaseall
|
||||
.4byte ScrCmd_release
|
||||
.4byte ScrCmd_waitbuttonpress
|
||||
.4byte ScrCmd_yesnobox
|
||||
.4byte ScrCmd_multichoice
|
||||
.4byte ScrCmd_multichoicedefault
|
||||
.4byte ScrCmd_multichoicegrid
|
||||
.4byte ScrCmd_drawbox
|
||||
.4byte ScrCmd_erasebox
|
||||
.4byte ScrCmd_drawboxtext
|
||||
.4byte ScrCmd_showmonpic
|
||||
.4byte ScrCmd_hidemonpic
|
||||
.4byte ScrCmd_showcontestwinner
|
||||
.4byte ScrCmd_braillemessage
|
||||
.4byte ScrCmd_givemon
|
||||
.4byte ScrCmd_giveegg
|
||||
.4byte ScrCmd_setmonmove
|
||||
.4byte ScrCmd_checkpartymove
|
||||
.4byte ScrCmd_bufferspeciesname
|
||||
.4byte ScrCmd_bufferleadmonspeciesname
|
||||
.4byte ScrCmd_bufferpartymonnick
|
||||
.4byte ScrCmd_bufferitemname
|
||||
.4byte ScrCmd_bufferdecorationname
|
||||
.4byte ScrCmd_buffermovename
|
||||
.4byte ScrCmd_buffernumberstring
|
||||
.4byte ScrCmd_bufferstdstring
|
||||
.4byte ScrCmd_bufferstring
|
||||
.4byte ScrCmd_pokemart
|
||||
.4byte ScrCmd_pokemartdecoration
|
||||
.4byte ScrCmd_pokemartdecoration2
|
||||
.4byte ScrCmd_playslotmachine
|
||||
.4byte ScrCmd_setberrytree
|
||||
.4byte ScrCmd_choosecontestmon
|
||||
.4byte ScrCmd_startcontest
|
||||
.4byte ScrCmd_showcontestresults
|
||||
.4byte ScrCmd_contestlinktransfer
|
||||
.4byte ScrCmd_random
|
||||
.4byte ScrCmd_addmoney
|
||||
.4byte ScrCmd_removemoney
|
||||
.4byte ScrCmd_checkmoney
|
||||
.4byte ScrCmd_showmoneybox
|
||||
.4byte ScrCmd_hidemoneybox
|
||||
.4byte ScrCmd_updatemoneybox
|
||||
.4byte ScrCmd_getpricereduction
|
||||
.4byte ScrCmd_fadescreen
|
||||
.4byte ScrCmd_fadescreenspeed
|
||||
.4byte ScrCmd_setflashradius
|
||||
.4byte ScrCmd_animateflash
|
||||
.4byte ScrCmd_messageautoscroll
|
||||
.4byte ScrCmd_dofieldeffect
|
||||
.4byte ScrCmd_setfieldeffectarg
|
||||
.4byte ScrCmd_waitfieldeffect
|
||||
.4byte ScrCmd_setrespawn
|
||||
.4byte ScrCmd_checkplayergender
|
||||
.4byte ScrCmd_playmoncry
|
||||
.4byte ScrCmd_setmetatile
|
||||
.4byte ScrCmd_resetweather
|
||||
.4byte ScrCmd_setweather
|
||||
.4byte ScrCmd_doweather
|
||||
.4byte ScrCmd_setstepcallback
|
||||
.4byte ScrCmd_setmaplayoutindex
|
||||
.4byte ScrCmd_setobjectpriority
|
||||
.4byte ScrCmd_resetobjectpriority
|
||||
.4byte ScrCmd_createvobject
|
||||
.4byte ScrCmd_turnvobject
|
||||
.4byte ScrCmd_opendoor
|
||||
.4byte ScrCmd_closedoor
|
||||
.4byte ScrCmd_waitdooranim
|
||||
.4byte ScrCmd_setdooropen
|
||||
.4byte ScrCmd_setdoorclosed
|
||||
.4byte ScrCmd_addelevmenuitem
|
||||
.4byte ScrCmd_showelevmenu
|
||||
.4byte ScrCmd_checkcoins
|
||||
.4byte ScrCmd_addcoins
|
||||
.4byte ScrCmd_removecoins
|
||||
.4byte ScrCmd_setwildbattle
|
||||
.4byte ScrCmd_dowildbattle
|
||||
.4byte ScrCmd_setvaddress
|
||||
.4byte ScrCmd_vgoto
|
||||
.4byte ScrCmd_vcall
|
||||
.4byte ScrCmd_vgoto_if
|
||||
.4byte ScrCmd_vcall_if
|
||||
.4byte ScrCmd_vmessage
|
||||
.4byte ScrCmd_vloadword
|
||||
.4byte ScrCmd_vbufferstring
|
||||
.4byte ScrCmd_showcoinsbox
|
||||
.4byte ScrCmd_hidecoinsbox
|
||||
.4byte ScrCmd_updatecoinsbox
|
||||
.4byte ScrCmd_incrementgamestat
|
||||
.4byte ScrCmd_setescapewarp
|
||||
.4byte ScrCmd_waitmoncry
|
||||
.4byte ScrCmd_bufferboxname
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_setmonobedient
|
||||
.4byte ScrCmd_checkmonobedience
|
||||
.4byte ScrCmd_gotoram
|
||||
.4byte ScrCmd_nop1
|
||||
.4byte ScrCmd_warpD1
|
||||
.4byte ScrCmd_setmonmetlocation
|
||||
.4byte ScrCmd_moverotatingtileobjects
|
||||
.4byte ScrCmd_turnrotatingtileobjects
|
||||
.4byte ScrCmd_initrotatingtilepuzzle
|
||||
.4byte ScrCmd_freerotatingtilepuzzle
|
||||
.4byte ScrCmd_warpmossdeepgym
|
||||
.4byte ScrCmd_cmdD8
|
||||
.4byte ScrCmd_cmdD9
|
||||
.4byte ScrCmd_closebraillemessage
|
||||
.4byte ScrCmd_cmdDB
|
||||
.4byte ScrCmd_fadescreenswapbuffers
|
||||
.4byte ScrCmd_buffertrainerclassname
|
||||
.4byte ScrCmd_buffertrainername
|
||||
.4byte ScrCmd_pokenavcall
|
||||
.4byte ScrCmd_warpsootopolislegend
|
||||
.4byte ScrCmd_buffercontesttype
|
||||
.4byte ScrCmd_bufferitemnameplural
|
||||
.4byte ScrCmd_callfunc
|
||||
|
||||
gScriptCmdTableEnd:: @ 81DBA08
|
||||
.4byte ScrCmd_nop
|
||||
|
||||
23
data/scripts/follower.inc
Normal file
23
data/scripts/follower.inc
Normal file
@ -0,0 +1,23 @@
|
||||
gText_Follower::
|
||||
.string "{STR_VAR_1} loves you!$"
|
||||
|
||||
.macro playfirstmoncry
|
||||
callfunc ScrFunc_playfirstmoncry
|
||||
.endm
|
||||
|
||||
.macro bufferlivemonspeciesname out:req
|
||||
callfunc ScrFunc_bufferlivemonspeciesname
|
||||
.byte \out
|
||||
.endm
|
||||
|
||||
|
||||
EventScript_Follower::
|
||||
lock
|
||||
faceplayer
|
||||
playfirstmoncry
|
||||
applymovement 0xFE ContestHall_Movement_Heart
|
||||
waitmoncry
|
||||
bufferlivemonspeciesname 0
|
||||
msgbox gText_Follower, MSGBOX_DEFAULT
|
||||
release
|
||||
end
|
||||
19
graphics/object_events/palettes/altaria.pal
Normal file
19
graphics/object_events/palettes/altaria.pal
Normal file
@ -0,0 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
208 144 200
|
||||
0 0 0
|
||||
0 2 6
|
||||
72 80 104
|
||||
40 104 152
|
||||
0 132 6
|
||||
40 128 168
|
||||
112 128 144
|
||||
64 168 216
|
||||
96 192 232
|
||||
168 176 192
|
||||
208 224 232
|
||||
248 248 248
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
19
graphics/object_events/palettes/togetic.pal
Normal file
19
graphics/object_events/palettes/togetic.pal
Normal file
@ -0,0 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
56 144 88
|
||||
0 0 0
|
||||
40 40 40
|
||||
40 48 88
|
||||
216 80 88
|
||||
128 144 144
|
||||
96 168 224
|
||||
160 176 216
|
||||
232 232 248
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
BIN
graphics/object_events/pics/misc/animated_ball.png
Normal file
BIN
graphics/object_events/pics/misc/animated_ball.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 7.2 KiB |
BIN
graphics/object_events/pics/pokemon/togetic.png
Normal file
BIN
graphics/object_events/pics/pokemon/togetic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.4 KiB |
@ -242,6 +242,8 @@
|
||||
#define MOVEMENT_ACTION_FIGURE_8 0x9B
|
||||
#define MOVEMENT_ACTION_FLY_UP 0x9C
|
||||
#define MOVEMENT_ACTION_FLY_DOWN 0x9D
|
||||
#define MOVEMENT_ACTION_EXIT_POKEBALL 0x9E
|
||||
#define MOVEMENT_ACTION_ENTER_POKEBALL 0x9F
|
||||
|
||||
#define MOVEMENT_ACTION_STEP_END 0xFE
|
||||
|
||||
|
||||
@ -240,10 +240,12 @@
|
||||
#define OBJ_EVENT_GFX_LINK_RS_MAY 236
|
||||
#define OBJ_EVENT_GFX_LUGIA 237
|
||||
#define OBJ_EVENT_GFX_HOOH 238
|
||||
#define OBJ_EVENT_GFX_MARSHTOMP 239
|
||||
#define OBJ_EVENT_GFX_ALTARIA 240
|
||||
#define OBJ_EVENT_GFX_ANIMATED_BALL 239
|
||||
#define OBJ_EVENT_GFX_MARSHTOMP 240
|
||||
#define OBJ_EVENT_GFX_ALTARIA 241
|
||||
#define OBJ_EVENT_GFX_TOGETIC 242
|
||||
|
||||
#define NUM_OBJ_EVENT_GFX 241
|
||||
#define NUM_OBJ_EVENT_GFX 243
|
||||
|
||||
|
||||
// These are dynamic object gfx ids.
|
||||
@ -283,5 +285,6 @@
|
||||
|
||||
#define OBJ_EVENT_ID_PLAYER 0xFF
|
||||
#define OBJ_EVENT_ID_CAMERA 0x7F
|
||||
#define OBJ_EVENT_ID_FOLLOWER 0xFE
|
||||
|
||||
#endif // GUARD_CONSTANTS_EVENT_OBJECTS_H
|
||||
|
||||
@ -94,7 +94,11 @@ u8 GetFaceDirectionAnimNum(u8);
|
||||
void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
|
||||
void ObjectEventClearHeldMovement(struct ObjectEvent *);
|
||||
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
|
||||
u8 SpeciesToGraphicsId(u16 species);
|
||||
struct Pokemon * GetFirstLiveMon(void);
|
||||
u8 SpawnFollowingPokemon(void);
|
||||
void UpdateFollowingPokemon(void);
|
||||
void RemoveFollowingPokemon(void);
|
||||
void TrySpawnObjectEvents(s16, s16);
|
||||
u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction);
|
||||
u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
|
||||
@ -421,7 +425,7 @@ u8 MovementType_FollowPlayer_Step2(struct ObjectEvent *, struct Sprite *);
|
||||
|
||||
bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_FaceDirection(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_GoSpeed0(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_Step(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_GoSpeed1(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_GoSpeed2(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_Slide(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_EVENT_SCRIPTS_H
|
||||
#define GUARD_EVENT_SCRIPTS_H
|
||||
|
||||
extern const u8 EventScript_Follower[];
|
||||
|
||||
extern const u8 EventScript_TestSignpostMsg[];
|
||||
extern const u8 EventScript_TryGetTrainerScript[];
|
||||
extern const u8 EventScript_StartTrainerApproach[];
|
||||
|
||||
@ -13,6 +13,7 @@ u32 FieldEffectStart(u8);
|
||||
bool8 FieldEffectActiveListContains(u8 id);
|
||||
void FieldEffectActiveListClear(void);
|
||||
void ReturnToFieldFromFlyMapSelect(void);
|
||||
void FieldCallback_Fly(void);
|
||||
u8 AddNewGameBirchObject(s16, s16, u8);
|
||||
void FieldEffectStop(struct Sprite *sprite, u8 id);
|
||||
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
|
||||
|
||||
@ -468,12 +468,18 @@ $(OBJEVENTGFXDIR)/pokemon/wingull.4bpp: %.4bpp: %.png
|
||||
$(OBJEVENTGFXDIR)/pokemon/zigzagoon.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -mwidth 2 -mheight 2
|
||||
|
||||
$(OBJEVENTGFXDIR)/misc/animated_ball.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -mwidth 2 -mheight 4
|
||||
|
||||
$(OBJEVENTGFXDIR)/pokemon/marshtomp.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -mwidth 2 -mheight 4
|
||||
|
||||
$(OBJEVENTGFXDIR)/pokemon/altaria.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -mwidth 4 -mheight 4
|
||||
|
||||
$(OBJEVENTGFXDIR)/pokemon/togetic.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -mwidth 4 -mheight 4
|
||||
|
||||
$(OBJEVENTGFXDIR)/berry_trees/aguav.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -mwidth 2 -mheight 4
|
||||
|
||||
|
||||
@ -66,6 +66,8 @@ u8 MovementAction_WalkInPlaceSlowLeft_Step0(struct ObjectEvent *, struct Sprite
|
||||
u8 MovementAction_WalkInPlaceSlowRight_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceNormalDown_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlace_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceNormalUp_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceNormalLeft_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceNormalRight_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
@ -74,6 +76,8 @@ u8 MovementAction_WalkInPlaceFastUp_Step0(struct ObjectEvent *, struct Sprite *)
|
||||
u8 MovementAction_WalkInPlaceFastLeft_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceFastRight_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceFastestDown_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
|
||||
u8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
|
||||
u8 MovementAction_WalkInPlaceFastestUp_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceFastestLeft_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementAction_WalkInPlaceFastestRight_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
@ -300,6 +304,8 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFastUp[])(struct ObjectEvent *, struc
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastLeft[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastRight[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastestDown[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_ExitPokeball[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_EnterPokeball[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastestUp[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastestLeft[])(struct ObjectEvent *, struct Sprite *);
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastestRight[])(struct ObjectEvent *, struct Sprite *);
|
||||
@ -580,6 +586,8 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *)
|
||||
[MOVEMENT_ACTION_FIGURE_8] = gMovementActionFuncs_Figure8,
|
||||
[MOVEMENT_ACTION_FLY_UP] = gMovementActionFuncs_FlyUp,
|
||||
[MOVEMENT_ACTION_FLY_DOWN] = gMovementActionFuncs_FlyDown,
|
||||
[MOVEMENT_ACTION_EXIT_POKEBALL] = gMovementActionFuncs_ExitPokeball,
|
||||
[MOVEMENT_ACTION_ENTER_POKEBALL] = gMovementActionFuncs_EnterPokeball,
|
||||
};
|
||||
|
||||
u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
@ -865,6 +873,18 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFastestDown[])(struct ObjectEvent *,
|
||||
MovementAction_PauseSpriteAnim,
|
||||
};
|
||||
|
||||
u8 (*const gMovementActionFuncs_ExitPokeball[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_ExitPokeball_Step0,
|
||||
MovementAction_ExitPokeball_Step1,
|
||||
MovementAction_PauseSpriteAnim,
|
||||
};
|
||||
|
||||
u8 (*const gMovementActionFuncs_EnterPokeball[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_EnterPokeball_Step0,
|
||||
MovementAction_EnterPokeball_Step1,
|
||||
MovementAction_PauseSpriteAnim,
|
||||
};
|
||||
|
||||
u8 (*const gMovementActionFuncs_WalkInPlaceFastestUp[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_WalkInPlaceFastestUp_Step0,
|
||||
MovementAction_WalkInPlace_Step1,
|
||||
|
||||
@ -410,7 +410,7 @@ u8 (*const gMovementTypeFuncs_FollowPlayer[])(struct ObjectEvent *, struct Sprit
|
||||
bool8 (*const gFollowPlayerMovementFuncs[])(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)) = {
|
||||
FollowablePlayerMovement_Idle,
|
||||
FollowablePlayerMovement_Idle,
|
||||
FollowablePlayerMovement_GoSpeed0,
|
||||
FollowablePlayerMovement_Step,
|
||||
FollowablePlayerMovement_GoSpeed1,
|
||||
FollowablePlayerMovement_GoSpeed2,
|
||||
FollowablePlayerMovement_Slide,
|
||||
|
||||
@ -181,24 +181,43 @@ const union AnimCmd gObjectEventImageAnim_FaceSouth[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_FaceNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(1, 16),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_FaceNorth2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(2, 16),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_FaceWest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(2, 16),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_FaceWest2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 16),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_FaceEast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(2, 16, .hFlip = TRUE),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_FaceEast2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 16, .hFlip = TRUE),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoSouth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(3, 8),
|
||||
@ -210,9 +229,9 @@ const union AnimCmd gObjectEventImageAnim_GoSouth[] =
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoSouth2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(3, 6),
|
||||
ANIMCMD_FRAME(4, 6),
|
||||
ANIMCMD_FRAME(4, 6),
|
||||
ANIMCMD_FRAME(0, 6),
|
||||
ANIMCMD_FRAME(1, 6),
|
||||
ANIMCMD_FRAME(1, 6),
|
||||
ANIMCMD_FRAME(0, 6),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
@ -228,11 +247,11 @@ const union AnimCmd gObjectEventImageAnim_GoNorth[] =
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoNorth2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(5, 6),
|
||||
ANIMCMD_FRAME(6, 6),
|
||||
ANIMCMD_FRAME(6, 6),
|
||||
ANIMCMD_FRAME(1, 6),
|
||||
ANIMCMD_JUMP(0),
|
||||
ANIMCMD_FRAME(2, 6),
|
||||
ANIMCMD_FRAME(3, 6),
|
||||
ANIMCMD_FRAME(3, 6),
|
||||
ANIMCMD_FRAME(2, 6),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoWest[] =
|
||||
@ -246,10 +265,10 @@ const union AnimCmd gObjectEventImageAnim_GoWest[] =
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoWest2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 6),
|
||||
ANIMCMD_FRAME(8, 6),
|
||||
ANIMCMD_FRAME(8, 6),
|
||||
ANIMCMD_FRAME(2, 6),
|
||||
ANIMCMD_FRAME(4, 6),
|
||||
ANIMCMD_FRAME(5, 6),
|
||||
ANIMCMD_FRAME(5, 6),
|
||||
ANIMCMD_FRAME(4, 6),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
@ -264,10 +283,10 @@ const union AnimCmd gObjectEventImageAnim_GoEast[] =
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoEast2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(8, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(8, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(2, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(5, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(5, 6, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 6, .hFlip = TRUE),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
@ -280,6 +299,15 @@ const union AnimCmd gObjectEventImageAnim_GoFastSouth[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastSouth2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4),
|
||||
ANIMCMD_FRAME(1, 4),
|
||||
ANIMCMD_FRAME(1, 4),
|
||||
ANIMCMD_FRAME(0, 4),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(5, 4),
|
||||
@ -289,6 +317,15 @@ const union AnimCmd gObjectEventImageAnim_GoFastNorth[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastNorth2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(2, 4),
|
||||
ANIMCMD_FRAME(3, 4),
|
||||
ANIMCMD_FRAME(3, 4),
|
||||
ANIMCMD_FRAME(2, 4),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastWest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 4),
|
||||
@ -298,6 +335,15 @@ const union AnimCmd gObjectEventImageAnim_GoFastWest[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastWest2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 4),
|
||||
ANIMCMD_FRAME(5, 4),
|
||||
ANIMCMD_FRAME(5, 4),
|
||||
ANIMCMD_FRAME(4, 4),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastEast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 4, .hFlip = TRUE),
|
||||
@ -307,6 +353,15 @@ const union AnimCmd gObjectEventImageAnim_GoFastEast[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastEast2F[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(5, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(5, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 4, .hFlip = TRUE),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFasterSouth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(3, 2),
|
||||
@ -316,6 +371,31 @@ const union AnimCmd gObjectEventImageAnim_GoFasterSouth[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_ExitPokeball[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(1, 1),
|
||||
ANIMCMD_FRAME(2, 1),
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
ANIMCMD_FRAME(4, 1),
|
||||
ANIMCMD_FRAME(0, 6),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_EnterSouth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 8),
|
||||
ANIMCMD_FRAME(4, 1),
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
ANIMCMD_FRAME(2, 1),
|
||||
ANIMCMD_FRAME(1, 1),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFasterNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(5, 2),
|
||||
@ -325,6 +405,18 @@ const union AnimCmd gObjectEventImageAnim_GoFasterNorth[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_EnterNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(2, 8),
|
||||
ANIMCMD_FRAME(4, 1),
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
ANIMCMD_FRAME(2, 1),
|
||||
ANIMCMD_FRAME(1, 1),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFasterWest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 2),
|
||||
@ -334,6 +426,18 @@ const union AnimCmd gObjectEventImageAnim_GoFasterWest[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_EnterWest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 8),
|
||||
ANIMCMD_FRAME(4, 1),
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
ANIMCMD_FRAME(2, 1),
|
||||
ANIMCMD_FRAME(1, 1),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFasterEast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(7, 2, .hFlip = TRUE),
|
||||
@ -343,6 +447,18 @@ const union AnimCmd gObjectEventImageAnim_GoFasterEast[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_EnterEast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 1),
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
ANIMCMD_FRAME(2, 1),
|
||||
ANIMCMD_FRAME(1, 1),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastestSouth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
@ -352,6 +468,18 @@ const union AnimCmd gObjectEventImageAnim_GoFastestSouth[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_ExitPokeballFast[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(1, 1),
|
||||
ANIMCMD_FRAME(2, 1),
|
||||
ANIMCMD_FRAME(3, 1),
|
||||
ANIMCMD_FRAME(4, 1),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
const union AnimCmd gObjectEventImageAnim_GoFastestNorth[] =
|
||||
{
|
||||
ANIMCMD_FRAME(5, 1),
|
||||
@ -883,25 +1011,25 @@ const union AnimCmd *const gObjectEventImageAnimTable_Standard[] = {
|
||||
|
||||
const union AnimCmd *const gObjectEventImageAnimTable_Following[] = {
|
||||
gObjectEventImageAnim_FaceSouth,
|
||||
gObjectEventImageAnim_FaceNorth,
|
||||
gObjectEventImageAnim_FaceWest,
|
||||
gObjectEventImageAnim_FaceEast,
|
||||
gObjectEventImageAnim_FaceNorth2F,
|
||||
gObjectEventImageAnim_FaceWest2F,
|
||||
gObjectEventImageAnim_FaceEast2F,
|
||||
gObjectEventImageAnim_GoSouth2F,
|
||||
gObjectEventImageAnim_GoNorth2F,
|
||||
gObjectEventImageAnim_GoWest2F,
|
||||
gObjectEventImageAnim_GoEast2F,
|
||||
gObjectEventImageAnim_GoFastSouth,
|
||||
gObjectEventImageAnim_GoFastNorth,
|
||||
gObjectEventImageAnim_GoFastWest,
|
||||
gObjectEventImageAnim_GoFastEast,
|
||||
gObjectEventImageAnim_GoFasterSouth,
|
||||
gObjectEventImageAnim_GoFasterNorth,
|
||||
gObjectEventImageAnim_GoFasterWest,
|
||||
gObjectEventImageAnim_GoFasterEast,
|
||||
gObjectEventImageAnim_GoFastestSouth,
|
||||
gObjectEventImageAnim_GoFastestNorth,
|
||||
gObjectEventImageAnim_GoFastestWest,
|
||||
gObjectEventImageAnim_GoFastestEast,
|
||||
gObjectEventImageAnim_GoFastSouth2F,
|
||||
gObjectEventImageAnim_GoFastNorth2F,
|
||||
gObjectEventImageAnim_GoFastWest2F,
|
||||
gObjectEventImageAnim_GoFastEast2F,
|
||||
gObjectEventImageAnim_EnterSouth,
|
||||
gObjectEventImageAnim_EnterNorth,
|
||||
gObjectEventImageAnim_EnterWest,
|
||||
gObjectEventImageAnim_EnterEast,
|
||||
gObjectEventImageAnim_ExitPokeball,
|
||||
gObjectEventImageAnim_ExitPokeballFast,
|
||||
gObjectEventImageAnim_ExitPokeball,
|
||||
gObjectEventImageAnim_ExitPokeball,
|
||||
};
|
||||
|
||||
const union AnimCmd *const gObjectEventImageAnimTable_HoOh[] = {
|
||||
@ -1203,6 +1331,10 @@ const struct UnkStruct_085094AC gUnknown_085094AC[] = {
|
||||
.anims = gObjectEventImageAnimTable_Standard,
|
||||
.animPos = {1, 3, 0, 2},
|
||||
},
|
||||
{
|
||||
.anims = gObjectEventImageAnimTable_Following,
|
||||
.animPos = {1, 3, 0, 2},
|
||||
},
|
||||
{
|
||||
.anims = gObjectEventImageAnimTable_BrendanMayNormal,
|
||||
.animPos = {1, 3, 0, 2},
|
||||
|
||||
@ -69,6 +69,8 @@ const u16 gObjectEventPal_Npc2Reflection[] = INCBIN_U16("graphics/object_events/
|
||||
const u16 gObjectEventPal_Npc3Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_3_reflection.gbapal");
|
||||
const u16 gObjectEventPal_Npc4Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_4_reflection.gbapal");
|
||||
const u16 gObjectEventPaletteMarshtomp[] = INCBIN_U16("graphics/object_events/palettes/marshtomp.gbapal");
|
||||
const u16 gObjectEventPaletteAltaria[] = INCBIN_U16("graphics/object_events/palettes/altaria.gbapal");
|
||||
const u16 gObjectEventPaletteTogetic[] = INCBIN_U16("graphics/object_events/palettes/togetic.gbapal");
|
||||
const u32 gObjectEventPic_NinjaBoy[] = INCBIN_U32("graphics/object_events/pics/people/ninja_boy.4bpp");
|
||||
const u32 gObjectEventPic_Twin[] = INCBIN_U32("graphics/object_events/pics/people/twin.4bpp");
|
||||
const u32 gObjectEventPic_Boy1[] = INCBIN_U32("graphics/object_events/pics/people/boy_1.4bpp");
|
||||
@ -361,6 +363,8 @@ const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/poke
|
||||
const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal");
|
||||
const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp");
|
||||
const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal");
|
||||
const u32 gObjectEventPic_AnimatedBall[] = INCBIN_U32("graphics/object_events/pics/misc/animated_ball.4bpp");
|
||||
const u32 gObjectEventPic_Marshtomp[] = INCBIN_U32("graphics/object_events/pics/pokemon/marshtomp.4bpp");
|
||||
const u32 gObjectEventPic_Altaria[] = INCBIN_U32("graphics/object_events/pics/pokemon/altaria.4bpp");
|
||||
const u32 gObjectEventPic_Togetic[] = INCBIN_U32("graphics/object_events/pics/pokemon/togetic.4bpp");
|
||||
const u16 gObjectEventPalette31[] = INCBIN_U16("graphics/object_events/palettes/31.gbapal");
|
||||
|
||||
@ -243,5 +243,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrenda
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_MAY, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireMay, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {0xFFFF, OBJ_EVENT_PAL_TAG_LUGIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lugia, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {0xFFFF, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_HoOh, gObjectEventPicTable_HoOh, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Marshtomp = {0xFFFF, OBJ_EVENT_PAL_TAG_MARSHTOMP, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Following, gObjectEventPicTable_Marshtomp, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Altaria = {0xFFFF, OBJ_EVENT_PAL_TAG_MARSHTOMP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Following, gObjectEventPicTable_Altaria, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AnimatedBall = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Following, gObjectEventPicTable_AnimatedBall, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Marshtomp = {0xFFFF, OBJ_EVENT_PAL_TAG_MARSHTOMP, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Following, gObjectEventPicTable_Marshtomp, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Altaria = {0xFFFF, OBJ_EVENT_PAL_TAG_ALTARIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Altaria, gDummySpriteAffineAnimTable};
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Togetic = {0xFFFF, OBJ_EVENT_PAL_TAG_TOGETIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Following, gObjectEventPicTable_Togetic, gDummySpriteAffineAnimTable};
|
||||
|
||||
@ -237,8 +237,10 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrenda
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AnimatedBall;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Marshtomp;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Altaria;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Togetic;
|
||||
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard;
|
||||
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster;
|
||||
@ -489,8 +491,10 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
|
||||
[OBJ_EVENT_GFX_LINK_RS_MAY] = &gObjectEventGraphicsInfo_RubySapphireMay,
|
||||
[OBJ_EVENT_GFX_LUGIA] = &gObjectEventGraphicsInfo_Lugia,
|
||||
[OBJ_EVENT_GFX_HOOH] = &gObjectEventGraphicsInfo_HoOh,
|
||||
[OBJ_EVENT_GFX_ANIMATED_BALL] = &gObjectEventGraphicsInfo_AnimatedBall,
|
||||
[OBJ_EVENT_GFX_MARSHTOMP] = &gObjectEventGraphicsInfo_Marshtomp,
|
||||
[OBJ_EVENT_GFX_ALTARIA] = &gObjectEventGraphicsInfo_Altaria,
|
||||
[OBJ_EVENT_GFX_TOGETIC] = &gObjectEventGraphicsInfo_Togetic,
|
||||
};
|
||||
|
||||
const struct ObjectEventGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = {
|
||||
|
||||
@ -2149,6 +2149,15 @@ const struct SpriteFrameImage gObjectEventPicTable_HoOh[] = {
|
||||
overworld_frame(gObjectEventPic_HoOh, 4, 4, 1),
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage gObjectEventPicTable_AnimatedBall[] = {
|
||||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 0),
|
||||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 1),
|
||||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 2),
|
||||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 3),
|
||||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 4),
|
||||
overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 5),
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage gObjectEventPicTable_Marshtomp[] = {
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 0),
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 1),
|
||||
@ -2156,9 +2165,6 @@ const struct SpriteFrameImage gObjectEventPicTable_Marshtomp[] = {
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 3),
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 4),
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 5),
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 6),
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 7),
|
||||
overworld_frame(gObjectEventPic_Marshtomp, 2, 4, 8),
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage gObjectEventPicTable_Altaria[] = {
|
||||
@ -2173,6 +2179,15 @@ const struct SpriteFrameImage gObjectEventPicTable_Altaria[] = {
|
||||
overworld_frame(gObjectEventPic_Altaria, 4, 4, 8),
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage gObjectEventPicTable_Togetic[] = {
|
||||
overworld_frame(gObjectEventPic_Togetic, 4, 4, 0),
|
||||
overworld_frame(gObjectEventPic_Togetic, 4, 4, 1),
|
||||
overworld_frame(gObjectEventPic_Togetic, 4, 4, 2),
|
||||
overworld_frame(gObjectEventPic_Togetic, 4, 4, 3),
|
||||
overworld_frame(gObjectEventPic_Togetic, 4, 4, 4),
|
||||
overworld_frame(gObjectEventPic_Togetic, 4, 4, 5),
|
||||
};
|
||||
|
||||
const struct SpriteFrameImage gObjectEventPicTable_RubySapphireBrendan[] = {
|
||||
overworld_frame(gObjectEventPic_RubySapphireBrendanNormal, 2, 4, 0),
|
||||
overworld_frame(gObjectEventPic_RubySapphireBrendanNormal, 2, 4, 1),
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "metatile_behavior.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
@ -27,6 +28,7 @@
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/mauville_old_man.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/trainer_types.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
@ -440,6 +442,8 @@ const u8 gInitialMovementTypeFacingDirections[] = {
|
||||
#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122
|
||||
#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123
|
||||
#define OBJ_EVENT_PAL_TAG_MARSHTOMP 0x1124
|
||||
#define OBJ_EVENT_PAL_TAG_ALTARIA 0x1125
|
||||
#define OBJ_EVENT_PAL_TAG_TOGETIC 0x1126
|
||||
#define OBJ_EVENT_PAL_TAG_NONE 0x11FF
|
||||
|
||||
#include "data/object_events/object_event_graphics_info_pointers.h"
|
||||
@ -487,6 +491,8 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = {
|
||||
{gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN},
|
||||
{gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY},
|
||||
{gObjectEventPaletteMarshtomp, OBJ_EVENT_PAL_TAG_MARSHTOMP},
|
||||
{gObjectEventPaletteAltaria, OBJ_EVENT_PAL_TAG_ALTARIA},
|
||||
{gObjectEventPaletteTogetic, OBJ_EVENT_PAL_TAG_TOGETIC},
|
||||
{NULL, 0x0000},
|
||||
};
|
||||
|
||||
@ -1368,24 +1374,8 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl
|
||||
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
|
||||
<<<<<<< HEAD
|
||||
paletteSlot = graphicsInfo->paletteSlot;
|
||||
if (paletteSlot == 0)
|
||||
{
|
||||
LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, 0);
|
||||
}
|
||||
else if (paletteSlot == 10)
|
||||
{
|
||||
LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, 10);
|
||||
}
|
||||
else if (paletteSlot >= 16)
|
||||
{
|
||||
paletteSlot -= 16;
|
||||
sub_808EAB0(graphicsInfo->paletteTag, paletteSlot);
|
||||
=======
|
||||
if (spriteTemplate->paletteTag != 0xffff) {
|
||||
LoadObjectEventPalette(spriteTemplate->paletteTag);
|
||||
>>>>>>> ecbde8db7 (Added dynamic overworld palettes (github.com/pret/pokeemerald/wiki/Dynamic-overworld-palette-system))
|
||||
}
|
||||
|
||||
if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE)
|
||||
@ -1585,24 +1575,107 @@ u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u8 SpawnFollowingPokemon(void) {
|
||||
u8 SpeciesToGraphicsId(u16 species) { // TODO: Eventually graphicsIds will have to be u16's
|
||||
switch (species) {
|
||||
case SPECIES_MARSHTOMP:
|
||||
return OBJ_EVENT_GFX_MARSHTOMP;
|
||||
break;
|
||||
case SPECIES_ALTARIA:
|
||||
return OBJ_EVENT_GFX_ALTARIA;
|
||||
break;
|
||||
case SPECIES_TOGETIC:
|
||||
return OBJ_EVENT_GFX_TOGETIC;
|
||||
break;
|
||||
default:
|
||||
return OBJ_EVENT_GFX_DUSCLOPS; // TODO: Change this
|
||||
}
|
||||
}
|
||||
|
||||
struct Pokemon * GetFirstLiveMon(void) { // Return address of first conscious party mon or NULL
|
||||
struct Pokemon *mon;
|
||||
u8 i;
|
||||
for (i=0; i<PARTY_SIZE;i++) {
|
||||
if (gPlayerParty[i].hp > 0 && !(gPlayerParty[i].box.isEgg || gPlayerParty[i].box.isBadEgg)) {
|
||||
return &gPlayerParty[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
u8 SpawnFollowingPokemon(void) { // Spawn a following pokemon TODO: Avoid this on certain maps
|
||||
struct Pokemon *mon;
|
||||
u8 graphicsId;
|
||||
u8 objectEventId;
|
||||
struct ObjectEventTemplate template = {0};
|
||||
|
||||
template.localId = 0xFE;
|
||||
template.graphicsId = OBJ_EVENT_GFX_MARSHTOMP;
|
||||
template.localId = OBJ_EVENT_ID_FOLLOWER;
|
||||
mon = GetFirstLiveMon();
|
||||
if (mon == NULL) { // fainted party, don't spawn an object TODO
|
||||
return 0;
|
||||
}
|
||||
template.graphicsId = SpeciesToGraphicsId(GetMonData(mon, MON_DATA_SPECIES));
|
||||
template.x = gSaveBlock1Ptr->pos.x;
|
||||
template.y = gSaveBlock1Ptr->pos.y;
|
||||
template.elevation = 5;
|
||||
template.movementType = MOVEMENT_TYPE_FOLLOW_PLAYER;
|
||||
template.trainerType = 0xFE;
|
||||
template.script = NULL;
|
||||
// template.script = EventScript_Follower; // This does nothing because scripts are templated
|
||||
objectEventId = SpawnSpecialObjectEvent(&template);
|
||||
gObjectEvents[objectEventId].invisible = TRUE;
|
||||
gObjectEvents[objectEventId].hasShadow = TRUE;
|
||||
return objectEventId;
|
||||
}
|
||||
|
||||
void UpdateFollowingPokemon(void) {
|
||||
u8 i;
|
||||
u8 graphicsId;
|
||||
struct ObjectEvent *objectEvent = NULL;
|
||||
struct Pokemon *mon;
|
||||
|
||||
// TODO: Improve finding player following pokemon
|
||||
for (i=0; i < OBJECT_EVENTS_COUNT; i++) {
|
||||
if (gObjectEvents[i].localId == 0xFE) {
|
||||
objectEvent = &gObjectEvents[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (objectEvent == NULL) {
|
||||
return;
|
||||
}
|
||||
mon = GetFirstLiveMon();
|
||||
if (mon == NULL) { // TODO: Fainted party
|
||||
return;
|
||||
}
|
||||
graphicsId = SpeciesToGraphicsId(GetMonData(mon, MON_DATA_SPECIES));
|
||||
if (graphicsId != objectEvent->graphicsId) { // Mark as invisible
|
||||
MoveObjectEventToMapCoords(objectEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y);
|
||||
objectEvent->invisible = TRUE;
|
||||
gSprites[objectEvent->spriteId].data[1] = 0; // set state
|
||||
gSprites[objectEvent->spriteId].data[6] = 0; // set graphicsId
|
||||
gSprites[objectEvent->spriteId].data[7] = 0; // set animation data
|
||||
}
|
||||
objectEvent->graphicsId = graphicsId;
|
||||
return;
|
||||
}
|
||||
|
||||
void RemoveFollowingPokemon(void) {
|
||||
struct ObjectEvent *objectEvent = NULL;
|
||||
u8 i;
|
||||
for (i=0; i < OBJECT_EVENTS_COUNT; i++) {
|
||||
if (gObjectEvents[i].localId == 0xFE) {
|
||||
objectEvent = &gObjectEvents[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (objectEvent == NULL) {
|
||||
return;
|
||||
}
|
||||
RemoveObjectEvent(objectEvent);
|
||||
}
|
||||
|
||||
static bool8 IsFollowerVisible(void) { // Determine whether follower should be visible
|
||||
return !TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE);
|
||||
}
|
||||
|
||||
void TrySpawnObjectEvents(s16 cameraX, s16 cameraY)
|
||||
{
|
||||
u8 i;
|
||||
@ -1720,28 +1793,9 @@ static void sub_808E1B8(u8 objectEventId, s16 x, s16 y)
|
||||
spriteFrameImage.size = graphicsInfo->size;
|
||||
MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
|
||||
spriteTemplate.images = &spriteFrameImage;
|
||||
<<<<<<< HEAD
|
||||
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
|
||||
paletteSlot = graphicsInfo->paletteSlot;
|
||||
if (paletteSlot == 0)
|
||||
{
|
||||
LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
|
||||
}
|
||||
else if (paletteSlot == 10)
|
||||
{
|
||||
LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
|
||||
}
|
||||
else if (paletteSlot >= 16)
|
||||
{
|
||||
paletteSlot -= 16;
|
||||
sub_808EAB0(graphicsInfo->paletteTag, paletteSlot);
|
||||
}
|
||||
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
|
||||
=======
|
||||
if (spriteTemplate.paletteTag != 0xffff) {
|
||||
LoadObjectEventPalette(spriteTemplate.paletteTag);
|
||||
}
|
||||
>>>>>>> ecbde8db7 (Added dynamic overworld palettes (github.com/pret/pokeemerald/wiki/Dynamic-overworld-palette-system))
|
||||
spriteId = CreateSprite(&spriteTemplate, 0, 0, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@ -1798,30 +1852,40 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *graphicsInfo;
|
||||
struct Sprite *sprite;
|
||||
u8 paletteSlot;
|
||||
u16 i;
|
||||
u8 paletteNum;
|
||||
u16 *debugPtr = (u16*) 0x0203d008;
|
||||
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
|
||||
sprite = &gSprites[objectEvent->spriteId];
|
||||
paletteSlot = graphicsInfo->paletteSlot;
|
||||
if (paletteSlot == 0)
|
||||
{
|
||||
PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
|
||||
}
|
||||
else if (paletteSlot == 10)
|
||||
{
|
||||
LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
|
||||
}
|
||||
else if (paletteSlot >= 16)
|
||||
{
|
||||
paletteSlot -= 16;
|
||||
sub_808EAB0(graphicsInfo->paletteTag, paletteSlot);
|
||||
*debugPtr = graphicsId;
|
||||
*(debugPtr + 1) = graphicsInfo->paletteSlot;
|
||||
if (graphicsInfo->paletteSlot == 0) { // Hack until I can fix this
|
||||
PatchObjectPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
|
||||
paletteNum = 0;
|
||||
} else {
|
||||
paletteNum = sprite->oam.paletteNum;
|
||||
// Free old palette if otherwise unused
|
||||
sprite->inUse = FALSE;
|
||||
FieldEffectFreePaletteIfUnused(paletteNum);
|
||||
sprite->inUse = TRUE;
|
||||
|
||||
i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag1);
|
||||
*(debugPtr + 2) = i;
|
||||
paletteNum = IndexOfSpritePaletteTag(sObjectEventSpritePalettes[i].tag);
|
||||
*(debugPtr + 3) = paletteNum;
|
||||
if (paletteNum == 0xFF) { // Load palette
|
||||
paletteNum = LoadSpritePalette(&sObjectEventSpritePalettes[i]);
|
||||
}
|
||||
}
|
||||
*(debugPtr + 4) = paletteNum;
|
||||
sprite->oam.paletteNum = paletteNum;
|
||||
*((u32*) (debugPtr + 6)) = (u32) &sprite->oam;
|
||||
sprite->oam.shape = graphicsInfo->oam->shape;
|
||||
sprite->oam.size = graphicsInfo->oam->size;
|
||||
sprite->images = graphicsInfo->images;
|
||||
sprite->anims = graphicsInfo->anims;
|
||||
sprite->subspriteTables = graphicsInfo->subspriteTables;
|
||||
sprite->oam.paletteNum = paletteSlot;
|
||||
objectEvent->inanimate = graphicsInfo->inanimate;
|
||||
objectEvent->graphicsId = graphicsId;
|
||||
SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y);
|
||||
@ -2374,6 +2438,9 @@ void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction)
|
||||
|
||||
static const u8 *GetObjectEventScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
{
|
||||
if (localId == OBJ_EVENT_ID_FOLLOWER) {
|
||||
return EventScript_Follower;
|
||||
}
|
||||
return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script;
|
||||
}
|
||||
|
||||
@ -4461,7 +4528,11 @@ movement_type_def(MovementType_FollowPlayer, gMovementTypeFuncs_FollowPlayer)
|
||||
bool8 MovementType_FollowPlayer_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) {
|
||||
if (sprite->data[6]) { // Restore graphicsId TODO: Change this hack
|
||||
ObjectEventSetGraphicsId(objectEvent, sprite->data[6]);
|
||||
sprite->data[6] = 0;
|
||||
}
|
||||
if (!IsFollowerVisible()) { // Shadow player's position
|
||||
objectEvent->invisible = TRUE;
|
||||
MoveObjectEventToMapCoords(objectEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y);
|
||||
return FALSE;
|
||||
@ -4472,10 +4543,10 @@ bool8 MovementType_FollowPlayer_Step0(struct ObjectEvent *objectEvent, struct Sp
|
||||
|
||||
bool8 MovementType_FollowPlayer_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].movementActionId == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER)
|
||||
{
|
||||
if (gObjectEvents[gPlayerAvatar.objectEventId].movementActionId == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) { // do nothing if player is stationary
|
||||
return FALSE;
|
||||
}
|
||||
// TODO: Remove dependence on PlayerGetCopyableMovement
|
||||
return gFollowPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL);
|
||||
}
|
||||
|
||||
@ -4486,55 +4557,67 @@ bool8 MovementType_FollowPlayer_Step2(struct ObjectEvent *objectEvent, struct Sp
|
||||
objectEvent->singleMovementActive = 0;
|
||||
sprite->data[1] = 1;
|
||||
}
|
||||
objectEvent->invisible = FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
|
||||
{
|
||||
if (!objectEvent->singleMovementActive) {
|
||||
u8 direction;
|
||||
if (!IsFollowerVisible()) { // Animate entering pokeball
|
||||
if (objectEvent->invisible) {
|
||||
return FALSE;
|
||||
}
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->animCmdIndex = 0; // Needed because of weird animCmdIndex stuff
|
||||
sprite->data[1] = 2; // movement action sets state to 0 later
|
||||
return TRUE;
|
||||
} else if (!objectEvent->singleMovementActive) { // walk in place
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection));
|
||||
objectEvent->singleMovementActive = 1;
|
||||
return TRUE;
|
||||
}
|
||||
if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) {
|
||||
} else if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { // finish movement action
|
||||
objectEvent->singleMovementActive = 0;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 FollowablePlayerMovement_GoSpeed0(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
|
||||
bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
|
||||
{
|
||||
u32 direction;
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 targetX;
|
||||
s16 targetY;
|
||||
u32 *debugPtr;
|
||||
debugPtr = (u32*) 0x0203d000;
|
||||
u32 *debugPtr = (u32*) 0x0203d000;
|
||||
*(debugPtr) = (u32) &sprite->data[0];
|
||||
|
||||
targetX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x;
|
||||
targetY = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y;
|
||||
x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x;
|
||||
y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
|
||||
*debugPtr = (u32) x + (y << 16);
|
||||
*(debugPtr + 1) = (u32) targetX + (targetY << 16);
|
||||
if (x == targetX && y == targetY) { // don't move if the player collided
|
||||
|
||||
if ((x == targetX && y == targetY) || !IsFollowerVisible()) { // don't move on player collision or if not visible
|
||||
return FALSE;
|
||||
}
|
||||
x = objectEvent->currentCoords.x;
|
||||
y = objectEvent->currentCoords.y;
|
||||
*(debugPtr + 2) = (u32) x + (y << 16);
|
||||
if (x == targetX && y == targetY) { // don't move if already in the player's last position
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
|
||||
if (objectEvent->invisible) { // Animate exiting pokeball
|
||||
MoveObjectEventToMapCoords(objectEvent, targetX, targetY);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_EXIT_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->animCmdIndex = 0; // Needed because of weird animCmdIndex stuff
|
||||
sprite->data[1] = 2;
|
||||
return TRUE;
|
||||
} else if (x == targetX && y == targetY) { // don't move if already in the player's last position
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
// Change state to invisible
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) {
|
||||
objectEvent->invisible = TRUE;
|
||||
sprite->data[1] = 0;
|
||||
return FALSE;
|
||||
}
|
||||
objectEvent->invisible = FALSE;
|
||||
// Follow player
|
||||
direction = GetDirectionToFace(x, y, targetX, targetY);
|
||||
ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) { // Set follow speed accordingly
|
||||
@ -5059,7 +5142,7 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
curObject = &gObjectEvents[i];
|
||||
if (curObject->active && (curObject->trainerType != 0xFE || objectEvent != &gObjectEvents[gPlayerAvatar.objectEventId]) && curObject != objectEvent)
|
||||
if (curObject->active && (curObject->movementType != MOVEMENT_TYPE_FOLLOW_PLAYER || objectEvent != &gObjectEvents[gPlayerAvatar.objectEventId]) && curObject != objectEvent)
|
||||
{
|
||||
if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y))
|
||||
{
|
||||
@ -6066,6 +6149,87 @@ bool8 MovementAction_WalkInPlaceSlowDown_Step0(struct ObjectEvent *objectEvent,
|
||||
return MovementAction_WalkInPlaceSlow_Step1(objectEvent, sprite);
|
||||
}
|
||||
|
||||
// Copy and load objectEvent's palette, but set all opaque colors to white
|
||||
static u8 LoadWhiteFlashPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite) {
|
||||
struct SpritePalette dynamicPalette;
|
||||
u16 paletteData[16];
|
||||
u16 i = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->paletteTag1;
|
||||
u8 j;
|
||||
i = FindObjectEventPaletteIndexByTag(i);
|
||||
dynamicPalette.tag = OBJ_EVENT_PAL_TAG_NONE-1; // TODO: Use a proper palette tag here
|
||||
dynamicPalette.data = paletteData;
|
||||
paletteData[0] = sObjectEventSpritePalettes[i].data[0];
|
||||
for (j=1; j<16; j++) {
|
||||
paletteData[j] = 0xFFFF;
|
||||
}
|
||||
sprite->oam.paletteNum = LoadSpritePalette(&dynamicPalette);
|
||||
return sprite->oam.paletteNum;
|
||||
}
|
||||
|
||||
bool8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) {
|
||||
|
||||
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) {
|
||||
sub_8094554(objectEvent, sprite, DIR_SOUTH, GetMoveDirectionFastestAnimNum(DIR_NORTH), 8);
|
||||
sprite->data[7] = 0; // fast speed
|
||||
} else {
|
||||
sub_8094554(objectEvent, sprite, DIR_SOUTH, GetMoveDirectionFastestAnimNum(DIR_SOUTH), 16);
|
||||
sprite->data[7] = 1; // slow speed
|
||||
}
|
||||
sprite->data[6] = objectEvent->graphicsId;
|
||||
ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL);
|
||||
return MovementAction_ExitPokeball_Step1(objectEvent, sprite);
|
||||
}
|
||||
|
||||
bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
u8 duration = sprite->data[7] & 0xF;
|
||||
sprite->data[3]--;
|
||||
if (sprite->data[3] == 0)
|
||||
{
|
||||
sprite->data[2] = 2;
|
||||
sprite->animPaused = TRUE;
|
||||
return TRUE;
|
||||
// Restore graphicsId and set palette to white
|
||||
} else if ((duration == 0 && sprite->data[3] == 3) || (duration == 1 && sprite->data[3] == 7)) {
|
||||
ObjectEventSetGraphicsId(objectEvent, sprite->data[6]);
|
||||
sprite->data[7] = (sprite->oam.paletteNum << 4) | (sprite->data[7] & 0xFF0F); // Save old paletteNum
|
||||
LoadWhiteFlashPalette(objectEvent, sprite);
|
||||
// Restore original palette
|
||||
} else if ((duration == 0 && sprite->data[3] == 1) || (duration == 1 && sprite->data[3] == 3)) {
|
||||
FreeSpritePaletteByTag(OBJ_EVENT_PAL_TAG_NONE-1);
|
||||
sprite->oam.paletteNum = (sprite->data[7] >> 4) & 0xF;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) {
|
||||
u8 direction = objectEvent->facingDirection;
|
||||
sub_8094554(objectEvent, sprite, direction, GetMoveDirectionFasterAnimNum(direction), 16);
|
||||
sprite->data[7] = 1; // slow speed
|
||||
sprite->data[6] = objectEvent->graphicsId;
|
||||
return MovementAction_EnterPokeball_Step1(objectEvent, sprite);
|
||||
}
|
||||
|
||||
bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[3]--;
|
||||
if (sprite->data[3] == 0)
|
||||
{
|
||||
sprite->data[2] = 2;
|
||||
sprite->animPaused = TRUE;
|
||||
return TRUE;
|
||||
} else if (sprite->data[3] == 1) { // Change state
|
||||
sprite->data[1] = 0;
|
||||
} else if (sprite->data[3] == 11) { // Set palette to white
|
||||
LoadWhiteFlashPalette(objectEvent, sprite);
|
||||
} else if (sprite->data[3] == 7) { // Free white palette and change to pokeball
|
||||
FreeSpritePaletteByTag(OBJ_EVENT_PAL_TAG_NONE-1);
|
||||
ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MovementAction_WalkInPlaceSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
sub_8094554(objectEvent, sprite, DIR_NORTH, GetMoveDirectionAnimNum(DIR_NORTH), 32);
|
||||
@ -7849,7 +8013,8 @@ static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *objEven
|
||||
|| (MetatileBehavior_IsPacifidlogLog(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsPacifidlogLog(objEvent->previousMetatileBehavior)))
|
||||
{
|
||||
if (!objEvent->inShallowFlowingWater)
|
||||
// Only set flags if objEvent leaves tracks
|
||||
if (!objEvent->inShallowFlowingWater && GetObjectEventGraphicsInfo(objEvent->graphicsId)->tracks)
|
||||
{
|
||||
objEvent->inShallowFlowingWater = 0;
|
||||
objEvent->inShallowFlowingWater = 1;
|
||||
|
||||
@ -66,7 +66,6 @@ static void PokeballGlowEffect_WaitForSound(struct Sprite *);
|
||||
static void PokeballGlowEffect_Idle(struct Sprite *);
|
||||
static void SpriteCB_PokeballGlow(struct Sprite *);
|
||||
|
||||
static void FieldCallback_UseFly(void);
|
||||
static void Task_UseFly(u8);
|
||||
static void FieldCallback_FlyIntoMap(void);
|
||||
static void Task_FlyIntoMap(u8);
|
||||
@ -407,35 +406,35 @@ static const struct SpriteFrameImage sPicTable_HofMonitorSmall[] =
|
||||
static const struct Subsprite sSubsprites_PokecenterMonitor[] =
|
||||
{
|
||||
{
|
||||
.x = -12,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(16x8),
|
||||
.x = -12,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(16x8),
|
||||
.size = SPRITE_SIZE(16x8),
|
||||
.tileOffset = 0,
|
||||
.tileOffset = 0,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = 4,
|
||||
.x = 4,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.size = SPRITE_SIZE(8x8),
|
||||
.tileOffset = 2,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = -12,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(16x8),
|
||||
.size = SPRITE_SIZE(16x8),
|
||||
.tileOffset = 3,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.size = SPRITE_SIZE(8x8),
|
||||
.tileOffset = 2,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = 4,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.size = SPRITE_SIZE(8x8),
|
||||
.tileOffset = 5,
|
||||
.x = -12,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(16x8),
|
||||
.size = SPRITE_SIZE(16x8),
|
||||
.tileOffset = 3,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = 4,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.size = SPRITE_SIZE(8x8),
|
||||
.tileOffset = 5,
|
||||
.priority = 2
|
||||
}
|
||||
};
|
||||
@ -445,35 +444,35 @@ static const struct SubspriteTable sSubspriteTable_PokecenterMonitor = subsprite
|
||||
static const struct Subsprite sSubsprites_HofMonitorBig[] =
|
||||
{
|
||||
{
|
||||
.x = -32,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.x = -32,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.size = SPRITE_SIZE(32x8),
|
||||
.tileOffset = 0,
|
||||
.tileOffset = 0,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = 0,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.x = 0,
|
||||
.y = -8,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.size = SPRITE_SIZE(32x8),
|
||||
.tileOffset = 4,
|
||||
.tileOffset = 4,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = -32,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.x = -32,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.size = SPRITE_SIZE(32x8),
|
||||
.tileOffset = 8,
|
||||
.tileOffset = 8,
|
||||
.priority = 2
|
||||
},
|
||||
{
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.size = SPRITE_SIZE(32x8),
|
||||
.tileOffset = 12,
|
||||
.tileOffset = 12,
|
||||
.priority = 2
|
||||
}
|
||||
};
|
||||
@ -936,19 +935,19 @@ void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
|
||||
{
|
||||
int curRed, curGreen, curBlue;
|
||||
u16 color = gPlttBufferUnfaded[i];
|
||||
|
||||
|
||||
curRed = (color & RGB_RED);
|
||||
curGreen = (color & RGB_GREEN) >> 5;
|
||||
curBlue = (color & RGB_BLUE) >> 10;
|
||||
|
||||
|
||||
curRed += (((0x1F - curRed) * r) >> 4);
|
||||
curGreen += (((0x1F - curGreen) * g) >> 4);
|
||||
curBlue += (((0x1F - curBlue) * b) >> 4);
|
||||
|
||||
|
||||
color = curRed;
|
||||
color |= (curGreen << 5);
|
||||
color |= (curBlue << 10);
|
||||
|
||||
|
||||
gPlttBufferFaded[i] = color;
|
||||
}
|
||||
|
||||
@ -957,19 +956,19 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
|
||||
{
|
||||
int curRed, curGreen, curBlue;
|
||||
u16 color = gPlttBufferUnfaded[i];
|
||||
|
||||
|
||||
curRed = (color & RGB_RED);
|
||||
curGreen = (color & RGB_GREEN) >> 5;
|
||||
curBlue = (color & RGB_BLUE) >> 10;
|
||||
|
||||
|
||||
curRed -= ((curRed * r) >> 4);
|
||||
curGreen -= ((curGreen * g) >> 4);
|
||||
curBlue -= ((curBlue * b) >> 4);
|
||||
|
||||
|
||||
color = curRed;
|
||||
color |= (curGreen << 5);
|
||||
color |= (curBlue << 10);
|
||||
|
||||
|
||||
gPlttBufferFaded[i] = color;
|
||||
}
|
||||
|
||||
@ -1328,10 +1327,10 @@ static void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
|
||||
void ReturnToFieldFromFlyMapSelect(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
gFieldCallback = FieldCallback_UseFly;
|
||||
gFieldCallback = FieldCallback_Fly;
|
||||
}
|
||||
|
||||
static void FieldCallback_UseFly(void)
|
||||
void FieldCallback_Fly(void)
|
||||
{
|
||||
FadeInFromBlack();
|
||||
CreateTask(Task_UseFly, 0);
|
||||
@ -1714,7 +1713,7 @@ static bool8 EscalatorWarpIn_Init(struct Task *task)
|
||||
// If dest is down escalator tile, player is riding up
|
||||
behavior = TRUE;
|
||||
task->tState = 3; // jump to EscalatorWarpIn_Up_Init
|
||||
}
|
||||
}
|
||||
else // MB_UP_ESCALATOR
|
||||
{
|
||||
// If dest is up escalator tile, player is riding down
|
||||
@ -2264,7 +2263,7 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task)
|
||||
gFieldCallback = FieldCallback_EscapeRopeWarpIn;
|
||||
SetMainCallback2(CB2_LoadMap);
|
||||
DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpOut));
|
||||
}
|
||||
}
|
||||
else if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0)
|
||||
{
|
||||
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection]));
|
||||
@ -3886,4 +3885,3 @@ static void Task_MoveDeoxysRock(u8 taskId)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1604,6 +1604,11 @@ static void CB2_LoadMapOnReturnToFieldCableClub(void)
|
||||
|
||||
void CB2_ReturnToField(void)
|
||||
{
|
||||
if (gFieldCallback == FieldCallback_Fly) {
|
||||
RemoveFollowingPokemon();
|
||||
} else {
|
||||
UpdateFollowingPokemon();
|
||||
}
|
||||
if (IsUpdateLinkStateCBActive() == TRUE)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToFieldLink);
|
||||
|
||||
33
src/scrcmd.c
33
src/scrcmd.c
@ -52,6 +52,7 @@
|
||||
|
||||
typedef u16 (*SpecialFunc)(void);
|
||||
typedef void (*NativeFunc)(void);
|
||||
typedef bool8 (*ScrFunc)(struct ScriptContext*);
|
||||
|
||||
EWRAM_DATA const u8 *gRamScriptRetAddr = NULL;
|
||||
static EWRAM_DATA u32 sAddressOffset = 0; // For relative addressing in vgoto etc., used by saved scripts (e.g. Mystery Event)
|
||||
@ -133,12 +134,17 @@ bool8 ScrCmd_specialvar(struct ScriptContext *ctx)
|
||||
|
||||
bool8 ScrCmd_callnative(struct ScriptContext *ctx)
|
||||
{
|
||||
NativeFunc func = (NativeFunc)ScriptReadWord(ctx);
|
||||
|
||||
func();
|
||||
u32 func = ScriptReadWord(ctx);
|
||||
((NativeFunc) func)();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_callfunc(struct ScriptContext *ctx)
|
||||
{
|
||||
u32 func = ScriptReadWord(ctx);
|
||||
return ((ScrFunc) func)(ctx);
|
||||
}
|
||||
|
||||
bool8 ScrCmd_waitstate(struct ScriptContext *ctx)
|
||||
{
|
||||
ScriptContext1_Stop();
|
||||
@ -459,7 +465,7 @@ bool8 ScrCmd_compare_var_to_var(struct ScriptContext *ctx)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Note: addvar doesn't support adding from a variable in vanilla. If you were to
|
||||
// Note: addvar doesn't support adding from a variable in vanilla. If you were to
|
||||
// add a VarGet() to the above, make sure you change the `addvar VAR_*, -1`
|
||||
// in the contest scripts to `subvar VAR_*, 1`, else contests will break.
|
||||
bool8 ScrCmd_addvar(struct ScriptContext *ctx)
|
||||
@ -649,7 +655,7 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx)
|
||||
switch (mode)
|
||||
{
|
||||
case FADE_TO_BLACK:
|
||||
case FADE_TO_WHITE:
|
||||
case FADE_TO_WHITE:
|
||||
default:
|
||||
CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE);
|
||||
FadeScreen(mode, 0);
|
||||
@ -1567,6 +1573,16 @@ bool8 ScrCmd_bufferleadmonspeciesname(struct ScriptContext *ctx)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrFunc_bufferlivemonspeciesname(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 stringVarIndex = ScriptReadByte(ctx);
|
||||
|
||||
u8 *dest = sScriptStringVars[stringVarIndex];
|
||||
u32 species = GetMonData(GetFirstLiveMon(), MON_DATA_SPECIES);
|
||||
StringCopy(dest, gSpeciesNames[species]);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 stringVarIndex = ScriptReadByte(ctx);
|
||||
@ -2026,6 +2042,13 @@ bool8 ScrCmd_playmoncry(struct ScriptContext *ctx)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrFunc_playfirstmoncry(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 species = GetMonData(GetFirstLiveMon(), MON_DATA_SPECIES);
|
||||
PlayCry5(species, 0);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_waitmoncry(struct ScriptContext *ctx)
|
||||
{
|
||||
SetupNativeScript(ctx, IsCryFinished);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user