I've started playing the game again after many many years and was pleasantly surprised with all the progress, the game feels much more accesible now than it was before and I feel like taking a new project to upgrade it. I am considering in developing a new creature, but first I am testing the game to check if it's even possible at all. During the last few days I've discovered the following:
-There are 31 creatures hard-coded into the game, that means no new ones can be added (and won't be possible in the future without extensive work, possibly never) replacing the existing ones remains the only option, but that doesn't make much sense considering the necessary effort.
-One of the creatures "FLOATING_SPIRIT" is actually just a placeholder to allow possession by the keeper once a level has been lost. I replaced this creature in the configuration file and it worked fine, the drawback is that the game now crashes if you try to walk around in first person after being defeated (This appears constantly in the log file: Warning: get_players_spectator_model: There is no spectator breed for player 0!). I decided to go down this route since It seems like a low price to pay to me, maybe in a later release of KeeperFX that feature can be disabled to prevent crashes.
-I've managed to get the creature name referenced in the gtext files and translated, but only by using the string reserved for "FLOATING_SPIRIT", there seems to be no way of adding new strings for naming things and making the game read them.
-Then I started to investigate the sprites and the animations, Keeper FX uses .PNG files, simple enough, but the formating in the filelist_rot.txt files is driving me crazy. It looks like this:
animation_xxxx A SS -DD -FF
frame1.png
frame2.png
frame3.png
frame4.png
frame5.png
-The xxxx number seems to be just the place in order of the line string that animation occupies inside the animlist.txt file, I've tried specifying a different name format and there seems to be no problem at all. The "A" number, I don't know what it does yet, it is usually 0 or 2, I suspect that 0 is for static sprites and 2 for dynamic ones. "SS" is the number of frames per animation. The last two numbers I have no idea of what they mean, maybe sprite scaling values in X and Y axis, but haven't had time to try them yet.
-The animations are referenced in the creature.cfg file in a funny way, it seems to be that the number the actual animation starts is not the one specified, but the one immediately before, as in if anim number 500 is the first one of the imp, and the 499 is the last of knight, writting 499 will show the imp, and not the knight.
-The number of sprites seems to be capped at 982, anytime I try to add a new one at the end of animlist.txt it gives an error in the log files (I am looking for it but lost it, it says something about an array overflow).
-I've run a few test with my own creatures.jpy files with different versions. Firstly I made my own version of an already existing creature animation and asigned it to my new creature. Since I failed to add it as a new sprite, I chose to overwrite one of the placeholder ones in the middle of the list, which had a single sub-animation with a single frame, with my modified walking animation. This had little success, on one side, the animation did show ingame, but it was only a frozen frame and I completely messed up the rest of the animations that were referenced further down in the animlist.txt file. Then I replaced the last one in the list instead and made a new creature.jpy file, this seems to work better, but still the sprite is frozen and also cropped in a weird way. I've also noticed this popping up constantly in the log files:
Warning: LbSpriteSetScalingData: Tried scaling width 66 -> 0
Warning: LbSpriteSetScalingData: Tried scaling height 27 -> 0
Warning: LbSpriteSetScalingData: Tried scaling width 64 -> 0
Warning: LbSpriteSetScalingData: Tried scaling height 27 -> 0
[etc...]
-I have also tried different image sizes to no avail, since I read somewhere that the limit is 250x250 or something like that.
So this has been it so far, I'd appreciate some comments and some help my way if possible, although I am very aware I might be hitting a wall real soon.