• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Basic PKSV tutorials

Status
Not open for further replies.

score_under

Inactive; Former ROM hack tool author, ❤️
526
Posts
18
Years
So, I think Irish Witch should not have all the attention :D

PROLOGUE:

To install PKSV,
  • Click the PKSV link in my signature
  • Download the latest version from the site
  • Extract it to a new folder.
  • Once it's in the correct folder, double-click AssociateShell.bat (if you don't have that file, get the latest version from my sig)
Something you might want to know: PKSV is case-insensetive. In other words, you can define a variable called "HeLlOwOrLd" and reference it as "heLLowORLd" if you wanted to.

How to compile
Save the script as a .PKS file. (i.e. "ThisIsAScript.pks")
Right-click the file and press "Compile".

Section 1 -- Basic Talking and Items

This section covers the talking and giving of items.
The first script shall be a talking script.

Open up notepad.
Save the empty file as "TalkingScript.pks" in the PKSV folder.
(This saves us time later)
Now, time to write the script.
First, we need to begin the script.
But at which offset? Let PKSV decide:
Code:
#define start-of-script FREESPACE10
#org start-of-script
As you can see, we (you and I, if you are following this tutorial) defined the variable "start-of-script" as a new section of free space, 0x10 bytes long (or 16 bytes in decimal).
This may seem complicated for some, but it is easy to get used to.
Now, we shall write a message.
Add this on:
Code:
#define hello FREESPACE40 '64 bytes of free space.
lock
faceplayer
msgbox hello
callstd msg_normal
release
end
Right. So we created even more free space, 64 bytes, and called the MsgBox function on it. Then we used callstd to show the message. Msg_normal is the type of message.
But where's the text?
Code:
#org hello 'remember we defined that?
= Hello, I'm the result of your amazing\nscripting skill.
This will show the message:
Hello, I'm the result of your amazing
scripting skill.
Here, the line has split. "\n" is actually converted to a control code which tells Pokemon to change it into a new line.
Likewise, "\p" or "\l" signals a new paragraph.
Now, we make him give us some free stuff!
Red=updated, black=added

#define start-of-script FREESPACE20
#org start-of-script
#define hello FREESPACE40 '64 bytes of free space.
lock
faceplayer
msgbox hello
callstd msg_normal
checkflag 0x200
#define already-done FREESPACE10
#define notdonemsg FREESPACE20
if 0x1 jump already-done
msgbox notdonemsg
callstd msg_normal
copyvarifnotzero 0x8000 0x2 'Copy the value for "ultra ball" into 0x8000
copyvarifnotzero 0x8001 0x5 'Five of them, please!
callstd MSG_OBTAIN 'You obtained the ultra ball!
closemsg 'close this message
setflag 0x200

release
end

#org already-done
release
end

#org notdonemsg
= Hi, I have some items here, but I'm not\na trainer so I can't use them.


#org hello 'remember we defined that?
= Hello, I'm the result of your amazing\nscripting skill.
Now, to see your code in action, right-click the .pks file and press "Compile".
Then, look in the log to see what the address was #defined as,
and finally, edit someone in advancemap to point to that address.
Run the rom, and talk to that person!
 
Last edited:

score_under

Inactive; Former ROM hack tool author, ❤️
526
Posts
18
Years
Yes, Irish Witch, this is WAR!

If you don't know which offsets the freespace command gets, check the log file
(eg:
Code:
#DEFINE
   -> start-of-script
FS -> 0x86B0B00
)
Section 2 -- I am a healer!

This is a very simple tutorial for a very simple command: healing.
Now, we start our script:
Code:
#org 0x86B1000 'Some space, usually free. Choose another offset if you want
#define warning freespace40
#define bye-bye freespace40
lock
faceplayer
message warning
showmsg
waitbutton
fadescreen 1
special 0x0 'yes, special OXOs
fadescreen 0
closemsg
message bye-bye
showmsg
waitbutton
closemsg
release
end

#org warning
= Hey, those trainers up there are tough.\nYou might need a little help.
#org bye-bye
= Ok, I healed your POKéMON!\nGo get 'em!
If you put a new line at the end of the script, the message box warning you of the EOF (end-of-file) does not appear.
Now, to explain the scripts:
Code:
#define warning freespace40
#define bye-bye freespace40
lock
faceplayer
message warning
This defines 2 places of free-space we can use.
Then, it locks the sprite and causes it to face the player.
Next it loads the free space named "warning" to the buffer for text.
Code:
showmsg
waitbutton
fadescreen 1
special 0x0 'yes, special OXOs
fadescreen 0
It shows the prepared message, and waits for the player to press any button. Then, it fades the screen to black, heals the player's pokémon, and fades back to the action.
Code:
closemsg
message bye-bye
showmsg
waitbutton
closemsg
release
end
Prepares the next message, shows it and waits for a button, etc, then releases the sprite and ends the script.


Remember to get the SVN copy for the latest bugfixes, features and commands!
 
6,355
Posts
18
Years
  • Seen Apr 16, 2020
You have just revived the thread. It hasn't had a post for over a month.
 
Status
Not open for further replies.
Back
Top