• 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?".
  • Forum moderator applications are now open! Click here for details.
  • 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.

The secret of the Move Camera Script (and extras)

Status
Not open for further replies.

cooley

///Keepin' it simple
1,148
Posts
17
Years
Before I begin, I'd like to give you some advice. DON'T USE POKESCRIPT!!!!
This tutorial uses XSE, the better way of scripting


For those of you who don't know what a "Move Camera Script" is, then look Here. That's an example.

MOVE CAMERA SCRIPT

START
Move Camera Scripts are scripts that move the screen, instead of people.


REQUIREMENTS
*Advance map 1.90 or higher
*Visual Boy Advacne
*Pokemon (FR/LG/R/S) ROM(s) *emerald not tested
*XSE(eXtreme Script Editor)
*Common Sense and Patience

EXAMPLE
They are made like this:

Code:
#org @start
lockall
special 0x113
applymovement 0x7F @move
waitmovement 0x0
special 0x114
releaseall
end

#org @move
#raw (these can be any movements as long as it comes back to the user)*
* = If the camera moves 3 up, then 2 left, then the camera MUST return to it's orignal postion.

EXPLANATION

The special 0x113 and special 0x114 are the most important part of the script. The script is relying on it, so, no special 0x113 or 0x114's, no Move Camera Scripts.

Lockall
This is almost like the command "lock" except it locks every person on the map.

Special 0x113
This makes the player be frozen. And any other people should be as well.

Applymovement 0x7F @move
Applymovement = Applymovement, but the 7F tells the game we are moving the Camera instead of people. The movements are the same as if you were moving people.

Special 0x114
This releases the 'Special 0x113' if this is not present, then you can't move at all

Releaseall
Kinda like 'release' except it releases all people on the map

EXAMPLE OF SCRIPT(decompiled)
Code:
'-----------------------
#org 0x17070B
special 0x113
applymovement MOVE_CAMERA 0x81707BE
waitmovement 0x0
pause 0x23
sound 0x15
checksound
setvar 0x8004 0x0
special 0x1B5
pause 0xA
call 0x81707B6
call 0x81707B6
call 0x81707B6
call 0x81707B6
call 0x81707B6
call 0x81707B6
call 0x81707B6
setvar 0x8004 0x1
special 0x1B5
sound 0x27
special 0x1B7
checksound
call 0x81707B6
call 0x81707B6
call 0x81707B6
call 0x81707B6
call 0x81707B6
setdooropened 0x3 0x3
doorchange
fadein 0x0
showsprite 0x1
clearflag 0x33
pause 0x32
fanfare 0x101
applymovement 0x1 0x8170888
waitmovement 0x0
waitfanfare
applymovement MOVE_CAMERA 0x81707C3
waitmovement 0x0
sound 0x5B
setdoorclosed 0x3 0x3
doorchange
applymovement 0x1 0x8170881
waitmovement 0x0
special 0x114
releaseall
end

'-----------------------
#org 0x1707B6
sound 0x17
checksound
pause 0x14
return


'-----------
' Movements
'-----------
#org 0x1707BE
#raw 11 'Step Up (Normal)
#raw 11 'Step Up (Normal)
#raw 13 'Step Right (Normal)
#raw 13 'Step Right (Normal)
#raw FE 'End of Movements

#org 0x170888
#raw 10 'Step Down (Normal)
#raw FE 'End of Movements

#org 0x1707C3
#raw 1C 'Delay5
#raw 1C 'Delay5
#raw 10 'Step Down (Normal)
#raw 10 'Step Down (Normal)
#raw 12 'Step Left (Normal)
#raw 12 'Step Left (Normal)
#raw FE 'End of Movements

