git » fp-git.git » commit 8cf6b11

more map handling code

author ecalot
2004-08-13 04:33:40 UTC
committer ecalot
2004-08-13 04:33:40 UTC
parent 4af2e317faff9e10a43898258783cd646a2ef4f7

more map handling code

FP/src/Makefile +2 -2
FP/src/include/maps.h +24 -47
FP/src/include/room.h +4 -1
FP/src/ker/kernel.c +20 -13
FP/src/ker/room.c +66 -73
FP/src/res/maps.c +82 -127

diff --git a/FP/src/Makefile b/FP/src/Makefile
index 834a6a5..56fb8e1 100644
--- a/FP/src/Makefile
+++ b/FP/src/Makefile
@@ -115,9 +115,9 @@ kernel.o: ker/kernel.c include/kernel.h include/resources.h include/output.h
 	$(INFO) Compiling main kernel...
 	$(CC) -c ker/kernel.c $(OPTIONS)
 
-room.o: ker/drawscreen.c
+room.o: ker/room.c
 	$(INFO) Compiling kernel room object...
-	$(CC) -c ker/drawscreen.c $(OPTIONS)
+	$(CC) -c ker/room.c $(OPTIONS)
 
 kid.o: ker/kid.c
 	$(INFO) Compiling kernel kid object...
diff --git a/FP/src/include/maps.h b/FP/src/include/maps.h
index e0fb497..78ead31 100644
--- a/FP/src/include/maps.h
+++ b/FP/src/include/maps.h
@@ -34,57 +34,34 @@ maps.c: Freeprince : Map handling library
 #define _MAPS_H_
 
 #include "map_defs.h"
-
 #include "room.h"
+#include "resources.h" /* tMemory */
+#include "kid.h" /* tKid */
+
+typedef struct {
+	tRoomId        links[4*24];
+	unsigned char  fore [24*30];
+	unsigned char  back [24*30];
+	/*
+	 * Active door handling here
+	 * */
+	int time;
+	unsigned char start[3];
+} tMap;
 
 typedef enum {eLeft=0,eRight=1,eUp=2,eDown=3}tDirection;
 
-int levelUse(void* level);
-/* Sets the level for future use using the resource given
- * Initializes the position in the beginning of the level
- *
- * Return 0 on success
- */
-tTile levelGetTile(tRoom* room,int x, int y);
-
-int levelGetScreenWalls(unsigned char* data,unsigned char* borders);
-/* nt levelGetRoom (tRoom* room); */
-/* This will save a screen map into data.
- * 
- * data is a pre-allocated array with 10x3=30 bytes with the screen map
- * dumped over it in left-to-right/upper-to-lower oreder. 
- *
- * borders is another pre-allocated array with 10 upper bytes, 10 bottom
- * bytes, 3 left-side bytes, 3 right-side bytes and 4 bytes for the
- * corners. This is another 30 bytes. The order has to be determined!
- * In case the screen doesn't exist the 0x00 (free foreground) byte will
- * be returned for the bottom and right sides, the wall foreground for
- * the left side and the simple tile byte for the top side.
- */
-
-int levelGetScreenItems(unsigned char* data,unsigned char* borders);
-/* This will save a screen map modifiers into data.
- *
- * data and borders are in the same form as Walls but they contain
- * additional modifiers that must be defined in maps.h.
- * e.g. MAPS_ITEMS_DOOROPEN 0x01
- */
-
-int levelMoveScreen(tDirection direction);
-/* Moves the position screen that is inside the library
- *
- * Returns 0 id the screen didn't exist and the screen id
- * in case the screen was moved
- */
- 
-int levelGetGuards(/* TODO: add modifiers */);
-int levelGetDoorMap(/* TODO: idem */);
-
-int levelGetStarPosition(int* screen, int* position); /* TODO: define
-		         position as an int or using x,y coordinate system*/
-
-int levelGetInformation(int *thisScreen, unsigned char* LRUDscreens, unsigned char* cornerScreens);
-/* TODO: define the format of cornerscreens */
+/* called from reources */
+void* mapLoadLevel(tMemory* level);
+void  mapDestroy(tData* map);
+
+/* called from the kernel */
+tRoom mapGetRoom(tData* map, tRoomId roomId);
+void  mapStart(tData* map, tKid* kid, tRoomId* roomId);
+
+/* events */
+void  mapPressedTile(tData* map, tTile tile);
+void  mapMove(tData* map);
 
 #endif
 
