Rayman Designer hacking: Difference between revisions

mNo edit summary
m Fixed links to redirects
 
(8 intermediate revisions by 3 users not shown)
Line 2: Line 2:


==Graphics==
==Graphics==
=== Tiles ===
=== Tiles ===
In every world-folder (for example "[[The Dream Forest|jungle]]" or "[[Band Land|music]]") of the game, there is a .PCX graphic file. It contains all the graphic tiles which are used by the Mapper and the levels created from it. Tiles can be changed and added, but the following should not be changed:
In every world-folder (for example "[[The Dream Forest|jungle]]" or "[[Band Land|music]]") of the game, there is a .PCX graphic file. It contains all the graphic tiles which are used by the Mapper and the levels created from it. Tiles can be changed and added, but the following should not be changed:
Line 21: Line 20:


==[[Event (Rayman Designer)|Events]]==
==[[Event (Rayman Designer)|Events]]==
=== Editing events ===
=== Editing events ===
In every world-folder of the game, there is a file called EVE.MLT. It contains the manifest of the events of the current world and can be modified using a text editor. The manifest is written in an in-house engine command format. The events are structured in this way:
In every world-folder of the game, there is a file called EVE.MLT. It contains the manifest of the events of the current world and can be modified using a text editor. The events are structured in this way:




