- Added new monster: fly
- Level tweaks - Removed broken moving platform inertia - they now just pause.
This commit is contained in:
parent
1bc25f661f
commit
81210a050a
|
@ -39,10 +39,12 @@
|
|||
18,level8.5.dat,Look out above...
|
||||
40,level40.dat,King Snail
|
||||
41,level41.dat,Basic Kitchen
|
||||
42,level42.dat,Precarious Loaves
|
||||
403,level403.dat,Delayed Release
|
||||
407,level407.dat,The Fly
|
||||
404,level404.dat,Off Cuts
|
||||
42,level42.dat,Precarious Loaves
|
||||
405,level405.dat,Pitfalls
|
||||
403,level403.dat,Delayed Release
|
||||
406,level406.dat,The Kitchen Sink
|
||||
109,level109.dat,THE END SO FAR
|
||||
99,level99.dat,TEST LEVEL
|
||||
406,level406.dat,NEW LEVEL
|
||||
408,level408.dat,NEW LEVEL
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 942 B |
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
|
@ -6,11 +6,9 @@ endhelp
|
|||
monsters
|
||||
0 6 28
|
||||
23 23 14
|
||||
132 13 27 260 412 205 384 254 352 206 325 249 296 207 266 249 266 210 296 248 322 209 351 252 381 210 409 256 441 209 441
|
||||
6 23 5
|
||||
1 25 20
|
||||
18 38 10
|
||||
6 32 19
|
||||
1 8 5
|
||||
124 27 11
|
||||
124 34 7
|
||||
|
@ -30,6 +28,8 @@ monsters
|
|||
16 26 1
|
||||
16 25 1
|
||||
16 22 1
|
||||
132 11 27 184 448 278 246
|
||||
133 32 19
|
||||
endmonsters
|
||||
exitdir 1
|
||||
57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,
|
||||
|
@ -63,11 +63,6 @@ exitdir 1
|
|||
57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,
|
||||
57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,
|
||||
layer2
|
||||
13,0,62
|
||||
14,0,62
|
||||
15,0,62
|
||||
16,0,62
|
||||
17,0,62
|
||||
36,11,8
|
||||
36,12,7
|
||||
36,13,7
|
||||
|
|
|
@ -54,8 +54,8 @@ exitdir 1
|
|||
57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,
|
||||
57,58,58,58,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,58,58,58,57,
|
||||
57,57,57,57,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,57,57,57,57,
|
||||
57,57,57,57,57,58,0,0,0,0,0,0,59,58,58,58,58,58,58,58,58,58,58,58,58,58,60,0,0,0,0,0,0,0,58,57,57,57,57,57,
|
||||
57,57,57,57,57,57,58,58,58,58,58,58,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,58,58,58,58,58,58,58,57,57,57,57,57,57,
|
||||
57,57,57,57,57,58,0,0,0,0,0,0,0,0,0,0,59,58,58,58,58,58,60,0,0,0,0,0,0,0,0,0,0,0,58,57,57,57,57,57,
|
||||
57,57,57,57,57,57,58,58,58,58,58,58,58,58,58,58,57,57,57,57,57,57,57,58,58,58,58,58,58,58,58,58,58,58,57,57,57,57,57,57,
|
||||
57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
|
||||
57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
|
||||
57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
|
||||
|
|
13
defs.h
13
defs.h
|
@ -325,7 +325,7 @@
|
|||
#define S_SLOPE 2
|
||||
|
||||
// Sprite types
|
||||
#define MAXPTYPES 133
|
||||
#define MAXPTYPES 134
|
||||
#define P_PLAYER 0
|
||||
#define P_RAT 1
|
||||
#define P_CHEESE 2
|
||||
|
@ -464,8 +464,18 @@
|
|||
#define P_BIGNUMNETS 130
|
||||
#define P_RANDOM 131
|
||||
#define P_PLATFORM 132
|
||||
#define P_FLY 133
|
||||
|
||||
|
||||
#define FLY_FLYTIME 150
|
||||
#define FLY_WALKTIME 300
|
||||
|
||||
#define F_WALK 0
|
||||
#define F_FLYHORZ 1
|
||||
#define F_FLYVERT 2
|
||||
|
||||
|
||||
#define PLATFORMPAUSE 60
|
||||
#define PLATFORMDELAY 4
|
||||
#define PLATFORM_ACCEL 0.5 // how fast platforms accelerate/decellerate
|
||||
#define PLATFORM_MINSPEED 0.3
|
||||
|
@ -564,6 +574,7 @@
|
|||
#define MV_NONE 0 // didn't move
|
||||
#define MV_WALK 1 // walked/climbed on purpose
|
||||
#define MV_ICE 3 // slid on ice
|
||||
#define MV_FLY 4 // flying
|
||||
|
||||
|
||||
// Tile types
|
||||
|
|
7
edit.c
7
edit.c
|
@ -840,8 +840,9 @@ void drawsprites(void) {
|
|||
for (s = sprite; s != NULL; s = s->next) {
|
||||
drawsprite(s);
|
||||
// waypoint selection mode
|
||||
if (state == LS_WAYPOINTS) {
|
||||
if (waypointm == s) {
|
||||
//if (state == LS_WAYPOINTS) {
|
||||
//if (waypointm == s) {
|
||||
if (s->id == P_PLATFORM) {
|
||||
int i;
|
||||
double curx,cury;
|
||||
drawbox16(screen, s->x - s->img->w/2,s->y - s->img->h,
|
||||
|
@ -856,7 +857,7 @@ void drawsprites(void) {
|
|||
curx = s->wayx[i]; cury = s->wayy[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
233
rc.c
233
rc.c
|
@ -2979,80 +2979,46 @@ int movesprite(sprite_t *s) {
|
|||
if (s->numwaypoints > 0) {
|
||||
sprite_t *s2;
|
||||
double oldx,oldy,xdiff,ydiff;
|
||||
double slowpoint;
|
||||
|
||||
slowpoint = ((double)TILEW*2.5);
|
||||
//slowpoint = (0.10 * s->dbltimer); // 10% of full distance
|
||||
|
||||
oldx = s->x;
|
||||
oldy = s->y;
|
||||
// move torwaeds next waypoints
|
||||
|
||||
|
||||
dstx = s->wayx[s->curwaypoint];
|
||||
dsty = s->wayy[s->curwaypoint];
|
||||
|
||||
if (s->dbltimer == -1) { // haven't set full distance yet
|
||||
s->dbltimer = getdistance(s->x,s->y,dstx,dsty);
|
||||
if (s->dbltimer > slowpoint*2) {
|
||||
s->timer1 = 0; // at top speed
|
||||
} else {
|
||||
s->timer1 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
rv = moveto(s,dstx,dsty,s->speed,s->speed);
|
||||
|
||||
// remember how far we moved
|
||||
xdiff = s->x - oldx;
|
||||
ydiff = s->y - oldy;
|
||||
|
||||
// got there?
|
||||
if (rv == 0) {
|
||||
// go to next waypoint
|
||||
s->curwaypoint++;
|
||||
if (s->curwaypoint >= s->numwaypoints) {
|
||||
s->curwaypoint = 0;
|
||||
}
|
||||
// recalc total distance
|
||||
if (s->timer1 == 0) {
|
||||
oldx = s->x;
|
||||
oldy = s->y;
|
||||
// move torwaeds next waypoints
|
||||
dstx = s->wayx[s->curwaypoint];
|
||||
dsty = s->wayy[s->curwaypoint];
|
||||
s->dbltimer = getdistance(s->x,s->y,dstx,dsty);
|
||||
|
||||
|
||||
rv = moveto(s,dstx,dsty,s->speed,s->speed);
|
||||
|
||||
// remember how far we moved
|
||||
xdiff = s->x - oldx;
|
||||
ydiff = s->y - oldy;
|
||||
|
||||
// got there?
|
||||
if (rv == 0) {
|
||||
// pause
|
||||
s->timer1 = PLATFORMPAUSE;
|
||||
}
|
||||
|
||||
// move anything on top of us by the same amount
|
||||
for (s2 = sprite ; s2 ; s2 = s2->next) {
|
||||
if (s2->onplatform == s) {
|
||||
s2->x += xdiff;
|
||||
s2->y += ydiff;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// adjust speed
|
||||
if (timer % PLATFORMDELAY == 0) {
|
||||
double maxspeed = getspeed(s);
|
||||
|
||||
if ((rv <= slowpoint) && (s->timer1 <= 0)) { // getting close...
|
||||
// slow down
|
||||
s->timer1 = -1;
|
||||
if (s->speed > PLATFORM_MINSPEED) {
|
||||
s->speed -= PLATFORM_ACCEL;
|
||||
if (s->speed < PLATFORM_MINSPEED) s->speed = PLATFORM_MINSPEED;
|
||||
}
|
||||
} else if (s->speed < maxspeed) {
|
||||
// speed up
|
||||
s->timer1 = 1; // speeding up
|
||||
s->speed += PLATFORM_ACCEL;
|
||||
if (s->speed > maxspeed) s->speed = maxspeed;
|
||||
}
|
||||
// reached top speed?
|
||||
if (s->speed >= maxspeed) {
|
||||
if (rv > slowpoint*2) {
|
||||
s->timer1 = 0; // at top speed
|
||||
}
|
||||
s->timer1--;
|
||||
if (s->timer1 == 0) {
|
||||
// go to next waypoint
|
||||
s->curwaypoint++;
|
||||
if (s->curwaypoint >= s->numwaypoints) {
|
||||
s->curwaypoint = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// move anything on top of us by the same amount
|
||||
for (s2 = sprite ; s2 ; s2 = s2->next) {
|
||||
if (s2->onplatform == s) {
|
||||
s2->x += xdiff;
|
||||
s2->y += ydiff;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (s->id == P_TICK) {
|
||||
|
||||
|
@ -3275,6 +3241,140 @@ int movesprite(sprite_t *s) {
|
|||
s->y += s->ys;
|
||||
s->dir = absxs;
|
||||
s->moved = MV_WALK;
|
||||
} else if (s->id == P_FLY) { // fly - like bee but more erratic flight and can walk on ground if player far away
|
||||
double absxs,absys;
|
||||
double xmod,ymod;
|
||||
if (s->flies) {
|
||||
if ((s->xs == -99) || (s->ys == -99)) {
|
||||
s->xs = getspeed(s);
|
||||
s->ys = -getspeed(s);
|
||||
}
|
||||
|
||||
if (s->xs > 0) absxs = 1;
|
||||
else absxs = -1;
|
||||
|
||||
if (s->ys > 0) absys = 1;
|
||||
else absys = -1;
|
||||
|
||||
/* this will fix the speed if ANGRY is set */
|
||||
s->xs = absxs*getspeed(s);
|
||||
s->ys = absys*getspeed(s);
|
||||
|
||||
if (s->flies == F_FLYVERT) {
|
||||
ymod = sin(((double)timer * (double)3.6) * (M_PI/180));
|
||||
//ymod *= 0.8;
|
||||
if (s->ys * (ymod) > 0) absys = 1;
|
||||
else absys = -1;
|
||||
} else if (s->flies == F_FLYHORZ) {
|
||||
xmod = sin(((double)timer * (double)3.6) * (M_PI/180));
|
||||
if (s->xs * (xmod) > 0) absxs = 1;
|
||||
else absxs = -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* can we move? */
|
||||
tt = gettileat(s->x + absxs*((s->img->w/2)+8), s->y-(s->img->h/2),NULL,NULL);
|
||||
if ((tt->solid) || (tt->spikes )) {
|
||||
/* turn */
|
||||
s->xs = -s->xs;
|
||||
}
|
||||
|
||||
tt = gettileat(s->x, s->y-(s->img->h/2) + absys*((s->img->h/2)+8),NULL,NULL);
|
||||
if ((tt->solid) || (tt->spikes) || (tt->water)) {
|
||||
/* turn */
|
||||
s->ys = -s->ys;
|
||||
}
|
||||
|
||||
/* move */
|
||||
if (s->flies == F_FLYVERT) {
|
||||
s->x += s->xs;
|
||||
s->y += (s->ys * ymod);
|
||||
} else {
|
||||
s->x += (s->xs * xmod);
|
||||
s->y += s->ys;
|
||||
}
|
||||
|
||||
s->dir = absxs;
|
||||
s->moved = MV_FLY;
|
||||
|
||||
// inc flying timer
|
||||
s->timer1++;
|
||||
if (s->timer1 >= FLY_FLYTIME) {
|
||||
if (s->flies == F_FLYHORZ) {
|
||||
s->flies = F_FLYVERT;
|
||||
} else {
|
||||
s->flies = F_WALK;
|
||||
}
|
||||
s->timer1 = 0;
|
||||
}
|
||||
} else { // walking - move like a rat
|
||||
double myspeed = getspeed(s) * 0.75;
|
||||
double playerdist;
|
||||
if (!s->falling) {
|
||||
int move = B_FALSE;
|
||||
int xdiff, absxdiff;
|
||||
tiletype_t *tunder;
|
||||
|
||||
/* distance to player */
|
||||
xdiff = player->x - s->x;
|
||||
if (xdiff < 0) absxdiff = -xdiff;
|
||||
else absxdiff = xdiff;
|
||||
|
||||
// tile in front and below
|
||||
tt = gettileat(s->x + s->dir*myspeed + (s->dir * (s->img->w/2)),s->y + (TILEH/2),NULL,NULL);
|
||||
// tile below
|
||||
tunder = gettileat(s->x ,s->y + 1,NULL,NULL);
|
||||
/* if there's a hole in front of us and below*/
|
||||
if (tt->solid == S_NOTSOLID) {
|
||||
// we're on a slope
|
||||
if (tunder->solid == S_SLOPE) {
|
||||
move = B_TRUE;
|
||||
}
|
||||
} else {
|
||||
move = B_TRUE;
|
||||
}
|
||||
|
||||
/* either move or turn around */
|
||||
if (move) {
|
||||
rv = movex(s, s->dir*myspeed);
|
||||
if (rv) {
|
||||
/* if we couldn't move (hit a wall), turn */
|
||||
s->dir = -s->dir;
|
||||
}
|
||||
} else {
|
||||
s->dir = -s->dir;
|
||||
}
|
||||
s->moved = MV_WALK;
|
||||
|
||||
// take off if player is close
|
||||
playerdist = getdistance(player->x,player->y,s->x,s->y);
|
||||
if (playerdist <= (TILEW*10)) {
|
||||
s->timer1 = 0;
|
||||
s->flies = F_FLYHORZ;
|
||||
s->xs = -99;
|
||||
s->ys = -99;
|
||||
}
|
||||
|
||||
// ...and take off eventually anyway
|
||||
s->timer1++;
|
||||
if (s->timer1 >= FLY_WALKTIME) {
|
||||
s->timer1 = 0;
|
||||
s->flies = F_FLYHORZ;
|
||||
s->xs = -99;
|
||||
s->ys = -99;
|
||||
}
|
||||
} else { // falling
|
||||
tiletype_t *tunder, *t2under;
|
||||
|
||||
// tile below
|
||||
tunder = gettileat(s->x ,s->y,NULL,NULL);
|
||||
t2under = gettileat(s->x ,s->y+s->img->h,NULL,NULL);
|
||||
if ((tunder->solid == S_SLOPE) || (t2under->solid == S_SLOPE)) {
|
||||
movex(s, s->dir*myspeed);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (s->id == P_FISH) { // very similar to bee
|
||||
double absxs,absys;
|
||||
if ((s->xs == -99) || (s->ys == -99)) {
|
||||
|
@ -4181,6 +4281,9 @@ double getspeed(sprite_t *s ) {
|
|||
} else if (id == P_BEE) {
|
||||
if (s->angry) speed = 2;
|
||||
else speed = 1;
|
||||
} else if (id == P_FLY) {
|
||||
if (s->angry) speed = 2.5;
|
||||
else speed = 1.5;
|
||||
} else if (id == P_SPIDER) {
|
||||
if (s->angry) speed = 2;
|
||||
else speed = 1.5;
|
||||
|
|
42
shared.c
42
shared.c
|
@ -259,7 +259,14 @@ int loadlevel(int wnum, int lnum, int wantmonsters) {
|
|||
|
||||
// waypoints
|
||||
if (isplatform(monid)) {
|
||||
level->initm[level->nummonsters].numwaypoints = 0;
|
||||
|
||||
// initial waypoint is start position
|
||||
level->initm[level->nummonsters].wayx[0] = x*TILEW+(TILEW/2);
|
||||
level->initm[level->nummonsters].wayy[0] = y*TILEH+(TILEH-2)+2;
|
||||
level->initm[level->nummonsters].numwaypoints = 1;
|
||||
|
||||
|
||||
|
||||
// read waypoints
|
||||
p = strtok(NULL, " ");
|
||||
while (p) {
|
||||
|
@ -725,6 +732,9 @@ void setdefaults(sprite_t *s) {
|
|||
case P_SPIDER:
|
||||
s->flies = B_TRUE;
|
||||
break;
|
||||
case P_FLY:
|
||||
s->flies = F_FLYVERT;
|
||||
break;
|
||||
default:
|
||||
s->flies = B_FALSE;
|
||||
break;
|
||||
|
@ -1156,6 +1166,14 @@ int loadimagesets(void) {
|
|||
/* next 3 are auto generated */
|
||||
imageset[P_BEE].numimages = 8;
|
||||
|
||||
loadspriteimage(P_FLY,F_WALK1, "sprites/fly.png");
|
||||
loadspriteimage(P_FLY,F_JUMP, "sprites/flywalk2.png");
|
||||
loadspriteimage(P_FLY,F_FALL, "sprites/flyjump.png");
|
||||
loadspriteimage(P_FLY,F_CAUGHT, "sprites/flycaught.png");
|
||||
loadspriteimage(P_FLY,F_DEAD, "sprites/flydead.png");
|
||||
/* next 3 are auto generated */
|
||||
imageset[P_FLY].numimages = 8;
|
||||
|
||||
loadspriteimage(P_SPIDER,F_WALK1, "sprites/newspider.png");
|
||||
loadspriteimage(P_SPIDER,F_JUMP, "sprites/newspiderjump.png");
|
||||
loadspriteimage(P_SPIDER,F_FALL, "sprites/newspiderfall.png");
|
||||
|
@ -1810,13 +1828,32 @@ void drawsprite(sprite_t *s) {
|
|||
if ((s->id == P_SPIDER) && (s->ys != -99)) {
|
||||
frame = F_FALL;
|
||||
} else {
|
||||
// DEFAULT FOR EVERYTHING
|
||||
// walking / sliding
|
||||
if (s->moved == MV_WALK) {
|
||||
// toggle between walking frames
|
||||
if ((timer/12) % 2 == 0) {
|
||||
frame = F_WALK1;
|
||||
} else {
|
||||
frame = F_JUMP;
|
||||
}
|
||||
} else if (s->moved == MV_FLY) {
|
||||
int animspeed;
|
||||
// fly animates faster
|
||||
if ((s->id == P_FLY) && (s->flies)) {
|
||||
animspeed = 3;
|
||||
} else {
|
||||
animspeed = 12;
|
||||
}
|
||||
|
||||
|
||||
// toggle between flying frames
|
||||
if ((timer/animspeed) % 2 == 0) {
|
||||
frame = F_WALK1;
|
||||
} else {
|
||||
frame = F_FALL;
|
||||
}
|
||||
|
||||
} else if (s->moved == MV_ICE) {
|
||||
frame = F_FALL;
|
||||
} else {
|
||||
|
@ -1857,6 +1894,7 @@ void drawsprite(sprite_t *s) {
|
|||
// image based on timer1
|
||||
s->img = imageset[s->timer1].img[F_WALK1];
|
||||
} else if ((s->id != P_BLACKCLOUD) && (s->id != P_PINKCLOUD) && (!s->teleporting)) {
|
||||
// ALL OTHERS:
|
||||
// select image based on sprite id
|
||||
s->img = imageset[s->id].img[frame];
|
||||
}
|
||||
|
@ -2613,6 +2651,7 @@ int ismonster(int id) {
|
|||
switch (id) {
|
||||
case P_RAT:
|
||||
case P_BEE:
|
||||
case P_FLY:
|
||||
case P_SPIDER:
|
||||
case P_SNAKE:
|
||||
case P_TICK:
|
||||
|
@ -3050,6 +3089,7 @@ void setfruitinfo(void) {
|
|||
setinfo(P_SPIDER, "Spider", "Spiders will lurk quietly on the ceiling, crawling back and forth. If they notice a player nearby however they will swiftly pounce down onto their prey!", "spider.png");
|
||||
|
||||
setinfo(P_SNAKE, "Snake", "The snake moves in a similar fashion to the rat with one important exception - upon seeing a player they will spit a glob of deadly venom at them!", "snake.png");
|
||||
setinfo(P_FLY, "Fly", "Annoying pests at the best of times, flies pose additional danger to dwarves. They fly around more erratically than bees and after landing can scurry quickly back and forth.", "fly.png");
|
||||
|
||||
|
||||
setinfo(P_TICK, "Tick", "The tick is small but intelligent - even in its regular placid state it will move in the same manner as an angry rat. Because of their small size, they are also difficult to arget with a slam!", "tick.png");
|
||||
|
|
Loading…
Reference in New Issue