• Post 1
  • Post 2
  • Post 3
  • Post 4

Graphics Tutorial (EN)

0

Bookmark and Share

Graphics Tutorials

Introduction


I'm going to show you how to tile insert using a method that I've adopted by using some of paint's less known features.

What You'll Need

  • Advanced Map (A-Map)
  • Paint
  • A positive attitude

Instructions

  1. Open A-Map
    Spoiler
  2. Open the map with the tileset you want to destr-- err... I mean change
    Spoiler
  3. Click on the puzzle piece
  4. Go to the palette that most resembles your tile's colour or to the palette with the colours you want to change it to
    Spoiler
  5. Now go Picture>Save Tileset 2 (or 1 if you're editing the default tileset)
    Spoiler
  6. Open your tileset and tile with paint
    Spoiler
  7. Paste your tile into the tileset
    Spoiler
  8. Click on the eyedropper
    Spoiler
  9. Left click on your tile's colour
    Spoiler
  10. Click on the eyedropper again
  11. Right click on the colour that resembles the tile most or the colour you want to change it to
    Spoiler
  12. Click on the eraser
    Spoiler
  13. Hold control and press + - to resize your eraser to the size of the tile (or the size you want but resizing the eraser to the size of the tile is faster)
    Spoiler
  14. Hold the right button and drag the eraser across the tile (or just right click if it's bigger than the tile)
    Spoiler
  15. Repeat steps 8-14 until you recoloured your whole tile
    Spoiler
  16. Open A-Map again and click load tileset 2 (again 1 if you're editing the default tileset)
    Spoiler
  17. Check in A-Map if the tile looks like the tile in paint
    Spoiler
  18. Voila, you have just inserted your first tile!

Keynotes


I hope this tutorial helps anybody who doesn't know how to tile insert or if it helps out the seasoned tile inserter that wants an alternative way to tile insert. If you have any comments or questions, please feel free to post below.

Credits

  • Luho- For A-Map
  • Wesley FG- Tiles
========================================================================
Tutorial by 
========================================================================
Hello everyone. I've noticed that there is a tutorial for changing the worldmap on FR/LG, but none for R/S/E (At least, none that lets you use your own tiles). So, I now give you a way to change the worldmap on Ruby, Sapphire and Emerald.
NOTE: I'm going to use the worldmap from my hack, DON'T STEAL IT! Also, I use Emerald for the course of this tutorial.

What will you need?
You will need the following things:
  • TileMolester Alternate (Google it if you don't have it, and don't use the regular TileMolester, because apparently it won't load your saved palettes.)
  • Cyclone, NTME, or another TileMap editor
  • GIMP, Paint Shop Pro, or another image editor that supports either a customizable grid, or an 8x8 grid
  • unLZ.GBA (Check HackMew's Toolbox)
  • VisualBoyAdvance, of course. (Or another emulator to test it.)

First, draw your picture, of course. I have this:
Spoiler

Beware that the GBA screen is 240x160 pixels, and that not all of it is accessible with the cursor when viewing the map in-game. This is the part that's accessible (within the black rectangle):

Now, you have to make a tileset of it. It can have a maximum of 256 tiles from 8x8, meaning 256x64, or 128x128 for the entire tileset. You'll probably succeed in that if you use GIMP or another program that has a customizable grid, like Paint Shop Pro (which is not free; GIMP is), and set that grid to 8x8. Also, be sure to leave out all double tiles. Meaning, if you have a lot of the same tiles, use only 1 of them in the tileset. My result:
Spoiler

If you have the tileset done, open Cyclone, NTME, or whatever tilemap editor you have, and make the tilemap. !!In 8BPP mode!! FR/LG use 4BPP, but Ruby, Sapphire and Emerald use 8BPP. If you don't know what a tilemap is, or how to make one, search around the Documents & Tutorials section.
Spoiler

NOTE: If you're having trouble making a tileset and/or tilemap:
Spoiler
Check here for an easy (easier) way.

Then, open up your ROM in VBA, and view the worldmap somewhere. Be it in the Pokénav, in the Fly menu, or on a map on the wall in the PC, it doesn't matter. Go to Tools > Palette viewer, and click on Save BG.
Spoiler

Save it as a Windows .pal file.
Spoiler

Then, open up TileMolester. Make a new file, with size 16384. (That's 16 KB, in case you don't know.)
Spoiler

Next, click View > Codec > 8bpp linear, and after that Palette > Import from > Another file, and choose the palette you saved through VBA.
Spoiler

Also, don't forget to give the image the same dimensions as your tileset. In my case, that's 16x16. (Just divide the width and height by 8). Do it by clicking Image > Canvas size.
Lastly, select Edit > Paste from, and select the tileset you made, and save it as a .raw file. NOTE: Before you save, make sure to expand the picture frame, so there's some room left next to the picture, and click there to deselect the image you just pasted. If you don't, TileMolester will not save the tileset, because it will still be a selection, and you'll end up with a black image. Hint: If you can still move the tileset around, it's no good. It has to be pinned down.
Spoiler

Now open up unLZ, and go to the worldmap tileset image; in Emerald, it's 245, 136 in Ruby, and 137 in Sapphire. At least, for me it is. If it's not there, it could be a few numbers off. You'll find it in 256 Color Mode. Go to File > Load Raw, and select the .raw file you created with TileMolester.
Spoiler

Click Write to ROM, and check everything as seen in below image. See how I chose offset 0xDF0000? You can choose any free offset, AS LONG AS IT'S NOT HIGHER THAN 0XE00000! Why? Because the game will start to glitch up if it is. And, don't forget that the offset has to end with 0, 4, 8 or C. (Thanks Pokepal17 for reminding me.)
Spoiler

Wait for the two "Ptr found at 00XXXXXX. Changed." messages, and proceed to the next image. In this case, it's 246.
Click File > Load Raw again, and this time select the tilemap you made with NTME / Cyclone / Whatever.
Spoiler

Click Write to ROM again, and keep everything checked that was checked, and vice versa. This time, though, you CAN repoint it to 0xE00000 or higher, it doesn't matter. What DOES matter, is the difference between the two offsets for the tileset and tilemap. Be sure to keep them at least 0x1000 bytes apart. (If the tileset is at 0xDF0000, the tilemap should be at at least 0xDF1000.) My tileset uses 0x934 bytes, so 0xA00 bytes would suffice, but just make it 0x1000. Just to be safe. Now click OK, and wait for the "Ptr found at 00XXXXXX. Changed." messages.
Now, time to test things in the emulator. If you have done everything correctly, you should get this result:
Spoiler


Well, that about does it. Of course, as you can see, Mauville is still on the same place as it is in R/S/E, but you can change that with Advance Map's Worldmap Editor.

Thank you for taking the time to read this, and hopefully, more people will now be able to change R/S/E's worldmap.

Go here if you want to change the worldmap you see in the Pokédex, because that one uses a different tileset and tilemap. Thanks of course to AztecFire.

=========================================================================
Tutorial by


 
=========================================================================
Hello, and welcome. I've been hacking here for a while, and I thought I'd find out how to do something that I hadn't seen explained here. I tried to figure it out, make sure there were no bugs in the method, and I hope this is of use to you.

Tools Needed:
MS Paint
IrfanView
unLZ-GBA
Advance Palette Editor
Nameless TileMap Editor

Pokemon Logo and Version Name
I'm sure you've all seen this, but I wanted to take it to the next step. Very simple process, really. I have figured out how to place the logo anywhere you want on the titlescreen.

Step One:
Goto (roughly) 2009 in unLZ-GBA

Step Two:
Click "Save as..." and load the image in photoshop

Step Three:
Load your game in VBA or No$GBA

Step Four:
At the titlescreen, click tools - palette viewer - save bg, save as an ACT

Step Five:
In Photoshop, goto Image - mode - palette table, and click load. Load the palette from the game, and click okay

Step Six:
Copy the image and paste in Paint

Step Seven:
Erase the "FireRed Version" text and replace with your logo

Step Eight:
Place the new logo in Photoshop, goto image - palette table, and click grayscale in the drop down menu. Save the image

Step Nine:
Import the image into unLZ-GBA, and click write to rom. It should work

Step Ten:
This is where the new step comes in. Open the new logo in NTME

Step Eleven:
Using the Tile Selection box on the right, select the "pokemon" part of the logo and place anywhere in the bottom screen

Step Twelve:
Place the rest of the logo underneath the "pokemon" part. Save the tilemap

Step Thirteen:
Back in unLZ-GBA, goto the next image after the logo (probably 2010, but there is a slight chance yours will be different), and goto file, load raw. Select the tilemap you just made, and click write to rom. It should also work.

Step Fourteen:
Check in your game to see if you did it correctly! Enjoy!


Titlescreen Charizard
Again, this is a hacker's basic cup of tea. It's often changed almost as much as the logo, so most people who are experienced know how to do this. However, I have some extra features that I hope you all can find useful.

Step One:
Select your image (it can be any size, as long as it doesn't exceed the size of the titlescreen 

Step Two:
Open the image in IrFanView, click Image - Decrease Color Depth - 16 Colors [4 BPP] - OK

Step Three:
Goto Image - Palette - Edit Palette, and edit the first color. Hopefully, and probably, this will be your background color, otherwise you will need to do further palette editing. Make the color a bright color that is very different from any other colors in your picture.

Step Four:
Goto Image - Palette - Export Palette, and save it as a PAL file

Step Five:
Save the image as a PNG

Step Six:
Open up NTME and your saved image

Step Seven:
Using the tile selection box, place the image anywhere in the bottom screen

Step Eight:
In the Palettemap tab in NTME, make sure the whole image is "0"'s. Then cover your new image in "D"'s. Save the tilemap

Step Nine:
Open up unLZ-GBA with your rom, goto (roughly) 2011, and import your image with the bright background. Click write to rom. Depending on the size of your image, you may have to write a new offset

Step Ten:
Goto the next pointer (probably 2012). Goto File - Load Raw, and load your tilemap. Again, depending on the size of your image, you may need to repoint the offset

Step Eleven:
Open up APE with your rom, and goto the offset EAD5E8. Load the palette you exported during the beginning

Now for me, it never works quite right. If it works fine for you, go on to Step Thirteen

Step Twelve:
Try to import the palette again, until you get an error message saying Runtime Error 13. The palette numbers should still appear. Either screen capture or write down the numbers, and close the application. Re-open APE, and at the offset EAD5E8, write the palette numbers in the bottom two rows. Click Replace, and the Load. the palette at the top should be the new palette.

Step Thirteen:
Click Replace, and the Load. the palette at the top should be the new palette

Step Fourteen:
Check in your game to see if you did it correctly! Enjoy!

Next to come:
Titlescreen background
Titlescreen Fire

Tell me if there is anything else I should show how to edit!


~MayanMan
=========================================================================
Tutorial by
MayanMan2012
    Read More >>
    4

    Bookmark and Share

    [Intro: You Really Should Read This First!]


    Scripting is just sticking one command ontop of another.
    Each command does something different.
    Usually, just reading the command name tells you what it does.
    Every script is stored at an "offset"
    An offset is just a number representing a place in your ROM
    So if you store your script in 0x800000, then that's your offset
    In order to store your script you must know where to put it.
    Well...I usually cheat and let PKSV decide for me xD
    This is called DYNAMIC offsets, and for this tut, we will only use these
    Dynamic offsets work like this
    [Commands start now]
    #dynamic OFFSET
    [No more commands]
    OFFSET is just where PKSV starts looking for a place to store your script
    Usually, I use "#dynamic 0x740000"
    That is where a good chunk of free space begins, so we hackers like to use it
    Comments (stuff that PKSV will ignore) are allowed after a single spoiler character ( ' )
    eg
    uncommmentedd and creating bugs 'Commented, but not making bugs
    or
    lock 'Locks our player
    faceplayer 'look at player
    PKSV can be found HERE!
    [You Really Should Read This First!]

    [Lesson 1: A Simple Talking Script]


    A script always starts somewhere
    So we'll declare a script like this

    #dynamic 0x740000
    #org @start
    'pretty simple

    "#org @start" is declaring a dynamic label.
    the "@start" part of your script is dynamically placed in your ROM based on the offset PKSV
    found when you used "#dynamic 0x740000"
    This is how you store an offset to anything
    if you call a message the syntax looks like this

    Spoiler
    [...]
    message @textlabel
    [...]

    #org @textlabel
    = Text...what else? xD

    Scripts, Text, Movements, and Pokemart data are all called in the above manner

    Okay, whenever you talk to someone you don't want them wondering all over the place right?
    Wouldn't it be nice to lock them down in chains?
    Well now you can! With this awesome command your players will never move again!
    What is the command you ask? Simple!
    "lock"
    But that's not all, you also want the speaker to look at the talker right?
    This one is simple to!
    “faceplayer”
    that's it!
    Now there are two parts to displaying a message
    Loading the message
    And showing it
    “message @textlabel” will load the message stored in your textlabel
    “callstd MSG_NORMAL” will show the message just loaded in normal format
    So now you've shown a message, great!
    But..your player can't move anymore!, atleast, not yet anyways
    Before the player can move again, he/she has to be “released” from the “lock” we put on them
    the command to do this is
    “release”
    and finally, to prevent a crash of your ROM we will put
    “end”
    “end” is a necessity to your script, just always keep it there and you'll be good to go!

    So to put it all together

    Spoiler
    #dynamic 0x740000 'Start looking at 0x740000
    #org @start 'This is our start label for our script
    lock ' Keep player from moving
    faceplayer ' Make the speaker face the player
    message @offset1 'load the text in the offset1 label into memory
    callstd MSG_NORMAL 'show the message in memory
    release 'Let our player move again
    end 'End the @start label of our script

    #org @offset1 'This is our text label
    = So you got it to work eh?\nGood Job! 'I'll explain this in just a second I promise

    There are problems with text being to long.
    The messagebox can hold a max of about 35 characters per line, and 2 lines per “box”
    So there are “symbols” to get around this

    \n The text following will be in a new line
    \l scrolls the bottom line up, and adds the following text in a new line (use only after \n)
    \p starts a new box
    \v\h01 Players name
    \v\h02 buffer 0
    \v\h03 buffer 1
    \v\h04 buffer 2
    \v\h05 buffer 3
    \v\h06 Rivals name

    which means
    So you got it to work eh?\nGood Job! Would display as

    So you got it to work eh?
    Good Job!
    [A simple Talking script]

    [Lesson 2: Some useful stuff with the message box]


    In order to variate your message you just have to change a single command
    callstd 2 This will rid you of needing a “lock” , a “faceplayer” , or a “release”

    Spoiler
    #dynamic 0x740000
    #org @main
    message @text
    callstd 2 'Or 0x2, 0x just means it's in hex, without it use decimal numbers
    end
    #org @text
    = Text

    As opposed to...
    #dynamic 0x740000
    #org @main
    lock
    faceplayer
    message @text
    callstd MSG_NORMAL
    release
    end
    #org @text
    = Text

    callstd 3 commonly used for signs
    nothing special, displays the message and thats it
    AKA MSG_SIGN

    callstd 4 ensures that the message won't go away until the command “closemsg” is called
    Spoiler
    message @txt
    callstd 4 'Could also use MSG_NOCLOSE....
    […]
    closeonkeypress
    callstsd 5 (AKA MSG_YESNO)
    displays your message and a yes/no dialog
    to find out what the player pushed
    add the following
    #dynamic 0x740000
    #org @main
    lock
    faceplayer
    message @question
    callstd MSG_YESNO
    if 0x1 jump @pushy
    jump @pushn

    #org @pushy
    […]' Do stuff if they pushed yes
    release
    end

    #org @pushn
    [...]'Do stuff if they pushed no
    release
    end

    2 new commands were introduced here
    jump- continues script somewhere else
    jump also has a similar, call, call is used to go to a script, but still comeback (using the command “return” instead of “end”)

    if (value) (command) (label)

    callstd MSG_YESNO
    if 0x1 jump @pushy 'This will jump to pushy if the value returned from yes/no box is 1
    jump @pushno

    since we aren't using “Call” there is no need for an “end” command in our main script, instead place the end command in the places where the script would actually end (in this case it is pushn and pushy) Also, since the script would continue at pushy if the user pushed yes, then there is no need to waste space with another if statement. Instead, just use “jump @pushno” since you know the only other possibility is that the user pushed no.
    [Some useful stuff with the message box]

    [Lesson 3: Giving stuff away]


    In this lesson we will learn how to
    give AND take items
    give pokemon
    give eggs

    the commands for each are simple
    giving a pokemon:
    addpokemon PokemonName (level) itemname (0) (0) (0)
    example:
    addpokemon BULBASAUR 25 00 0 0 0'Gives a level twenty five bulbasaur, not holding 'an item
    addpokemon PIKACHU 25 LIGHTBALL 0 0 0 'Gives a level 25 pikachu holding a 'lightball
    just always ALWAYS ALLLLLWWAAAYYSS remember to add three '0's

    giving an item:
    additem itemname (amount)
    example:
    additem POKEBALL 50 'Gives 50 pokeballs to the player
    giving an egg:
    giveegg PokemonName
    example:
    giveegg Pichu 'Gives us a pichu egg
    [Giving stuff away]


    [Lesson 4: Flags, flags, setting flags,checking flags, and clearing flags]


    flags are amazingly useful, the equivalent of BOOLEAN values in C/C++
    They allow you to do an event ONLY once, do it again when something happens, etc
    This time I'll start with an example first

    Spoiler
    #dynamic 0x740000
    #org @main
    lock
    faceplayer
    checkflag 0x200
    if 0x1 jump @haveit
    message @want
    callstd MSG_YESNO
    if 0x1 jump @pushedyes
    jump @pushedno

    #org @haveit
    message @howsit
    callstd MSG_NORMAL
    release
    end

    #org @pushedyes
    setflag 0x200
    giveegg PICHU
    message @herego
    callstd MSG_NORMAL
    release
    end

    #org @pushedno
    message @dontwant
    callstd MSG_NORMAL
    release
    end

    #org @want
    = Hey, do you want this Pichu egg?

    #org @howsit
    = Here you go!\nPlease raise it well.

    #org @dontwant
    = Oh, ok. Maybe someone else will take it.


    Setflag – This will make checkflag return 1
    Clearflag – This will make checkflag return 0
    Checkflag-- This will compare a flag for it being raised,or lowered. Afterwards you want to add “if 0x1 [jump/call] @[scriptlabel]”
    [Flags, flags, setting flags,checking flags, and clearing flags]


    [Lesson 5: Variables]


    The pokemon games have lots of spots in the GBA memory to store numeric values in. These are called “variables”

    setvar 0x[varnumber] 0x[value] –That sets the [varnumber] to be [value]
    subtractvar 0x[varnumber] 0x[value] – Subtracts [value] from [varnumber] variable
    addvar 0x[varnumber] 0x[value] – Adds [value] to [varnumber] variable
    compare 0x[varnumber] 0x[value] – Returns 1 if [varnumber] is set to [value] again, useage of the if statement is used
    compare 0x8000 0x3
    if 0x1 [jump/call] [label]
    resetvars – Resets the variables 0x8000 through 0x8001
    storevar 0x[buffernumber (\v\h02-\v\h05)] 0x[varnumber]
    This can be used in loops as in this example

    Spoiler
    #dynamic 0x740000
    #org @main
    lock
    faceplayer
    setvar 0x4000 0x20
    setvar 0x4001 0x0
    jump @loop

    #org @loop
    subtractvar 0x4000 0x4001
    storevar 0x0 0x4000
    message @reps
    callstd MSG_NORMAL
    addvar 0x4001 0x1
    compare 0x4001 0x20
    if 0x1 jump @end
    jump @loop

    #org @end
    release
    end

    #org @reps
    = Only \v\h02 loops to go!

    There is a new command introduced here again
    storevar 0x[buffernumber] 0x[varnumber]
    If you use 0x0 for buffernumber the variable is stored in \v\h02, 0x1 means \v\h03, etc until you get to \v\h05 and 0x3

    While the above method works, there is a new feature in PKSV that makes everything much more efficient.

    Spoiler
    #dynamic 0x740000

    #org @main
    lockall
    setvar 0x8010 0x5
    message @start
    callstd MSG_NORMAL
    fadesong 265
    :loop
    pause 0x50
    compare 0x8010 0x1
    if == jump @if1
    storevar 0x1 0x8010
    message @loopmsg
    callstd MSG_NORMAL
    :skip
    subtractvar 0x8010 0x1
    compare 0x8010 0x0
    if == jump:-loop
    jump :loop
    :-loop

    message @done
    callstd MSG_NORMAL
    fadedefault
    release
    end

    #org @if1
    message @crud
    callstd MSG_NORMAL
    jump :skip

    #org @start
    = \v\h01 turned on the SNES

    #org @loopmsg
    = \v\h03 lives left

    #org @crud
    = Oh crud, I only have one live left!

    #org @done
    = \v\h01 got a gameover\ntime to quit!


    There are now two types of labels for PKSV. There is one that works like we've discussed so far. These are the '@' labels we've been using.There is also another way.
    A ' : ' label is used within an '@' label. It is simply a way to start a script from somewhere other than the beginning, and you can use them just like you would an '@' label.

    Spoiler
    #org @mainoffset
    lock ' this is one byte
    faceplayer ' this is another byte
    :label ' this label is at the mainoffset+2 bytes, so if you jump to :label, then it will skip
    ' Lock and faceplayer commands, but doesn't take up space itself.


    There were also two new commands from the above example
    fadesong [song number] – fades the current song that's playing into the sappy song number
    fadedefault – Fades the song back to the default song for the map 
    [Variables]


    [Lesson 6: Miscellaneous commands]


    there are also more things to store in a buffer
    they are always preceded with “storeZZZ” where ZZZ can be replaced with attack,boxname,comp,firstpokemon,furniture,item,items,pokemon,pokemonvar,or text
    the arguments are the same for storevar and can be called just the same way, through messages.

    Waitbutton – Continues the script after the user pushes a button

    lasttrainerbattle – Initiates the last battle the player taken.


    Getplayerpos 0x[varx] 0x[vary] – stores the players x position and y position in the corresponding variables

    showpokepic POKEMONNAME xpos ypos– shows the pokemon sprite at x,y position

    hidepokepic – The sprite displayed w/ above command will not hide until this command used

    random ZZ – Generates a random number between 0 and ZZ then puts it in LASTRESULT or 0x800D

    special XX – This is for a bunch of commands that must be used through this one
    Here is a list of specials for you (they are different for each game)

    Spoiler

    FireRed / LeafGreen

    special 0x0 'Heal Pokémon
    special 0x29 'Choose three Pokemon for something
    special 0x3C 'Access PC
    special 0x8D 'Person says what said the last person you talked to
    special 0x8E 'Reload Map
    special 0x9D 'Old Man Catches Weedle
    special 0x9F 'Choose Pokemon
    special 0xAB 'FR/LG/R/S 'Tree' Data Called
    special 0x108 'Kanto dex document
    special 0x10F 'Game Restart
    special 0x110 'Hall of Fame and Credits
    special 0x111 'Elevator animation
    special 0x113 'FR/LG/R/S screen scrolling
    special 0x114 'FR/LG/R/S stop screen scrolling
    special 0x132 'Shows floors
    special 0x136 'Horizontal Earthquake
    special 0x137 'Glitched Battle
    special 0x138 'Battle
    special 0x139 'Battle
    special 0x13D 'Flash
    special 0x13F 'Warp to first warp of the map
    special 0x156 'Ghost
    special 0x157 'Bike
    special 0x161 'Surf
    special 0x163 'Store Pokemon to Dex
    special 0x166 'Nickname
    special 0x16F 'Fire Red/Leaf Green National Dex
    special 0x173 'Add to fame Checker?
    special 0x17B 'Sea gallop Animation
    special 0x18B 'Displays an image. Only known images are Kabuotps and Aerodactyl fossils.
    special 0x18C 'Closes image shown with special 0x18B
    special 0x191 'S.S. Anne animation

    Ruby / Sapphire
    0 = Heals Party Pokémon
    2 = Warp sound + FadeBlack
    3 = Hero Uses Last Used Warp
    8 = Make new Secret Base/Enter Secret Base
    9 = Come out of Coliseum
    A = Come out of Coliseum
    E = Hero Uses Secret Base PC
    F = Something to do with registry in a secret base
    11 = Something to do with Secret Base battling
    18 = Move Player to X01 Y03
    19 = Something to do with secret base battling
    1A = Turning off PC
    1B = Mixing Records
    1F = checks whether game is linked
    20 = Please wait followed by wild battle (Linkup) (VS in coliseum)
    21 = "Please wait link stand by" (Link Feature)
    22 = "Please wait link stand by" (Link Feature)
    23 = Call Save Menu
    29 = Select 3 Pokémon [maybe for Battle tower?]
    2A = Black Screen
    2B = Something to do with Berry Growth
    2C = Opens up berry pocket (Used in berry blender script)
    2D = Something to do with Planted berry (Used with CmdC3)
    2E = Something to do with Berry Growth
    2F = Something to do with Berry Growth
    30 = Maybe activates the watered flag (used first, then special0x5E)
    34 = Open Textbox (Stays Open)
    35 = Open Textbox (Stays Open)
    3B = Trainer battle
    3C = Access Lanette's PC (BOX System)
    5D = Call Save Menu which keeps looping.
    5E = Watering of Berry (used first, then special0x5E)
    5F = You fill your trainer's profile/interview
    60 = Shows what you put for trainer's Profile/interview
    67 = Strange Message with sound (could be Unown speech)
    6C = Trainer Tales (Link Feature)
    6D = Choose Tale
    75 = Secret Base Decoration Item Menu
    7C = Something to do with renaming
    7D = Something to do with renaming
    83 = Poké Slots In Use (Store Command)
    8A = Crashes
    8D = Displays the last message
    8E = Used with Setmaptile to make it work
    91 = setmaptile #206 at X8 YB
    94 = Something to do with Timed events
    98 = Cable Car Ride Cutscene
    9A = Male Clock
    9B = View Clock
    9C = Choose Starters From Birch's Bag
    9D = Wally Catching Ralts
    9E = Nickname's first Pokémon in Party
    9F = Choose a Pokémon in the party (For Nickname)
    A0 = ?
    A1 = Starts Berry Blender
    A2 = Slot game.
    AF = Gabby and TV's "In serach of Trainers"
    BC = Store a Pokémon For Day Care
    BD = Take back Pokémon From Day Care
    BE = Get Breeding Growth (store)
    BF = Get Price
    C0 = Something to do with Day Cay pay (store)
    C2 = Egg hatch (1st Pokémon in party)
    C4 = Battle results For The Coliseum
    C6 = Something to do with DayCare cost
    C8 = Move to the last sethealingplace/flightspot after some time (faint!!) (Fainted Event)
    D0 = Opens PokéBlock case
    D1 = Stores a random value to LASTRESULT (If the value matches mirage Island will show)
    D4 = Used Before Special 0xF9/FA
    D5 = Catch Pokémon tip, boxset 4 (use closeonkeypress)
    D6 = tile change (in the middle of screen?)(For PC)
    D7 = tile change (flower, in the middle of screen?)
    D9 = Sets some sort of tiles
    DA = Sets some sort of tiles
    DB = Choose Pokémon then Fadescreen
    DC = Opens the First Pokémon's Moves
    E0 = Move tutoring For 1st Pokémon in Party
    E3 = CheckBike (store command) 00 = nobike
    E4 = Set Cycling Road Results (time, collisions)
    E6 = First Pokémon Happy (StoreResult, 4 = Happy),
    EC = Verse a high level trainer, level 100/Random Battle?
    F1 = Restarts Game
    F5 = choose 3 Pokémon(Battle tower) F6 = ?
    F9 = Item Storage Mailbox Decoration
    FA = Item Storage - No Decoration
    FB = World Map
    FE = Used for In-Game Trades - Trades 1st trade Pokémon "Makit" to 1st Pokémon in Party
    103 = Berry Blender results
    106 = PC (menu opens and disappears real fast)
    107 = Hall of Fame, through PC (Will be corrupt if there's no data) (reads)
    108 = Hoenn Pokédex diploma
    10E = Boat sailing for a long time, like Fire Red's speed boat (+Return)
    10F = Restarts
    110 = Hall of Fame "Credits" (Saves data)
    111 = Elevator animation<
    112 = Displays Flutes
    113 = Freezes The Screen/Camera
    114 = Releases The Screen/Camera
    119 = Groudon's Orb followed by earthquake
    11B = Battel Tower Results
    12C = Player Goes to last warp/flightspot used
    12D = Makes special 0x9d work properly
    130 = Is PC Box Full (store command) (0 = full)
    131 = Earthquake for few seconds "Earthquake (stops)"
    132 = Show Floors & Which Floor you're on
    134 = CheckPokerus [0001 = Pokerus]
    136 = Weird Quake
    137 = Lava Battle/with Groudon
    138 = Land Battle/with legendary
    139 = Land Battle2/different song/battle with ledgendary - used with wildbattle
    13B = Small screen shake
    13D = Light/Flash
    13E = Player uses the warp last used (no sound)
    13F = falls in first warp of the first map
    140 = Pokémon Image (UnLZ 199/200)
    142 = Ecard battle Initiate (used in Levelscript at mossdeep, Oldman's house)
    143 = Battle ?(perhaps used for wildbattle)
    147 = Check Pokemon
    14C = Turns Off Background/Map music

    Emerald
    special 0x0 ' Heal Pokémon
    special 0x116' screen scrolling (control with 7F with move commands)
    special 0x117' stop screen scrolling (return to original position before using this)
    special 0x1F3' national dex

    For Movements it's almost like movements
    PKSV comes with a movement planner which makes everything much much easier
    syntax:
    applymovement 0x[person event number] @label

    Then add “#org @movement label”
    Next make your movement script and copy it to your clipboard now just make a new line and paste the data.
    [Miscellaneous commands]


    [Lesson 7:Money Commands]


    These are a few commands used to give,take,check for money,and show money
    Giveing Money
    Command: givemoney ZZ 0
    Where ZZ is the amount of money to give (must be less than one million)
    example:
    [...]
    givemoney 200 0 'Gives 200 pokedollars to the player
    [...]

    Takeing Money
    command: paymoney ZZ 0
    where ZZ is the amount of money to be taken from the player(must be less than or equal to the amount of money the player has)
    example:
    [...]
    paymoney 200 0 'Makes player loose 200 pokedollars
    [...]

    Checking money
    command: checkmoney ZZ 0
    where ZZ is the amount of money to be looked for, if the player has this much money, LASTRESULT is set to 1, otherwise it is 0
    example:
    [...]
    checkmoney 200 0 'Checks if the player has 200 pokedollars, sets LASTRESULT to 1 if he/she does
    compare LASTRESULT 0x1 'Compares LASTRESULT to containing 1
    if 0x1 jump @continue 'Jumps to #org @continue if LASTRESULT had one in it
    jump @notenough 'Jumps to the script saying that the player did not have enough money
    [...]

    Showing Money
    A little more complex than the other money commands
    Showing Money
    command: showmoney [ZZ] [YY] 0
    Where ZZ is the x coordinates and YY is the y coordinates
    example:
    [...]
    showmoney 10 10 0 'Displays money at 10,10 on the screen
    [...]
    However if you take money, or give it, the money that the player sees needs to be updated to avoid confusion
    command: updatemoney [ZZ] [YY] 0
    Where [zz] and [yy] are the same as the coordinates used in your show money

    Also, you will want to remove the money from the screen before your script ends.
    command: hidemoney [zz] [yy] 0
    Where [zz] and [yy] are the same as the coordinates used in your show money
    example:
    [...]
    showmoney 10 10 0
    paymoney 200 0
    updatemoney 10 10 0
    hidemoney
    [...]

    You really shouldn't use any of these commands without using them all, with the exception of updatemoney maybe...
    An example using them all
    [quote]
    #org @main
    '-----------------------------------
    lock
    faceplayer
    checkmoney 0x96 0x0 0x0
    compare LASTRESULT 0x1
    if == jump @canhave ' Equal To
    jump @canthave

    #org @canhave
    '-----------------------------------
    showmoney 0xA0A 0x0
    msgbox @hy ' Hey \v\h01, do you w...
    callstd MSG_YESNO ' Yes/No message
    compare LASTRESULT YES
    if == jump @want ' Equal To
    jump @notwant

    #org @want
    '-----------------------------------
    paymoney 0x96 0x0 0x0
    additem SUPERPOTION 1
    msgbox @ty ' Thank you for your b...
    callstd MSG_LOCK ' Built-in lock command
    hidemoney 0xA 0xA
    release
    end

    #org @canthave
    '-----------------------------------
    msgbox @he ' Hello \v\h01.
    callstd MSG_LOCK ' Built-in lock command
    release
    end

    #org @notwant
    '-----------------------------------
    msgbox @mb ' My business is alway...
    callstd MSG_LOCK ' Built-in lock command
    hidemoney 0xA 0xA
    release
    end


    #org @hy
    = Hey \v\h01, do you want a\nA super potion for 150 ?

    #org @ty
    = Thank you for your business.

    #org @he
    = Hello \v\h01.

    #org @mb
    = My business is always open\nto those who can afford it.
    [Money Commands]


    [Lesson 8: Weather]


    These are simple commands to change the weather in outdoors maps.
    SetWeather and doweather work together
    setweather 0x3 'Sets the weather to do to 3 for rain
    doweather 'Does the weather we set with setweather
    resetweather 'Undoes the effects of setweather and doweather
    You can find a list of weathers in a-map under the header tab
    This should be enough to get you started, I might post more sooner, but not until I get suggestions to add, or PKSV has more features needing explanations.

    Also, just so you know
    “#dynamic 0x740000” can be “#dyn 0x740000” also, the offset does NOT have to be 0x740000 it can be any offset you want.
    [Weather]


    [Lesson 9: Level Scripts]



    There are two types of level scripts....
    .....Type 1
    ........The kind that is under the events tab (aka trap script)
    .....Type 2
    ........The kind that is under the header tab (aka ...level scripts?)
    How to use type 1
    1) Create a script event in a-map events tab (the green s kind...)
    2) Assign a variable into the correct box
    3) Assign the value to be whatever that variable isn't (after the level script is used the variable is assigned this value...)
    4) Assign the "unkown" to 3
    5) Compile your script
    6) Assign the script offset to the proper box
    How to use type 2
    These are a little bit more challenging and i'll update again when i can explain it
    [Level Scripts]


    [Script Collection]



    Snes Script
    Description: Displays "[player] turned on the snes!" then plays battle music, followed by a "player has X lives left" where x is a number which is automatically decremented. Then when the player has no more lives left "Game over time to go"
    Spoiler

    #dynamic 0x740000

    #org @main
    lockall
    setvar 0x8010 0x5
    message @start
    callstd MSG_NORMAL
    fadesong 265
    :loop
    pause 0x50
    compare 0x8010 0x1
    if == jump @if1
    storevar 0x1 0x8010
    message @loopmsg
    callstd MSG_NORMAL
    :skip
    subtractvar 0x8010 0x1
    compare 0x8010 0x0
    if == jump:-loop
    jump :loop
    :-loop

    message @done
    callstd MSG_NORMAL
    fadedefault
    release
    end

    #org @if1
    message @crud
    callstd MSG_NORMAL
    jump :skip

    #org @start
    = \v\h01 turned on the SNES

    #org @loopmsg
    = \v\h03 lives left

    #org @crud
    = Oh crud, I only have one live left!

    #org @done
    = \v\h01 got a gameover\ntime to quit!

    I wanna submit a script!
    Go ahead just please include the following information...
    Wether or not you want credits
    Script title
    Script description
    Then of course...the script
    By: Mervyn
    Credits: Not until further notice
    Title: ???
    Description: This only happens once,player looks left and up pops an excite icon, OW person w/ event id of 4 looks down and right,then player talks about not being late to get their first pokemon,then the other guy will run down 3 steps and dissapear. Please note that if you don't have your map set up as mryvn's then the script will look a little weird. So i reccomend that you also set the person id no to 8C3 (which makes them dissapear forever,i'll explain more on the next update) as well as adjust the movement and sprite placement to fit to your map (eg add more downs/change direction the other person runs)
    Spoiler
    #dynamic 0x74000
    #org @start
    lockall
    checkflag 0x8C3
    if true jump :end
    applymovement PLAYER @a1
    applymovement 0x4 @a2' Where 0x4 is event # of whoever is talking to you
    message @a3'
    callstd MSG_NORMAL
    applymovement 0x4 @a4' Where 0x4 is event # of whoever is talking to you
    pauseevent 0x0
    disappear 0x4' Where 0x4 is event # of whoever is talking to you
    setflag 0x8C3
    :end
    releaseall
    end

    #org @a3
    = \v\h06: Awesome weather right?\nLet's hurry up!\p Don't want to be late\n for out first Pokemon!

    #org @a1
    M look_left say_! end

    #org @a2
    M look_down look_right end

    #org @a4
    M run_down run_down run_down end

    An evee script
    description...^_^; gives an eevee....
    Spoiler
    #dyn 0x740000
    #org @start
    lock
    checkflag 0xABC
    if 0x1 jump @geteevee
    faceplayer
    msgbox @eevee1
    callstd MSG_NORMAL
    release
    end

    #org @geteevee
    faceplayer
    checkflag 0xXYZ
    if 0x1 jump @eevee2
    msgbox @eevee3
    callstd MSG_NORMAL
    countpokemon
    compare LASTRESULT 0x6
    if == jump @toomany
    addpokemon EEVEE 6 NONE 0x0 0x0 0x0
    setflag 0xXYZ
    storepokemon 0x0 EEVEE
    message obtain
    fanfare 0x101
    showmsg
    waitfanfare
    waitbutton
    faceplayer
    msgbox @howseevee
    callstd MSG_NORMAL
    end

    #org @eevee2
    faceplayer
    msgbox @howseevee
    callstd MSG_NORMAL
    end

    #org @toomany
    msgbox @toomuch
    callstd MSG_NOCLOSE
    release
    end


    #org @eevee1
    =

    #org @howseevee
    =

    #org @eevee3
    =

    #org @toomany
    =
    [Script Collection]

    Real Article here
    Tutorial by Full Metal
    Read More >>