- bugfix: bomb wasn't decrementing netcaught
- bugfix: Fixed mask on red "angry" overlay
- bugfix: Ice from snowman now extends on to edge tiles
- bugfix: dotileeffect() no longer affects bullets/effects
- bugfix: fixed bug where invulnerability wouldn't cause flashing
- tweaked difficulty on "look out above!"
- Added pink cloud on which player travels to the next level
- Added boss: King Rat
- Added powerup: fly spray (slows monsters)
- Added powerup: fusion cannon 

EDITOR:
- Added status bar containing various info
- Can now move level position via the editor
- Now quit using 'q', not 'esc'
- Inactive layers are now dimmers, toggle this with 't'
- Remove 'endmaps' and all mapping code from level files
- Removed monstertochar() and chartomonster() functions
- Removed old inline monster code in level files
This commit is contained in:
Rob Pearce 2008-10-07 05:53:06 +00:00
parent af7a793903
commit f2832e4da4
60 changed files with 2709 additions and 1202 deletions

96
defs.h
View File

@ -83,13 +83,41 @@
#define NETSPEED 9 // how fast the player's net moves
#define POWERUPTIME 15 // # secs before a powerup appears
#define CANNONSIZE 10
#define ICESPEED 2 // how fast a level turns to ice
#define MONJUMPSPEED 5 // how high monsters jump
#define BOMBSHAKETIME 100 // time for screen will shake after a bomb
#define RATSHAKETIME 50 // shake time when king rat is stunned
#define BOSSFLASHTIME 15 // how long bosses flash white for when hit
#define BOSSDIETIME 150 // how long bosses flash when dead
#define BELLTIME 20 // how long the bell flash lasts
#define CLOCKTIME 10 // how many seconds a clock lasts
// king rat
#define KR_WALKTIME 100
#define KR_STUNTIME 150
//#define KR_WALKTIME 30
#define KR_MAXJUMP 15 // max initial jumpspeed
#define KR_NUMJUMPS 5
#define KR_CHARGESPEED 8
// king rat states
#define KRS_WALK 0
#define KRS_JUMP 1
#define KRS_WAITFORTOP 2
#define KRS_FALL 3
#define KRS_CHARGEWAIT 4
#define KRS_CHARGE 5
#define KRS_STUN 6
// bell states
#define BELL_DONESOUND 1
#define BELL_DONEFLASH 2
@ -124,7 +152,7 @@
/* enums */
/* sounds */
#define MAXFX 26
#define MAXFX 33
#define FX_SHOOT 0
#define FX_SLAM 1
#define FX_KILL 2
@ -151,6 +179,13 @@
#define FX_ARMOR 23
#define FX_FREEZE 24
#define FX_ICEBREAK 25
#define FX_BOSSWINDUP 26
#define FX_BOSSCHARGE 27
#define FX_BOSSDIE 28
#define FX_BOSSHIT 29
#define FX_BOSSWALL 30
#define FX_SPRAY 31
#define FX_CANNON 32
// Slope types
#define S_NOTSOLID 0
@ -158,7 +193,7 @@
#define S_SLOPE 2
// Sprite types
#define MAXPTYPES 44
#define MAXPTYPES 49
#define P_PLAYER 0
#define P_RAT 1
#define P_CHEESE 2
@ -167,7 +202,7 @@
#define P_BIGNET 5
#define P_BEE 6
#define P_SPIDER 7
#define P_CLOUD 8
#define P_BLACKCLOUD 8
#define P_ICECREAM 9
#define P_CHIPS 10
#define P_BURGER 11
@ -203,6 +238,11 @@
#define P_BELL 41
#define P_CLOCK 42
#define P_SNOWMAN 43
#define P_PINKCLOUD 44
#define P_KINGRAT 45
#define P_SPRAY 46
#define P_CANNONPOWERUP 47
#define P_CANNON 48
// powerups
#define PW_NONE 0
@ -212,6 +252,12 @@
#define PW_RINGWALK 4 // points for walking
#define PW_RINGJUMP 5 // points for jumping
#define PW_CLOCK 6 // freeze time
#define PW_SPRAYUP 7 // fly spray
#define PW_SPRAYDOWN 8 // fly spray
#define PW_CANNON 9 // fusion cannon
#define PW_CANNONFIRE 10 // fusion cannon firing
// "virtual" powerup for bosses
#define PW_RATSHAKE 20 // shake screen horizontally
// Frame names
#define F_WALK1 0
@ -240,8 +286,10 @@
#define LV_CLEAR 1 // all monsters dead
#define LV_WAIT 2 // LEVEL COMPLETE displayed, delay to collect fruits
#define LV_FINAL 3 // delay 5 seconds more...
#define LV_NEXTLEV 4 // end of delay, nextlevel() in 5 seconds
#define LV_GAMEOVER 6 // No lives left.
#define LV_CLOUD 4 // cloud appearing
#define LV_CLOUDLOOP 6 // cloud looping
#define LV_NEXTLEV 7 // cloud done , nextlevel() in 5 seconds
#define LV_GAMEOVER 8 // No lives left.
// movement types
#define MV_NONE 0 // didn't move
@ -280,6 +328,12 @@
#define D_FINAL (4) // ACTUALLY dead, remove the sprite
/// pink cloud
#define PCGROWSPEED (0.02) // how much to grow each turn (0.1 - 0.999)
#define PCSHRINKSPEED (0.06) // how much to shrink each turn (0.1 - 0.999)
#define PCTURN (5) // turn speed while looping
// teleporting states
#define TP_SHRINKING (1) // entering teleporter
@ -293,6 +347,15 @@
#define D_UP (-2)
#define D_DOWN (2)
// boss health bar
#define HEALTHBARY 480-100 // y position of health bar
#define HEALTHBARGAP 2 // gap between health bars
// frames of the bar
#define HEALTHFRAMES 3
#define HF_GREEN 0
#define HF_YELLOW 1
#define HF_RED 2
/* data structures */
typedef struct mapping_s {
@ -342,7 +405,8 @@ typedef struct level_s {
int id;
int bgtileid;
char bgfile[MIDBUFLEN];
char name[SMALLBUFLEN];
char name[MIDBUFLEN];
char filename[MIDBUFLEN];
int map[LEVELW*LEVELH];
int map2[LEVELW*LEVELH]; // second map layer
int tileframe[LEVELW*LEVELH]; // tracks frame numbers for tiles
@ -366,8 +430,8 @@ level_t *level;
typedef struct levelentry_s {
int id;
char *filename;
char *desc;
char filename[MIDBUFLEN];
char desc[MIDBUFLEN];
} levelentry_t;
typedef struct sprite_s {
@ -381,7 +445,6 @@ typedef struct sprite_s {
// CURRENT STATE
// player only
int lives;
int recoiling; // this happens after you get hit while wearing armour
int slamming; // are we slamming our net (player only)
double slamangle;// are what point around is our net?
@ -412,17 +475,27 @@ typedef struct sprite_s {
SDL_Surface *iceimg; // Image to blit for ice
int willbecome; // what fruit this will become when dead
int angry; // is this sprite in ANGRY mode for its AI?
// normally this is a bool, but for monsters we
// it for flashing them when they are hit. in this
// case it will be a number.
struct sprite_s *caughtby; // who has us in their net? NULL if nobody
int quickdie; // die without bouncing?
int caughtstate; // are we caught by a net? being pulled in or caught?
int jumptimer; // delay before we will jump
int willjumpspeed; // how fast we'll jump when jumptimer expires
int flies; // can we fly?
double xs,ys; // bounce direction after death
struct sprite_s *bullet; // pointer to our bullet
struct sprite_s *owner; // if we ARE a bullet, pointer to the sprite who made us
char name[MIDBUFLEN]; // Help text for help icons, otherwise not really used outside of debugging
// pinkcloud only
double size;
double rotated;
double angle;
// player and monster
int lives; // only for player and bosses
int swimming; // are we in the water?
int falling; // are we falling?
int dropping; // are we purposely dropping through solid ground?
@ -461,7 +534,9 @@ imageset_t imageset[MAXPTYPES];
/* external globals */
extern SDL_Color black;
extern SDL_Surface *screen, *temps, *levelbg, *head, *headsmall, *icecube;
extern sprite_t *sprite, *lastsprite, *player;
extern SDL_Surface *healthbar[];
extern SDL_Surface *greenbox;
extern sprite_t *sprite, *lastsprite, *player, *boss;
extern level_t *curlevel;
extern tiletype_t fakeblock;
extern int gtime;
@ -485,6 +560,7 @@ extern int cheat;
extern int nexthurryup;
extern levelentry_t levelentry[];
extern int numlevels;
extern int maxlevid;
extern char *deathtext[];
extern char *bifftext[];

View File

@ -2,10 +2,12 @@
- in defs.h: add P_ entry
- in shared.c: add score value in setdefaults if applicable
- in shared.c: add loadspriteimage() line(s) in loadimagesets()
- in shared.c: IF NOT AN EFFECT: add entry to monstertochar
- in shared.c: IF NOT AN EFFECT: add entry to chartomonster
- in shared.c: update isflower(), isfruit(), isbullet(), iseffect();
- in shared.c: update isnettable()
- in shared.c: IF A GEM: update flowertogem()
- in edit.c: update isplacable()
- in rc.c: update ismonster()
- in shared.c: update ismonster()
- in rc.c: add monster/effect movement
for bosses:
updated getbosshealth(),isboss()

524
edit.c
View File

@ -33,6 +33,29 @@ int curlevelnum;
int skipto = -1;
int layer = 1; // which layer we are editting, either 1 or 2
int layertransparent = B_TRUE;
SDL_Surface *whitebox;
SDL_Color red = {255, 0, 0, 0};
SDL_Color black = {0, 0, 0, 0};
SDL_Color blue = {0, 0, 255, 0};
SDL_Color cyan = {0, 255, 255, 0};
SDL_Color white = {255, 255, 255, 0};
SDL_Color grey = {210, 210, 210, 0};
SDL_Color grey2 = {70, 70, 70, 0};
SDL_Color green = {0, 255, 0, 0};
SDL_Color yellow = {255, 255, 0, 0};
int state;
char tempm[BUFLEN];
char statustext[BUFLEN];
SDL_Color *statustextcol = &white;
// for level list mode
int oldy = -1;
int main (int argc, char **argv) {
Uint8 *keys;
@ -88,6 +111,7 @@ int main (int argc, char **argv) {
exit(1);
}
atexit(cleanup);
#ifdef OPENGL
@ -109,6 +133,9 @@ int main (int argc, char **argv) {
return 1;
}
strcpy(statustext, "");
statustextcol = &white;
fakeblock.id = T_LAND;
strcpy(fakeblock.name,"Fake");
for (i = 0; i < TILEW; i++) {
@ -121,9 +148,19 @@ int main (int argc, char **argv) {
fakeblock.prev = NULL;
// coloured box surface (for tiles on non-active layer)
whitebox = SDL_CreateRGBSurface(SDL_SWSURFACE,
TILEW,TILEH,
screen->format->BitsPerPixel, screen->format->Rmask,
screen->format->Gmask,screen->format->Bmask, 0);
SDL_FillRect(whitebox, NULL, SDL_MapRGB(whitebox->format, 0, 0, 255));
SDL_SetAlpha(whitebox, SDL_SRCALPHA,100);
/* load fonts */
TTF_Init();
sprintf(filename, "gamefont.ttf");
sprintf(filename, "editfont.ttf");
for (i = 1; i < MAXLETTERHEIGHT; i++) {
font[i] = TTF_OpenFont(filename,i);
if (!font[i]) {
@ -133,6 +170,8 @@ int main (int argc, char **argv) {
}
state = LS_EDIT;
if (loadlevel(curworld,curlevelnum)) {
return 1;
}
@ -157,6 +196,7 @@ int main (int argc, char **argv) {
/* check for mouse actions */
mb = SDL_GetMouseState(&mx,&my);
if (mb & SDL_BUTTON(1)) { // lmb
if (state == LS_EDIT) {
if ((mx >= PALX) && (my < SPALY)) { // over tile palette
tiletype_t *tt;
int x = PALX,y = PALY;
@ -181,6 +221,7 @@ int main (int argc, char **argv) {
}
// redraw palette with new selection
drawpalette();
setstatustext("", &white);
} else if ((mx >= PALX) && (my > SPALY)) { // over sprite palette
int p;
int x = SPALX, y = SPALY;
@ -217,6 +258,7 @@ int main (int argc, char **argv) {
}
// redraw palette with new selection
drawpalette();
setstatustext("", &white);
} else if (mx < PALX) { // over map
int x,y;
if (seltile != NULL) {
@ -237,10 +279,11 @@ int main (int argc, char **argv) {
//}
}
// redraw tile and sprites
drawtile(screen,x,y);
draweditortile(screen,x,y);
drawsprites();
modified = B_TRUE;
setmod(B_TRUE);
setstatustext("", &white);
} else if (selsprite >= 0) {
int placed = B_FALSE;
@ -258,7 +301,7 @@ int main (int argc, char **argv) {
s->x = x*TILEW+(TILEW/2);
s->y = y*TILEH+TILEH;
placed = B_TRUE;
modified = B_TRUE;
setmod(B_TRUE);
// get rid of old sprite
draweditorlevel();
drawsprites();
@ -286,16 +329,62 @@ int main (int argc, char **argv) {
} else {
addsprite(selsprite, x*TILEW+(TILEW/2),y*TILEH+TILEH,"something" );
}
printf("added a sprite\n");
toggletimer = 30;
modified = B_TRUE;
setmod(B_TRUE);
drawsprites();
sprintf(tempm, "Sprite added at %d,%d",x,y);
setstatustext(tempm, &white);
}
}
}
}
} else if (state == LS_SAVE) {
// get pos
int i;
int lev;
// get level # at mouse posj
lev = (my / (EDITTEXT + LLISTPADY));
if (curlevelnum != lev) {
// REMOVE CURRENT LEVEL FROM LIST
for (i = curlevelnum; i < (numlevels-1); i++) {
levelentry[i] = levelentry[i+1];
}
numlevels--;
if (lev > curlevelnum) {
lev--;
}
// shuffle
for (i = numlevels; i > lev+1; i--) {
levelentry[i] = levelentry[i-1];
}
// insert current level at correct position (after where we clicked)
levelentry[lev+1].id = curlevel->id;
strncpy(levelentry[lev+1].desc, curlevel->name, MIDBUFLEN);
strncpy(levelentry[lev+1].filename, curlevel->filename, MIDBUFLEN);
numlevels++;
curlevelnum = lev + 1;
/* save out level list */
savelevellist();
// redraw
drawlevellist();
sprintf(tempm, "Level moved to position %d",curlevelnum);
setstatustext(tempm, &white);
}
}// end if LS_EDIT/LS_SAVE etc
} // end if LMB
/* check for keys */
SDL_PumpEvents();
@ -303,13 +392,28 @@ int main (int argc, char **argv) {
if (state == LS_EDIT) {
if (keys[SDLK_1] || keys[SDLK_2]) { // toggle layer
if (toggletimer == 0) {
layer = 3 - layer;
printf("Now editting layer %d\n",layer);
draweditorlevel();
drawsprites();
sprintf(tempm, "Now editting layer %d",layer);
setstatustext(tempm, &green);
toggletimer = 30;
}
}
if (keys[SDLK_t]) {
if (toggletimer == 0) {
if (layertransparent) layertransparent = B_FALSE;
else layertransparent = B_TRUE;
draweditorlevel();
drawsprites();
sprintf(tempm, "Transparent layers now %s",layertransparent ? "ON" : "OFF");
setstatustext(tempm, &green);
toggletimer = 15;
}
}
if (keys[SDLK_x]) { // delete monster
int donesomething = B_FALSE;
@ -331,7 +435,7 @@ int main (int argc, char **argv) {
if (donesomething) {
draweditorlevel();
drawsprites();
modified = B_TRUE;
setmod(B_TRUE);
}
}
if (keys[SDLK_c]) {
@ -346,64 +450,72 @@ int main (int argc, char **argv) {
/* exit direction */
if (toggletimer == 0) {
if (keys[SDLK_h]) {
printf("Exit direction set to LEFT.\n");
curlevel->exitdir = D_LEFT;
toggletimer = 30;
modified = B_TRUE;
setmod(B_TRUE);
sprintf(tempm, "Exit direction set to DOWN");
setstatustext(tempm, &white);
}
if (keys[SDLK_j]) {
printf("Exit direction set to DOWN.\n");
curlevel->exitdir = D_DOWN;
toggletimer = 30;
modified = B_TRUE;
setmod(B_TRUE);
sprintf(tempm, "Exit direction set to DOWN");
setstatustext(tempm, &white);
}
if (keys[SDLK_k]) {
printf("Exit direction set to UP.\n");
curlevel->exitdir = D_UP;
toggletimer = 30;
modified = B_TRUE;
setmod(B_TRUE);
sprintf(tempm, "Exit direction set to DOWN");
setstatustext(tempm, &white);
}
if (keys[SDLK_l]) {
printf("Exit direction set to RIGHT.\n");
curlevel->exitdir = D_RIGHT;
toggletimer = 30;
modified = B_TRUE;
setmod(B_TRUE);
sprintf(tempm, "Exit direction set to DOWN");
setstatustext(tempm, &white);
}
}
/* new level */
if (keys[SDLK_n]) {
if (toggletimer == 0) {
newlevel();
draweditorlevel();
drawsprites();
toggletimer = 30;
setmod(B_FALSE);
setstatustext("Created new level.", &white);
}
}
/* next level */
if (keys[SDLK_RIGHT]) {
if (toggletimer == 0) {
printf("Skipping to next level.\n");
if (curlevelnum < (numlevels-1)) {
curlevelnum++;
if ((curlevelnum >= numlevels) || loadlevel(curworld,curlevelnum)) {
char tempbuf[BUFLEN];
clearlevel();
numlevels++;
sprintf(tempbuf,"new_level%d.dat",curlevelnum);
levelentry[curlevelnum].filename = strdup(tempbuf);
sprintf(tempbuf,"NEW LEVEL");
levelentry[curlevelnum].desc = strdup(tempbuf);
printf("created new level '%s'\n",levelentry[curlevelnum].filename);
}
loadlevel(curworld, curlevelnum);
draweditorlevel();
drawsprites();
toggletimer = 30;
setmod(B_FALSE);
setstatustext("Skipping to next level.", &white);
}
}
}
/* prev level */
if (keys[SDLK_LEFT]) {
if (toggletimer == 0) {
if (curlevelnum > 1) {
printf("Skipping to previous level.\n");
curlevelnum--;
if (loadlevel(curworld,curlevelnum)) {
printf("creating new level\n");
clearlevel();
}
loadlevel(curworld, curlevelnum);
draweditorlevel();
drawsprites();
toggletimer = 30;
setmod(B_FALSE);
setstatustext("Skipping to previous level.", &white);
}
}
}
@ -414,19 +526,65 @@ int main (int argc, char **argv) {
toggletimer = 50;
}
}
if (keys[SDLK_ESCAPE]) {
if (keys[SDLK_q]) {
return 1;
}
} else if (state == LS_SAVE) {
if (keys[SDLK_ESCAPE]) {
state = LS_EDIT;
draweditorlevel();
drawsprites();
}
}
/* levellist */
if (keys[SDLK_z]) {
state = LS_SAVE;
drawlevellist();
}
/* SAVE LEVEL */
if (keys[SDLK_s]) {
if (modified) {
savelevel(curworld,curlevelnum);
modified = B_FALSE;
setmod(B_FALSE);
}
}
// line to selected position
if (state == LS_SAVE) {
char temps[MIDBUFLEN];
int lev, ypos;
// get level # at mouse posj
lev = my / (EDITTEXT + LLISTPADY);
ypos = lev * (EDITTEXT + LLISTPADY);
if (oldy != ypos) {
int textx = EDITMAPW - 200;
sprintf(temps, "Insert level here");
// clear old line
if (oldy != -1) {
drawline16(screen, LLISTX, oldy, EDITMAPW-LLISTX, oldy, black );
}
// clear old text
writetext(screen, textx, oldy-EDITTEXT, temps, EDITTEXT, &black);
// draw new line
drawline16(screen, LLISTX, ypos, EDITMAPW-LLISTX, ypos, green );
oldy = ypos;
// draw new text
writetext(screen, textx, ypos-EDITTEXT, temps, EDITTEXT, &green);
}
}
flip();
if (++timer == 100) timer = 0;
@ -448,6 +606,94 @@ void cleanup(void) {
SDL_Quit();
}
void drawstatus(void) {
char temps[MIDBUFLEN];
SDL_Rect area;
int wid;
SDL_Color *col;
// clear status
area.x = STATUSX;
area.y = STATUSY;
area.w = EDITORW;
area.h = EDITORH-STATUSY;
SDL_FillRect(screen, &area, SDL_MapRGB(screen->format, 0, 0, 0));
// show level num
sprintf(temps, "Level %d",curlevelnum);
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, &white);
area.x += (wid + STATUSPAD);
// show level name
sprintf(temps, "%s",curlevel->filename);
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, &white);
area.x += (wid + STATUSPAD);
// show level desc
sprintf(temps, "\"%s\"",curlevel->name);
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, &blue);
area.x += (wid + STATUSPAD);
// show bg file
sprintf(temps, "bgfile: %s",curlevel->bgfile);
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, &white);
area.x += (wid + STATUSPAD);
// show exit dir
sprintf(temps, "Exit dir: ");
switch (curlevel->exitdir) {
case D_RIGHT: strcat(temps, "RIGHT"); break;
case D_LEFT: strcat(temps, "LEFT"); break;
case D_UP: strcat(temps, "UP"); break;
case D_DOWN: strcat(temps, "DOWN"); break;
default: strcat(temps, "???"); break;
}
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, &white);
area.x += (wid + STATUSPAD);
// show layer
///area.x = (EDITMAPW/4)*3; // 3/4 across
area.x = 0;
area.y += (EDITTEXT );
if (layer == 1) {
col = &green;
} else {
if (layertransparent) {
col = &grey2;
} else {
col = &white;
}
}
sprintf(temps, "Layer 1");
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, col);
if (layer == 2) {
col = &green;
} else {
if (layertransparent) {
col = &grey2;
} else {
col = &white;
}
}
area.x += (wid + STATUSPAD);
sprintf(temps, "Layer 2");
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, col);
// show modified status
area.x = EDITMAPW - 50;
sprintf(temps, "MODIFIED");
if (modified) {
col = &red;
} else {
col = &grey2;
}
wid = writetext(screen, area.x, area.y, temps, EDITTEXT, col);
// Move down
area.y += (EDITTEXT);
area.x = 0;
// status text
wid = writetext(screen, area.x, area.y, statustext, EDITTEXT, statustextcol);
}
void draweditorlevel(void) {
@ -458,17 +704,19 @@ void draweditorlevel(void) {
temps = NULL;
}
temps = SDL_CreateRGBSurface(SDL_SWSURFACE,
640, 480,
640, 480 + EDITTEXT*4,
screen->format->BitsPerPixel, screen->format->Rmask,
screen->format->Gmask,screen->format->Bmask,
screen->format->Amask);
for (x = 0; x < LEVELW; x++) {
for (y = 0; y < LEVELH; y++) {
drawtile(screen,x,y);
draweditortile(screen,x,y);
}
}
drawstatus();
SDL_UpdateRect(screen, 0, 0, EDITORW, EDITORH);
}
@ -615,7 +863,7 @@ int savelevel(int wnum, int lnum) {
fprintf(f, "hurryup %d\n",level->hurryuptime);
/* no mappings */
fprintf(f, "endmaps\n");
//fprintf(f, "endmaps\n");
/* help text */
fprintf(f, "help\n");
@ -631,10 +879,11 @@ int savelevel(int wnum, int lnum) {
for (s = sprite; s ; s = s->next) {
int mx,my;
char mid;
mid = monstertochar(s->id);
//mid = monstertochar(s->id);
mid = s->id;
mx = (s->x - (TILEW/2)) / TILEW;
my = (s->y - TILEH/2) / TILEH;
fprintf(f,"%c %d %d\n",mid,mx,my);
fprintf(f,"%d %d %d\n",mid,mx,my);
}
fprintf(f, "endmonsters\n");
@ -662,7 +911,8 @@ int savelevel(int wnum, int lnum) {
fclose(f);
printf("Level saved to '%s'\n",filename);
sprintf(tempm,"Level saved to '%s'",filename);
setstatustext(tempm, &green);
return 0;
}
@ -688,10 +938,11 @@ void clearlevel(void) {
curlevel->map[offset] = T_BLANK;
}
curlevel->map2[offset] = T_BLANK;
drawtile(screen,x,y);
draweditortile(screen,x,y);
}
}
modified = B_TRUE;
}
@ -708,7 +959,8 @@ int isplacablesprite(int sid) {
case P_SPEED:
case P_NUMNETS:
case P_BIGNET:
case P_CLOUD:
case P_BLACKCLOUD:
case P_PINKCLOUD:
case P_SPIT:
case P_PUFF:
case P_SMASH:
@ -724,7 +976,195 @@ int isplacablesprite(int sid) {
case P_GEMRED:
case P_GEMYELLOW:
case P_GEMPURPLE:
case P_SPRAY:
case P_CANNONPOWERUP:
case P_CANNON:
return B_FALSE;
}
return B_TRUE;
}
// like drawtile but adjusts transparncy based on current layer
void draweditortile(SDL_Surface *where, int x, int y) {
SDL_Rect area;
tiletype_t *tt;
int frame;
int offset;
SDL_Surface *greyim, *temps;
if ((x < 0) || (y < 0) || (x >= LEVELW) || (y >= LEVELH)) {
return;
}
area.x = x * TILEW;
area.y = y * TILEH;
area.w = TILEW;
area.h = TILEH;
/* draw blank tile first */
tt = gettile(curlevel->bgtileid);
SDL_BlitSurface(levelbg, &area, where, &area);
/* figure out what the layer1 tile is */
offset = y*LEVELW+x;
tt = gettile(curlevel->map[offset]);
frame = curlevel->tileframe[offset];
// get greyimnal layer1 image
temps = rotozoomSurfaceXY(tt->img[frame], 0, 1, 1, 0);
// paste grey one on top
//SDL_BlitSurface(whitebox, NULL, greyim, NULL);
SDL_SetAlpha(temps, SDL_SRCALPHA, 50);
greyim = SDL_DisplayFormat(temps);
SDL_FreeSurface(temps);
/* now draw real one */
if (tt->id != curlevel->bgtileid) {
if (layertransparent && (layer == 2)) { // greyed one
SDL_BlitSurface(greyim, NULL, where, &area);
} else {
SDL_BlitSurface(tt->img[frame], NULL, where, &area);
}
}
SDL_FreeSurface(greyim);
/* now draw layer2 if it exists */
if (curlevel->map2[offset] != T_BLANK) {
tt = gettile(curlevel->map2[offset]);
if (tt->id != curlevel->bgtileid) {
// there is a second layer.
// generate greyed version...
// get greyimnal layer2 image
temps = rotozoomSurfaceXY(tt->img[frame], 0, 1, 1, 0);
// paste grey one on top
//SDL_BlitSurface(whitebox, NULL, greyim, NULL);
SDL_SetAlpha(temps, SDL_SRCALPHA, 50);
greyim = SDL_DisplayFormat(temps);
SDL_FreeSurface(temps);
if (layertransparent && (layer == 1)) { // greyed one
SDL_BlitSurface(greyim, NULL, where, &area);
} else {
SDL_BlitSurface(tt->img[frame], NULL, where, &area);
}
}
SDL_FreeSurface(greyim);
}
}
int writetext(SDL_Surface *where, int x, int y, char *text, int size, SDL_Color *col) {
SDL_Surface *temps;
SDL_Rect area;
int wid;
if (strlen(text) <= 0) {
return 0;
}
temps = TTF_RenderText_Solid(font[size], text, *col);
area.x = x;
area.y = y;
area.w = 0;
area.h = 0;
SDL_BlitSurface(temps, NULL, where, &area);
wid = temps->w;
SDL_FreeSurface(temps);
return wid;
}
void setmod(int yesno) {
int oldmod;
oldmod = modified;
if (yesno) {
modified = B_TRUE;
} else {
modified = B_FALSE;
}
// update status bar
if (oldmod != modified) {
drawstatus();
}
}
void drawlevellist(void) {
int i;
char temps[MIDBUFLEN];
SDL_Rect area;
SDL_Color *col;
// clear map
area.x = 0;
area.y = 0;
area.w = EDITMAPW;
area.h = EDITMAPH;
SDL_FillRect(screen, &area, SDL_MapRGB(screen->format, 0, 0, 0));
// draw level list
area.x = LLISTX;
area.y = 0;
area.w = 0;
area.h = 0;
for (i =1; i < numlevels; i++) {
if (i == curlevelnum) {
col = &green;
} else {
col = &white;
}
sprintf(temps, "%d. %s (%s)",levelentry[i].id, levelentry[i].desc, levelentry[i].filename);
writetext(screen, area.x, area.y, temps, EDITTEXT, col);
area.y += (EDITTEXT + LLISTPADY);
}
}
void newlevel(void) {
char tempbuf[BUFLEN];
curlevelnum = numlevels;
clearlevel();
maxlevid++;
sprintf(tempbuf,"level%d.dat",maxlevid);
sprintf(curlevel->filename, tempbuf);
strncpy(levelentry[curlevelnum].filename, tempbuf, MIDBUFLEN);
sprintf(tempbuf,"NEW LEVEL");
sprintf(curlevel->name, tempbuf);
strncpy(levelentry[curlevelnum].desc, tempbuf, MIDBUFLEN);
curlevel->id = maxlevid;
levelentry[curlevelnum].id = maxlevid;
sprintf(tempm,"Made new level '%s'\n",levelentry[curlevelnum].filename);
setstatustext(tempm, &green);
numlevels++;
// save list
savelevellist();
}
void setstatustext(char *text, SDL_Color *col) {
strncpy(statustext, text, BUFLEN);
statustextcol = col;
drawstatus();
}

44
edit.h
View File

@ -1,21 +1,45 @@
// Editor specific macros
#define EDITORW 800
#define EDITORH 480
// location of tile palette in editor
#define PALX 640
#define PALY 0
#define PALW (EDITORW-PALX)
#define PALH (EDITORH/2)-1
#define PALW (EDITMAPW-PALX)
#define PALH (EDITMAPH/2)-1
#define EDITTEXT 12
#define EDITLINE (EDITTEXT + 1)
// MAP
#define EDITMAPW 640 // TODO: fix
#define EDITMAPH 480
//
#define EDITORW 800
#define EDITORH EDITMAPH + (EDITTEXT*4)
// location of sprite palette in editor
#define SPALX 640
#define SPALY (EDITORH/2)
#define SPALY PALH
#define SPALW (EDITORW-PALX)
#define SPALH (EDITORH/2)-1
#define STATUSX 0
#define STATUSY EDITMAPH
#define STATUSPAD 10
#define LLISTPADY 2
#define LLISTX 50
// level states
#define LS_EDIT 0
#define LS_SAVE 1
// Editor specific functions
void draweditorlevel(void);
void draweditortile(SDL_Surface *where, int x, int y);
void drawpalette(void);
void drawsprites(void);
int savelevel(int wnum, int lnum);
@ -25,3 +49,9 @@ void clearlevel(void);
int isplacabletile(int tid);
int isplacablesprite(int sid);
int writetext(SDL_Surface *where, int x, int y, char *text, int size, SDL_Color *col);
void drawstatus(void);
void setmod(int yesno);
void drawlevellist(void);
void newlevel(void);
void setstatustext(char *text, SDL_Color *col);

BIN
editfont.ttf Normal file

Binary file not shown.

View File

@ -7,14 +7,20 @@ int musicplaying;
levelentry_t levelentry[MAXLEVELS]; // level filenames etc
int numlevels;
int maxlevid;
SDL_Surface *levelbg; // level background image
SDL_Surface *temps; // temporary surface
SDL_Surface *screen; // the actual video screen
SDL_Surface *head,*headsmall; // img in corner showing number of lives
SDL_Surface *icecube; // overlaid on frozen monsters
SDL_Surface *greenbox; // for fly spray effect
SDL_Surface *healthbar[HEALTHFRAMES]; // for boss health
sprite_t *sprite; // head of sprite linked list
sprite_t *lastsprite; // tail of sprite linked list
sprite_t *player; // pointer to the player's sprite
sprite_t *boss; // point to current boss on level (normally NULL)
Mix_Music *music, *fastmusic, *normalmusic;
Mix_Chunk *sfx[MAXFX];

View File

@ -17,4 +17,5 @@
16,level14.dat,The Chimney
19,level21.dat,Island
18,level8.5.dat,Look out above...
20,level20.dat,King Rat
99,level99.dat,TEST LEVEL

902
rc.c

File diff suppressed because it is too large Load Diff

4
rc.h
View File

@ -2,6 +2,7 @@ void cleanup(void);
int addtext(int x, int y, int size, char *string, SDL_Color *c, int delay);
void addoutlinetext(int x, int y, int size, char *msg, SDL_Color *col, SDL_Color *bgcol, int delay);
void drawscore(void);
void drawbosshealth(void);
void drawtext(void);
void movetext(void);
void removeall(void);
@ -44,10 +45,11 @@ void channeldone(int channel);
void movetostart(sprite_t *p, int dstx, int dsty, double xspeed,double yspeed);
SDL_Surface *grabbehind(sprite_t *s, SDL_Surface *surf);
void dumpsprites(void);
void countmonsters(void);
int countmonsters(void);
int getpoints(int id);
int isladder(int tid);
char *addcommas(char *buffer, int num);
void addscore(sprite_t *s, int amt);
void doice(void);
void checklevelend(void);

274
shared.c
View File

@ -34,9 +34,9 @@ int loadlevel(int wnum, int lnum) {
int tileid;
int i;
//int *ii;
mapping_t mapping[MAXMAPPINGS];
int nmappings = 0;
tiletype_t *lasttile;
//mapping_t mapping[MAXMAPPINGS];
//int nmappings = 0;
//tiletype_t *lasttile;
int newversion;
int numanim = 0;
int leveldone;
@ -69,6 +69,8 @@ int loadlevel(int wnum, int lnum) {
if (!level) level = malloc(sizeof(level_t));
sprintf(level->filename, levelentry[lnum].filename);
/* set current level pointer */
curlevel = level;
@ -76,7 +78,7 @@ int loadlevel(int wnum, int lnum) {
level->id = levelentry[lnum].id;
//sprintf(level->name, "Level %d-%d",wnum,lnum);
sprintf(level->name, "\"%s\"",levelentry[lnum].desc);
sprintf(level->name, "%s",levelentry[lnum].desc);
level->prev = NULL;
level->next = NULL;
@ -195,6 +197,7 @@ int loadlevel(int wnum, int lnum) {
/* read tile defs */
// TODO: remove all of this, don't need it with new level format
/*
nmappings = 0;
fgets(buf, BUFLEN, f);
while (!strstr(buf, "endmaps")) {
@ -216,6 +219,7 @@ int loadlevel(int wnum, int lnum) {
fgets(buf, BUFLEN, f);
}
*/
fgets(buf, BUFLEN, f);
/* read help messages if present */
if (strstr(buf, "help")) {
@ -237,7 +241,7 @@ int loadlevel(int wnum, int lnum) {
if (strstr(buf, "monsters")) {
fgets(buf, BUFLEN, f);
while (!strstr(buf, "endmonsters")) {
char ch;
//char ch;
int monid;
int x,y;
// strip newline
@ -249,8 +253,10 @@ int loadlevel(int wnum, int lnum) {
printf("invalid monster definition (missing type): '%s'\n",buf);
return B_TRUE;
}
ch = p[0]; // type of monster
monid = chartomonster(ch);
//ch = p[0]; // type of monster
//monid = chartomonster(ch);
// type of monster
monid = atoi(p);
if (monid < 0) {
printf("invalid monster definition (invalid type): '%s'\n",buf);
return B_TRUE;
@ -393,10 +399,10 @@ int loadlevel(int wnum, int lnum) {
p = strtok(NULL, ",");
}
} else { /* old level data version */
} /*else { // old level data version
for (p = buf; *p; p++) {
int n,found = 0;
/* search mappings */
// search mappings
for (n = 0; n < nmappings; n++) {
if (mapping[n].ch == *p) {
tileid = mapping[n].tnum;
@ -428,10 +434,10 @@ int loadlevel(int wnum, int lnum) {
tileid = level->bgtileid;
level->initm[level->nummonsters].startx = x*TILEW+(TILEW/2);
level->initm[level->nummonsters].starty = y*TILEH+(TILEH-2);
level->initm[level->nummonsters].id = P_CLOUD;
level->initm[level->nummonsters].id = P_BLACKCLOUD;
level->nummonsters++;
} else if (*p == 'r') {
/* figure out background type */
// figure out background type
if (lasttile->solid) {
tileid = level->map[(y-1)*LEVELW+x];
} else {
@ -445,7 +451,7 @@ int loadlevel(int wnum, int lnum) {
level->nummonsters++;
} else if (*p == 'S') {
/* figure out background type */
// figure out background type
if (lasttile->solid) {
tileid = level->map[(y-1)*LEVELW+x];
} else {
@ -458,7 +464,7 @@ int loadlevel(int wnum, int lnum) {
level->initm[level->nummonsters].id = P_SNAKE;
level->nummonsters++;
} else if (*p == 'a') {
/* figure out background type */
// figure out background type
if (lasttile->solid) {
tileid = level->map[(y-1)*LEVELW+x];
} else {
@ -470,7 +476,7 @@ int loadlevel(int wnum, int lnum) {
level->initm[level->nummonsters].id = P_BEE;
level->nummonsters++;
} else if (*p == 's') {
/* figure out background type */
// figure out background type
if (lasttile->solid) {
tileid = level->map[(y-1)*LEVELW+x];
} else {
@ -482,7 +488,7 @@ int loadlevel(int wnum, int lnum) {
level->initm[level->nummonsters].id = P_SPIDER;
level->nummonsters++;
} else if (*p == '?') {
/* figure out background type */
// figure out background type
if (lasttile->solid) {
tileid = level->map[(y-1)*LEVELW+x];
} else {
@ -516,7 +522,7 @@ int loadlevel(int wnum, int lnum) {
} else if (*p == '\\') {
tileid = T_SLOPEDOWN;
} else if (*p == '1') {
/* figure out background type */
// figure out background type
if (lasttile->solid) {
tileid = level->map[(y-1)*LEVELW+x];
} else {
@ -548,7 +554,8 @@ int loadlevel(int wnum, int lnum) {
lasttile = gettile(tileid);
x++;
}
} /* if newversion */
} // if newversion
*/
/* make sure enough data was found */
if (x < LEVELW+1) {
@ -664,6 +671,7 @@ int loadlevel(int wnum, int lnum) {
} else {
delay = 0;
}
#ifdef __EDITOR
addsprite(level->initm[i].id,
level->initm[i].startx, level->initm[i].starty, name );
@ -675,6 +683,8 @@ int loadlevel(int wnum, int lnum) {
gtime = 0;
nexthurryup = level->hurryuptime;
boss = NULL;
printf("Done.\n");
/*
for (ii = level->animtiles ; ii && *ii != -1; ii++) {
@ -725,6 +735,7 @@ void setdefaults(sprite_t *s) {
s->dead = 0;
s->angry = 0;
s->jumptimer = 0;
s->willjumpspeed = 0;
s->iced = B_FALSE;
if (s->iceimg) {
SDL_FreeSurface(s->iceimg);
@ -736,9 +747,29 @@ void setdefaults(sprite_t *s) {
s->willbecome = P_CHEESE;
// special
if (s->id == P_PINKCLOUD) {
s->size = 0.1;
} else {
// not used
s->size = -1;
}
// special for bosses
if (s->id == P_KINGRAT) {
s->timer1 = 0;
s->timer2 = KR_WALKTIME;
s->timer3 = 0;
}
if (isboss(s->id)) {
s->lives = getbosshealth(s->id); // health
}
// flying
switch (s->id) {
case P_BEE:
case P_CLOUD:
case P_BLACKCLOUD:
case P_SPIDER:
s->flies = B_TRUE;
break;
@ -781,8 +812,10 @@ sprite_t *addsprite(int id, int x, int y, char *name ) {
s->id = id;
s->x = x;
s->y = y;
if (s->id == P_CLOUD) {
if (s->id == P_BLACKCLOUD) {
s->img = rotozoomSurfaceXY(imageset[id].img[F_WALK1],0,1,1,0);
} else if (s->id == P_PINKCLOUD) {
s->img = rotozoomSurfaceXY(imageset[id].img[F_WALK1],0,(double)PCGROWSPEED,(double)PCGROWSPEED,0);
} else {
s->img = imageset[id].img[F_WALK1];
}
@ -1020,9 +1053,24 @@ int loadimagesets(void) {
SDL_Surface *tempimg;
SDL_Surface *reds;
head = IMG_Load("sprites/dwarfhead.png");
headsmall = IMG_Load("sprites/dwarfhead-small.png");
icecube = IMG_Load("sprites/icecube.png");
healthbar[HF_GREEN] = IMG_Load("sprites/health.png");
healthbar[HF_YELLOW] = IMG_Load("sprites/healthyellow.png");
healthbar[HF_RED] = IMG_Load("sprites/healthred.png");
// green square for flyspray effect
greenbox = SDL_CreateRGBSurface(SDL_SWSURFACE,
screen->w,
screen->h,
screen->format->BitsPerPixel, screen->format->Rmask,
screen->format->Gmask,screen->format->Bmask, 0);
SDL_FillRect(greenbox, NULL, SDL_MapRGB(greenbox->format, 0, 150, 0));
SDL_SetAlpha(greenbox, SDL_SRCALPHA,80);
loadspriteimage(P_PLAYER,F_WALK1, "sprites/pdwarf.png");
loadspriteimage(P_PLAYER,F_JUMP, "sprites/pdwarfjump.png");
@ -1094,12 +1142,16 @@ int loadimagesets(void) {
/* next 3 are auto generated */
imageset[P_SPIDER].numimages = 8;
loadspriteimage(P_CLOUD,F_WALK1, "sprites/cloud.png");
loadspriteimage(P_CLOUD,F_JUMP, "sprites/cloud.png");
loadspriteimage(P_CLOUD,F_FALL, "sprites/cloud.png");
loadspriteimage(P_CLOUD,F_CAUGHT, "sprites/cloud.png");
loadspriteimage(P_CLOUD,F_DEAD, "sprites/cloud.png");
imageset[P_CLOUD].numimages = 2;
loadspriteimage(P_BLACKCLOUD,F_WALK1, "sprites/cloud.png");
loadspriteimage(P_BLACKCLOUD,F_JUMP, "sprites/cloud.png");
loadspriteimage(P_BLACKCLOUD,F_FALL, "sprites/cloud.png");
loadspriteimage(P_BLACKCLOUD,F_CAUGHT, "sprites/cloud.png");
loadspriteimage(P_BLACKCLOUD,F_DEAD, "sprites/cloud.png");
imageset[P_BLACKCLOUD].numimages = 2;
loadspriteimage(P_PINKCLOUD,F_WALK1, "sprites/pinkcloud.png");
imageset[P_PINKCLOUD].numimages = 1;
loadspriteimage(P_COKE,F_WALK1, "sprites/coke.png");
loadspriteimage(P_COKE,F_JUMP, "sprites/cokejump.png");
@ -1108,6 +1160,14 @@ int loadimagesets(void) {
loadspriteimage(P_COKE,F_DEAD, "sprites/cokedead.png");
imageset[P_COKE].numimages = 8;
loadspriteimage(P_KINGRAT,F_WALK1, "sprites/kingrat.png");
loadspriteimage(P_KINGRAT,F_JUMP, "sprites/kingratjump.png");
loadspriteimage(P_KINGRAT,F_FALL, "sprites/kingratjump.png");
loadspriteimage(P_KINGRAT,F_CAUGHT, "sprites/kingratcaught.png");
loadspriteimage(P_KINGRAT,F_DEAD, "sprites/kingratdead.png");
/* next 3 are auto generated */
imageset[P_KINGRAT].numimages = 8;
/* fruits / powerups */
loadspriteimage(P_CHEESE,F_WALK1, "sprites/cheese.png");
imageset[P_CHEESE].numimages = 1;
@ -1207,6 +1267,15 @@ int loadimagesets(void) {
loadspriteimage(P_SNOWMAN,F_WALK1, "sprites/snowman.png");
imageset[P_SNOWMAN].numimages = 1;
loadspriteimage(P_SPRAY,F_WALK1, "sprites/spray.png");
imageset[P_SPRAY].numimages = 1;
loadspriteimage(P_CANNONPOWERUP,F_WALK1, "sprites/cannonpowerup.png");
imageset[P_CANNONPOWERUP].numimages = 1;
loadspriteimage(P_CANNON,F_WALK1, "sprites/cannon.png");
imageset[P_CANNON].numimages = 1;
// puffs and mace smashes
for (i = 0; i < PUFFFRAMES; i++) {
char name[SMALLBUFLEN];
@ -1269,7 +1338,16 @@ int loadimagesets(void) {
/* angry image */
// create semi-transparent red square
// create semi-transparent red square (white for bosses)
if (isboss(p)) {
reds = SDL_CreateRGBSurface(SDL_SWSURFACE,
origi->w,
origi->h,
origi->format->BitsPerPixel, origi->format->Rmask,
origi->format->Gmask,origi->format->Bmask, 0);
SDL_FillRect(reds, NULL, SDL_MapRGB(reds->format, 255, 255, 255));
SDL_SetAlpha(reds, SDL_SRCALPHA,100);
} else {
reds = SDL_CreateRGBSurface(SDL_SWSURFACE,
origi->w,
origi->h,
@ -1277,6 +1355,7 @@ int loadimagesets(void) {
origi->format->Gmask,origi->format->Bmask, 0);
SDL_FillRect(reds, NULL, SDL_MapRGB(reds->format, 255, 0, 0));
SDL_SetAlpha(reds, SDL_SRCALPHA,100);
}
// take a copy of the original image
imageset[p].img[MAXFRAMES*2+i] = rotozoomSurfaceXY(origi, 0, 1,1,0);
@ -1292,8 +1371,16 @@ int loadimagesets(void) {
imageset[p].img[MAXFRAMES*2+i] = temps;
// Make the background red bits completely transparent
if (isboss(p)) {
SDL_SetColorKey(imageset[p].img[MAXFRAMES*2+i],
SDL_SRCCOLORKEY, SDL_MapRGB(imageset[p].img[MAXFRAMES*2+i]->format, 101, 0, 0));
SDL_SRCCOLORKEY, SDL_MapRGB(imageset[p].img[MAXFRAMES*2+i]->format, 99, 97, 99));
} else {
///SDL_Color tempcol;
///getpixelrgb(imageset[p].img[MAXFRAMES*2+i], 0, 0, &tempcol);
//printf("for spriteid %d, rgb is %d,%d,%d\n",p,tempcol.r,tempcol.g,tempcol.b);
SDL_SetColorKey(imageset[p].img[MAXFRAMES*2+i],
SDL_SRCCOLORKEY, SDL_MapRGB(imageset[p].img[MAXFRAMES*2+i]->format, 99, 0, 0));
}
/* flipped angry image */
@ -1336,6 +1423,11 @@ void drawsprite(sprite_t *s) {
if ((s == player) && (levelcomplete == LV_NEXTLEV)) {
frame = F_SHOOT;
if (curlevel->exitdir == D_RIGHT) {
player->dir = 1;
} else if (curlevel->exitdir == D_LEFT) {
player->dir = -1;
}
} else {
/* select frame */
if (isfruit(s->id)) {
@ -1356,10 +1448,14 @@ void drawsprite(sprite_t *s) {
frame = F_WALK1;
} else if (s->id == P_MACE) {
frame = F_WALK1;
} else if (s->id == P_CANNON) {
frame = F_WALK1;
}
} else if (s->dead) {
if (s == player) {
frame = F_DEAD;
} else if (s == boss) {
frame = F_DEAD;
} else {
frame = F_DEAD + ((timer/2) % 4);
}
@ -1435,7 +1531,7 @@ void drawsprite(sprite_t *s) {
frame += (MAXFRAMES*2);
}
if ((s->id != P_CLOUD) && (!s->teleporting)) {
if ((s->id != P_BLACKCLOUD) && (s->id != P_PINKCLOUD) && (!s->teleporting)) {
s->img = imageset[s->id].img[frame];
}
@ -1468,6 +1564,10 @@ void drawsprite(sprite_t *s) {
if (timer % 2 == 0) {
SDL_BlitSurface(s->img, NULL, screen, &area);
}
} else if (s == boss && s->dead) {
if ((timer / 10) % 2 == 0) {
SDL_BlitSurface(s->img, NULL, screen, &area);
}
} else {
// draw the sprite
SDL_BlitSurface(s->img, NULL, screen, &area);
@ -1510,6 +1610,11 @@ void killsprite(sprite_t *s) {
sprite_t *nextone, *lastone;
sprite_t *s2;
// remove boss pointer
if (boss == s) {
boss = NULL;
}
/* remove references to this sprite before removing it */
for (s2 = sprite ; s2 ; s2 = s2->next) {
if (s2->owner == s) {
@ -1618,6 +1723,8 @@ int isfruit(int id) {
case P_RINGGOLD:
case P_CLOCK:
case P_SNOWMAN:
case P_SPRAY:
case P_CANNONPOWERUP:
/* flowers */
case P_FLOWERYELLOW:
case P_FLOWERRED:
@ -1648,6 +1755,8 @@ int iseffect(int id) {
if (id == P_POWERUPPOS) return B_TRUE;
if (id == P_GLOVE) return B_TRUE;
if (id == P_MACE) return B_TRUE;
if (id == P_PINKCLOUD) return B_TRUE;
if (id == P_CANNON) return B_TRUE;
return B_FALSE;
}
@ -1823,9 +1932,10 @@ int getcolor(SDL_Surface *dest, int x, int y, SDL_Color *col) {
}
/*
int chartomonster(char ch) {
switch (ch) {
case 'c': return P_CLOUD;
case 'c': return P_BLACKCLOUD;
case 'r': return P_RAT;
case 'S': return P_SNAKE;
case 'a': return P_BEE;
@ -1844,7 +1954,7 @@ int chartomonster(char ch) {
}
char monstertochar(int id ) {
switch (id) {
case P_CLOUD: return 'c';
case P_BLACKCLOUD: return 'c';
case P_RAT: return 'r';
case P_SNAKE: return 'S';
case P_BEE: return 'a';
@ -1861,6 +1971,7 @@ char monstertochar(int id ) {
return '\0';
}
*/
tiletype_t *gettile(int uniqid) {
tiletype_t *t;
@ -1898,7 +2009,6 @@ void drawtile(SDL_Surface *where, int x, int y) {
area.h = TILEH;
/* draw blank tile first */
tt = gettile(curlevel->bgtileid);
//SDL_BlitSurface(tt->img[0], NULL, where, &area);
SDL_BlitSurface(levelbg, &area, where, &area);
/* now draw real one */
@ -1966,8 +2076,9 @@ int ismonster(int id) {
if (id == P_BEE) return B_TRUE;
if (id == P_SPIDER) return B_TRUE;
if (id == P_SNAKE) return B_TRUE;
if (id == P_CLOUD) return B_TRUE;
if (id == P_BLACKCLOUD) return B_TRUE;
if (id == P_COKE) return B_TRUE;
if (id == P_KINGRAT) return B_TRUE;
return B_FALSE;
}
@ -2084,6 +2195,24 @@ int getpoints(int id) {
}
int savelevellist(void) {
FILE *f;
int i;
f = fopen("levels.dat","w");
if (!f) {
printf("error writing to levels.dat\n");
return B_FALSE;
}
for (i = 1; i < numlevels; i++) {
fprintf(f, "%d,%s,%s\n",levelentry[i].id, levelentry[i].filename, levelentry[i].desc);
}
fclose(f);
return B_FALSE;
}
int loadlevellist(void) {
int lev;
FILE *f;
@ -2095,6 +2224,7 @@ int loadlevellist(void) {
//
// id,filename,description,
lev = 1;
maxlevid = -99;
fgets(buf, BUFLEN, f);
while (!feof(f)) {
p = strtok(buf, ",");
@ -2103,19 +2233,27 @@ int loadlevellist(void) {
return B_TRUE;
}
levelentry[lev].id = atoi(p);
// track max levelid
if (levelentry[lev].id > maxlevid) {
maxlevid = levelentry[lev].id;
}
p = strtok(NULL, ",");
if (!p) {
printf("invalid level filename - line %d\n",lev);
return B_TRUE;
}
levelentry[lev].filename = strdup(p);
strncpy(levelentry[lev].filename, p, MIDBUFLEN);
p = strtok(NULL, ",");
if (!p) {
printf("invalid level description - line %d\n",lev);
return B_TRUE;
}
p[strlen(p)-1] = '\0'; // strip newline
levelentry[lev].desc = strdup(p);
//LEVELENTry[lev].desc = strdup(p);
strncpy(levelentry[lev].desc, p, MIDBUFLEN);
lev++;
fgets(buf, BUFLEN, f);
}
@ -2129,7 +2267,7 @@ int loadlevellist(void) {
int randompowerup(void) {
int num;
num = rand() % 17;
num = rand() % 19;
switch (num) {
case 0:
@ -2167,6 +2305,10 @@ int randompowerup(void) {
return P_CLOCK;
case 16:
return P_SNOWMAN;
case 17:
return P_SPRAY;
case 18:
return P_CANNONPOWERUP;
}
}
@ -2185,3 +2327,65 @@ int ispermenant(int pid) {
}
return B_FALSE;
}
int isbosslevel(int lev) {
if (lev % 20 == 0) {
return B_TRUE;
}
return B_FALSE;
}
int isboss(int monid) {
switch (monid) {
case P_KINGRAT:
return B_TRUE;
default:
return B_FALSE;
}
}
int isnettable(int monid) {
if (ismonster(monid)) {
switch (monid) {
case P_BLACKCLOUD:
case P_KINGRAT:
return B_FALSE;
default:
return B_TRUE;
}
}
return B_FALSE;
}
// return starting health for a given boss type
int getbosshealth(int mid) {
switch (mid) {
case P_KINGRAT:
return 10;
}
return 0;
}
void getpixelrgb(SDL_Surface *where, int x, int y, SDL_Color *clr) {
Uint32 col;
//determine position
char* pPosition = ( char* ) where->pixels ;
//offset by y
pPosition += ( where->pitch * y ) ;
//offset by x
pPosition += ( where->format->BytesPerPixel * x ) ;
//copy pixel data
memcpy ( &col , pPosition , where->format->BytesPerPixel ) ;
//convert color
SDL_GetRGB ( col , where->format , &clr->r , &clr->g , &clr->b ) ;
//*r = color.r;
//*g = color.g;
//*b = color.b;
}

View File

@ -27,8 +27,10 @@ inline void drawpixel32(SDL_Surface *screen, int x, int y, SDL_Color c);
inline void drawbox16(SDL_Surface *screen, int x1,int y1,int x2,int y2,SDL_Color *c,SDL_Color *fc);
void drawline16(SDL_Surface *screen, int x1, int y1, int x2, int y2, SDL_Color c);
int getcolor(SDL_Surface *dest, int x, int y, SDL_Color *col);
/*
int chartomonster(char ch);
char monstertochar(int id);
*/
tiletype_t *gettile(int uniqid);
int getuniq(int tileid);
void drawtile(SDL_Surface *s, int x, int y);
@ -40,6 +42,12 @@ SDL_Surface *loadspriteimage(int spriteid, int frame, char *filename);
int getpoints(int id);
int randompowerup(void);
int loadlevellist(void);
int savelevellist(void);
int ispermenant(int pid);
int isbosslevel(int lev);
int isnettable(int monid);
int isboss(int monid);
int getbosshealth(int mid);
void getpixelrgb(SDL_Surface *where, int x, int y, SDL_Color *clr);
#endif

BIN
sounds/OLDPOWERUP.wav Normal file

Binary file not shown.

BIN
sounds/bosscharge.wav Normal file

Binary file not shown.

BIN
sounds/bossdie.wav Normal file

Binary file not shown.

BIN
sounds/bosshit.wav Normal file

Binary file not shown.

BIN
sounds/bosswall.wav Normal file

Binary file not shown.

BIN
sounds/chargewait.wav Normal file

Binary file not shown.

BIN
sounds/fusion.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
sounds/spray-old1.wav Normal file

Binary file not shown.

BIN
sounds/spray.wav Normal file

Binary file not shown.

BIN
sprites/OLDrat.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
sprites/OLDratjump.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
sprites/cannon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
sprites/cannonpowerup.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
sprites/goldring.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
sprites/health.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

BIN
sprites/healthred.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

BIN
sprites/healthyellow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

BIN
sprites/kingrat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
sprites/kingratcaught.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
sprites/kingratdead.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
sprites/kingratjump.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
sprites/pinkcloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
sprites/spray.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

View File

@ -1,7 +1,6 @@
tileset green
bg 0
hurryup 30
endmaps
help
endhelp
monsters

View File

@ -1,32 +1,31 @@
bgfile backgrounds/forest.png
bg 0
hurryup 30
endmaps
help
Use X to jump, Z to catch the rat.
Then use Down+Z to slam and kill a monster!
endhelp
monsters
1 3 19
? 7 19
? 12 19
@ 30 15
@ 31 15
P 21 15
@ 22 15
@ 20 15
Y 23 15
Y 19 15
Y 2 15
Y 1 15
Y 24 19
Y 22 19
Y 20 19
r 27 15
P 36 14
Y 34 19
@ 35 19
P 36 19
0 3 19
14 7 19
14 12 19
16 30 15
16 31 15
17 21 15
16 22 15
16 20 15
15 23 15
15 19 15
15 2 15
15 1 15
15 24 19
15 22 19
15 20 19
1 27 15
17 36 14
15 34 19
16 35 19
17 36 19
endmonsters
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,

View File

@ -1,39 +1,38 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 60
endmaps
help
endhelp
monsters
1 3 28
! 37 15
C 33 7
C 11 13
r 13 5
r 7 17
s 23 1
@ 7 5
@ 25 9
P 25 5
P 7 9
Y 2 7
Y 1 7
Y 2 12
Y 1 12
Y 38 7
Y 30 7
Y 35 15
Y 38 15
Y 32 18
Y 9 21
Y 7 21
@ 18 17
@ 4 17
P 36 24
P 38 24
S 31 24
r 20 21
s 37 9
0 3 28
23 37 15
18 33 7
18 11 13
1 13 5
1 7 17
7 23 1
16 7 5
16 25 9
17 25 5
17 7 9
15 2 7
15 1 7
15 2 12
15 1 12
15 38 7
15 30 7
15 35 15
15 38 15
15 32 18
15 9 21
15 7 21
16 18 17
16 4 17
17 36 24
17 38 24
12 31 24
1 20 21
7 37 9
endmonsters
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
@ -88,19 +87,8 @@ layer2
23,6,28
24,6,28
26,6,34
15,7,27
16,7,27
17,7,27
18,7,27
19,7,27
29,8,35
1,9,19
15,9,27
16,9,27
17,9,27
18,9,27
19,9,27
20,9,27
38,9,18
6,10,35
8,10,28
@ -143,13 +131,6 @@ layer2
25,14,28
26,14,28
30,14,34
13,15,27
15,15,27
17,15,27
18,15,27
19,15,27
22,15,27
23,15,27
35,16,35
38,17,18
4,18,35
@ -167,10 +148,6 @@ layer2
16,18,28
17,18,28
18,18,34
13,19,27
14,19,27
15,19,27
16,19,27
7,22,35
10,22,28
11,22,28
@ -217,9 +194,4 @@ layer2
34,25,28
35,25,28
1,26,19
26,26,27
27,26,27
28,26,27
29,26,27
30,26,27
38,26,18

View File

@ -1,55 +1,54 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 136
endmaps
help
endhelp
monsters
1 1 2
! 19 2
r 33 7
r 13 10
@ 6 28
@ 6 28
@ 6 28
@ 6 28
@ 2 28
@ 2 28
@ 2 28
@ 2 28
@ 2 28
@ 15 28
@ 15 28
@ 15 28
@ 15 28
@ 15 28
Y 35 5
Y 28 5
@ 20 2
Y 21 2
Y 18 2
Y 6 10
Y 10 10
r 11 18
C 9 28
S 30 5
S 30 5
S 30 5
P 30 28
P 31 28
@ 28 14
@ 31 14
Y 20 15
@ 19 12
P 11 18
P 7 18
@ 9 18
@ 13 18
Y 4 2
Y 6 2
P 8 10
P 12 10
Y 14 10
0 1 2
23 19 2
1 33 7
1 13 10
16 6 28
16 6 28
16 6 28
16 6 28
16 2 28
16 2 28
16 2 28
16 2 28
16 2 28
16 15 28
16 15 28
16 15 28
16 15 28
16 15 28
15 35 5
15 28 5
16 20 2
15 21 2
15 18 2
15 6 10
15 10 10
1 11 18
18 9 28
12 30 5
12 30 5
12 30 5
17 30 28
17 31 28
16 28 14
16 31 14
15 20 15
16 19 12
17 11 18
17 7 18
16 9 18
16 13 18
15 4 2
15 6 2
17 8 10
17 12 10
15 14 10
endmonsters
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,

View File

@ -1,59 +1,58 @@
tileset green
bgfile backgrounds/forest2.png
bg 0
hurryup 56
endmaps
hurryup 328
help
Jump onto trampolines to bounce high...
endhelp
monsters
1 17 28
! 19 19
a 23 18
a 14 10
a 21 7
r 36 12
r 2 16
r 2 8
r 38 4
r 35 20
C 23 1
C 7 1
P 24 28
P 23 28
P 25 28
P 25 19
@ 16 19
@ 18 19
@ 20 19
@ 22 19
Y 36 16
Y 37 16
Y 3 12
Y 2 12
Y 3 20
Y 2 20
Y 36 8
Y 37 8
@ 37 20
@ 36 20
@ 2 16
@ 3 16
@ 37 12
@ 36 12
@ 3 8
@ 2 4
@ 2 8
@ 3 4
@ 36 4
@ 37 4
@ 17 1
@ 23 1
P 20 1
P 19 1
P 21 1
? 15 28
0 17 28
23 19 19
6 23 18
6 14 10
6 21 7
1 36 12
1 2 16
1 2 8
1 38 4
1 35 20
18 23 1
18 7 1
17 24 28
17 23 28
17 25 28
17 25 19
16 16 19
16 18 19
16 20 19
16 22 19
15 36 16
15 37 16
15 3 12
15 2 12
15 3 20
15 2 20
15 36 8
15 37 8
16 37 20
16 36 20
16 2 16
16 3 16
16 37 12
16 36 12
16 3 8
16 2 4
16 2 8
16 3 4
16 36 4
16 37 4
16 17 1
16 23 1
17 20 1
17 19 1
17 21 1
14 15 28
endmonsters
exitdir 2
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,20,20,20,20,20,20,20,20,20,20,20,25,25,25,25,25,25,25,25,25,25,25,20,20,20,20,20,20,20,20,20,20,0,0,0,4,

View File

@ -1,38 +1,37 @@
tileset green
bgfile backgrounds/forest2.png
bg 0
hurryup 60
endmaps
help
endhelp
monsters
1 19 18
! 19 21
a 13 9
a 23 9
a 27 17
a 8 18
a 13 24
a 23 23
a 32 24
a 3 23
C 22 11
C 12 11
P 26 7
P 10 7
@ 31 14
@ 6 14
Y 2 21
Y 34 21
Y 7 21
Y 29 21
@ 25 21
@ 20 21
@ 11 21
@ 16 21
Y 25 14
Y 12 14
P 21 14
P 16 14
0 19 18
23 19 21
6 13 9
6 23 9
6 27 17
6 8 18
6 13 24
6 23 23
6 32 24
6 3 23
18 22 11
18 12 11
17 26 7
17 10 7
16 31 14
16 6 14
15 2 21
15 34 21
15 7 21
15 29 21
16 25 21
16 20 21
16 11 21
16 16 21
15 25 14
15 12 14
17 21 14
17 16 14
endmonsters
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,58 +1,57 @@
bgfile
bg 0
hurryup 232
endmaps
help
endhelp
monsters
1 2 24
! 28 6
a 11 12
a 28 24
a 29 18
a 6 11
C 9 5
C 31 23
S 24 28
a 21 2
a 37 10
P 8 5
P 9 5
P 10 5
P 11 5
P 27 15
P 28 15
P 30 15
P 29 15
@ 35 27
@ 37 25
Y 36 26
Y 34 28
Y 4 26
@ 3 25
Y 9 25
@ 10 25
Y 7 14
Y 12 14
P 14 12
P 5 12
@ 13 13
@ 6 13
@ 28 11
@ 28 7
@ 5 7
@ 3 9
Y 6 6
Y 4 8
Y 13 6
Y 15 8
@ 16 8
@ 14 7
@ 30 11
@ 30 7
Y 29 11
Y 29 7
S 32 7
0 2 24
23 28 6
6 11 12
6 28 24
6 29 18
6 6 11
18 9 5
18 31 23
12 24 28
6 21 2
6 37 10
17 8 5
17 9 5
17 10 5
17 11 5
17 27 15
17 28 15
17 30 15
17 29 15
16 35 27
16 37 25
15 36 26
15 34 28
15 4 26
16 3 25
15 9 25
16 10 25
15 7 14
15 12 14
17 14 12
17 5 12
16 13 13
16 6 13
16 28 11
16 28 7
16 5 7
16 3 9
15 6 6
15 4 8
15 13 6
15 15 8
16 16 8
16 14 7
16 30 11
16 30 7
15 29 11
15 29 7
12 32 7
endmonsters
exitdir 1
24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,

View File

@ -1,43 +1,42 @@
bgfile
bg 0
hurryup 232
endmaps
help
endhelp
monsters
1 20 28
! 16 4
a 22 22
a 17 19
a 21 17
a 19 20
a 24 20
C 4 13
C 37 13
a 17 23
Y 26 13
Y 14 13
Y 12 13
Y 28 13
Y 31 13
Y 9 13
@ 36 13
@ 3 13
@ 7 13
@ 33 13
P 30 20
P 10 20
P 24 4
P 17 4
P 16 4
P 23 4
@ 25 5
@ 15 5
@ 18 8
@ 22 8
P 20 23
P 23 23
P 17 23
0 20 28
23 16 4
6 22 22
6 17 19
6 21 17
6 19 20
6 24 20
18 4 13
18 37 13
6 17 23
15 26 13
15 14 13
15 12 13
15 28 13
15 31 13
15 9 13
16 36 13
16 3 13
16 7 13
16 33 13
17 30 20
17 10 20
17 24 4
17 17 4
17 16 4
17 23 4
16 25 5
16 15 5
16 18 8
16 22 8
17 20 23
17 23 23
17 17 23
endmonsters
exitdir 1
24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,

View File

@ -1,7 +1,6 @@
bgfile xx
bg 0
hurryup 80
endmaps
help
Slam a monster onto another for a powerup.
Grab this monster, but don't kill it yet...
@ -9,20 +8,19 @@ Stand on this ledge then slam!
Collect all flowers for a bonus!
endhelp
monsters
1 4 10
? 6 10
? 12 10
? 25 10
r 34 9
r 17 10
Y 15 8
Y 19 8
Y 32 8
Y 36 8
Y 28 9
r 9 4
? 27 4
Y 20 4
0 4 10
14 6 10
14 12 10
14 25 10
1 34 9
1 17 10
15 15 8
15 19 8
15 32 8
15 28 9
1 9 4
14 27 4
15 20 4
endmonsters
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4,
@ -30,13 +28,13 @@ exitdir 1
4,4,4,4,4,4,4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,4,4,4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,4,4,4,27,27,27,27,27,27,35,34,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,4,4,39,1,1,1,1,1,1,38,39,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,37,3,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,4,4,39,1,1,1,1,1,1,38,39,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,34,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,41,0,0,0,41,0,0,4,
4,0,0,0,0,0,0,0,0,5,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,5,41,6,0,0,39,1,1,1,38,0,0,4,
39,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,38,4,39,1,1,38,4,4,4,39,1,1,38,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,41,0,0,0,1,1,1,38,
4,0,0,0,0,0,0,0,0,5,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,5,41,6,0,0,39,1,1,1,4,4,4,4,
39,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,38,4,39,1,1,38,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,

View File

@ -1,46 +1,43 @@
tileset green
bgfile backgrounds/forest.png
bg 0
hurryup 30
endmaps
help
Slam monsters into King Rat to damage it!
endhelp
monsters
a 19 5
a 7 6
r 27 7
s 10 9
s 23 9
r 19 13
s 4 15
s 20 15
s 28 15
1 2 28
0 6 8
14 11 8
45 16 20
endmonsters
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
***********000*******************000000*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
*0000000000000000000000000000000000~~~~*
*00000000000000000000000000000000000000*
*00000000000000000000000000000000000000*
**-********000*******************000000*
*0=00000*000000*0000000*0000000*0000000*
*0=000000000000000000000000000000000000*
*0=000000000000000000000000000000000000*
*0=000000000000000000000000000000000000*
*0=000000000000000000000000000000000000*
*0=000000000000000000000000000000000000*
*0=000000000000000000000000000000000000*
*0=000000000000000000000000000000^^^000*
*~~~~~~~~~0000~~~~~~~~~~000~~00~~~~~~-~*
*000000000000000000000000000000000000=0*
*000000000000000000000000000000000000=0*
*000000000000000000000000000000000000=0*
*000000000000000000000000000000000000=0*
*0000000^^^^^^^^000000000000000000000=0*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,0,23,23,23,23,23,23,23,23,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,
layer2

View File

@ -1,50 +1,49 @@
bgfile
bg 0
hurryup 90
endmaps
help
endhelp
monsters
1 32 7
r 33 23
r 4 23
P 34 23
P 33 23
P 6 23
P 5 23
Y 35 23
Y 32 23
Y 7 23
Y 4 23
@ 24 18
@ 16 18
@ 15 18
@ 23 18
P 27 16
P 12 16
Y 26 17
Y 25 17
Y 14 17
Y 13 17
a 23 17
a 25 14
a 12 15
a 17 13
r 35 28
r 7 28
r 10 7
P 20 6
P 19 6
@ 22 6
@ 17 6
Y 27 7
Y 12 7
Y 28 7
Y 11 7
s 29 22
s 12 22
S 10 20
S 30 20
0 32 7
1 33 23
1 4 23
17 34 23
17 33 23
17 6 23
17 5 23
15 35 23
15 32 23
15 7 23
15 4 23
16 24 18
16 16 18
16 15 18
16 23 18
17 27 16
17 12 16
15 26 17
15 25 17
15 14 17
15 13 17
6 23 17
6 25 14
6 12 15
6 17 13
1 35 28
1 7 28
1 10 7
17 20 6
17 19 6
16 22 6
16 17 6
15 27 7
15 12 7
15 28 7
15 11 7
7 29 22
7 12 22
12 10 20
12 30 20
endmonsters
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,39 +1,38 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 40
endmaps
help
You can walk through spikes safely.
But don't fall on them!
endhelp
monsters
1 4 27
! 20 15
r 19 15
r 5 7
r 35 7
r 35 23
r 4 23
@ 26 11
@ 27 11
@ 28 11
@ 28 19
@ 27 19
@ 26 19
@ 12 11
@ 13 11
@ 14 11
@ 14 19
@ 13 19
@ 12 19
@ 2 7
@ 37 7
@ 37 23
@ 2 23
? 10 19
? 16 19
0 4 27
23 20 15
1 19 15
1 5 7
1 35 7
1 35 23
16 26 11
16 27 11
16 28 11
16 28 19
16 27 19
16 26 19
16 12 11
16 13 11
16 14 11
16 14 19
16 13 19
16 12 19
16 2 7
16 37 7
16 37 23
16 2 23
14 10 19
14 16 19
1 8 23
endmonsters
exitdir -2
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,38 +1,37 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 120
endmaps
help
Drop through bridges with Down+X
endhelp
monsters
1 24 8
! 20 8
r 10 4
r 11 12
r 33 12
r 25 16
r 12 20
r 25 24
Y 23 12
Y 25 12
@ 25 20
@ 23 20
Y 32 20
P 34 20
@ 7 16
P 5 16
@ 16 16
Y 14 16
Y 15 24
@ 16 24
@ 14 24
@ 5 24
@ 7 24
Y 6 24
P 8 4
@ 26 8
? 21 8
0 24 8
23 20 8
1 10 4
1 11 12
1 33 12
1 25 16
1 12 20
1 25 24
15 23 12
15 25 12
16 25 20
16 23 20
15 32 20
17 34 20
16 7 16
17 5 16
16 16 16
15 14 16
15 15 24
16 16 24
16 14 24
16 5 24
16 7 24
15 6 24
17 8 4
16 26 8
14 21 8
endmonsters
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
@ -52,7 +51,7 @@ exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,35,1,1,1,34,0,0,0,0,35,1,1,1,34,0,0,0,0,35,20,20,20,20,20,20,20,20,20,20,20,20,34,0,0,0,4,
4,0,0,0,35,1,1,1,34,0,0,0,0,35,1,1,1,34,0,0,0,0,35,20,20,21,21,21,21,21,21,21,21,20,20,34,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,34 +1,33 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 30
endmaps
help
endhelp
monsters
1 1 17
! 20 15
Y 36 9
s 29 1
r 17 16
r 21 20
Y 15 16
Y 24 16
@ 23 20
@ 16 20
P 25 12
P 14 12
@ 23 6
@ 16 6
r 21 12
C 33 9
C 26 9
C 4 9
s 13 1
P 27 9
@ 32 9
@ 7 9
Y 3 9
P 12 9
0 1 17
23 20 15
15 36 9
7 29 1
1 17 16
1 21 20
15 15 16
15 24 16
16 23 20
16 16 20
17 25 12
17 14 12
16 23 6
16 16 6
1 21 12
18 33 9
18 26 9
18 4 9
7 13 1
17 27 9
16 32 9
16 7 9
15 3 9
17 12 9
endmonsters
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
@ -59,10 +58,18 @@ exitdir 1
4,4,4,4,4,4,4,4,4,4,4,39,1,40,40,34,0,0,0,0,0,0,0,0,35,1,1,1,38,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,11,11,11,11,11,11,11,11,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
layer2
1,10,8
38,10,8
15,28,11
16,28,11
17,28,11
18,28,11
19,28,11
20,28,11
21,28,11
22,28,11
23,28,11
24,28,11

View File

@ -1,46 +1,45 @@
bgfile
bg 0
hurryup 30
endmaps
help
endhelp
monsters
1 4 27
! 18 16
r 10 4
r 23 8
r 23 16
r 12 20
r 28 20
r 25 24
r 30 28
P 20 12
@ 19 12
@ 21 12
Y 19 4
Y 8 4
@ 5 24
@ 7 24
Y 34 24
Y 32 24
P 26 28
P 26 28
P 26 28
P 26 28
P 27 28
P 27 28
P 27 28
P 27 28
P 27 28
P 27 28
Y 15 8
Y 26 8
@ 14 8
@ 27 8
@ 33 16
Y 7 16
0 4 27
23 18 16
1 10 4
1 23 8
1 23 16
1 12 20
1 28 20
1 25 24
1 30 28
17 20 12
16 19 12
16 21 12
15 19 4
15 8 4
16 5 24
16 7 24
15 34 24
15 32 24
17 26 28
17 26 28
17 26 28
17 26 28
17 27 28
17 27 28
17 27 28
17 27 28
17 27 28
17 27 28
15 15 8
15 26 8
16 14 8
16 27 8
16 33 16
15 7 16
endmonsters
exitdir -2
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,50 +1,49 @@
bgfile
bg 0
hurryup 248
endmaps
help
Rolling logs will push you along.
endhelp
monsters
1 5 25
! 19 1
P 21 1
Y 8 21
Y 31 21
Y 29 21
Y 27 21
Y 10 21
Y 12 21
P 18 1
P 16 5
P 23 5
? 6 21
r 11 21
r 19 5
Y 13 17
Y 14 17
Y 15 17
Y 26 17
Y 25 17
Y 24 17
@ 19 17
@ 20 17
@ 13 13
@ 15 13
@ 24 13
@ 27 13
@ 19 9
@ 20 9
Y 23 9
Y 24 9
Y 15 9
Y 16 9
C 20 1
r 22 9
r 26 13
r 16 17
0 5 25
23 19 1
17 21 1
15 8 21
15 31 21
15 29 21
15 27 21
15 10 21
15 12 21
17 18 1
17 16 5
17 23 5
14 6 21
1 11 21
1 19 5
15 13 17
15 14 17
15 15 17
15 26 17
15 25 17
15 24 17
16 19 17
16 20 17
16 13 13
16 15 13
16 24 13
16 27 13
16 19 9
16 20 9
15 23 9
15 24 9
15 15 9
15 16 9
18 20 1
1 22 9
1 26 13
1 16 17
endmonsters
exitdir -2
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,1,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,52 +1,51 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 30
endmaps
help
endhelp
monsters
1 4 28
! 33 28
S 9 3
S 34 3
r 3 8
r 37 8
r 9 13
S 30 13
S 3 18
r 11 23
S 35 23
Y 28 23
Y 11 23
Y 30 23
Y 9 23
Y 7 23
Y 5 23
Y 3 23
Y 32 23
Y 34 23
Y 36 23
@ 30 18
@ 32 18
@ 36 18
@ 34 18
r 37 18
@ 3 18
@ 5 18
@ 7 18
@ 9 18
P 32 13
P 34 13
P 36 13
P 7 13
P 5 13
P 3 13
@ 34 8
@ 36 8
@ 3 8
@ 5 8
P 36 3
P 3 3
0 4 28
23 33 28
12 9 3
12 34 3
1 3 8
1 37 8
1 9 13
12 30 13
12 3 18
1 11 23
12 35 23
15 28 23
15 11 23
15 30 23
15 9 23
15 7 23
15 5 23
15 3 23
15 32 23
15 34 23
15 36 23
16 30 18
16 32 18
16 36 18
16 34 18
1 37 18
16 3 18
16 5 18
16 7 18
16 9 18
17 32 13
17 34 13
17 36 13
17 7 13
17 5 13
17 3 13
16 34 8
16 36 8
16 3 8
16 5 8
17 36 3
17 3 3
endmonsters
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,31 +1,30 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 30
endmaps
help
endhelp
monsters
1 2 28
! 27 10
a 21 4
r 7 8
r 32 13
r 17 18
r 28 22
P 17 10
P 18 10
@ 19 10
@ 16 10
Y 20 10
Y 15 10
Y 10 18
Y 23 22
Y 30 22
Y 30 13
Y 38 13
Y 9 8
Y 2 8
a 4 8
0 2 28
23 27 10
6 21 4
1 7 8
1 32 13
1 17 18
1 28 22
17 17 10
17 18 10
16 19 10
16 16 10
15 20 10
15 15 10
15 10 18
15 23 22
15 30 22
15 30 13
15 38 13
15 9 8
15 2 8
6 4 8
endmonsters
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,

View File

@ -1,18 +1,17 @@
bgfile
bg 0
hurryup 30
endmaps
help
endhelp
monsters
1 1 23
! 21 23
a 36 7
a 2 9
a 21 15
a 12 23
a 29 23
s 28 1
6 36 7
6 2 9
6 21 15
7 28 1
23 37 20
0 1 20
6 30 19
6 8 20
endmonsters
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
@ -36,12 +35,12 @@ exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,1,1,0,0,0,9,9,9,9,9,9,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,9,9,9,9,0,0,1,1,4,
4,23,23,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,23,23,4,
4,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,20,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

View File

@ -1,52 +1,51 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 60
endmaps
help
endhelp
monsters
1 20 12
! 20 12
@ 11 5
@ 12 9
@ 27 9
@ 28 5
@ 31 28
@ 32 15
@ 34 15
@ 5 15
@ 5 28
@ 7 15
P 10 19
P 11 15
P 19 5
P 20 5
P 21 5
P 28 15
P 29 19
P 30 15
P 9 15
S 7 5
Y 11 9
Y 13 9
Y 26 9
Y 28 9
Y 3 15
Y 30 28
Y 32 28
Y 36 15
Y 4 28
Y 6 28
a 31 3
a 7 19
r 27 5
r 16 5
r 10 12
r 29 12
r 6 15
r 31 15
0 20 12
23 20 12
16 11 5
16 12 9
16 27 9
16 28 5
16 31 28
16 32 15
16 34 15
16 5 15
16 5 28
16 7 15
17 10 19
17 11 15
17 19 5
17 20 5
17 21 5
17 28 15
17 29 19
17 30 15
17 9 15
12 7 5
15 11 9
15 13 9
15 26 9
15 28 9
15 3 15
15 30 28
15 32 28
15 36 15
15 4 28
15 6 28
6 31 3
6 7 19
1 27 5
1 16 5
1 10 12
1 29 12
1 6 15
1 31 15
endmonsters
exitdir 2
exitdir 1
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
@ -60,7 +59,7 @@ exitdir 2
4,0,0,0,7,0,0,0,0,22,20,20,20,20,20,22,0,0,0,0,0,0,0,0,22,20,20,20,20,20,22,0,0,0,0,7,0,0,0,4,
4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,35,1,1,1,34,0,0,0,0,20,20,20,0,0,0,35,1,1,1,34,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,35,1,40,40,34,0,0,0,0,20,20,20,0,0,0,35,1,40,40,34,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,25,25,25,25,25,0,0,0,0,0,10,10,10,10,10,10,10,10,10,0,0,4,
@ -76,14 +75,10 @@ exitdir 2
4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,4,
4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,12,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,4,
4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,13,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,4,
4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,
0,1,1,1,1,1,1,1,1,1,1,40,40,40,40,1,1,1,40,40,40,40,1,40,40,40,1,1,1,1,40,40,40,40,40,1,40,40,1,4,
layer2
4,6,8
35,6,8
12,13,40
13,13,40
27,13,40
28,13,40
10,20,41
29,20,41
10,21,42
@ -93,25 +88,4 @@ layer2
15,23,42
24,23,43
0,29,39
3,29,40
4,29,40
5,29,40
6,29,40
7,29,40
11,29,40
12,29,40
13,29,40
18,29,40
19,29,40
20,29,40
23,29,40
24,29,40
25,29,40
30,29,40
31,29,40
32,29,40
33,29,40
34,29,40
36,29,40
37,29,40
39,29,38

View File

@ -1,7 +1,6 @@
tileset green
bg 0
hurryup 60
endmaps
help
endhelp
monsters

View File

@ -1,7 +1,6 @@
tileset green
bg 0
hurryup 90
endmaps
help
endhelp
monsters

View File

@ -1,59 +1,58 @@
bgfile backgrounds/forest2.png
bg 0
hurryup 616
endmaps
help
endhelp
monsters
1 5 26
! 27 6
C 28 26
C 35 3
C 16 14
r 36 9
S 17 22
Y 11 18
Y 12 18
Y 15 18
Y 13 18
Y 14 18
Y 28 18
Y 26 18
Y 25 18
Y 27 18
Y 24 18
@ 16 18
@ 17 18
@ 19 18
@ 23 18
@ 22 18
@ 20 18
Y 21 18
Y 18 18
P 3 3
P 1 3
@ 25 6
@ 22 6
@ 21 13
@ 20 13
@ 33 9
@ 32 3
Y 20 6
Y 15 9
Y 11 9
Y 23 26
Y 15 26
Y 24 22
@ 21 22
@ 11 22
@ 20 26
@ 38 9
a 28 14
a 10 2
Y 3 12
r 2 3
0 5 26
23 27 6
18 28 26
18 35 3
18 16 14
1 36 9
12 17 22
15 11 18
15 12 18
15 15 18
15 13 18
15 14 18
15 28 18
15 26 18
15 25 18
15 27 18
15 24 18
16 16 18
16 17 18
16 19 18
16 23 18
16 22 18
16 20 18
15 21 18
15 18 18
17 3 3
17 1 3
16 25 6
16 22 6
16 21 13
16 20 13
16 33 9
16 32 3
15 20 6
15 15 9
15 11 9
15 23 26
15 15 26
15 24 22
16 21 22
16 11 22
16 20 26
16 38 9
6 28 14
6 10 2
15 3 12
1 2 3
endmonsters
exitdir 2
exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
@ -132,7 +131,7 @@ layer2
28,23,28
29,23,28
34,23,37
37,23,7
37,23,8
30,24,42
36,24,43
37,24,7

View File

@ -1,16 +1,15 @@
bgfile backgrounds/snow1.png
bg 0
hurryup 30
endmaps
help
endhelp
monsters
1 26 13
P 1 13
P 7 13
r 17 13
r 37 12
! 31 13
0 26 13
23 31 13
17 1 13
17 7 13
1 17 13
1 37 12
endmonsters
exitdir 1
1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
@ -27,17 +26,17 @@ exitdir 1
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,4,
4,1,1,1,1,1,1,1,16,16,16,16,16,16,16,1,1,1,1,1,1,16,16,16,16,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,1,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
4,1,1,1,1,1,1,1,16,16,16,16,16,16,16,1,1,1,1,1,1,16,16,16,16,23,23,23,23,23,23,23,23,23,23,23,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,1,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,0,0,0,0,0,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4,4,11,11,11,11,11,4,4,4,4,0,0,0,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,

View File

@ -1,7 +1,6 @@
tileset green
bg 0
hurryup 30
endmaps
~~00000000000000000000000000000000000000
~~00000000000000000000000000000000000000
~~00000000000000000000000000000000000000