diff options
Diffstat (limited to 'RGBY/Scripting_Reference.mdwn')
-rw-r--r-- | RGBY/Scripting_Reference.mdwn | 726 |
1 files changed, 0 insertions, 726 deletions
diff --git a/RGBY/Scripting_Reference.mdwn b/RGBY/Scripting_Reference.mdwn deleted file mode 100644 index eefbb03..0000000 --- a/RGBY/Scripting_Reference.mdwn +++ /dev/null @@ -1,726 +0,0 @@ -# Red/Blue Scripting Reference - -## PLAY\_CRY $13d0 - -1. select Mon ID: - * ld a,xx -2. call $13d0 - -## PRINT\_BCD\_NUMBER $15cd - -1. select flags (bit 765) and length of number (low nybble): - * ld c,xx -2. select location of number: - * ld de,ddee -3. select location on the screen ($C3A0-c507): - * ld hl,hhll -4. call $15cd - -<table> -<thead><tr><th> Upper three bits </th><th> Leading zeros </th><th> Print ¥</th></tr></thead> -<tr><td> 000 </td><td> 0 = zero </td><td> </td></tr> -<tr><td> 001 </td><td> 0 = zero </td><td> YES </td></tr> -<tr><td> 010 </td><td> 0 = zero </td><td> </td></tr> -<tr><td> 011 </td><td> 0 = zero </td><td> YES </td></tr> -<tr><td> 100 </td><td> 0 = space </td><td> </td></tr> -<tr><td> 101 </td><td> 0 = space </td><td> YES </td></tr> -<tr><td> 110 </td><td> 0 = nothing </td><td> </td></tr> -<tr><td> 111 </td><td> 0 = nothing </td><td> YES </td></tr> -</table> - -## COPY\_GFX\_1BPP $1886 - -1. set source: - * ld a,aa ;bank - * ld de,ddee ;pointer -2. set destination: - * ld hl,hhll -3. set tile number: - * ld c,cc -4. call $1886 - -## CLEAN\_SCREEN\_PART $18c4 (or DRAW\_BOX?) - -1. set height(b) and width(c) of area (unit is tile): - * ld bc,hhww -2. set starting tile on screen (screen begins at c3a0): - * ld hl,$c??? -3. call $18c4 - -## MUSIC\_RELATED $23b1/$23a1 - -### STOP music - -1. select stop\_marker: - * ld a,$ff -2. call $23b1 - -(read also APPENDIX $23b1) - -### LOAD music - -1. select music\_bank - * ld c,xx -2. select music\_specifics(???) - * ld a,yy -3. call $23a1 - -## SCRIPT\_TEXT $2920 - -Check Text Pointer Structure for in‐depth examination - -1. select text\_ID - * ld a,xx - * ld [ff00+8c],a -2. call $2920 - -<table> -<thead><tr><th>val</th><th>text</th></tr></thead> -<tr><td> $00</td><td>menu </td></tr> -<tr><td> $d3</td><td>“PA: your safari game is over!” </td></tr> -<tr><td> $d0</td><td>“\n fainted” </td></tr> -<tr><td> $d1</td><td>black‐out sentence </td></tr> -<tr><td> $d2</td><td>“REPEL’s effect wore off” </td></tr> -<tr><td> $f5</td><td>vending machine </td></tr> -<tr><td> $f6</td><td>Cable Club </td></tr> -<tr><td> $f7</td><td>slot machines </td></tr> -<tr><td> $fc</td><td>turn on PC </td></tr> -<tr><td> $fd</td><td>“switch on!” (Mon Storage Sys) </td></tr> -<tr><td> $fe</td><td>mart buy/sell menu </td></tr> -<tr><td> $ff</td><td>pokécenter heal speech </td></tr> -</table> - -## COPY\_DATA\_[cf7b]\_FF $2a5a - -Writes data from hl into [cf7b]. FF-terminated. - -1. select source: - * ld hl,hhll -2. call $2a5a - -## COUNT\_SET\_BITS $2b7f - -Value is stored always in $d11e. - -1. select starting byte: - * ld hl,hhll -2. select number of bytes (i.e number of bits/8) - * ld b,bb -3. call $2a5a - -## ADD\_ITEM\_LIST $2bcf - -This is probably a sub-routine of GIVE\_ITEM. - -1. select list’s starting byte: - * ld hl,hhll -2. select type and quantity of items: - * ld a,xx ;type - * ld [$cf91],a - * ld a,yy - * ld [$cf96],a ;quantity -3. call $2bcf - -## GET\_MON\_NAME\_[cd6d] $2f9e - -Write the Pokémon name (real name, not nickname), at cd6d. -Used mainly for texts (that use command[01] to write text -from RAM). - -1. select monID: - * ld a,xx - * ld [$d11e],a -2. call $2f9e - -## LOAD\_LEVEL $3071 - -Loads map specified in $d35e and all related to it? - -1. call $3071 - -[load mapID in [$D35E]; maybe event displacement could be necessary too.] - -## TOSS\_ITEM $30c4 - -1. load starting address: - * ld hl,$d31d -2. call $30c4 - -[add more info] - -## CC57\_SCRIPTS $310e - - IF (bit 0,[$d736]) - { - ld b,6 - ld hl,$63e0 - jp Bankswitch - } - -$CC57 must be ≠ 0 for -this function to be activated. - -1. set subScript ptr: - * ld a,xx ;subScriptID -2. call $310e ??? - -## TRAINER\_IN\_MAP $3160 - -Handles both level script and trainer events: - -1. Select data: - * ld hl,TrainerHeaders - * ld de,ScriptPtrTable -2. call correctly: - * ld a,[ScriptFlag] - * call $3160 - * ld [ScriptFlag],a - * ret - -;ScriptFlag ex: Viridian Gym = [$D5FB] - -## STORE\_2\_STRINGS $317f - -Stores 2 strings in RAM: - -* [$CF5F] $11 bytes max -* [$CF70] $0B bytes max - -1. load ptrs: - * ld hl,string1 - * ld de,string2 -2. call $317f - -* string1: [char][char]…[$50] -* string2: [char][char]…[$50] - -## SET\_BATTLE $31cc - -This is a map-script (not text-script) - -1. set Battle Specs ptr: - * ld hl,TrainerHeaders -2. set ptr to battle ptrs: - * ld de,ddee -3. call $31cc - -TrainerHeaders: - -*[flagbit (and textscriptID)] -*[trainer’s view range x 0x10] -*[flag-byte ptr] -*[ptr to text before battle] -*[ptr to text later on] -*[ptr to text ending battle] -*[ptr to text (same as previous)] -*[0xFF] - -[check Appendix:Trainer scripts] - -## HEX\_DEC\_CONVERT $323d - -1. select mode: - * ld b,xyz000vw\\ -; x = write zeros\\ -; y = don’t\\ -; z = P?\\ -; v = 2B\\ -; w = 1B\\ -;vw = 3B -2. select RAM location: - * ld de,ddee -3. call $323d - -## SAVE\_OAM\_POS? $32ef - -1. select Object\_ID: - * ld a,xx - * ld [$cf13],a -2. call $32ef - -[not sure] - -## STORE\_WINLOSE\_TEXT $3354 - -1. select win\_text and lose\_text: - * ld hl,hhll - * ld de,ddee -2. call $3354 - -## HANDLE\_SPINNERS $3442 - -1. Set spinners’ table: - * ld hl,.Spinners -2. call $3442 - -Spinners: - -*[Y][X][Mov1.Ptr] -*[Y][X][Mov2.Ptr] -*… -*[Y][X][MovN.Ptr] -*[$FF] - -Mov.Ptr: - -*[Direction][n. of steps] -*… -*[$FF] - -sound\_A7, outside, is spin sound - -## FORCE\_PLAYER\_MOVE $3486 - -1. load path in $ccd3 (check $350c) -2. set length\_of\_path: - * ld a,xx - * ld [$cd38] -3. call $3486 - -[$cd38] > 0 until path\_move is over. - -## CHECK\_ITEM $3493 - -1. select Item\_ID: - * ld b,xx -2. call $3493 - -## FACE\_OBJECT $34a6 - -1. select person’s ID: - * ld a,xx - * ld [$ff8c],a -2. select direction: - * ld a,yy - * ld [$ff8d],a -3. call $34a6 - -## CHECK\_COORDS $34bf - -Sets carry if finds a match. - -CoordsTable = [Y][X]…[FF] - -1. select CoordsTable pointer: - * ld hl,hhll -2. call $34bf - -(example: Seafoam holes) - -## COPY\_RLE\_DATA $350c - -Note: ‘de’ is source, ‘hl’ is dest - -1. select source (run-length encoded) - * ld de,ddee - * ld [$ff00+8c],a -2. select destination (in RAM area): preferably $CCD3 - * ld hl,hhll -3. call $350c - -* [OUT: ccd2 = data decompressed length] -* [OUT: a = [ccd2] + 1] - -## CALL\_ANOTHER\_BANK $35d6 - -1. select Bank: - * ld b,xx -2. select Address - * ld hl,aabb -3. call $35d6 - -## YES\_NO\_CHOICE $35ec - -1. call $35ec -2. check choice (0 = Yes, 1 = No) - * ld a,[$cc26] - * and a -3. Highly customizable (ret nz; jr z,xx; etc..) - -## APPLY\_PATH $363a - -1. select people\_ID - * ld a,xx - * ld [$ff00+8c],a -2. path\_structure pointer - * ld de,yyzz -3. call $363a - -[bit 0,[$d730] ≠ 0 until path\_move is over.] - -## LOAD\_FONT\_GFX $3680 - -Simple as that: - -1. call $3680 - -## LOAD\_TEXTBOX\_GFX $36a0 - -Simple as that (loads fullCaps chars,apices,jpn chars and textboxes’ borders): - -1. call $36a0 - -## LOAD\_HEALTHBAR\_GFX $36c0 - -Simple as that (loads healthbar, textbox borders, monMenu gfx): - -1. call $36c0 - -## BACKUP\_SCREEN\_BUFF $36f4 - -Saves area $C3A0-$C507 to $CD81-$CEE8 - -1. call $36f4 - -## RESTORE\_SCREEN\_BUFF $3701 - -Loads area $CD81-$CEE8 to $C3A0-$C507 and print it to screen. - -1. call $3701 - -## REFRESH\_SCREEN $3739 - -1. select how many times to refresh: - * ld c,xx -2. call $3739 - -## WAIT\_END\_CRY $3748 - -Usually used right after “$13d0” - -1. call $3748 - -## GET\_KEY\_PRESS $3831 - -1. call $3831 -2. Read what key is pressed: - * ld a,[$ffb5] - -* [ffb7 = keyDown] ;XXX -* [ffb5 = keyPress] ;XXX - -## MULTIPLY $38ac - -RESULT is stored in [$ff96]-[$ff98], obviously in little-endian. - -1. clean result’s MSB [$ff96]: - * xor a - * ld [$ff96],a -2. load factors: - * ;1st factor [16 bit] - * ld a,hh - * ld [$ff97],a - * ld a,ll - * ld [$ff98],a - * ;2nd factor [8 bit] - * ld a,ii - * ld [$ff99],a -3. call $38ac - -## DIVIDE $38b9 - -Formats are Big-Endian (!). -Result is 16 bit. - -1. load dividend in area [$ff93 + {reg.b}] through [$ff95 + {reg.b}]. -2. load divisor: - * ld a,dd - * ld [$ff99],a -3. Load HRAM-used shift: - * ld b,bb ;2 ≤ bb ≤ 4 -4. call $38b9 - -[result is rounded down (int)] - -## ADD\_MON\_ASK\_NICK $3927 ;??? needs fix - -Actually adds monster to the party and asks for nickname: - -1. Don’t know why: - * or a - * ld [$cc49],a -2. select level and specie: - * ld a,lv - * ld [$d127],a - * ld a,xx - * ld a,[$cf91] - * ld a,[$d11e] -3. call $3927 - -## MULTIPLY\_$3a87 - -hl = (a x bc) + hl - -1. Load values (a, bc, hl) -2. call $3a87 - -## PRINT\_TEXT $3c49 - -1. select {Pointer\_offset - 1} (must point to a byte=$17): - * ld hl,xxyy -2. call $3c49 - -Pointed structure is a text command. - -## SELECT\_CODE\_POINTER $3d97 - -1. select pointer\_ID: - * ld a,xx - * ld a,(vvww) -2. select pointertable’s pointer: - * ld hl,yyzz -3. call $3d97 - -[for more info check APPENDIX($3d97)] - -## GIVE\_ITEM 0x3e2e - -1. select item ID(b) and quantity(c): - * ld bc,xxyy - -Double choice: - -1. call $3e2e - -1. ld a,$1e - * call $3e6d - -## GIVE\_PKMN $3e48 - -1. select pkmn(b) & level(c): - * ld bc,xxyy -2. call $3e48 -3. check carry - -## GET\_RND\_NUM $3e5c - -1. call $3e5c - - a = 1st random value - [$FFD3] = 1st random value - [$FFD4] = 2nd random value - -## GENERAL SCRIPT $3e6d - -### How to use - -1. [OPTIONAL] value needed in the subroutine - * ld a,xx - * ld [$cc4d],a -2. subroutine ID - * ld a,yy -3. call subroutine selection - * call $3e6d - -[for more info check APPENDIX($3e6d)] - -## RESTORE\_REGS\_PREDEF $3e94 - -This routine is used by routines called by Predef (routine at $3e6d) and -restores registers that were saved in the following RAM locations: - -* cc4f: h -* cc50: l -* cc51: d -* cc52: e -* cc53: b -* cc54: c - -1. call $3e94 - -[skip this] -## APPLY\_DOUBLE\_PATH 06:64 - -1. select pkmn(b) & level(c): - * ld bc,xxyy -2. call $3e48 -3. check carry - -[/end skip] - -## TEXT ZONE (pointer table pointed by TextPointer [MapHeader]) - -## APPENDIX ($23b1) - -97 = poisoned pokemon sound (while walking in overworld) - -## APPENDIX TRAINER SCRIPTS - - Text-script part: - { - db $08 - ld hl,MyTrainerHeader1 - call $31cc - jp $24d7 - MyTrainerHeaders: - MyTrainerHeader1: - ;(…) - ;(…) - MyTrainerHeaderN: - ;(…) - db $FF - } - - Map-script part: - { - ld hl,MyTrainerHeaders - ld de,TrainerScriptPtrs - ld a,[MapFlag] - call $3160 - ld [MapFlag],a - ret - TrainerScriptPtrs: - dw $3219 - dw $324c - dw $3275 - } - - 3219: - { - Reads trainerHeader (first of all checks flag, if set skip to next trainerHeader, until FF-endByte) - } - 324c: - { - } - 3275: - { - } - -## APPENDIX ($3d97) - -example Pallet town: - - … - ROM6:4E6A 21 73 4E ld hl,4e73 ;pointer to pointers’table - ROM6:4E6D FA F1 D5 ld a,(d5f1) ;PalletRAM for code\_ID - - ;jp xxyy with yy = (hl + ax2), xx = (hl + 1 + ax2) - - ROM6:4E70 C3 97 3D jp 3d97 - … - -## APPENDIX ($3e6d) - -RAM used: - -* cc4e: subroutine\_ID -* cf12: old bank number -* d0b7: new bank number -* cc4f: h -* cc50: l -* cc51: d -* cc52: e -* cc53: b -* cc54: c -* + lot of other RAMs, depending on which subr is called. - -To recover registers’ values ‘call $3e94’ - -note1: various “clone” pointers[$09=$0a=$0d=$0e], why? - -note2: pointers that point to bank0 (ID=$1d,$1e)load bank3, is it just padding? - -note3: following pointers are little-endian (actually middle-endian: |bank|little-endian ptr|). - -<table> -<thead><tr><th>ID</th><th>Pointer</th><th>Purpose</th></tr></thead> -<tr><td> 00</td><td> 0F 604D</td><td> </td></tr> -<tr><td> 01</td><td> 0F C670</td><td> </td></tr> -<tr><td> 02</td><td> 0F 7370</td><td> </td></tr> -<tr><td> 03</td><td> 0B 407E</td><td> </td></tr> -<tr><td> 04</td><td> 0F 0371 </td><td>magnify backpics </td></tr> -<tr><td> 05</td><td> 1E BA5A</td><td> </td></tr> -<tr><td> 06</td><td> 03 3271</td><td> </td></tr> -<tr><td> 07</td><td> 03 A576 </td><td>restore mon’s health (es.: 1st rival battle) </td></tr> -<tr><td> 08</td><td> 1E 5E4D </td><td>animations maybe?? </td></tr> -<tr><td> 09</td><td> 03 1E77</td><td> </td></tr> -<tr><td> 0a</td><td> 03 1E77</td><td> </td></tr> -<tr><td> 0b</td><td> 03 1D78</td><td> </td></tr> -<tr><td> 0c</td><td> 03 3678</td><td>subtract coins (BCD operation (decimal adjust)) </td></tr> -<tr><td> 0d</td><td> 03 1E77</td><td> </td></tr> -<tr><td> 0e</td><td> 03 1E77</td><td> </td></tr> -<tr><td> 0f</td><td> 03 5078</td><td> </td></tr> -<tr><td> 10</td><td> 03 6676 </td><td>RAMtbls:D737/9A/ED..setBit,resByte(\{bit}),b={0,1,2}c=[aaaaabbb] </td></tr> -<tr><td> 11</td><td> 03 D771 </td><td>make an object visible (flags: d5a6-d5c6) [opposite of ID=15] </td></tr> -<tr><td> 12</td><td> 03 A671 </td><td>check shown/hidden objects (flags starting at $d5a6) </td></tr> -<tr><td> 13</td><td> 03 9C46</td><td> </td></tr> -<tr><td> 14</td><td> 0F 834A</td><td> </td></tr> -<tr><td> 15</td><td> 03 C871 </td><td>make an object invisible (flags: d5a6-) [opposite of ID=11] </td></tr> -<tr><td> 16</td><td> 03 C871</td><td> </td></tr> -<tr><td> 17</td><td> 03 9E6E</td><td> </td></tr> -<tr><td> 18</td><td> 03 5078 </td><td>initialize flags (and things like itemsack, etc.) </td></tr> -<tr><td> 19</td><td> 03 5447 </td><td>load tileset header </td></tr> -<tr><td> 1a</td><td> 0E 5B6F </td><td>GetLevUpAtks_ </td></tr> -<tr><td> 1b</td><td> 01 436E</td><td> </td></tr> -<tr><td> 1c</td><td> 03 A578 </td><td>check item in bag </td></tr> -<tr><td> 1d</td><td> 03 B53E</td><td> </td></tr> -<tr><td> 1e</td><td> 03 2E3E </td><td>give item (b = item_ID, c = item_num) </td></tr> -<tr><td> 1f</td><td> 12 EB40 </td><td>blink screen for 4 frames [example: poisoned pokemon] </td></tr> -<tr><td> 20</td><td> 03 BA78 </td><td>somehow related to apply_movement </td></tr> -<tr><td> 21</td><td> 12 FF40</td><td> </td></tr> -<tr><td> 22</td><td> 03 2979 </td><td>somehow related to apply_movement </td></tr> -<tr><td> 23</td><td> 03 A079</td><td> </td></tr> -<tr><td> 24</td><td> 12 2541</td><td> </td></tr> -<tr><td> 25</td><td> 03 1D7A</td><td> </td></tr> -<tr><td> 26</td><td> 03 DC79</td><td> </td></tr> -<tr><td> 27</td><td> 01 B05A</td><td> </td></tr> -<tr><td> 28</td><td> 0F 026D</td><td> </td></tr> -<tr><td> 29</td><td> 10 0040</td><td> </td></tr> -<tr><td> 2a</td><td> 0E 1C6D </td><td>GetEvos’ subset (label: Predef_2a_) </td></tr> -<tr><td> 2b</td><td> 1C 8C77</td><td> </td></tr> -<tr><td> 2c</td><td> 0F 186F</td><td> </td></tr> -<tr><td> 2d</td><td> 01 5F5A</td><td> </td></tr> -<tr><td> 2e</td><td> 03 036A </td><td>Bio screen, gym-leaders/badges arrangement </td></tr> -<tr><td> 2f</td><td> 10 F350</td><td> </td></tr> -<tr><td> 30</td><td> 1C 6D49</td><td> </td></tr> -<tr><td> 31</td><td> 1E DA5D</td><td> </td></tr> -<tr><td> 32</td><td> 10 8256 </td><td>load intro(copyrights,Gamefreak,NidoVSJigg) </td></tr> -<tr><td> 33</td><td> 1E 6958</td><td> </td></tr> -<tr><td> 34</td><td> 1C 5D4B</td><td> </td></tr> -<tr><td> 35</td><td> 03 8645</td><td> </td></tr> -<tr><td> 36</td><td> 04 5369</td><td> </td></tr> -<tr><td> 37</td><td> 04 576B</td><td> </td></tr> -<tr><td> 38</td><td> 10 E250</td><td> </td></tr> -<tr><td> 39</td><td> 15 0F69</td><td> </td></tr> -<tr><td> 3a</td><td> 10 1050 </td><td>convert Mon_ID Chaotic-to-Dex </td></tr> -<tr><td> 3b</td><td> 01 A162 </td><td>decompr sprite(hl=ptr,b=bank)& arrange[used in BioMenu & not only] </td></tr> -<tr><td> 3c</td><td> 03 546F</td><td> </td></tr> -<tr><td> 3d</td><td> 10 D142 </td><td>load DexPage (INPUT:[$d11e]=DexMonID) </td></tr> -<tr><td> 3e</td><td> 0E B86F </td><td>GetWildMonAtks_ </td></tr> -<tr><td> 3f</td><td> 1C 0A77 </td><td>SAVE GAME </td></tr> -<tr><td> 40</td><td> 1C 2B60 </td><td>send SGB-packs at beginning (MLT_REQ,DATA_SND,PCT_TRN,…) </td></tr> -<tr><td> 41</td><td> 03 1371</td><td> </td></tr> -<tr><td> 42</td><td> 17 5E5B</td><td> </td></tr> -<tr><td> 43</td><td> 04 3E77</td><td> </td></tr> -<tr><td> 44</td><td> 04 6377</td><td> </td></tr> -<tr><td> 45</td><td> 1C DF5D </td><td>load SGB packages (PAL_SET) </td></tr> -<tr><td> 46</td><td> 17 DC40 </td><td>load dex screen (es:lab when choosing starter) </td></tr> -<tr><td> 47</td><td> 03 E572</td><td> </td></tr> -<tr><td> 48</td><td> 03 1D7A</td><td> </td></tr> -<tr><td> 49</td><td> 0F EC4D</td><td> </td></tr> -<tr><td> 4a</td><td> 1C 604F </td><td>TownMap (in Dex only?) </td></tr> -<tr><td> 4b</td><td> 09 6B7D</td><td> </td></tr> -<tr><td> 4c</td><td> 05 477C </td><td>balloon over head (cd4f:personID, cd50:([!][?][^_^]) </td></tr> -<tr><td> 4d</td><td> 01 AF5A</td><td> </td></tr> -<tr><td> 4e</td><td> 01 EB64</td><td> </td></tr> -<tr><td> 4f</td><td> 0D A17C</td><td> </td></tr> -<tr><td> 50</td><td> 1C 0F78 </td><td>save dex & party infos to SRAM1 </td></tr> -<tr><td> 51</td><td> 1C BD76 </td><td>load dex & party infos from SRAM1 </td></tr> -<tr><td> 52</td><td> 1C E875 </td><td>load SAV from SRAM1 </td></tr> -<tr><td> 53</td><td> 1C E277 </td><td>save current bank’s stored mons to SRAM1 </td></tr> -<tr><td> 54</td><td> 1C D95A</td><td> </td></tr> -<tr><td> 55</td><td> 1D 5C40</td><td> </td></tr> -<tr><td> 56</td><td> 11 6941</td><td> </td></tr> -<tr><td> 57</td><td> 1E BA45</td><td> </td></tr> -<tr><td> 58</td><td> 1E 1045</td><td> </td></tr> -<tr><td> 59</td><td> 03 BE45</td><td> </td></tr> -<tr><td> 5a</td><td> 03 0B46</td><td> </td></tr> -<tr><td> 5b</td><td> 03 994D</td><td> </td></tr> -<tr><td> 5c</td><td> 01 E14D </td><td>check H/S obj (RAM_Table D5CE, FF-term.) ??? </td></tr> -<tr><td> 5d</td><td> 09 987D</td><td> </td></tr> -<tr><td> 5e</td><td> 03 7374 </td><td>related to AttacksData </td></tr> -<tr><td> 5f</td><td> 04 EF68</td><td> </td></tr> -<tr><td> 60</td><td> 04 F668</td><td> </td></tr> -<tr><td> 61</td><td> 07 C649</td><td> </td></tr> -<tr><td> 62</td><td> 16 3550</td><td> </td></tr> -</table> |