Small quadrapeds/birds shouldn't be able to slip on things, nor should snakes.

This commit is contained in:
Rob Pearce 2016-06-21 21:46:32 +10:00
parent e4c3716387
commit 2b82e1de44
3 changed files with 37 additions and 5 deletions

3
data.c
View File

@ -17879,6 +17879,7 @@ void initrace(void) {
addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, "");
addflag(lastrace->flags, F_CANWILL, OT_A_FLY, NA, NA, NULL); addflag(lastrace->flags, F_CANWILL, OT_A_FLY, NA, NA, NULL);
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_A_FLY, NA, NA, NULL); addflag(lastrace->flags, F_SPELLCASTTEXT, OT_A_FLY, NA, NA, NULL);
addflag(lastrace->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_BEGINNER, NA, NULL); addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_BEGINNER, NA, NULL);
addrace(R_SWARMRAT, "swarm of rats", 40, UNI_SWARM, C_BROWN, MT_FLESH, RC_ANIMAL, "A large swarm of vile rodents."); addrace(R_SWARMRAT, "swarm of rats", 40, UNI_SWARM, C_BROWN, MT_FLESH, RC_ANIMAL, "A large swarm of vile rodents.");
@ -17899,6 +17900,7 @@ void initrace(void) {
addflag(lastrace->flags, F_MAXATTACKS, 5, 5, NA, NULL); addflag(lastrace->flags, F_MAXATTACKS, 5, 5, NA, NULL);
addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SWARM, NA, NA, NA, NULL); addflag(lastrace->flags, F_SWARM, NA, NA, NA, NULL);
addflag(lastrace->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
@ -17928,6 +17930,7 @@ void initrace(void) {
addflag(lastrace->flags, F_MAXATTACKS, 7, 7, NA, NULL); addflag(lastrace->flags, F_MAXATTACKS, 7, 7, NA, NULL);
addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SWARM, NA, NA, NA, NULL); addflag(lastrace->flags, F_SWARM, NA, NA, NA, NULL);
addflag(lastrace->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, NA, NULL);

38
lf.c
View File

@ -10837,13 +10837,15 @@ char *real_getlfnamea(lifeform_t *lf, char *buf, lifeform_t * usevis, int showal
} }
enum LFSIZE getlfsize(lifeform_t *lf) { enum LFSIZE getlfsize(lifeform_t *lf) {
flag_t *f; flag_t *f = NULL;
enum LFSIZE size = SZ_HUMAN;
f = hasflag(lf->flags, F_SIZE); f = hasflag(lf->flags, F_SIZE);
if (!f) f = hasflag(lf->race->flags, F_SIZE); if (f) {
if (!f) { size = f->val[0];
return SZ_HUMAN; } else {
size = getracesize(lf->race->id);
} }
return f->val[0]; return size;
} }
float getlfweight(lifeform_t *lf, int withobs) { float getlfweight(lifeform_t *lf, int withobs) {
@ -11117,6 +11119,21 @@ int getracerarity(enum HABITAT hab, enum RACE rid, enum RARITY *rr) {
return rarity; return rarity;
} }
enum LFSIZE getracesize(enum RACE rid) {
race_t *r = NULL;
flag_t *f = NULL;
enum LFSIZE size = SZ_HUMAN;
r = findrace(rid);
if (r) {
f = hasflag(r->flags, F_SIZE);
if (f) {
size = f->val[0];
}
}
return size;
}
// if optional 'attacker' is provided, only select form armours which they // if optional 'attacker' is provided, only select form armours which they
// can reach. // can reach.
object_t *getrandomarmour(lifeform_t *lf, lifeform_t *attacker) { object_t *getrandomarmour(lifeform_t *lf, lifeform_t *attacker) {
@ -21757,6 +21774,9 @@ void setbodytype(race_t *r, enum BODYTYPE bt) {
addbodypart(r, BP_LEGS, NULL); addbodypart(r, BP_LEGS, NULL);
addbodypart(r, BP_FEET, "talons"); addbodypart(r, BP_FEET, "talons");
addbodypart(r, BP_WINGS, NULL); addbodypart(r, BP_WINGS, NULL);
if (getracesize(r->id) <= SZ_SMALL) {
addflagifneeded(r->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
}
break; break;
case BT_HUMANOID: case BT_HUMANOID:
for (i = BP_WEAPON; i <= BP_LEFTFINGER; i++) { for (i = BP_WEAPON; i <= BP_LEFTFINGER; i++) {
@ -21770,6 +21790,7 @@ void setbodytype(race_t *r, enum BODYTYPE bt) {
addbodypart(r, BP_LEGS, NULL); addbodypart(r, BP_LEGS, NULL);
addbodypart(r, BP_WINGS, NULL); addbodypart(r, BP_WINGS, NULL);
addflag(r->flags, F_SEEWITHOUTEYES, B_TRUE, NA, NA, NULL ); addflag(r->flags, F_SEEWITHOUTEYES, B_TRUE, NA, NA, NULL );
addflagifneeded(r->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
break; break;
case BT_QUADRAPED: case BT_QUADRAPED:
addbodypart(r, BP_EYES, NULL); addbodypart(r, BP_EYES, NULL);
@ -21780,25 +21801,32 @@ void setbodytype(race_t *r, enum BODYTYPE bt) {
addbodypart(r, BP_BACKLEGS, "back legs"); addbodypart(r, BP_BACKLEGS, "back legs");
addbodypart(r, BP_FRONTLEGS, "front legs"); addbodypart(r, BP_FRONTLEGS, "front legs");
addbodypart(r, BP_FEET, "paws"); addbodypart(r, BP_FEET, "paws");
if (getracesize(r->id) <= SZ_SMALL) {
addflagifneeded(r->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
}
break; break;
case BT_FISH: case BT_FISH:
addbodypart(r, BP_EYES, NULL); addbodypart(r, BP_EYES, NULL);
addbodypart(r, BP_HEAD, NULL); addbodypart(r, BP_HEAD, NULL);
addbodypart(r, BP_BODY, NULL); addbodypart(r, BP_BODY, NULL);
addbodypart(r, BP_TAIL, NULL); addbodypart(r, BP_TAIL, NULL);
addflagifneeded(r->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
break; break;
case BT_SNAKE: case BT_SNAKE:
addbodypart(r, BP_EYES, NULL); addbodypart(r, BP_EYES, NULL);
addbodypart(r, BP_HEAD, NULL); addbodypart(r, BP_HEAD, NULL);
addbodypart(r, BP_TAIL, NULL); addbodypart(r, BP_TAIL, NULL);
addflagifneeded(r->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
break; break;
case BT_SPIDER: case BT_SPIDER:
addbodypart(r, BP_EYES, NULL); addbodypart(r, BP_EYES, NULL);
addbodypart(r, BP_HEAD, "cephalothorax"); addbodypart(r, BP_HEAD, "cephalothorax");
addbodypart(r, BP_BODY, "abdomen"); addbodypart(r, BP_BODY, "abdomen");
addbodypart(r, BP_LEGS, NULL); addbodypart(r, BP_LEGS, NULL);
addflagifneeded(r->flags, F_STABILITY, B_TRUE, NA, NA, NULL);
break; break;
} }
} }
int setfacing(lifeform_t *lf, int dir) { int setfacing(lifeform_t *lf, int dir) {

1
lf.h
View File

@ -286,6 +286,7 @@ enum POISONSEVERITY getpoisonseverity(enum POISONTYPE ptype);
*/ */
enum RACECLASS getraceclass(lifeform_t *lf); enum RACECLASS getraceclass(lifeform_t *lf);
int getracerarity(enum HABITAT hab, enum RACE rid, enum RARITY *rr); int getracerarity(enum HABITAT hab, enum RACE rid, enum RARITY *rr);
enum LFSIZE getracesize(enum RACE rid);
object_t *getrandomarmour(lifeform_t *lf, lifeform_t *attacker); object_t *getrandomarmour(lifeform_t *lf, lifeform_t *attacker);
enum BEHAVIOUR getrandombehaviour(void); enum BEHAVIOUR getrandombehaviour(void);
enum BODYPART getrandomcorebp(lifeform_t *lf, lifeform_t *attacker); enum BODYPART getrandomcorebp(lifeform_t *lf, lifeform_t *attacker);