#org 0x170881
#raw 13 'Step Right (Normal)
#raw 13 'Step Right (Normal)
#raw 13 'Step Right (Normal)
#raw 13 'Step Right (Normal)
#raw 10 'Step Down (Normal)
#raw 10 'Step Down (Normal)
#raw FE 'End of Movements
CREDITS
-HackMew - (Andrea) - For correcting my mistake, and helping me with this Script.
makunouchi - For showing me the script, through video
GameFreak - For using the script in-game for me to catch on.

REFERENCES
Code:
Offset(s) of different examples of "Move Camera Scripts":
RUBY(U)...........................................0x160BBC, 0x160BB0
FIRERED(U)....................................0x17070B, 0x16726E, 0x165012
HELP?

PM me
Visitor Message
Email me/MSN
Post here, xD

Any further help or if this needs to be explained better, then Post here. Good day!


*********************************
EXTRAS
*********************************

Level Scripts

Requirements
Advance Map 1.90 or higher
A Pokémon Rom of your choice(works on all ROMs, but offset may differ)
eXtreme Script Editor(XSE)
An Emulator

Example
The script I used for this example:

Code:
#dynamic 0x800000

#org @start
msgbox @complete
callstd 0x6
setvar 0x4033 0x1
release
end

#org @complete
= You see?\nThe level script worked!
Explanation - How to make one

First off, make your script. But don't compile it yet, make sure it has a "setvar" in the script, like mine. You can use 0x4033, but you will eventually need to use different ones. And you can also use 0x1 but your free to use 0x2, 0x3, as long as you subtract one from it. So if I use 0x1, I would put 0000 into the Value box. You might not know what it means, so I'll tell you how to make one.

Now, open your ROM in Advance map, and goto the map of choice, where you want the level scirpt to appear². Once the map is loaded, you should go to the header tab, ans scroll down to "Map script" area. It should look like this, once you removed all of Nintedo's Level scripts(If any, then click "remove" until it is greyed out)
It should look like this:

2dbmo2p.jpg


Click on add, and then click on "script type". It should look like this:

efm39v.jpg


Click on the "02 Validates values, loads handler to 0x03000EB0".
Having done this, the "script offset 2" box should be "$000000" meaning, no script at all. So should the "flag" and "value" boxes. Now, compile your script, and insert the "setvar" you used, in the "flag box" and the value you should leave blank(unless you used a value other than 0x1) Altogether you should have this:

14o9501.jpg


You're almost done! Now click "save map scripts" and save the ROM(Ctrl+S)
If you've done what I've done, your settings should look like this:

vq1a8l.jpg


Now test it In-game. And bam, you should look like this, if you used my example:
wvbonb.jpg


What to do? I got a wierd message box!

This is common, in most level scripts. It's all because of Advance map too. It overwrites some of the bytes with FFFF or other things, when it's supposed to be 0.
This is what it'd look like:
2vrss37.jpg


To fix this, you go to the header tab, and press Ctrl+H to get professional header view. You should see an area called "Map Options". And within you should see "Map script offset"

rshsaq.jpg


Copy the map script offset, and open your ROM in XSE.
Once done, paste the offset in the "decompile box" and click on "level script"

205cqc6.jpg


Next, click on decompile

a5gsk9.jpg


That is your/my script.
Now to fix it.

Code:
'-----------------------
#org 0x71A23C
#raw 02
#raw pointer 0x871A242
#raw 00

'-----------------------
#org 0x71A242
#raw word 0x4033
#raw word 0x0
#raw pointer 0x880007D
#raw word 0x[B]FFFF[/B]               [B] 'that is the Jacked up level script byte, that A-map overwrited[/B]

'-----------------------
#org 0x80007D
msgbox 0x880008D '"You see?\nThe level script worked!"
callstd 0x6
setvar 0x4033 0x1
release
end


'---------
' Strings
'---------
#org 0x80008D
= You see?\nThe level script worked!

Replace the Bolded '0xFFFF' or whatever it is, with the value in the "value box" in advance map.


Code:
'-----------------------
#org 0x71A23C
#raw 02
#raw pointer 0x871A242
#raw 00

