The PokéCommunity Forums  

Go Back   The PokéCommunity Forums > ROM Hacking > Research & Development
Sign Up Rules/FAQ Live Battle Blogs Mark Forums Read

Notices

Research & Development Got a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!
Research & Development programs in this forum are subject to moderator approval before they are displayed.

Reply
Click here to go to the first staff post in this thread.  
Thread Tools
  #101    
Old November 28th, 2009 (06:09 AM).
liuyanghejerry's Avatar
liuyanghejerry
Trainer
 
Join Date: Jan 2008
Location: China,Xi'an
Nature: Calm
Send a message via ICQ to liuyanghejerry Send a message via Windows Live Messenger to liuyanghejerry Send a message via Yahoo to liuyanghejerry
Quote:
Originally Posted by Deviation View Post

The text colours is in the scripts in Firered normally, and is editable by Script Editing, not in the OWs.
Of course I know that.And please test before you talk.

Code:
#dynamic 0x800000
 
#org @1
lock
faceplayer
message @2 0x2
release
end
 
#org @2
= SEE MY COLOR.
Complie it and give it to a gril OW and a boy OW,and you'll realize it .
__________________
Zel,thethethethe,LU-HO,Darthatron,HackMew,ZodiacDaGreat,Juan,score_under,JPAN,Tamah-chan,I really appreciate your kindness and your help!:D


I did something that really bad.But made all Chinese can hack Pokemon, too.If you guys hate me, I totally understand,but cannot do anything but force to keep everything.
If there must be someone to undertake all spit and curse, it must be me.
Reply With Quote
  #102    
Old November 28th, 2009 (05:03 PM).
Deokishisu's Avatar
Deokishisu
Mr. Magius
 
Join Date: Feb 2006
Location: If I'm online, it's a safe bet I'm at a computer.
Gender: Male
Nature: Relaxed
Quote:
Originally Posted by liuyanghejerry View Post
Of course I know that.And please test before you talk.

Code:
#dynamic 0x800000
 
#org @1
lock
faceplayer
message @2 0x2
release
end
 
#org @2
= SEE MY COLOR.
Complie it and give it to a gril OW and a boy OW,and you'll realize it .
You're right, there must be a gender byte stored somewhere to determine whether it's pink or blue font. But, if all else fails, you could just use the textcolor command. It's cumbersome, but it'll totally work.

And thanks for the sethealingplace help Amachi!
Reply With Quote
  #103    
Old December 8th, 2009 (08:22 PM). Edited December 8th, 2009 by RedYoshi.
RedYoshi's Avatar
RedYoshi
Wah! Yoshi!
 
Join Date: Feb 2008
Location: Yoshi's Island, DUH.
Age: 21
Gender: Male
Is there a way to just use the extra palettes with the overworlds that are already in the game? Without having to use the expanded OverWorld hack?

I changed the sprite palette via hex editing, as in the original palette was # 6, and I changed it to #22 in a hex-editor. The sprite looks fine in the overworld editor (it uses the changed palette), however in game it appears as having the original palette (#6)


Nvm, just read about the palette slot thing, I really need to double check these things....
Reply With Quote
  #104    
Old December 12th, 2009 (06:50 PM).
JPAN
pokemon rom researcher
 
Join Date: Dec 2008
Sorry for the late replies, everyone.
Quote:
Originally Posted by sonic1 View Post
The ice don't breaks when we step on it.
Even from the time I wrote my document about behaviour bytes that tile has given me a headache. Truth be told, that byte only works on that specific tile in that specific tileset. Never found out why. At the moment, the only fix I can give you is by placing on a step (green) script the following code:
Spoiler:
special 0x8f
setmaptile 0x8004 0x8005 0x(ice tile number) 0x0
special 0x8e
end