diff --git a/FP/src/include/room.h b/FP/src/include/room.h
index 1043c62..cbfd77b 100644
--- a/FP/src/include/room.h
+++ b/FP/src/include/room.h
@@ -40,6 +40,7 @@ typedef unsigned char tTileId;
 typedef unsigned char tModId;
 
 typedef struct {
+	void*          level;
 	tRoomId        id;
 	tRoomId        links[4];
 	tRoomId        corners[4];
@@ -63,7 +64,9 @@ typedef struct {
 	char code;
 } tTile;
 
-void drawScreen(/*tRoom room, */int layer,int level); /* TODO: rename it to roomDraw */
+tTile roomGetTile(tRoom* room,int x, int y);
+void roomDrawBackground(tRoom* room);
+void roomDrawForeground(tRoom* room);
 
 #endif
 
diff --git a/FP/src/ker/kernel.c b/FP/src/ker/kernel.c
index 3d0fe5e..25556c9 100644
--- a/FP/src/ker/kernel.c
+++ b/FP/src/ker/kernel.c
@@ -40,20 +40,27 @@ kernel.c: FreePrince : Main Kernel
 #include "titles.h"
 #include "kid.h"
 #include "room.h"
+#include "maps.h"
 
 /*
  * Main game control function
  */
 
 int playgame(int optionflag,int level) {
-	tKey   key=inputCreateKey();
-	tKid   kid=kidCreate();
-
-/* Game loop here */
-	drawScreen(4,level);
-/* Level loop here */
-	outputClearScreen(); /* TODO: send to drawScreen(0) */
-	/*drawScreen(0); TODO: try to optimize what to draw */
+	/* Create objects */
+	tKey    key=inputCreateKey();
+	tKid    kid=kidCreate();
+	tData*  map=NULL; /*resLoad(RES_MAP+level);*/
+	tRoom   room;
+	tRoomId roomId;
+	
+	/* Game loop here */
+	
+	/* Initialize kid and room in the map */
+	mapStart(map,&kid,&roomId);
+	room=mapGetRoom(map,roomId);
+	
+	/* Level loop here */
 	while (1) {
 		if (inputGetEvent(&key)) {
 			/* Time event */
@@ -64,21 +71,21 @@ int playgame(int optionflag,int level) {
 			 * the key is interpreted in kid object
 			 */
 			kidMove(&kid,key);
-			
+			mapMove(map);	
 			/* Drawing functions */
 			outputClearScreen(); /* TODO: send to drawScreen(0) */
-			drawScreen(0,0);
-			drawScreen(1,0);
-			drawScreen(2,0);
+			roomDrawBackground(&room);
 			kidDraw(kid);
-			drawScreen(3,0);
+			roomDrawForeground(&room);
 			outputUpdateScreen();
 		} else {
 			/* Action event */
 			switch (key.actionPerformed) {
 			case quit:
+				resFree(map);
 				return 1;
 			case gotoTitles:
+				resFree(map);
 				return 0;
 			default:
 				break;
diff --git a/FP/src/ker/room.c b/FP/src/ker/room.c
index c7eda55..caa3213 100644
--- a/FP/src/ker/room.c
+++ b/FP/src/ker/room.c
@@ -19,8 +19,8 @@
 */
 
 /*
-drawscreen.c: FreePrince : Draw Screen
-\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf\xaf
+room.c: FreePrince : Room and Tile Object
+\xaf\xaf\xaf\xaf\xaf\xaf
  Copyright 2004 Princed Development Team
   Created: 18 Jul 2004
 
@@ -38,82 +38,75 @@ drawscreen.c: FreePrince : Draw Screen
 #include "room.h"
 #include "maps.h"
 
-void drawScreen(/*tRoom room, */int layer,int level) { /* TODO: rename it to roomDraw */
-	static int frame=0;
-	int i,x,y,fase;
-	tTile tile;
-	static tData* torch;
-	static tData* environment;
-
-/* draws the screen where the kid is
- * if layer is 0 the background is loaded
- * if layer is 1 the foreground columns are loaded
- * if layer is 2 the torches are drawn
- * if layer is 3 the columns that need to be redrawn are drawn
- *
- * if layer is 4 the function loads the vdungeon enviorment
- *             5                        vpalace
- */
-
-	switch (layer&0x0f) {
-		case 0:
-			/* Draw and initialize the background */
-			frame=0;
-			for(x=0;x<5;x++) {
-				for (y=0;y<12;y++) {
-					/*tile=levelGetTile(room,x,y);*/
-					printf("%c",'A'+tile.code);
-				/*drawTile((i%10)*20,(i/10)*20,map[i]);*/
-				}
-				printf("\n");
-			}
-			break;
-		case 1:
-			break;
-		case 2:
-			if (frame==torch->frames) frame=0;
-			fase=0;
-			for (i=0;i<30;i++) {
-/*				if (map[i]==torch) {								
-					outputDraw((i%10)*20,(i/10)*20,torch.pFrame[(frame+fase)%torch.frames]);
-					fase+=2;
-				}*/
-			}
-			frame++;
-			break;
-		case 3:
-			break;
-		case 4:
-		case 5:
-			if (environment!=NULL) {
-				resFree(environment);
-				if (layer&0x1) {
-					environment=resLoad(RES_IMG_ENV_DUNGEON);
-				} else {
-					/*environment=resLoad(RES_IMG_ENV_PALACE);*/
-				}
-			}
-			if (torch==NULL) {
-				torch=resLoad(RES_ANIM_TORCH);
-			}
-			break;
-		case 6:
-			if (torch!=NULL) {
-				resFree(torch);
-				torch=NULL;
-			}
-			if (environment!=NULL) {
-				resFree(environment);
-				environment=NULL;
-			}
-			break;
+static struct {
+	tData* torch;
+	tData* environment;
+} roomGfx;
+
+void roomLoadGfx(long environment) {
+	if (roomGfx.environment!=NULL) {
+		resFree(roomGfx.environment);
+	}
+	roomGfx.environment=resLoad(environment);
+	if (roomGfx.torch==NULL) {
+		roomGfx.torch=resLoad(RES_ANIM_TORCH);
 	}
+}
 
-	
+void roomFree() {
+	if (roomGfx.environment) resFree(roomGfx.environment);
+	if (roomGfx.torch) resFree(roomGfx.torch);
+	roomGfx.torch=(roomGfx.environment=NULL);
 }
 
+/* room */
 tTile roomGetTile(tRoom* room,int x, int y) {
-	tTile result;
+	tTile   result;
+	tTileId fore;
+	tModId  back;
+
+	fore=room->fore[x+12*y];
+	back=room->back[x+12*y];
+	result.code=fore&0x1F;
+	
+	switch (result.code) { /* TODO: use arrays and a better algorithm */
+	case T_EMPTY:
+		result.walkable=0;
+		result.block=0;
+		result.hasTorch=0;
+		result.hasFloor=0;
+		result.hasBrokenTile=0;
+		result.isWall=0;
+		result.hasSword=0;
+		break;
+	case T_FLOOR:
+	case T_TORCH:
+	case T_SWORD:
+	case T_DEBRIS:
+		result.walkable=1;
+		result.block=0;
+		result.hasTorch=(result.code==T_TORCH);
+		result.hasFloor=1;
+		result.hasBrokenTile=(result.code==T_DEBRIS);
+		result.isWall=0;
+		result.hasSword=(result.code==T_SWORD);
+		break;
+	case T_WALL:
+		result.walkable=0;
+		result.block=1;
+		result.hasTorch=0;
+		result.hasFloor=0;
+		result.hasBrokenTile=0;
+		result.isWall=1;
+		result.hasSword=0;
+		break;
+	}
 	return result;
 }
 
+void roomDrawBackground(tRoom* room) {
+}
+void roomDrawForeground(tRoom* room) {
+}
+
+
diff --git a/FP/src/res/maps.c b/FP/src/res/maps.c
index f4254a9..7193ca3 100644
--- a/FP/src/res/maps.c
+++ b/FP/src/res/maps.c
@@ -31,14 +31,15 @@ maps.c: Freeprince : Map handling library
 */
 
 #include <string.h> /* mempcy */
+#include <stdlib.h> /* malloc */
 #include "maps.h"
 #include "room.h"
+#include "kid.h"
+#include "resources.h"
 
-static unsigned char* slevel;
-static int sscreen;
+#define slevel(field) (((tMap*)map->pFrames[0])->field)
 
-
-/* Privates */
+/* Privates 
 
 void maps_getStartPosition(int* pantalla, int* p, int *b,tDirection *sentido,tDirection *sentido2) {
 	int valor;
@@ -52,84 +53,30 @@ void maps_getStartPosition(int* pantalla, int* p, int *b,tDirection *sentido,tDi
 }
 
 void maps_getGuard(int pantalla,int *p,int *b,int *skill,int *color,tDirection *sentido,int *exists) {
-	/* Posicion */
+	 Posicion 
 	unsigned char valor=(slevel[(MAPS_BLOCK_OFFSET_GUARD_POSITION+sscreen-1)]);
 	*exists = (valor<30);
 	*b      = (valor%10);
 	*p      = (valor/10);
-	/* sentido */
+	 sentido 
 	*sentido=slevel[MAPS_BLOCK_OFFSET_GUARD_DIRECTION+pantalla-1]?eRight:eLeft;
-	/* skill */
+	* skill *
 	*skill  =slevel[MAPS_BLOCK_OFFSET_GUARD_SKILL+pantalla-1];
-	/* Color */
+	* Color *
 	*color  =slevel[MAPS_BLOCK_OFFSET_GUARD_COLOR+pantalla-1];
 }
-
+*/
 /* Publics */
-
-int levelUse(void* level) {
-/* Sets the level for future use using the resource given
- * Initializes the position in the beginning of the level
- *
- * Return 0 on success
- */
-	
-	/* Remember level */
-	slevel=level;
-
-	/* Set start screen */
-	sscreen=slevel[MAPS_BLOCK_OFFSET_START_POSITION];
-
-	printf("levelUse: using new level\n");	
-	return level==NULL;
-}
-
-tTile levelGetTile(tRoom* room,int x, int y) {
-	tTile   result;
-	tTileId fore;
-	tModId  back;
-
-	fore=room->fore[x+12*y];
-	back=room->back[x+12*y];
-	result.code=fore&0x1F;
-	
-	switch (result.code) { /* TODO: use arrays and a better algorithm */
-	case T_EMPTY:
-		result.walkable=0;
-		result.block=0;
-		result.hasTorch=0;
-		result.hasFloor=0;
-		result.hasBrokenTile=0;
-		result.isWall=0;
-		result.hasSword=0;
-		break;
-	case T_FLOOR:
-	case T_TORCH:
-	case T_SWORD:
-	case T_DEBRIS:
-		result.walkable=1;
-		result.block=0;
-		result.hasTorch=(result.code==T_TORCH);
-		result.hasFloor=1;
-		result.hasBrokenTile=(result.code==T_DEBRIS);
-		result.isWall=0;
-		result.hasSword=(result.code==T_SWORD);
-		break;
-	case T_WALL:
-		result.walkable=0;
-		result.block=1;
-		result.hasTorch=0;
-		result.hasFloor=0;
-		result.hasBrokenTile=0;
-		result.isWall=1;
-		result.hasSword=0;
-		break;
-	}
-	return result;
+void* mapLoadLevel(tMemory* level) {
+	tMap* map=(tMap*)malloc(sizeof(tMap));
+	memcpy(map->fore,level->array+MAPS_BLOCK_OFFSET_WALL,30*24);
+	memcpy(map->back,level->array+MAPS_BLOCK_OFFSET_BACK,30*24);
+	memcpy(map->start,level->array+MAPS_BLOCK_OFFSET_START_POSITION,3);
+/*	memcpy(slevel(links),level.data+MAPS_BLOCK_OFFSET_LINKS,4*24);*/
+	return (void*)map;
 }
 
-
-tRoom levelGetRoom(tRoomId roomId) {
+tRoom mapGetRoom(tData* map, tRoomId roomId) {
 	tRoom result;
 	tRoomId roomAux;
 
@@ -137,12 +84,12 @@ tRoom levelGetRoom(tRoomId roomId) {
 	result.id=roomId;
 
 	/* SET room links */
-	memcpy(result.links,slevel+MAPS_BLOCK_OFFSET_LINK+((roomId-1)*4),4);
+	memcpy(result.links,slevel(links)+((roomId-1)*4),4);
 	/* up corners */
 	roomAux=result.links[2];
 	if (roomAux) {
-		result.corners[0]=slevel[MAPS_BLOCK_OFFSET_LINK+((roomAux-1)*4)+0];
-		result.corners[1]=slevel[MAPS_BLOCK_OFFSET_LINK+((roomAux-1)*4)+1];
+		result.corners[0]=*(slevel(links)+((roomAux-1)*4)+0);
+		result.corners[1]=*(slevel(links)+((roomAux-1)*4)+1);
 	} else {
 		result.corners[0]=0;
 		result.corners[1]=0;
@@ -150,8 +97,8 @@ tRoom levelGetRoom(tRoomId roomId) {
 	/* down corners */
 	roomAux=result.links[3];
 	if (roomAux) {
-		result.corners[2]=slevel[MAPS_BLOCK_OFFSET_LINK+((roomAux-1)*4)+0];
-		result.corners[3]=slevel[MAPS_BLOCK_OFFSET_LINK+((roomAux-1)*4)+1];
+		result.corners[2]=*(slevel(links)+((roomAux-1)*4)+0);
+		result.corners[3]=*(slevel(links)+((roomAux-1)*4)+1);
 	} else {
 		result.corners[2]=0;
 		result.corners[3]=0;
@@ -160,32 +107,32 @@ tRoom levelGetRoom(tRoomId roomId) {
 	/* SET corner bytes */
 	/* left+up */
 	if ((roomAux=result.corners[0])) {
-		result.fore[0]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+29];
-		result.back[0]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+29];
+		result.fore[0]=*(slevel(fore)+30*(roomAux-1)+29);
+		result.back[0]=*(slevel(back)+30*(roomAux-1)+29);
 	} else {
 		result.fore[0]=MAP_F_WALL;
 		result.back[0]=MAP_B_NONE;
 	}
 	/* right+up */
 	if ((roomAux=result.corners[1])) {
-		result.fore[11]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+20];
-		result.back[11]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+20];
+		result.fore[11]=*(slevel(fore)+30*(roomAux-1)+20);
+		result.back[11]=*(slevel(back)+30*(roomAux-1)+20);
 	} else {
 		result.fore[11]=MAP_F_FREE;
 		result.back[11]=MAP_B_NONE;
 	}
 	/* left+down */
 	if ((roomAux=result.corners[2])) {
-		result.fore[48]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+9];
-		result.back[48]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+9];
+		result.fore[48]=*(slevel(fore)+30*(roomAux-1)+9);
+		result.back[48]=*(slevel(back)+30*(roomAux-1)+9);
 	} else {
 		result.fore[48]=MAP_F_WALL;
 		result.back[48]=MAP_B_NONE;
 	}
 	/* right+down */
 	if ((roomAux=result.corners[3])) {
-		result.fore[59]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+0];
-		result.back[59]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+0];
+		result.fore[59]=*(slevel(fore)+30*(roomAux-1)+0);
+		result.back[59]=*(slevel(back)+30*(roomAux-1)+0);
 	} else {
 		result.fore[59]=MAP_F_WALL;
 		result.back[59]=MAP_B_NONE;
@@ -193,12 +140,12 @@ tRoom levelGetRoom(tRoomId roomId) {
 
 	/* Left room */
 	if ((roomAux=result.links[0])) {
-		result.fore[12]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+9];
-		result.back[12]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+9];
-		result.fore[24]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+19];
-		result.back[24]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+19];
-		result.fore[36]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+29];
-		result.back[36]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+29];
+		result.fore[12]=*(slevel(fore)+30*(roomAux-1)+9);
+		result.back[12]=*(slevel(back)+30*(roomAux-1)+9);
+		result.fore[24]=*(slevel(fore)+30*(roomAux-1)+19);
+		result.back[24]=*(slevel(back)+30*(roomAux-1)+19);
+		result.fore[36]=*(slevel(fore)+30*(roomAux-1)+29);
+		result.back[36]=*(slevel(back)+30*(roomAux-1)+29);
 	} else {
 		result.fore[12]=MAP_F_WALL;
 		result.back[12]=MAP_B_NONE;
@@ -210,12 +157,12 @@ tRoom levelGetRoom(tRoomId roomId) {
 
 	/* Right room */
 	if ((roomAux=result.links[1])) {
-		result.fore[11]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+0];
-		result.back[11]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+0];
-		result.fore[23]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+10];
-		result.back[23]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+10];
-		result.fore[35]=slevel[MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+20];
-		result.back[35]=slevel[MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+20];
+		result.fore[11]=*(slevel(fore)+30*(roomAux-1)+0);
+		result.back[11]=*(slevel(back)+30*(roomAux-1)+0);
+		result.fore[23]=*(slevel(fore)+30*(roomAux-1)+10);
+		result.back[23]=*(slevel(back)+30*(roomAux-1)+10);
+		result.fore[35]=*(slevel(fore)+30*(roomAux-1)+20);
+		result.back[35]=*(slevel(back)+30*(roomAux-1)+20);
 	} else {
 		result.fore[11]=MAP_F_WALL;
 		result.back[11]=MAP_B_NONE;
@@ -227,8 +174,8 @@ tRoom levelGetRoom(tRoomId roomId) {
 
 	/* Top room */
 	if ((roomAux=result.links[2])) {
-		memcpy(result.fore+1,slevel+MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+20,10);
-		memcpy(result.back+1,slevel+MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+20,10);
+		memcpy(result.fore+1,slevel(fore)+30*(roomAux-1)+20,10);
+		memcpy(result.back+1,slevel(back)+30*(roomAux-1)+20,10);
 	} else {
 		memcpy(result.fore+1,"aaaa aaaa ",10); /* TODO: use tiles */
 		memcpy(result.back+1,"aaaa aaaa ",10); /* TODO: use tiles */
@@ -236,20 +183,20 @@ tRoom levelGetRoom(tRoomId roomId) {
 
 	/* Bottom room */
 	if ((roomAux=result.links[3])) {
-		memcpy(result.fore+49,slevel+MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+0,10);
-		memcpy(result.back+49,slevel+MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+0,10);
+		memcpy(result.fore+49,slevel(fore)+30*(roomAux-1)+0,10);
+		memcpy(result.back+49,slevel(back)+30*(roomAux-1)+0,10);
 	} else {
 		memcpy(result.fore+49,"aaaa aaaa ",10); /* TODO: use tiles */
 		memcpy(result.back+49,"aaaa aaaa ",10); /* TODO: use tiles */
 	}
 
 	/* Main room */
-	memcpy(result.fore+13,slevel+MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+0,10);
-	memcpy(result.back+13,slevel+MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+0,10);
-	memcpy(result.fore+25,slevel+MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+10,10);
-	memcpy(result.back+25,slevel+MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+10,10);
-	memcpy(result.fore+37,slevel+MAPS_BLOCK_OFFSET_WALL+30*(roomAux-1)+20,10);
-	memcpy(result.back+37,slevel+MAPS_BLOCK_OFFSET_BACK+30*(roomAux-1)+20,10);
+	memcpy(result.fore+13,slevel(fore)+30*(roomAux-1)+0,10);
+	memcpy(result.back+13,slevel(back)+30*(roomAux-1)+0,10);
+	memcpy(result.fore+25,slevel(fore)+30*(roomAux-1)+10,10);
+	memcpy(result.back+25,slevel(back)+30*(roomAux-1)+10,10);
+	memcpy(result.fore+37,slevel(fore)+30*(roomAux-1)+20,10);
+	memcpy(result.back+37,slevel(back)+30*(roomAux-1)+20,10);
 
 /* This will save a screen map into data.
  * 
@@ -273,31 +220,39 @@ tRoom levelGetRoom(tRoomId roomId) {
 	return result;
 }
 
-/*int levelMoveScreen(tDirection direction) {
- * Moves the position screen that is inside the library
- *
- * Returns 0 id the screen didn't exist and the screen id
- * in case the screen was moved
- *
- 
-	return sscreen=slevel[MAPS_BLOCK_OFFSET_LINK+((sscreen-1)*4)+direction]; 
-}*/
+void  mapStart(tData* map, tKid* kid, tRoomId* roomId) {
+	/* kid->x,y */
+	*roomId=slevel(start)[0];
+}
 
-int levelGetGuards(/* TODO: add modifiers */);
-int levelGetDoorMap(/* TODO: idem */);
+void  mapMove(tData* map) {
+	/* slevel(time)++;*/
 
-int levelGetStarPosition(int* screen, int* position) {
-/* TODO: define position as an int or using x,y coordinate system*/
-	/* maps_getStartPosition(screen, position, int *b,tDirection *sentido,tDirection *sentido2); */
-	return 0;
 }
 
-int levelGetInformation(int *thisScreen, unsigned char* LRUDscreens, unsigned char* cornerScreens) {
-/* TODO: define the format of cornerscreens */
-	*thisScreen=sscreen;
-	memcpy(LRUDscreens,slevel+MAPS_BLOCK_OFFSET_LINK+(sscreen-1)*4,4);
-	return sscreen;
-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 #ifdef OLD_MAP_SRC