Being inspired to help improve the gani situation I took it upon myself to write a flexible GANI class with some functions to load, manipulate, and save the data in the correct format.
Example Script:
PHP Code:
function onCreated() {
if (this.testgani != NULL) this.testgani.destroy();
this.testgani = new TStaticVar();
this.testgani.join("gani");
this.testgani.loadgani("levels/ganis/walk.gani");
this.testgani.setSingleDir(true);
this.testgani.savegani("outputfolder/walk_messedlol.gani");
this.testgani.destroy();
}
Functions:
PHP Code:
// File I/O Functions
public function loadgani(path)
public function savegani(newpath)
// Animation Functions
public function getAniLength()
public function isLooped()
public function setLooped(bool)
public function isContinuous()
public function setContinuous(bool)
public function isSingleDir()
public function setSingleDir(bool)
public function getSetBackTo()
public function setSetBackTo(newbackto)
// Frame Functions
public function getFrameSprites(ind, dir)
public function setFrameSprites(ind, dir, newsprites)
public function getFrameData(ind, dir)
public function getFrameTime(ind)
public function getFrameSound(ind)
public function setFrameSound(ind, newsound, ox, oy)
public function getFrameWait(ind)
public function setFrameWait(ind, waitvalue)
public function getFrameCount()
// Sprite Functions
public function addSprite(sprite_id, sprite_img, sprite_x, sprite_y, sprite_w, sprite_h, sprite_com)
public function getSprite(spriteid)
public function getSpriteImage(spriteid)
public function setSpriteImage(spriteid, newimg)
public function getSpriteX(spriteid)
public function setSpriteX(spriteid, newval)
public function getSpriteY(spriteid)
public function setSpriteY(spriteid, newval)
public function getSpriteWidth(spriteid)
public function setSpriteWidth(spriteid, newval)
public function getSpriteHeight(spriteid)
public function setSpriteHeight(spriteid, newval)
public function getSpriteComment(spriteid)
public function setSpriteComment(spriteid, comment)
// GANI Effect Functions
public function getColorEffects()
public function addColorEffect(spriteid, r, g, b, a)
public function deleteColorEffect(spriteid)
public function getZoomEffects()
public function addZoomEffect(spriteid, z)
public function deleteZoomEffect(spriteid)
public function getRotateEffects()
public function addRotateEffect(spriteid, r)
public function deleteRotateEffect(spriteid)
public function getStretchYEffects()
public function addStretchYEffect(spriteid, s)
public function deleteStretchYEffect(spriteid)
public function deleteStretchXEffect(spriteid)
public function addStretchXEffect(spriteid, s)
public function getStretchXEffects()
public function deleteModeEffect(spriteid)
public function addModeEffect(spriteid, m)
public function getModeEffects()
There could still be a few more functions added but for the most part it should be a very decent base to work off of.
I've tested it with human2_bow_shoot.gani, and some of Zodiac's ganis and all appears to work just fine after being loaded, manipulated and saved.
If my code doesn't preserve a certain element let me know but I'm pretty sure I've gotten everything.
See attached for class, and the aftermath of my example script.