This will make the tile you are stepping on become the next tile, but you need some way to know what the next tile will be.
Quote:
Originally Posted by liuyanghejerry View Post
In the OW data ,there must be some bytes about OW's gender.You can see when talk to a gril OW,the fonts are red,but blue ones when a man .But I didn't see whatever about gender in that table, is it missed?
To be honest, I didn't even notice that color detail until I read your post. So I searched around, and found no difference between male and female OWs in the data. Most likely, there must be a separate table somewhere detailing that behaviour, or separate set of flags that are checked upon opening a script with that OW's number.
__________________
Here are the links for my work


Currently working on:
Battle Script Documentation
Another large project
Reply With Quote
  #105    
Old December 13th, 2009 (07:15 AM).
liuyanghejerry's Avatar
liuyanghejerry
Trainer
 
Join Date: Jan 2008
Location: China,Xi'an
Nature: Calm
Send a message via ICQ to liuyanghejerry Send a message via Windows Live Messenger to liuyanghejerry Send a message via Yahoo to liuyanghejerry
-v-Happy to see I made some progress about the data...

By the way,is there any possibilty that help me about this? :http://www.pokecommunity.com/showpos...ostcount=12768
Looks I have nobody else to ask for help...
__________________
Zel,thethethethe,LU-HO,Darthatron,HackMew,ZodiacDaGreat,Juan,score_under,JPAN,Tamah-chan,I really appreciate your kindness and your help!:D


I did something that really bad.But made all Chinese can hack Pokemon, too.If you guys hate me, I totally understand,but cannot do anything but force to keep everything.
If there must be someone to undertake all spit and curse, it must be me.
Reply With Quote
  #106    
Old December 13th, 2009 (09:25 PM).
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 23
Gender: Male
Nature: Modest
Would be great if you can look at this post and tell me if any of it is possible: http://www.pokecommunity.com/showpos...0&postcount=72
__________________
あなた は しきしゃ です
わたし は ばか です
Reply With Quote
  #107    
Old December 14th, 2009 (11:58 PM).
JPAN
pokemon rom researcher
 
Join Date: Dec 2008
Quote:
Originally Posted by liuyanghejerry View Post
By the way,is there any possibilty that help me about this? :http://www.pokecommunity.com/showpos...ostcount=12768
Looks I have nobody else to ask for help...
First of all, from what I understood, you placed the sprite directly under the first table. Just to make it clear, you need to first insert a pointer in the first table (at 1a2000), and that pointer must point to a table, where each entry is a OW sprite. So, imagine you want to insert the sprite at 0x1A1740. then, you first place at 1a2004 a pointer to another address, like 0x1a9000, and there you place the pointer 0x1a1740. Either way, I wouldn't recommend using those addresses, as all addresses where the old scripts used to be (16000 to 1b0000) may be used in future versions.
Also, in the end, the sprite wouldn't show properly. It appears I forgot to include a very important routine on the last patch. That problem will be solved by next release.
Quote:
Originally Posted by Darthatron View Post
I have 3 questions.

1. Is it possible to add a way to change the graphic of the old man special (of him throwing the pokeball), perhaps using load pointer?

2. Is it possible to add a way to have a script load every time any map is loaded?

3. Is it possible to add a way to have a script load every time the player takes a step?
The first (backsprite switching in general) is giving me a hard time thanks to the pointless reloading of palettes. I'm finishing the backsprite loader for the next release, but nothing using loadPointer or the like, just hardcoded in a table. Do you really need to switch the old man specifically or did you mean a trainer in general(like yourself)?

The second can be done sacrificing the fourth level script, forcing every map to load a specific script. I haven't really looked into it yet, but my guess is that changing the script loading routine, that searches if there is a level script to execute, to always check a new memory or ROM area where there is always a script to be used could be done.

The third is much harder. While I have found several routines that deal with the walking around, I have yet to find the one that calls all the separate others.
There are at least 4 routines where I found steps to work. One is the Daycare, other is the other daycare, the third is the safari zone and the last is the happiness counter. Though it can be done, I have to first find the master routine that makes you walk around.
__________________
Here are the links for my work


Currently working on:
Battle Script Documentation
Another large project
Reply With Quote
  #108    