'-----------------------
#org 0x71A242
#raw word 0x4033
#raw word 0x0
#raw pointer 0x880007D
#raw word [B]0x0[/B]                       '[B]Replaced[/B]

'-----------------------
#org 0x80007D
msgbox 0x880008D '"You see?\nThe level script worked!"
callstd 0x6
setvar 0x4033 0x1
release
end


'---------
' Strings
'---------
#org 0x80008D
= You see?\nThe level script worked!
Now, Press Shift+Ctrl+C to compile the script back to the ROM.
2jepm3n.jpg


Test it, and it should work in-game now!, That was easy wasn't it?

Done!

Making a Level script, through XSE or HEX

XSE way

Open up XSE and Type:

Code:
#dynamic 0x700000

#org @start
#raw 02(type of level script
#raw pointer @nextpart
#raw 00 (filler?)

#org @nextpart
#raw 0x4033(the flag of your level script)
#raw 0x0(Unknown, reserach later)
#raw pointer @script (pointer to the actual script)
#raw 00 (filler?)

#org @script
msgbox @message
callstd 0x6
setvar 0x4033 0x1
release
end

#org @message
= You see?\nThe level script worked!
That should explain it.
All you have to do now, is go into Advance map, and goto the header tab, press Ctrl + H, and paste the offset of the script over the "Map script offset box". It should work now.

If you want to do it in hex, then do it that way, except in hex type...everything in HEX, duh?

Example:
Code:
0x700000 =
02 06 00 70 08 00

0x700006 =
33 04 00 0E 00 07 08 00

0x70000E =
The script in hex. Got it?
Done.

The different types of level scripts

There are 15 types of level scripts total. Most of them are unknown, only 7 are known. And here's the list;
Code:
00 - No script at all
01 - setmaptile script
02 - Regular level script, most used
03 - On entering map, not on menu close
04 - No name for it, but it's useful
05 - On entering map, on menu close
07 - Same as 05


I just realized that, the "Level scripts" don't really need explanations. :P
 
Last edited:
5,814
Posts
16
Years
  • Age 30
  • Seen May 19, 2021
For the #raw part, would u put the movement offsets from pokescript, the ones that move the player or other people?
(1st post! ^^)
 
Last edited:
248
Posts
15
Years
  • Seen Nov 22, 2014
does special 0x113 prevent applymovement commands if the script continues? or does it prevent the player moving with the camera? I don't really understand the difference between lockall and special 0x113..

also, is it possible for the camera to stay put and away from the center, then the player moves back into the center of the camera?
 

Luck

¯\_(ツ)_/¯
6,779
Posts
16
Years
  • Seen May 20, 2023
Its a great and easy tutorial, but its in XSE, where as i use pokescript(but will change soon).
I have one question though,is the main difference in this script from a pokescript version the @'s in the script or are some other stuff like the commands different?
And do i only use the stop camera if I want the camera to stop or do i have to to make it work successfully?
 

Binary

え?
3,977
Posts
16
Years
  • Age 29
  • Seen Apr 7, 2014
Oh, it sounds like a great tutorial..very useful for some vital events in hacks...
I'll have a go at this....8D
 

cooley

///Keepin' it simple
1,148
Posts
17
Years
Its a great and easy tutorial, but its in XSE, where as i use pokescript(but will change soon).
I have one question though,is the main difference in this script from a pokescript version the @'s in the script or are some other stuff like the commands different?
And do i only use the stop camera if I want the camera to stop or do i have to to make it work successfully?
Well DON'T USE POKESCRIPT!!!!
It has too many bugs and errors in coding. Irish Witch made pokescript, when she didn't even understand the whole scripting thing.

Please, use XSE. It's a new scripting experience!

And in pokescript, you have to use a bunch of #Raw's because not all the commands are there. XSE corrects scripting mistakes, doesn't waste space, and has extras!
Pokescript is horrible. The main difference isn't the "@" either. You should take a look for yourself.

