As much as I could have agreed on having a sort of integrated graphics editor, I feel like that would be a bit too much effort for such change. Especially considering how little is game's playerbase, it doesn't really seem to be worth the effort. I mean, I'm not the one to tell Holger what to do, but I'm pretty darn sure he would basically say the same thing, even if he would want to do something like that.
No secret messages here, this is just for the long horizontal line.
Besides that, making some unique visuals via graphicsinfo.conf is kind of half of the fun really, and there's not really that much coding involved, it's just basic attributes, sort of like how Minecraft (originally) handled special qualities of some entities and items via so called "NBT tags".
Basically all game element graphic attribute lines follow the same structure:
element.action.direction.attribute: [value]
...Where
element means game element's token (you can enable those in the game in settings, by the way, and they will show up in editor when checking element's properties),
action means whatever that element is doing for that animation to occur (.moving, .digging, .collecting, .pushing, .snapping, .active, .exploding, etc.),
direction means whichever direction the element is facing (.left, .right, .up and .down) and
attribute, which is basically additional data about animation's location on a texture file (.xpos and .ypos), the amount of frames it requires (.frames), whichever frame you want it to start from (.start_frame), in what kind of way you want the animation to go (.anim_mode), etc.
For example:
Code: Select all
custom_1.moving.right: my_animation.png # -- The image file the sprite is taken from
custom_1.moving.right.xpos: 0 # -- The horizontal position of your sprite in the image, where 0 means 0 pixels off and 1 means 32 pixels off
custom_1.moving.right.ypos: 1 # -- The vertical position of your sprite in the image, same rule with pixels applies here
custom_1.moving.right.frames: 8 # -- The amount of frames your sprite will use for the animation, in order from left to right. 1 means there's no animation
custom_1.moving.right.delay: 4 # -- The amount of time before the current frame changes to the next one, where 1 = 0.02 seconds
custom_1.moving.right.anim_mode: loop # -- The different kinds of animation modes you can potentially use
# --- loop - regular loop, it goes through all frames and then resets to the first one (1234567812345678123...)
# --- pingpong - goes through every frame, then reverses before reaching the start and reverses back to the regular order (1234567876543212345...)
# --- pingpong2 - same as pingpong but holds first and last frames a frame longer (1234567887654321123...)
# --- random - randomly picks a frame, no specific pattern (???????????????...)
# --- random_static - similar to random, but it keeps the same frame frozen until the element itself moves, changes or does anything to update it's animation
# --- linear - goes through every frame before stopping at the last frame (1234567888888888888...)
# --- reverse - reverses the animation (8765432178654321876...), can also be combined with few other modes (for example, '.anim_mode: linear,reverse', 8765432111111111111111...)
custom_1.moving.right.start_frame: 0 # -- The number of a frame you want the animation to start from, where first frame is 0 and second frame is 1
custom_1.moving.right.global_sync: false # -- If true, this means that instead of playing this animation individually for every element, all elements of that exact action and facing that exact direction will globally synchronize their animations ever since you enter a level disregarding if some instances were few milliseconds late
custom_1.name: My animation # -- A custom name you can apply to any element in editor (won't really work with actions and directions besides some unique cases like 'dynamite.active', 'switchgate_switch.active' and 'bug.down')
Leaving the
action blank means the element will do the same animation no matter if it moves, stands still or gets pushed by player.
Code: Select all
custom_2.left: differentanim.png
custom_2.left.xpos: 0
custom_2.left.ypos: 0
custom_2.left.frames: 4
custom_2.left.delay: 6
In same way blank
direction will just make the animation play out no matter which direction the element is facing.
Code: Select all
custom_3.moving: differentanim.png
custom_3.moving.xpos: 4
custom_3.moving.ypos: 1
custom_3.moving.frames: 1
Leaving both blank means the animation will be playing pretty much constantly unless another animation with an action and/or direction is specified below.
Code: Select all
custom_4: differentanim.png
custom_4.xpos: 0
custom_4.ypos: 2
custom_4.frames: 16
custom_4.anim_mode: random_static
These are just the basics for creating custom game element graphics via 'graphicsinfo.conf' with few provided examples (no images though, sorry), but just enough to do your basic custom element sprites.