Old December 15th, 2009 (12:15 AM).
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 23
Gender: Male
Nature: Modest
Quote:
Originally Posted by JPAN View Post
The first (backsprite switching in general) is giving me a hard time thanks to the pointless reloading of palettes. I'm finishing the backsprite loader for the next release, but nothing using loadPointer or the like, just hardcoded in a table. Do you really need to switch the old man specifically or did you mean a trainer in general(like yourself)?

The second can be done sacrificing the fourth level script, forcing every map to load a specific script. I haven't really looked into it yet, but my guess is that changing the script loading routine, that searches if there is a level script to execute, to always check a new memory or ROM area where there is always a script to be used could be done.

The third is much harder. While I have found several routines that deal with the walking around, I have yet to find the one that calls all the separate others.
There are at least 4 routines where I found steps to work. One is the Daycare, other is the other daycare, the third is the safari zone and the last is the happiness counter. Though it can be done, I have to first find the master routine that makes you walk around.
Well... Switching the old man in order to create something similar to Yellow version so I can have an event of Oak catching Pikachu and then the original event where it's meant to be. However, changing the players battle sprite would also be pretty helpful.

I really have nothing to ad about the other two points, but your idea seems to be logical. I hope you can get them both done.
__________________
あなた は しきしゃ です
わたし は ばか です
Reply With Quote
  #109    
Old December 15th, 2009 (02:05 AM).
onyx79's Avatar
onyx79
Red Dead Revolver
 