does special 0x113 prevent applymovement commands if the script continues? or does it prevent the player moving with the camera? I don't really understand the difference between lockall and special 0x113..
also, is it possible for the camera to stay put and away from the center, then the player moves back into the center of the camera?
No, it plays it's part in the applymovement, but without it, it won't work.
Lockall = locks ALL movement on the map. But you can still use Applymovement to move the people.
Special 0x113 = Locks the players movement, but you can still move the player using applymovement 0xFF. Someone correct me if I'm wrong on this.

Last question. Yes that is possible.
Code:
#org @start
special 0x113
applymovement 0x7F @move
waitmovement 0x0                 'This waits till the movement of the camera is finished
applymovement 0xFF @playermove         'This moves the player to the desired location
waitmovement 0x0
special 0x114
release
end

is this pokescript or XSE? because it wont work in XSE
This WILL work in XSE, You just need you're own pointers if you are trying to compile the decompiled script
Oh, it sounds like a great tutorial..very useful for some vital events in hacks...
I'll have a go at this....8D
Thanks!
 

AmineX

Music Expert
152
Posts
16
Years
what's wrong
specials: 116 and 117 for emerald

#dynamic 0xECFD50

#org @start
lockall
special 0x116
applymovement 0x7f @walkingto
waitmovement 0x0
special 0x117
releaseall
end

#org @walkingto
#raw 0x09
#raw 0x09
#raw 0x09
#raw 0x0B
#raw 0x0B
#raw 0x0A
#raw 0x0A
#raw 0x08
#raw 0x08
#raw 0x08
#raw 0x03
#raw 0xFE
 
248
Posts
15
Years
  • Seen Nov 22, 2014
what's wrong
specials: 116 and 117 for emerald

#dynamic 0xECFD50

#org @start
lockall
special 0x116
applymovement 0x7f @walkingto
waitmovement 0x0
special 0x117
releaseall
end

#org @walkingto
#raw 0x09
#raw 0x09
#raw 0x09
#raw 0x0B
#raw 0x0B
#raw 0x0A
#raw 0x0A
#raw 0x08
#raw 0x08
#raw 0x08
#raw 0x03
#raw 0xFE

its special 0x113, special 0x114, isn't it?
 

Megiddo-san

Barium - Summer '12 Return?
1,308
Posts
16
Years
Okay, I made a level script and the message shows up, but then it freezes. Forgive me for using pokescript.

#org $begin
message $level
boxset 6
setvar 0x4000 0x1
release
end

#org $level
$level 1 = This is a level script.
 

cooley

///Keepin' it simple
1,148
Posts
17
Years
Okay, I made a level script and the message shows up, but then it freezes. Forgive me for using pokescript.

#org $begin
message $level
boxset 6
setvar 0x4000 0x1
release
end

#org $level
$level 1 = This is a level script.

1.Did you put the 4000 into the flag box?
2.Did you leave the Value Box Blank?
3.You should try a different value, try 0x2 instead of 0x1. (then put 1 into the Value box)
 

Megiddo-san

Barium - Summer '12 Return?
1,308
Posts
16
Years
1. Yes
2. Yes
3. Okay, I will try that. I hope it works.

Edit: Worse result. 0x2 value 0001 made garble come up along with a box saying coins.
 
Last edited:

cooley

///Keepin' it simple
1,148
Posts
17
Years
Lol.
Try decompiling the script using XSE and click on the "level script" button, then post here.
Oh, wait. You don't use XSE, sorry can't help you then.
 

Megiddo-san

Barium - Summer '12 Return?
1,308
Posts
16
Years
I tried making an xse version script,decompiling it, and clicking level script, but it still didn't work. Do you think it might have to do with the fact I put in a pokemon center?
 
Status
Not open for further replies.
Back
Top