Chronocrash Modders Tools

ChronoCrash Modders Tools 0.7.8

No permission to download
Hey @Piccolo I've tested the newest version.
Now it respects the FACING in the entity header (I am using FACING 1 here):
fNhKhj5.png


But without the FACING 1 or FLIP, the tool still displays it facing the wrong direction (facing left, on a DIRECTION RIGHT stage)
eTGxQFz.png



IOW, type NONE should not be flipped to left, like the enemies are.
 
I made sure it does that, but I think the issue is in CMT the type is case sensitive, and if you put "NONE" it will be different than "none", and the ignoring of default direction works only with type "none" right now (not "NONE"). I'll make it case insensitive, but I think it's probably just that.

EDIT : upon checking, the type is indeed lowercased by CMT so I don't know what the issue is :unsure:
 
@Piccolo I got some ideas while working with CMT and here are some suggestions:

- Range: Since range is something unique for each animation (and you can have only one per animation), we should be able to change the value of the range box in any frame we want, and not on the range we had added it, because range is not a frame property - it's an animation property.
it's very common for me to draw the rangebox on the same frame I have an attackbox like this:
2pkAlo2.png

But then I can't change it's value animore unless I return to that frame again.

Also, we should be able to add a new range value if we click on the green + over the range section (something which doesn't work right now).

And there is an issue with the range setting: see this animation - I don't have any range set yet, but the tool kept the last value I used in another animation, which doesn't make much sense:
70rXVdz.png


- Animation names: would it be possible to add some warning about wrong animation names, kinda like Stats have?
Ok, the engine will report you about an illegal name for the animation name, but it would be cool to have something inside the tool. Maybe in the same way you added "__ALREADY_USED" in the animation name, but with something like "_ILLEGAL_NAME".

For sure, you would need a list of all possible, but we can extract it from the souce code.

Edit: This is the animation name list so far:
ANI_NONE, // To indicate a blank or no animation at all.
ANI_IDLE,
ANI_WALK,
ANI_JUMP,
ANI_LAND,
ANI_PAIN,
ANI_FALL,
ANI_RISE,
ANI_ATTACK,
ANI_ATTACK1,
ANI_ATTACK2,
ANI_ATTACK3,
ANI_ATTACK4, // Very important
ANI_UPPER,
ANI_BLOCK, // New block animation
ANI_BLOCKRELEASE, // Transition out of block.
ANI_BLOCKSTART, // Transition to block.
ANI_JUMPATTACK,
ANI_JUMPATTACK2,
ANI_GET,
ANI_GRAB,
ANI_BACKGRAB, // Kratus (10-2021) Added the new backgrab animation
ANI_VAULT, // Kratus (10-2021) Added the new vault animation
ANI_VAULT2, // Kratus (10-2021) Added the new vault2 animation
ANI_GRABATTACK,
ANI_GRABATTACK2,
ANI_THROW,
ANI_SPECIAL,
ANI_FREESPECIAL,
ANI_SPAWN, // 26-12-2004 new animation added here ani_spawn
ANI_DIE, // 29-12-2004 new animation added here ani_die
ANI_PICK, // 7-1-2005 used when players select their character at the select screen
ANI_FREESPECIAL2,
ANI_JUMPATTACK3,
ANI_FREESPECIAL3,
ANI_UP, // Mar 2, 2005 - Animation for when going up
ANI_DOWN, // Mar 2, 2005 - Animation for when going down
ANI_SHOCK, // Animation played when knocked down by shock attack
ANI_BURN, // Animation played when knocked down by burn attack
ANI_SHOCKPAIN, // Animation played when not knocked down by shock attack
ANI_BURNPAIN, // Animation played when not knocked down by shock attack
ANI_GRABBED, // Animation played when grabbed
ANI_SPECIAL2, // Animation played for when pressing forward special
ANI_RUN, // Animation played when a player is running
ANI_RUNATTACK, // Animation played when a player is running and presses attack
ANI_RUNJUMPATTACK, // Animation played when a player is running and jumps and presses attack
ANI_ATTACKUP, // u u animation
ANI_ATTACKDOWN, // d d animation
ANI_ATTACKFORWARD, // f f animation
ANI_ATTACKBACKWARD, // Used for attacking backwards
ANI_FREESPECIAL4, // More freespecials added
ANI_FREESPECIAL5, // More freespecials added
ANI_FREESPECIAL6, // More freespecials added
ANI_FREESPECIAL7, // More freespecials added
ANI_FREESPECIAL8, // More freespecials added
ANI_RISEATTACK, // Attack used for enemies when players are crowding around after knocking them down
ANI_DODGE, // Used for up up / down down SOR3 dodge moves for players
ANI_ATTACKBOTH, // Used for when a player holds down attack and presses jump
ANI_GRABFORWARD, // New grab attack for when a player holds down forward/attack
ANI_GRABFORWARD2, // New second grab attack for when a player holds down forward/attack
ANI_JUMPFORWARD, // Attack when a player is moving and jumps
ANI_GRABDOWN, // Attack when a player has grabbed an opponent and presses down/attack
ANI_GRABDOWN2, // Attack when a player has grabbed an opponent and presses down/attack
ANI_GRABUP, // Attack when a player has grabbed an opponent and presses up/attack
ANI_GRABUP2, // Attack when a player has grabbed an opponent and presses up/attack
ANI_SELECT, // Animation that is displayed at the select screen in place of idle.
ANI_SELECTIN, // Animation that is displayed at the select screen, when first highlighted.
ANI_SELECTOUT, // Animation that is displayed at the select screen, when moving to another character.
ANI_DUCK, // Animation that is played when pressing down in "platform" type levels
ANI_FAINT, // Faint animations for players/enemys by tails
ANI_CANT, // Can't animation for players(animation when mp is less than mpcost) by tails.
ANI_THROWATTACK, // Added for subtype projectile
ANI_CHARGEATTACK, // Plays when player releases attack1 after holding >= charge_time.
ANI_JUMPCANT,
ANI_JUMPSPECIAL,
ANI_BURNDIE,
ANI_SHOCKDIE,
ANI_PAIN2,
ANI_PAIN3,
ANI_PAIN4,
ANI_FALL2,
ANI_FALL3,
ANI_FALL4,
ANI_DIE2,
ANI_DIE3,
ANI_DIE4,
ANI_CHARGE,
ANI_BACKWALK,
ANI_SLEEP,
ANI_FOLLOW1,
ANI_FOLLOW2,
ANI_FOLLOW3,
ANI_FOLLOW4,
ANI_PAIN5,
ANI_PAIN6,
ANI_PAIN7,
ANI_PAIN8,
ANI_PAIN9,
ANI_PAIN10,
ANI_FALL5,
ANI_FALL6,
ANI_FALL7,
ANI_FALL8,
ANI_FALL9,
ANI_FALL10,
ANI_DIE5,
ANI_DIE6,
ANI_DIE7,
ANI_DIE8,
ANI_DIE9,
ANI_DIE10,
ANI_TURN, // turn back/flip
ANI_RESPAWN, //now spawn works for players
ANI_FORWARDJUMP,
ANI_RUNJUMP,
ANI_JUMPLAND,
ANI_JUMPDELAY,
ANI_HITOBSTACLE,
ANI_HITPLATFORM,
ANI_HITWALL,
ANI_GRABBACKWARD,
ANI_GRABBACKWARD2,
ANI_GRABWALK,
ANI_GRABBEDWALK,
ANI_GRABWALKUP,
ANI_GRABBEDWALKUP,
ANI_GRABWALKDOWN,
ANI_GRABBEDWALKDOWN,
ANI_GRABTURN,
ANI_GRABBEDTURN,
ANI_GRABBACKWALK,
ANI_GRABBEDBACKWALK,
ANI_SLIDE, //Down + Jump animation.
ANI_RUNSLIDE, //Down + Jump while running.
ANI_BLOCKPAIN, //If entity has this, it will play in place of "pain" when it's blokcpain is 1 and incomming attack is blocked.
ANI_DUCKATTACK,
ANI_RISE2,
ANI_RISE3,
ANI_RISE4,
ANI_RISE5,
ANI_RISE6,
ANI_RISE7,
ANI_RISE8,
ANI_RISE9,
ANI_RISE10,
ANI_RISEB,
ANI_RISES,
ANI_BLOCKPAIN2,
ANI_BLOCKPAIN3,
ANI_BLOCKPAIN4,
ANI_BLOCKPAIN5,
ANI_BLOCKPAIN6,
ANI_BLOCKPAIN7,
ANI_BLOCKPAIN8,
ANI_BLOCKPAIN9,
ANI_BLOCKPAIN10,
ANI_BLOCKPAINB,
ANI_BLOCKPAINS,
ANI_CHIPDEATH,
ANI_GUARDBREAK,
ANI_RISEATTACK2,
ANI_RISEATTACK3,
ANI_RISEATTACK4,
ANI_RISEATTACK5,
ANI_RISEATTACK6,
ANI_RISEATTACK7,
ANI_RISEATTACK8,
ANI_RISEATTACK9,
ANI_RISEATTACK10,
ANI_RISEATTACKB,
ANI_RISEATTACKS,
ANI_WALKOFF,
ANI_BACKPAIN,
ANI_BACKPAIN2,
ANI_BACKPAIN3,
ANI_BACKPAIN4,
ANI_BACKPAIN5,
ANI_BACKPAIN6,
ANI_BACKPAIN7,
ANI_BACKPAIN8,
ANI_BACKPAIN9,
ANI_BACKPAIN10,
ANI_BACKFALL,
ANI_BACKFALL2,
ANI_BACKFALL3,
ANI_BACKFALL4,
ANI_BACKFALL5,
ANI_BACKFALL6,
ANI_BACKFALL7,
ANI_BACKFALL8,
ANI_BACKFALL9,
ANI_BACKFALL10,
ANI_BACKDIE,
ANI_BACKDIE2,
ANI_BACKDIE3,
ANI_BACKDIE4,
ANI_BACKDIE5,
ANI_BACKDIE6,
ANI_BACKDIE7,
ANI_BACKDIE8,
ANI_BACKDIE9,
ANI_BACKDIE10,
ANI_BACKRUN,
ANI_BACKBURNPAIN,
ANI_BACKSHOCKPAIN,
ANI_BACKBURN,
ANI_BACKSHOCK,
ANI_BACKBURNDIE,
ANI_BACKSHOCKDIE,
ANI_BACKRISEB,
ANI_BACKRISES,
ANI_BACKRISE,
ANI_BACKRISE2,
ANI_BACKRISE3,
ANI_BACKRISE4,
ANI_BACKRISE5,
ANI_BACKRISE6,
ANI_BACKRISE7,
ANI_BACKRISE8,
ANI_BACKRISE9,
ANI_BACKRISE10,
ANI_BACKRISEATTACKB,
ANI_BACKRISEATTACKS,
ANI_BACKRISEATTACK,
ANI_BACKRISEATTACK2,
ANI_BACKRISEATTACK3,
ANI_BACKRISEATTACK4,
ANI_BACKRISEATTACK5,
ANI_BACKRISEATTACK6,
ANI_BACKRISEATTACK7,
ANI_BACKRISEATTACK8,
ANI_BACKRISEATTACK9,
ANI_BACKRISEATTACK10,
ANI_BACKBLOCKPAINB,
ANI_BACKBLOCKPAINS,
ANI_BACKBLOCKPAIN,
ANI_BACKBLOCKPAIN2,
ANI_BACKBLOCKPAIN3,
ANI_BACKBLOCKPAIN4,
ANI_BACKBLOCKPAIN5,
ANI_BACKBLOCKPAIN6,
ANI_BACKBLOCKPAIN7,
ANI_BACKBLOCKPAIN8,
ANI_BACKBLOCKPAIN9,
ANI_BACKBLOCKPAIN10,
ANI_EDGE,
ANI_BACKEDGE,
ANI_DUCKING,
ANI_DUCKRISE,
ANI_VICTORY,
ANI_FALLLOSE,
ANI_LOSE,
we can always extract it from the source: openbor/engine/openbor.h at master · DCurrent/openbor
Probably, you would add a wildcard here because unless I am mistaken, any animation which has a number can have values up to 99, like FOLLOW99.
 
Last edited:
- Range: Since range is something unique for each animation (and you can have only one per animation), we should be able to change the value of the range box in any frame we want, and not on the range we had added it, because range is not a frame property - it's an animation property.
it's very common for me to draw the rangebox on the same frame I have an attackbox like this:
2pkAlo2.png

But then I can't change it's value animore unless I return to that frame again.

Also, we should be able to add a new range value if we click on the green + over the range section (something which doesn't work right now).

And there is an issue with the range setting: see this animation - I don't have any range set yet, but the tool kept the last value I used in another animation, which doesn't make much

+1 to range. I think that would be a great addition. Don't forget there's a range base and a range Z. You normally don't need to worry about base (and probably don't want to display it unless asked for because by default it's huge), but Z is important.

- Animation names: would it be possible to add some warning about wrong animation names, kinda like Stats have?
Ok, the engine will report you about an illegal name for the animation name, but it would be cool to have something inside the tool. Maybe in the same way you added "__ALREADY_USED" in the animation name, but with something like "_ILLEGAL_NAME".

For sure, you would need a list of all possible, but we can extract it from the souce code.

Edit: This is the animation name list so far:
we can always extract it from the source: openbor/engine/openbor.h at master · DCurrent/openbor
Probably, you would add a wildcard here because unless I am mistaken, any animation which has a number can have values up to 99, like FOLLOW99.

I'd have to advise against this. First, numeric can go WAY past 99. All the way up to 2.1 billion if you're insane. But also, what happens when I add something to the engine, but CMT is warning about it not existing? Animations are in flux too much IMO. It's just one more static list of things out there to get out of sync with what the engine actually has/does.

DC
 
Last edited:
You normally don't need to worry about base (and probably don't want to display it unless asked for because by default tit's huge), but Z is important.
yeah any Z related stuff would be good to have, but it could be tricky to display, it either will need to convert the box into a 3D or adding some guiding lines
 
Piccolo updated Chronocrash Modders Tools with a new update entry:

Changelog 0.5.16

Range box can now be edited from any frame. It will bet set on frame 0.

WARNING : if you previously set range on other frame that frame 0, this old range line will probably be updated but not deleted by CMT. You can delete the line manually if you want, but keeping it will not cause any problem (as the values will match the new values)

Button to add and delete range are now properly activated.

Added support for rangez, which is now visually previewable.



Bug fix :

- Level Editor...

Read the rest of this update entry...
 
@Piccolo oh, rangez preview? That is awesome:
0AmvbYe.png


But this raised me a concern: when we set the rangez from 0 to a number, the range box isn't aligned witht he image axis anymore
DTUZn9h.png
 
@Piccolo

But this raised me a concern: when we set the rangez from 0 to a number, the range box isn't aligned witht he image axis anymore

I think it is, it's just perspective. If you take the middle of the range, you'll see it aligns with the origin.

I think you already get it but you have to take into account that setting rangez min to 0 is not centering the range.
 
I think you already get it but you have to take into account that setting rangez min to 0 is not centering the range.
As far as I know, "rangez 0 10" works from the point 0 to 10, so it will take action only if the Z position is the same of the target (0) to +10
Centering the range would be "rangez -10 10".

But this could be a problem, because it is displaying the range box 10 pixels away from the axis. And this may mislead some users, specially newcomers.
XKDEK1q.png


I think it is, it's just perspective. If you take the middle of the range, you'll see it aligns with the origin.
When the correct would be this:
zMYUNpv.png


Also, it would be better to have an option so people can turn on and off the rangez - some people will do prefer to have it in the classic way (and it can be more useful in some cases)

It's so cool to be able to preview an attack like this...
UY72Hoj.png


...God have mercy, Rugal!
rb8WVEL.png
 
how is basemap support coming along? the editor is kinda confused about what it is (even though it's still read and displayed) and like other available editors (OBeditor, OpenBOR stats) it crashes if you try to edit a basemap.
this is a really unique engine feature that has been present for years but was never fully supported by any of the tools available
 
the editor is kinda confused about what it is
I don't have any issues editing basemaps on it, really.

Also, basemap was added in the engine after the other editors you mentioned were stopped to be developed, so that is why you can't edit them there.
 
weird, I'm using Version 0.5.16 (03/02/24)


this is what I see vs how it's defined in text

nothing shows in the editor other than those two parameters and the actual basemap solid.

Code:
basemap 120 620 96 96 64 64

image_2024-02-06_115206216.png

if I try to drag the basemap...
image_2024-02-06_115536581.png

after this it just works? albeit the values are still mostly empty. if I try to change and update values it displays another error
image_2024-02-06_124530240.png

is it possible to drag points as well? the only thing I can do bug free is edit the points/basemap entries manually and using the preview to double check the placements

also this message sometimes refuses to go away and I have to restart the app. this time it happened after changing the level txt externally
image_2024-02-06_133708965.png

issues with preview if background is transparent or does not exist, also garbled UI for some reason (right)
image_2024-02-06_134119638.png
 
Last edited:
@Piccolo actually he is right. I remember I was able to drag and change basemap points in the past, but not its not working.
You can drag the basemap around, but once you try to move a point, you get a warning and you can't select the basemap anymore


basemap 475 195 57 20 0 33

Also, can we got a player spawn indicator, like OBEditor have? Its quite useful:
cb923Q6.png


According to the manual, the Z position counts from the MIN Z of the stage:

spawn1 {x} {z} {a}

  • Optional.
  • {x} is relative to the starting edge of the screen. {z} is relative to the stage's minimum z value. {a} is relative to the ground.
  • {x} is measured from left for levels with direction right and both and it's measured from right for levels with direction left.
 
The basemap dot dragging was broken due to an update in libs used, I'll do a quick update.

also this message sometimes refuses to go away and I have to restart the app. this time it happened after changing the level txt externally
It's probably due to the system you are using CMT in, which messes with file modifications date. If I were to guess based on the screenshots it's wine in Linux ?

I cannot guarantee CMT will work with wine, but you can run the code directly in Linux. The code is present in each release made here, sometimes not up to date, but it will be in next update.

Anyway if you still want to keep using wine, I added a new option "Check external file updates". Just uncheck this and it will completely disable the checking of updates made outside CMT (it will be available in next update)
 
I think he is running in Windows 10, no?
Maybe I don't really know, just assumed this based on the window decoration, but maybe there is a theme like that in Windows 10, I'm not too familiar with Windows.

EDIT : yes my bad didn't saw the windows bar in the first screenshot

Then maybe he has a program that keeps updating the file and thus making it seem modified ? I don't know. Anyway the new option can be used to disable that, but then it's up to the user to make sure to reload the file if he edits it outside CMT while CMT is opened.
 
The basemap dot dragging was broken due to an update in libs used, I'll do a quick update.


It's probably due to the system you are using CMT in, which messes with file modifications date. If I were to guess based on the screenshots it's wine in Linux ?

I cannot guarantee CMT will work with wine, but you can run the code directly in Linux. The code is present in each release made here, sometimes not up to date, but it will be in next update.

Anyway if you still want to keep using wine, I added a new option "Check external file updates". Just uncheck this and it will completely disable the checking of updates made outside CMT (it will be available in next update)
@Piccolo Windows 10 actually. and thanks for the update! will test it right awy
as for the file update issue, could it be because it's in a synced dropbox folder. I've read reports of dropbox interfering with some file operations of other apps

@O Ilusionista Portuguese.
 
Back
Top Bottom