{| width="auto" align="center" style="border-style:dotted;border-width:1mm;border-color:green;text-align:left"
{| width="auto" align="center" style="border-style:dotted;border-width:1mm;border-color:green;text-align:left"
|œdef,eventID,DES_FILE,z-index,
|œdef,ms_name,DES_FILE,display_prio,
FILE.ETA,
FILE.ETA,


eventCommands
eventCommands,
 
33,255,


main_X_pos, main_Y_pos,
main_X_pos, main_Y_pos,
Line 47: Line 43:
'''Caption:'''
'''Caption:'''


*œdef = define; this must come first
*œdef = defines the beginning of an event definition
*eventID = the event ID. This is used to specify the event in the editor as well as to get the localized name.
*ms_name = the internal event name. This is used to specify the event in the editor as well as to get the localized name.
*DES_FILE = name of the graphic file which should be used for the event (without the extension ".DES")
*DES_FILE = name of the graphic file which should be used for the event (without the extension ".DES")
*z-index = the z-index, specifying the order the sprite should be drawn on screen (a value between 1-7)
*display_prio = the display priority, specifying the order the sprite should be drawn on screen (a value between 1-7)
*FILE.ETA = name of the state file which should be used
*FILE.ETA = name of the state file which should be used
*eventCommands = the non-compiled event commands (these have to use local offsets due to not having been compiled with label offsets yet)
*eventCommands = the non-compiled event commands (these have to use local offsets due to not having been compiled with label offsets yet)
*33,255 = the command termination (33 is invalid command with the argument 0xFF)
*main_X_pos = main x coordinate of the event (irrelevant since the player places the object themselves)
*main_X_pos = main x coordinate of the event
*main_Y_pos = main y coordinate of the event (irrelevant since the player places the object themselves)
*main_Y_pos = main y coordinate of the event
*etat = the primary event state
*etat = the primary event state
*sub_etat = the secondary event state
*sub_etat = the secondary event state
*Offset_BX = is the x coordinate of the point on the sprite on which Rayman can stand (if "Follow_enabled" is 1)
*Offset_BX = the x position of the pivot
*Offset_BY = is the y1 coordinate of the point on the sprite on which Rayman can stand (if "Follow_enabled" is 1)
*Offset_BY = the y position of the pivot
*Offset_HY = is the y2 coordinate of the point on the sprite on which Rayman can stand (if "Follow_enabled" is 1)
*Offset_HY = the y coordinate of the point on the sprite on which Rayman can stand if Follow_enabled is true, relative to the follow_sprite
*Follow_enabled = whether or not Rayman can stand on this event ("follow" its movement), either 0 or 1
*Follow_enabled = indicates whether or not Rayman can stand on this event ("follow" its movement), either 0 or 1 (true or false)
*follow_sprite = the sprite index which the player can stand on
*follow_sprite = the sprite index which the player can stand on if Follow_enabled is true
*hitpoints = for enemies like [[hunter]]s, how much [[resistance]] the event has. However, for many events this number has a different meaning, such as specifying if the sprite should appear flipped.
*hitpoints = for enemies like [[hunter]]s, how much [[resistance]] the event has. However, for many events this number has a different meaning, such as specifying if the sprite should appear flipped, the palette offset etc.
*obj_type = this is the event object type. All types are hard-coded in the engine and specifies how the event should be treated.
*obj_type = this is the event object type. All types are hard-coded in the engine and specifies how the event should be treated.
*hit_sprite = unsure
*hit_sprite = if below 253 it specifies the sprite which is treated as a hitbox. If above 253 it specifies the event uses the hitbox belonging to the obj_type.
*group = in which group the event can be found in the Events Editor. For example, the "Enemies" group is group 5.
*group = in which group the event can be found in the Events Editor. For example, the "Enemies" group is group 5.


'''Event commands'''
'''Event commands'''


The event commands will repeat themselves when they come to the end.
The event commands will repeat themselves when they come to the end. Ones marked as self-handled will have different behavior depending on the object type and current state. The command names come from leftover debug information in the GameBoy Advance version. The complete list is as follows:


*0, x, -> sprite moves right (x = time in milliseconds, max. 254)
{| class="wikitable"
*1, x, -> sprite moves left (x = time in milliseconds, max. 254)
|-
 
!Command
*3, x, -> sprite moves up (x = time in milliseconds, max. 254)
!Name
*4, x, -> sprite moves down (x = time in milliseconds, max. 254)
!Effect
*5, x -> change subetat (sprite coord. b ) to x
|-
*6, x, -> skip all code lines until line x
| 0, {arg1}
 
| GO_LEFT
*8, x, -> change etat (sprite coord. a) to x
| (Self-handled) Object moves left
 
|-
*11, x, -> label x
| 1, {arg1}
*12, x, -> goto label x
| GO_RIGHT
 
| (Self-handled) Object moves right
*19, x, -> wait x seconds
|-
*20, t, x, y, -> sprite moves for t milliseconds (max. 254) with velocity given by x and y.
| 2
 
| GO_WAIT
A complete list of the event commands can be found here:
| (Self-handled) Object stops moving
* https://github.com/Adsolution/Ray1Map/blob/master/Assets/Scripts/DataTypes/Common/Serializable/Events/EventCommand.cs
|-
| 3, {arg1}
| GO_UP
| (Self-handled) Sprite moves up
|-
| 4, {arg1}
| GO_DOWN
| (Self-handled) Sprite moves down
|-
| 5, {arg1}
| GO_SUBSTATE
| Set object SubEtat (secondary state) to {arg1}
|-
| 6, {arg1}
| GO_SKIP
| Skips {arg1} commands
|-
| 7
| GO_ADD
| (Self-handled) ?
|-
| 8, {arg1}
| GO_STATE
| Set object Etat (primary state) to {arg1}
|-
| 9, {arg1}
| GO_PREPARELOOP
| Saves the current position and prepares a loop which loops with {arg1} being the amount of times to loop
|-
| 10
| GO_DOLOOP
| Perform the loop
|-
| 11, {arg1}
| GO_LABEL
| Sets label {arg1}
|-
| 12, {arg1}
| GO_GOTO
| Skips to label {arg1}
|-
| 13, {arg1}
| GO_GOSUB
| Saves the current position and starts executing from label {arg1} until GO_RETURN
|-
| 14
| GO_RETURN
| Returns from a GOSUB command execution
|-
| 15, {arg1}
| GO_BRANCHTRUE
| Skips to label {arg1} if TEST is true
|-
| 16, {arg1}
| GO_BRANCHFALSE
| Skips to label {arg1} if TEST is false
|-
| 17, {arg1}[, {arg2}]
| GO_TEST
| Sets the TEST flag depending on {arg1}. If {arg1} <= 4 then {arg2} is used in the validation, otherwise only one argument is expected.
|-
| 18, {arg1}
| GO_SETTEST
| Sets the TEST flag to {arg1}, treated as a boolean
|-
| 19, {arg1}
| GO_WAITSTATE
| Waits {arg1}
|-
| 20, {arg1}, {arg2}, {arg3}
| GO_SPEED
| (Self-handled) Moves {arg1} with speed X {arg2} and Y {arg3}
|-
| 21, {arg1}, {arg2}
| GO_X
| Sets the X position to {arg1}{arg2}
|-
| 22, {arg1}, {arg2}
| GO_Y
| Sets the Y position to {arg1}{arg2}
|-
| 23, {arg1}
| RESERVED_GO_SKIP
| Skips to LabelOffsets[{arg1}]
|-
| 24, {arg1}
| RESERVED_GO_GOTO
| Same as RESERVED_GO_SKIP
|-
| 25, {arg1}
| RESERVED_GO_GOSUB
| Saves the current position and starts executing from LabelOffsets[{arg1}] until GO_RETURN
|-
| 26, {arg1}
| RESERVED_GO_GOTOT
| Skips to LabelOffsets[{arg1}] if TEST is true
|-
| 27, {arg1}
| RESERVED_GO_GOTOF
| Skips to LabelOffsets[{arg1}] if TEST is false
|-
| 28, {arg1}
| RESERVED_GO_SKIPT
| Same as RESERVED_GO_GOTOT
|-
| 29, {arg1}
| RESERVED_GO_SKIPF
| Same as RESERVED_GO_GOTOF
|-
| 30
| GO_NOP
| (Self-handled) ?
|-
| 31, {arg1}
| GO_SKIPTRUE
| Skips {arg1} commands if TEST is true
|-
| 32, {arg1}
| GO_SKIPFALSE
| Skips {arg1} commands if TEST is false
|-
| 33, {arg1}
| INVALID_CMD
| Terminates the commands and loops back, {arg1} is always 0xFF which is used as the command buffer terminator
|}


=== Unused events ===
=== Unused events ===
Line 95: Line 214:


<gallery widths="316px" heights="200px" class="sprite">
<gallery widths="316px" heights="200px" class="sprite">
GiantLavaBall.png|A giant [[lava ball]], acting as scenery.
GiantLavaBall.png|A giant [[lava rock]], acting as scenery.
BetaClouds.png|[[Cloud]]s with a face (known from the Atari Jaguar version). The ones to the right act like disappearing clouds.
BetaClouds.png|[[Cloud]]s with a face (known from the Atari Jaguar version). The ones to the right act like disappearing clouds.
SmallLivingstonePlum.png|A [[small Livingstone]] on a bouncing [[plum]].
SmallLivingstonePlum.png|A [[little Livingstone]] on a bouncing [[plum]].
Big rock.png|A giant [[rock]].
Big rock.png|A giant [[rock]].
Bouncing Mr. Sax obstacle.png|A [[wrong note]] from [[Mr Sax]]. Here it can be punched to move like a [[plum]].
Bouncing Mr. Sax obstacle.png|A [[wrong note]] from [[Mr Sax]]. Here it can be punched to move like a [[plum]].
Clocks.png|The clocks from the [[continue]] screen, acting as scenery.
Clocks.png|The clocks from the [[continue]] screen, acting as scenery.
Insta-kill events.png|Several red insta-kill events, previously seen in ''[[Rayman Junior]]''.
Insta-kill events.png|Several red insta-kill events, previously seen in ''[[Maths and English with Rayman]]''.
Road signs.png|A bunch of colored road signs, acting as scenery.
Road signs.png|A bunch of colored road signs, acting as scenery.
Tarayzan Designer.png|[[Tarayzan]] as a functioning event, except for the text not displaying when he gives [[Rayman]] the [[Magic seed|seed]].
Tarayzan Designer.png|[[Tarayzan]] as a functioning event, except for the text not displaying when he gives [[Rayman]] the [[Magic seed|seed]].
Line 139: Line 258:
==The Extended ''Rayman Designer'' Editor==
==The Extended ''Rayman Designer'' Editor==


This is an unofficial tool that makes ''[[Rayman Designer]]'' modding much easier. It also comes with a large content package which includes a great deal of content from ''[[Rayman 1|Rayman]]'' and ''[[Rayman Junior]]'' that was not available in ''Rayman Designer'', and also some new unofficial content.  
This is an unofficial tool that makes ''[[Rayman Designer]]'' modding much easier. It also comes with a large content package which includes a great deal of content from ''[[Rayman 1|Rayman]]'' and ''[[Maths and English with Rayman]]'' that was not available in ''Rayman Designer'', and also some new unofficial content.


*Download: http://www.rayman-fanpage.de/character/raymans_world_designer/RDeditor.exe
*Download: http://www.rayman-fanpage.de/character/raymans_world_designer/RDeditor.exe


==Trivia==
==Trivia==
Through some editing of the game, the following things have been discovered:
Through some editing of the game, the following things have been discovered:


*If events are placed in groups beyond group 9, it is found that these groups have the same names as the game's levels. This reveals the names of six additional levels. It seems that they have been cut from the final game (or never been finished): "The Gates of the Jungle" ([[The Dream Forest]]), "Diabolical Tunes" ([[Band Land]]), "The Fire Avalanche" ([[The Blue Mountains]]), "Miniature Madness" ([[Picture City]]), "Cloud of Doom" ([[The Caves of Skops]]) and "Dessert Anyone?" ([[Candy Château]]).
*If events are placed in groups beyond group 9, it is found that these groups have the same names as the game's levels. This reveals the names of six additional levels. It seems that they have been cut from the final game (or never been finished): "The Gates of the Jungle" ([[The Dream Forest]]), "Diabolical Tunes" ([[Band Land]]), "The Fire Avalanche" ([[Blue Mountains]]), "Miniature Madness" ([[Picture City]]), "Cloud of Doom" ([[The Caves of Skops]]) and "Dessert Anyone?" ([[Candy Château]]).


*A sprite from [[Rayman 2 (2D prototype)|the 2D version of ''Rayman 2'']] could be found in the sprite files (a small platform that looks like a teleporter).
*A sprite from [[Rayman 2 (cancelled prototype)|the 2D version of ''Rayman 2'']] could be found in the sprite files (a small platform that looks like a teleporter).


*The spritefiles also contain a considerable amount of content from the ''[[Rayman Junior]]'' (such as the world map icons) and some never-before-seen sprites.  
*The spritefiles also contain a considerable amount of content from the ''[[Maths and English with Rayman]]'' (such as the world map icons) and some never-before-seen sprites.


{{Rayman 1}}
[[Category:Other]]
[[Category:Other]]