Hi,
I would use static memory instead of a text file. File text reading, interpreting and rebuilding is pretty slow and intrincated.

Look at this:
Code:
#include <acknex.h>

#define LEVEL_COUNT        20
#define OBJECTS_MAX        10

FONT *fntArial = "Arial#20";

typedef struct OBJECT
{
	var x;
	var y;
	var z;
	var pan;
	var tilt;
	var roll;
	// and so...
} OBJECT;

OBJECT objects[LEVEL_COUNT][OBJECTS_MAX];

void objects_save ()
{
	file_save ( "saved.dat", objects, sizeof(OBJECT) * LEVEL_COUNT * OBJECTS_MAX );
}

void objects_load ()
{
	if ( !file_exists ( "saved.dat" ) )
		return;
	long size = 0;
	void *buffer = file_load ( "saved.dat", NULL, &size );
	memcpy ( objects, buffer, sizeof(OBJECT) * LEVEL_COUNT * OBJECTS_MAX );
	file_load ( NULL, buffer, &size );
}

void objects_zero ()
{
	memset ( objects, 0, sizeof(OBJECT) * LEVEL_COUNT * OBJECTS_MAX );
}

void evnPan ()
{
	var indexX = floor ( LEVEL_COUNT * mouse_pos.x / screen_size.x );
	var indexY = floor ( OBJECTS_MAX * mouse_pos.y / screen_size.y );
	if ( event_type == EVENT_CLICK )
		objects[indexX][indexY].x += 1;
	else if ( event_type == EVENT_RIGHTCLICK )
		objects[indexX][indexY].x -= 1;
}

void main ()
{
	video_mode = 10;
	mouse_mode = 4;
	enable_mouse = 2;
	wait(1);
	
	PANEL *pan = pan_create ( "", 1 );
	pan->size_x = screen_size.x;
	pan->size_y = screen_size.y;
	var stepX = pan->size_x / LEVEL_COUNT;
	var stepY = pan->size_y / OBJECTS_MAX;
	var y = 0;
	for ( ; y<OBJECTS_MAX; y+=1 )
	{
		var x = 0;
		for ( ; x<LEVEL_COUNT; x+=1 )
		{
			pan_setdigits ( pan, 0, (stepX/2)+x*stepX, (stepY/2)+y*stepY, "%.0f", fntArial, 1, &objects[x][y].x );
		}
	}
	pan->event = evnPan;
	pan->flags |= SHOW;
	
	on_s = objects_save;
	on_l = objects_load;
	on_r = objects_zero;
	
	while ( !key_esc )
		wait (1);
	
	pan_remove ( pan );
	sys_exit ( NULL );
}



mouse_left -> encrease
mouse_right -> decrease
R -> zero all values
S -> save data
L -> load data

It saves and loads an array with no interpretations inbetween. Raw data is saved and loaded, so (beforecrazy) after a load everything gets arranged by the array structure you can easily access.

It has other advantajes beside saving and loading like objects linking through levels.

But it also have some disadvantajes like, for example, you can't save pointers with this method, so texts has to be saved into char arrays or object links have to be saved as indexes or offsets into the array. Nothing hard to manage.

Salud!

Last edited by txesmi; 09/24/16 13:39.