Engine for LPC assets
Hi,
First things first: HAPPY NEW YEAR to you all!
I like LPC assets very much, but I found problematic to use them in existing engines (for various reasons). So I've decided to create a new, FOSS engine primarily (but not exclusively) with LPC assets in mind. It is still in early stage of development, but you can already create and edit a game project with it. It is an RPG Maker like, no-programming-skill-required GUI application. Let me know what you think!
You can compile it from source (GPLv3+ licensed), but there are also downloadable binaries for Windows (zip, portable executable) and Linux (static .tgz and Ubuntu .deb with SDL2 dependency).
I've put a little OGA ad with a link on its About page, hope you don't mind (but if you do, let me know and I'll remove the ad ASAP). It can import assets in various formats (images, video, audio etc.) and you can do basic assets editing (for example convert any image to use Liberated Palette, or to cut out sprites from a sprite sheet using LPC Character layout), but creating everything from scratch every time is cumbersome, so this editor uses game templates.
One of those is tirnanog-lpc. Please note that this template is nothing more than a technical demo for now, but hopefully in time with some help of volunteers we can add enough assets to be useful to create an entire game easily, so that TirNanoG can became "the LPC assets based Open Source equivalent of RPG Maker" (bold goal, I know, but I like to dream big :-) ).
Cheers,
bzt
I think this is a very cool idea. I am gonna download what you got so far and check it out.
I am excited about the possibilities of this project!
PS: Dreaming big is the way to dream. Always bite off more than you can chew. Whatever you end up getting in your mouth and managing to swallow will be better than if you just nibbled.
That is a good motto for life :)
Note that there is EasyRPG (but I think it is not as far as TirNano).
Awesome!
Thank you guys!
@PeterX: yes, I'm aware of EasyRPG, I've tried it out before I've started this project. I've tried to run a few games with it without success (if I understand correctly, mostly because RPG Maker has moved on to a new game format, and I couldn't find free games in the old format).
I've started this project because my little boy wants to make games. He does not speak English (yet), and he cannot do programming (yet). A visual script editor is okay, because he's familiar with that (BTW, in the TirNanoG Editor's event handlers I've used the same icons / colors / d'n'd interface like with my JS logo). So my criteria for the game engine was:
For completeness, these are the engines I've tried:
Cheers,
bzt
good luck with the project. i will be keeping an eye on it.
Thank you @Minus Dungeon Games!
Please check out the latest, numerous improvements have been made:
Unrelated: I would like to ask help from the community: it would be great if a native speaker could check the homepage's translations and send me fixes. It shouldn't take long, just a single page with only a few sentences (about 2000 characters altogether, no more), but I would be very very grateful for the help!
Cheers,
bzt
Hi,
First I would like to say thanks for the suggestions on the homepage's English translation: thank you very much, I've fixed them all. It would be great though to hear the opinion of a non-English speakers too, I would very much appreciate that. For example Spanish, German, French or maybe Russian... Some of those were translated by AI, so I'm pretty sure they are terrible.
Second, it took a bit longer than I've anticipated, but the editor is now feature complete! :-)
Now with all the planned features and the manual in place, the BUGHUNT SEASON is officially open! :-)
If you want to encourage me in my efforts, please add a star to the git repo!
Cheers,
bzt
I created the original character generator for lpc assets long ago, and I did dream that someone would eventually create something like this. I hope you continue to work on it. I can't seem to find the player, however. The link on your readme seems to go to a 404.
I hope you consider making the player work in the browser like modern versions of RPG Maker so that your games will work across all platforms and can be played online right there. There's already the open source pixi.js which uses webgl and canvas to do half the work for you, and you can build on that.
Finally, I notice you are making your own map editor. While that is good, there is a great map editor out there already called Tiled and I would prefer to just be able to import from it and add events and scripts and such.
Good luck!
HTML5 Canvas Old School RPG
Hi,
"I created the original character generator for lpc assets long ago, and I did dream that someone would eventually create something like this. I hope you continue to work on it."
Thank you very much! Most definitely I'll keep working on it because I have the worst bosses ever: my boys :-) They keep nagging me, "Daddy, is it ready yet?" So I have no other option but to finish it soon.
"I can't seem to find the player, however. The link on your readme seems to go to a 404."
That's because it is still in early stages of development. I'm finishing the editor right now, and then I'm going to work on the player.
"I hope you consider making the player work in the browser like modern versions of RPG Maker"
Not really. But it will be written in ANSI C only, just like the editor, and if a contributor willing to compile it using emscripten, then I'll give all the support I can, and I will make all the modifications (if any) to make it work as webassembly.
"so that your games will work across all platforms"
That's already arranged. The whole ecosystem is designed in a way that game files contain no native code just data and machine independent bytecode, and I'm planning to create a native player for Windows, Linux and Android. You will only have to install the player once, and then you can play as many games as you like, and exactly the same game file will work on all platforms without modifications (unlike RPG Maker, Godot, Unity and all the other engines, and just like ScummVM).
"There's already the open source pixi.js which uses webgl and canvas to do half the work for you, and you can build on that."
Thank you, but I'm not planning to use third party JavaScript. One of the reasons I've started this project because I'm fed up with today's bloated frameworks and their hilarious dependencies. I put great effort to make the editor totally dependency-free, and I'm planning to make the player totally dependency-free as well. (Just for the records, if I want webgl, then I can write that myself, I don't need frameworks for that, see my Model 3D polyfill for webpages for example. But thanks for the suggestion anyway.)
"Finally, I notice you are making your own map editor. While that is good, there is a great map editor out there already called Tiled and I would prefer to just be able to import from it and add events and scripts and such."
Yeah, don't you worry, the map files are 100% compatible with Tiled, it saves TMX which you can open and edit in Tiled just fine. My issue with Tiled was that it does not support GIMP-like editing, it is way too flexible and at the same time it isn't featureful enough for my games (for example, it cannot generate a collision mask layer automatically from the objects placed on the map, but it allows any number of layers, while my engine needs strict layer arrangement). Also I'm planning to add hexagonal grids, which doesn't seem to be supported in Tiled (I'm using 1.7.2, the vertical hexa doesn't work, and there's no horizontal hexa grid at all).
But all that said, I think Tiled is a great map editor, that's why I've chosen its TMX as the map format.
Cheers,
bzt
ANSI C, eh? Well, at least it will be fast. Personally I hate pointers and manual memory management. I would have considered helping out if you were using a modern language. Are you allowing Unicode for your text and strings at least?
Another thing you need to consider: plugins/extensions. One of the reasons RPG Maker thrives despite all its limitations is that it is easy for users to extend the player in almost any way using a simple API. So whatever limitations there were in the engine can be fixed for a particular game. In older versions of RPG Maker, this was done in Ruby, while modern versions use browser native JavaScript.
ANSI C is a difficult language for such plugins and extensions due to its crashes with very poor error handling. Also overriding built in functionality in an extensible way is impossible unless you use function pointers everywhere.
This idea has been tried many times. In practice, this doesn't really work. How will you handle different versions of your player, and how will the game update itself? You rail against dependencies, but you are forcing one upon your game makers.
It's open source! Propose the feature. I hate the way open source developers justify recreating something just because of missing features. If they do not accept, you can fork it and implement it yourself.
Oof. How will you be able to handle objects on tables? Tiles above the characters? Over/under bridges? Animated tiles? Parallax mapping? Replacing a tile with another one during scripts and events? Game makers will shy away from your engine if basic features from RPG Maker aren't there. These things don't all have to be implemented on day 1, but don't build in too many limitations that will be hard to remove later.
Typically, Tiled is used with engines with various limitations, you just document them. You can have 4 layers in RPG maker MZ, for example.
HTML5 Canvas Old School RPG
"ANSI C, eh? Well, at least it will be fast. Personally I hate pointers and manual memory management. I would have considered helping out if you were using a modern language."
Yeah, modern languages suck, they are slow (both to compile and to run), unstable and keep changing their ABI which is bad for portability. C on the other hand is here for some time and it will remain for even more time, with the lingua-franca ABI and best portability ever. I personally have no problems using pointers, and I'm running through valgrind regularly so I'm sure there are no memory issues either (I can guarantee that my code is memleak-free).
"Are you allowing Unicode for your text and strings at least?"
I'm not just allowing UNICODE, but everything is UTF-8 encoded and even features like colorful pixel fonts, emoji icons and multi-character ligatures are supported too (things that RPG Maker can't do).
"Another thing you need to consider: plugins/extensions. One of the reasons RPG Maker thrives despite all its limitations is that it is easy for users to extend the player in almost any way using a simple API."
Absolutely no. One of the reasons why RPG Maker sucks so badly is its extremely poor plugins/extensions support. There's no concept in its API, meaning plugins can (and do) conflict all the time, and its plugins are native blobs, aren't multiplatform at all (they are actually Windows DLLs, so forget portability but welcome malicious code and viruses).
I'm using a totally different approach: in TirNanoG nothing is hardwired, by default there's no limitation, and you can configure everything and add event handler scripts which are compiled into machine independent bytecode.
But if you really want "plugins", then you can use extensions (which contain basically the same structure as the game files, machine independent bytecode and inlined assets, whatever you need for that feature that you want to add).
"Also overriding built in functionality in an extensible way is impossible unless you use function pointers everywhere."
There are no built-in functionalities, everything is configurable. (BTW yes, plugins in native executable must use function pointers, but that's a must for ANY language, there's absolutely nothing C specific in that. Do you think C++ virtual methods aren't using function pointers under the hood? They do.)
"This idea has been tried many times. In practice, this doesn't really work."
I STRONGLY disagree. ScummVM works remarkably well. I can play an ancient DOS game like Gobliiins on a modern computer under Windows, Linux and on an Android tablet as well, not to mention many systems are supported too that other engines can't even dream of. This is the way.
"How will you handle different versions of your player, and how will the game update itself?"
Nothing I haven't done a million times in other projects. I've already thought of this and added the necessary requirements in the game files.
"If they do not accept, you can fork it and implement it yourself."
I agree an average programmer would want to fork, but I'm anything but an average programmer. I can write my own code which is better, faster, more featureful and nontheless dependency-free (Tiled depends on a specific version of QT, and QT is not Free and Open Source and new versions aren't backward compatible, and sooner or later QT5 will became EOL).
"Oof. How will you be able to handle objects on tables? Tiles above the characters? Over/under bridges? Animated tiles? Parallax mapping? Replacing a tile with another one during scripts and events?"
I don't want to be rude so I wont say "RTFM", but seriously, read the TirNanoG User's Manual that I've linked, you'll get answers to your questions there. I've thought all of these (and even more). These are ALREADY IMPLEMENTED.
"Game makers will shy away from your engine if basic features from RPG Maker aren't there. These things don't all have to be implemented on day 1"
Not just all basic RPG Maker features are ALREADY IMPLEMENTED, but there are features that RPG Maker can't even dream of. For example you can use the built-in "Preview" functionality in the editor to check out right away if you have configured the parallaxes and the ambient light for a specific map correctly or not (something that RPG Maker never could and probably never will be able to do).
"Typically, Tiled is used with engines with various limitations, you just document them."
Seriously, RTFM, click on the links in my previous posts! Everything IS ALREADY DOCUMENTED even to last little bit what and how can be used in Tiled if you want your maps to be compatible. Even for features like directed vectors (used for NPC patrol paths) that Tiled doesn't support, but are workarounded.
And yes, I've even implemented the same bugs in the TMX format so that map files can be really 100% compatible with Tiled.
Cheers,
bzt
No actually they are browser JavaScript source code. In text files. They run in the browser on any platform. You are misinformed.
Sorry, I assumed these were not possible when I read in your post that you had one layer, but I was wrong. Reading your manual, it appears you do have layers.
It is not clear to me from reading your manual how to put a tile on top of the player. Please explain, for example, how to make a bridge that the player could walk both on top of and underneath, in your manual. Or provide me with the link to the explanation.
An addition to the map section on how to do parallax mapping, animated tiles, and switching them during events would be nice.
I apologize for making you upset. My reaction to the use of C is based on my experience, but this is your project. I hope it proves to be great!
HTML5 Canvas Old School RPG
"No actually they are browser JavaScript source code. In text files. They run in the browser on any platform. You are misinformed."
Not all of them. I just did a quick search, and this one or this one or this one for example isn't JavaScript, but written in C++ and compiled into a Windows binary. But if they run in a browser, that's even worse: now you have a dependency of a several gigabytes application too which is known to be the worst for compatibility in the history of computers.
"I read in your post that you had one layer"
I never wrote that. I wrote "needs strict layer arrangement", meaning there's a layer with ground tiles at the bottom, another layer on top of that with objects, another on top of that etc. Just like in FlareRPG.
"It is not clear to me from reading your manual how to put a tile on top of the player."
You use the "roof" layer, not the "ground" layer.
"how to do parallax mapping"
See here. You can set both a time-based as well as a player-movement relative delta adjustments.
The first and third values specify how much the parallax moves every
given time intervals on the X and Y axis (good for example creating a
raining effect). The second and fourth values on the other hand
specify how much the parallax moves when the player moves (good
to create a perception of depth). The combination of these can give
a very nice-looking effect on the parallaxes.
You can specify multiple parallaxes both above and below the map layers.
"animated tiles"
Depends. If you're using a 2D sprite sheet, then see here (you can use .xcf, .psd, .png, animated .gif, .jpg etc. files). If you're importing sprites from skeletal-based animated 3D models, then see here. (.m3d and .obj, other formats are supported through Assimp if you have that installed, which might or might not work correctly. I DO NOT provide support for Assimp.) The screenshot in the manual shows importing a character animation, but the workflow is exactly the same for animated tiles too. The only difference is, which sprite category is selected.
"switching them during events"
You have 3 command icons which you can drag'n'drop into any event handler's script editor area: "Place an object", "Remove object" and "Replace object". Use the one that suits your need. They have an object parameter and a location parameter (which uses a popup window with the map, so you don't have to keep the coordinates in mind). For example, the cutscene scripting in the manual has a screenshot of that, the last command happens to be a "Remove object" command.
"I apologize for making you upset. My reaction to the use of C is based on my experience, but this is your project."
No worries, I wasn't upset. It is just I have heard that a "language can replace the experience of a programmer" argument way too many times, but it is still bullshit. For a good programmer the language should not matter at all, and for a bad programmer, well, they can make huge mistakes in any language.
Not implying anything, but for example, Tiled is written in C++, yet the last two releases were stability fixes and crash bugfixes, because using a high-level OOP language like C++ doesn't help you with memory management at all. (Actually, my experience is quite the contrary: the higher-level the language is, the more problematic it is, because the language keeps getting in the programmer's way, and as unexperienced programmers try to workaround the language's restrictions they tend to make even bigger mistakes. For example creating a graph with double-linked nodes in Rust is impossible without dirty hacks, so the language isn't helping, rather forcing you to use dirty tricks. With C there's no such thing, there it is obvious that the programmer MUST always be careful, but in return it does not get in your way. Okay, I got carried away, I'm now way off-topic, sorry).
Cheers,
bzt
Forum rules:
Choose a nicer way to request review of your documentation, please.
--Medicine Storm
@MedicineStorm: I've also wrote before "I don't want to be rude so I wont say "RTFM", but seriously, read the TirNanoG User's Manual that I've linked, you'll get answers to your questions there."
"Choose a nicer way to request review of your documentation, please."
Sure, but you misunderstood, I wasn't requesting a review (at least not in this conversation). He had questions but was neglecting to read the manual and was keep repeatedly asking the same questions. I've given links to specific sections of the manual in my last post, so I consider this resolved.
If he (or anyone else) has further questions, I'll gladly answer those too.
Cheers,
bzt
"I don't want to be rude so I won't say exactly what I'm saying I don't want to say which is rude"
You were asking him to read the documentation. also known as "reviewing your documentation". I did not misunderstand. I recognize the intent was to direct attention back to what was already provided and being neglected. My point is, it was done in a rude fashion, whether that was your intent or not. I have no issue with saying "please take a look at the links I provided above. They answer all the questions you are asking."
I do have a problem with terms like RTFM, namely because it is a near perfect example of what is outlined in the forum rule examples of what not to do. I am glad you consider that resolved. I need to make sure everyone understands why that isn't the way to talk to people here.
--Medicine Storm
"I recognize the intent was to direct attention back to what was already provided and being neglected. My point is, it was done in a rude fashion, whether that was your intent or not."
No, that wasn't my intent, and I do apologize if what I said might have sounded rude. I didn't wanted to break any of the forum rules, but if I unintentionally did then I apologize to you for that as well as to @Gaurav for the wording. Sorry!
Cheers,
bzt
Thank you, and understood.
I would love a user-friendly game editor with an LPC focus! I am messing with the editor now, but I'm itching to try out what I'm doing with the editor, so please let us know when that player is ready to try out. Even if it does't have all the features promised by the Editor, yet. :)
--Medicine Storm
@MedicineStorm: sure thing, I will let you know! Right now I'm estimating about a week to finish the editor and about 2 months development to have a sufficiently working player, so don't hold your breath! Luckily I can reuse large portion of the codebase in the player from the "Preview" feature of the editor :-)
Cheers,
bzt