Join Date: Jan 2009
Location: Orange Islands (=
Gender: Male
Nature: Modest
what I've downloaded your engine and it has deleted all of my person OW's also how can I use all of the features in your hacked engine?,how to use the safari zone swarms and etc.
__________________
my room base: http://www.pokecommunity.com/showpos...5&postcount=64
Reply With Quote
  #110    
Old December 15th, 2009 (04:32 AM).
Quickster's Avatar
Quickster
Dream or Drop?
 
Join Date: Oct 2007
Gender: Male
Nature: Quiet
Quote:
Originally Posted by Darthatron View Post
Well... Switching the old man in order to create something similar to Yellow version so I can have an event of Oak catching Pikachu and then the original event where it's meant to be. However, changing the players battle sprite would also be pretty helpful.
Well, you can always replace the old man in tile molester,for example, see my signature.
If thats sorta what youre aiming for.
__________________
I laugh looking at this.

But sometimes I want to come back to it...

Reply With Quote
  #111    
Old December 15th, 2009 (04:49 AM).
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 23
Gender: Male
Nature: Modest
Quote:
Originally Posted by Quickster View Post
Well, you can always replace the old man in tile molester,for example, see my signature.
If thats sorta what youre aiming for.
The whole point was so I could switch the sprite in game so I could use the old man and another one. Thanks for the suggestion, but read more carefully next time.
__________________
あなた は しきしゃ です
わたし は ばか です
Reply With Quote
  #112    
Old December 15th, 2009 (06:43 AM).
Tropical Sunlight's Avatar
Tropical Sunlight
The Faltine
 
Join Date: Mar 2008
Location: Slovenia
Age: 18
Gender: Male
Send a message via Windows Live Messenger to Tropical Sunlight
Quote:
Originally Posted by onyx79 View Post
what I've downloaded your engine and it has deleted all of my person OW's also how can I use all of the features in your hacked engine?,how to use the safari zone swarms and etc.
The patch was supposed to delete every single script in the game.

Read the MS Word file that was included.
__________________
Reply With Quote
  #113    
Old December 16th, 2009 (06:34 AM).
liuyanghejerry's Avatar
liuyanghejerry
Trainer
 
Join Date: Jan 2008
Location: China,Xi'an
Nature: Calm
Send a message via ICQ to liuyanghejerry Send a message via Windows Live Messenger to liuyanghejerry Send a message via Yahoo to liuyanghejerry
Quote:
Originally Posted by JPAN View Post
First of all, from what I understood, you placed the sprite directly under the first table. Just to make it clear, you need to first insert a pointer in the first table (at 1a2000), and that pointer must point to a table, where each entry is a OW sprite. So, imagine you want to insert the sprite at 0x1A1740. then, you first place at 1a2004 a pointer to another address, like 0x1a9000, and there you place the pointer 0x1a1740. Either way, I wouldn't recommend using those addresses, as all addresses where the old scripts used to be (16000 to 1b0000) may be used in future versions.
Also, in the end, the sprite wouldn't show properly. It appears I forgot to include a very important routine on the last patch. That problem will be solved by next release.
O.O...Next release....Seems I have to make my hack beta at that time...

By the way,is it possible that make a trainer run a script other than trainerbattle when he sees you?
__________________
Zel,thethethethe,LU-HO,Darthatron,HackMew,ZodiacDaGreat,Juan,score_under,JPAN,Tamah-chan,I really appreciate your kindness and your help!:D


I did something that really bad.But made all Chinese can hack Pokemon, too.If you guys hate me, I totally understand,but cannot do anything but force to keep everything.
If there must be someone to undertake all spit and curse, it must be me.
Reply With Quote
  #114    
Old December 17th, 2009 (01:50 AM).
Haku.'s Avatar
Haku.
(FLAME)...H....A...K..U
 
Join Date: Jan 2008
Location: Singapore :D
Gender: Male
Nature: Quiet
Send a message via Windows Live Messenger to Haku.
does anyone know how do i make a new pallete pointer for an overworld?
I read the read me but still i don't understand a thing.
How do i repoint a pallete?
__________________

Reply With Quote
  #115    
Old December 22nd, 2009 (01:35 PM).
Younegai
Beginning Trainer
 
Join Date: Dec 2009
So wait...

Is this the ASM tool? I heard someone talking about how ASM can edit the intro movie sequence. Or are these tools just extensions of ASM?
Reply With Quote
  #116    
Old December 23rd, 2009 (07:51 PM).
JPAN
pokemon rom researcher
 
Join Date: Dec 2008
Posting here to tell you all that the new version is now available on the first post. Lot's of changes were made there, but some new features are really worth talking about, and are too big for that post space.

First, Dynamic OverWorlds. This will allow you, by using variables 0x4080 to 0x408f to create decoration-like Overworlds, that can be changed by scripts at any time without needing to create tons of them at A-Map and placing them hidden at the top of the map. All you need to do is place their OW number as one between 0 to f and then place in the right unknown byte below the picture number (table number) 0xFF, and then just change the respective variable (0x4080 for OW number 0, 0x4081 for OW number 2, etc.) the number of the table and sprite number you wish to use.
What can this be used for? For instance, simple randomized trainer rooms or Secret Bases.

Second we now have full trainer customization. Everything from the trainer card picture to the backsprite and OW can be selected in runtime by pushing the right buttons (or, in this case, variables). Details on how it works are found in the manual.

Next, we have Walking scripts. This new function allows you to activate a script simply by walking around. These scripts are very versatile, and are activated whenever there isn't a step-on script or warp in the way, as well as a EGG hatching or VS seeker running out. This Script allows most people to implement several random events that could before only be activated when a player crossed a map line, or by using up the stored steps of the VS seeker specials.
Examples of what you can do with this are presented in the manual, as well as details of its functioning. But combined with the getTileBehaviour special, also added in this entry, you can easily mimic and replace behaviour bytes and create your own step-on scripts based on past events (this was the closest I got to recover the ice behaviour lost in the past entry. I will fix it, but for now this is a good replacement).
Downsides to this code is that some low-level walking events, such as Random pokemon battles, are disabled. But a fix is given in the manual, using another of the specials developed in this delivery, the Random Wild Battle Generators the game uses, in conveinent Special format.

I hope you enjoy this delivery, and that it may help you with your hacks. Any bug or questions, post them here or PM me.
__________________
Here are the links for my work


Currently working on:
Battle Script Documentation
Another large project
Reply With Quote
  #117    
Old December 23rd, 2009 (08:13 PM).
RedYoshi's Avatar
RedYoshi
Wah! Yoshi!
 
Join Date: Feb 2008
Location: Yoshi's Island, DUH.
Age: 21
Gender: Male
Quote:
Originally Posted by JPAN View Post
...Second we now have full trainer customization. Everything from the trainer card picture to the backsprite and OW can be selected in runtime by pushing the right buttons (or, in this case, variables). Details on how it works are found in the manual.
Wow! The trainer customization thing sounds awesome! This adds lots of possibilities! Is it safe to patch over a Rom that has been patched with the previous version? I kinda don't feel like re-doing everything in my hack again...
Reply With Quote
  #118    
Old December 23rd, 2009 (08:22 PM).
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 23
Gender: Male
Nature: Modest
You update is very good, but I was hoping for something do change the map tiles based on variables, much like your "Get Tile Number" function, but rather setting it.
__________________
あなた は しきしゃ です
わたし は ばか です
Reply With Quote
  #119    
Old December 23rd, 2009 (08:49 PM).
JPAN
pokemon rom researcher
 
Join Date: Dec 2008
Quote:
Originally Posted by Darthatron View Post
You update is very good, but I was hoping for something do change the map tiles based on variables, much like your "Get Tile Number" function, but rather setting it.
If you are talking about setting the tiles based on a position stored in a variable, it already does that, using the Setmaptile command.
In SetMapTile, the three first arguments are able to be variables. for instance, you may use this command:
Code:
Special 0x8f
Setmaptile 0x8004 0x8005 0x(your var here) 0xC
special 0x8e
To change the tile you are stepping on to the value contained inside your variable. This is already provided with the game code.
If you are talking about changing behaviour and background values, the new specials and codes I introduced allow you to simulate that to an extent.
__________________
Here are the links for my work


Currently working on:
Battle Script Documentation
Another large project
Reply With Quote
  #120    
Old December 23rd, 2009 (09:08 PM). Edited December 24th, 2009 by Darthatron.
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 23
Gender: Male
Nature: Modest
Quote:
Originally Posted by JPAN View Post
If you are talking about setting the tiles based on a position stored in a variable, it already does that, using the Setmaptile command.
In SetMapTile, the three first arguments are able to be variables. for instance, you may use this command:
Code:
Special 0x8f
Setmaptile 0x8004 0x8005 0x(your var here) 0xC
special 0x8e
To change the tile you are stepping on to the value contained inside your variable. This is already provided with the game code.
If you are talking about changing behaviour and background values, the new specials and codes I introduced allow you to simulate that to an extent.
I had no idea they could be variables (apparently neither did a few other people I asked last night), thanks, that makes me life much easier. Keep up the good work. And thanks again.

EDIT: Is it just me or does the variable 0x800C no longer contain which way the player is facing?
__________________
あなた は しきしゃ です
わたし は ばか です
Reply With Quote
  #121    
Old December 24th, 2009 (08:20 AM).
diegoisawesome's Avatar
diegoisawesome
Please understand
Community Supporter
 
Join Date: Dec 2007
Location: Goldenrod City, Johto
Age: 18
Gender: Male
Nature: Quirky
JPAN, I want to make a door that moves the camera up when walking into it, much like the effects of walking into the Sprout Tower and others in HeartGold/SoulSilver. How could this be accomplished using your tile attribute hack, as I do not believe it explains how to make a walking-into script.
__________________


My other resources:
My Website
diegoisawesome's MEGA-HUGE XSE Scripting Tutorial
diegoisawesome's Miscellaneous Finds
The Ruins of Alph Puzzles
Reply With Quote
  #122    
Old December 24th, 2009 (12:29 PM).
0m3GA ARS3NAL's Avatar
0m3GA ARS3NAL
Im comin' home...
Community Supporter Tier 1
 
Join Date: Jan 2008
Location: Superjail Penitentiary
Age: 22
Gender: Male
Nature: Gentle
Quote:
Originally Posted by diegoisawesome View Post
JPAN, I want to make a door that moves the camera up when walking into it, much like the effects of walking into the Sprout Tower and others in HeartGold/SoulSilver. How could this be accomplished using your tile attribute hack, as I do not believe it explains how to make a walking-into script.
Well, instead of using a regular warp event in A-Map, you could have an event that does everything for you.
There is a scripting command that opens and closes doors, with it, you could;
Have the door open
Have the player walk into the door (And disappear)
Have the door close
Have the screen continue to move up
And Finally, warp!
__________________
>Boot Jailbot
>Pass *****
.
.
Jailbot OS Ver 1.1.2
Greetings Warden
of Superjail Penitentiary
Awaiting user input...

>Display User_Info
╠══User Info══╣
Username:
0m3GA ARS3NAL
Age: 18
Sex: Male ♂
Race: Caucasian
Quote:
"What is this
I don't even..."

M/O: Often acts out to get attention, but recently has changed that. Has been studying up on hacking information and hopes to participate in more advanced hacking discussion.
╠══End of File══╣
Awaiting user input...

>
Reply With Quote
  #123    
Old December 24th, 2009 (01:06 PM).
diegoisawesome's Avatar
diegoisawesome
Please understand
Community Supporter
 
Join Date: Dec 2007
Location: Goldenrod City, Johto
Age: 18
Gender: Male
Nature: Quirky
Quote:
Originally Posted by 0m3GA ARS3NAL View Post
Well, instead of using a regular warp event in A-Map, you could have an event that does everything for you.
There is a scripting command that opens and closes doors, with it, you could;
Have the door open
Have the player walk into the door (And disappear)
Have the door close
Have the screen continue to move up
And Finally, warp!
Yes, I already know how to do that, but I want to make it look nice. I think the best way is to make it a walk-into event.
__________________


My other resources:
My Website
diegoisawesome's MEGA-HUGE XSE Scripting Tutorial
diegoisawesome's Miscellaneous Finds
The Ruins of Alph Puzzles
Reply With Quote
  #124    
Old December 24th, 2009 (01:29 PM).
0m3GA ARS3NAL's Avatar
0m3GA ARS3NAL
Im comin' home...
Community Supporter Tier 1
 
Join Date: Jan 2008
Location: Superjail Penitentiary
Age: 22
Gender: Male
Nature: Gentle
Quote:
Originally Posted by diegoisawesome View Post
Yes, I already know how to do that, but I want to make it look nice. I think the best way is to make it a walk-into event.
Whatever floats your boat I suppose.
__________________
>Boot Jailbot
>Pass *****
.
.
Jailbot OS Ver 1.1.2
Greetings Warden
of Superjail Penitentiary
Awaiting user input...

>Display User_Info
╠══User Info══╣
Username:
0m3GA ARS3NAL
Age: 18
Sex: Male ♂
Race: Caucasian
Quote:
"What is this
I don't even..."

M/O: Often acts out to get attention, but recently has changed that. Has been studying up on hacking information and hopes to participate in more advanced hacking discussion.
╠══End of File══╣
Awaiting user input...

>
Reply With Quote
  #125    
Old December 24th, 2009 (01:57 PM). Edited December 24th, 2009 by mdb31.
mdb31
Beginning Trainer
 
Join Date: Dec 2009
Gender: Male
Nature: Modest
Hi I know this is probably a really stupid question but I am completely confused. How exactly do you use this hacked rom? Do you load it instead of the original fire Red? I keep reading how you are supposed to "patch" the original ROM but I have no idea how to do this or what that means. If someone would be kind enough to briefly explain to me what I need to do it would be greatly appreciated.

Sorry for being a noob,

Mdb31

Edit: Nevermind I figured it out. For anyone who had a similar question, you have to download a program called ips.exe (google it) to patch ROMS.
Reply With Quote
Reply
Quick Reply

Sponsored Links
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Minimum Characters Per Post: 25



All times are UTC -8. The time now is 01:03 AM.


Style by Nymphadora, artwork by Sa-Dui.
Like our Facebook Page Follow us on Twitter © 2002 - 2014 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2014 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.