int
main(int argc, char *argv[])
{
  printf("*******usertests starting*******\n\n");

  printf("=====test file usertests.ran does not exists=====\n");

  if(open("usertests.ran", O_RDONLY) >= 0){
    printf("already ran user tests (file usertests.ran exists) -- recreate certikos_disk.img\n");
    exit();
  }
  printf("=====test file usertests.ran does not exists: ok\n\n");
  close(open("usertests.ran", O_CREATE));

  smallfile();
  bigfile1();
  createtest();

  rmdot();
  fourteen();
  bigfile2();
  subdir();
  linktest();
  unlinkread();
  dirfile();
  iref();
  bigdir(); // slow
  printf("*******end of tests*******\n");
}
Exemple #2
0
int do_magicshield(int cn)
{
	int str;

	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if (!ch[cn].value[0][V_MAGICSHIELD]) { error=ERR_UNKNOWN_SPELL; return 0; }

	if (ch[cn].mana<POWERSCALE) { error=ERR_MANA_LOW; return 0; }	// no magic shield with less than one point
	
	if ((ch[cn].flags&CF_PLAYER) && areaID==33) { error=ERR_UNKNOWN_SPELL; return 0; }

	str=ch[cn].value[0][V_MAGICSHIELD]*POWERSCALE;
	str=min(str,ch[cn].mana*2);
	str=min(str,ch[cn].value[0][V_MAGICSHIELD]*POWERSCALE-ch[cn].lifeshield);

	if (str<1) { error=ERR_NO_EFFECT; return 0; }

        ch[cn].mana-=str/2;

	ch[cn].action=AC_MAGICSHIELD;
	ch[cn].act1=str;
        ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
	if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);
	ch[cn].dir=bigdir(ch[cn].dir);

        return 1;
}
Exemple #3
0
int do_flash(int cn)
{
	int cost,mod;

	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if (!ch[cn].value[0][V_FLASH]) { error=ERR_UNKNOWN_SPELL; return 0; }

	mod=ch[cn].value[0][V_FLASH]/20;
        cost=FLASHCOST;	//+mod*POWERSCALE;

	if (ch[cn].mana<cost) { error=ERR_MANA_LOW; return 0; }

        if (ch[cn].x<1 || ch[cn].x>=MAXMAP || ch[cn].y<1 || ch[cn].y>=MAXMAP) { error=ERR_ILLEGAL_COORDS; return 0; }

	if (!may_add_spell(cn,IDR_FLASH)) { error=ERR_ALREADY_WORKING; return 0; }

        ch[cn].mana-=cost;

	ch[cn].action=AC_FLASH;
	ch[cn].act1=mod;
        ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
	
	if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);

	ch[cn].dir=bigdir(ch[cn].dir);

        return 1;
}
Exemple #4
0
int do_pulse(int cn)
{
	int str;

	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if (!ch[cn].value[0][V_PULSE]) { error=ERR_UNKNOWN_SPELL; return 0; }

	if (ch[cn].mana<POWERSCALE) { error=ERR_MANA_LOW; return 0; }

	str=min(spellpower(cn,V_PULSE),ch[cn].mana*8/POWERSCALE);
	ch[cn].mana-=str*POWERSCALE/8;

        ch[cn].action=AC_PULSE;
	ch[cn].act1=str;
        ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
	if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);
	ch[cn].dir=bigdir(ch[cn].dir);

        return 1;
}
Exemple #5
0
int do_heal(int cn,int co)
{
	int str;

	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if (co<1 || co>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[co].flags&CF_DEAD) { error=ERR_DEAD; return 0; }

	if (!char_see_char(cn,co)) { error=ERR_NOT_VISIBLE; return 0; }

	if ((ch[cn].flags&CF_PLAYER) && !(ch[co].flags&(CF_PLAYER|CF_PLAYERLIKE))) { error=ERR_NOT_PLAYER; return 0; }

	if (!ch[cn].value[0][V_HEAL]) { error=ERR_UNKNOWN_SPELL; return 0; }

	if (ch[cn].mana<POWERSCALE) { error=ERR_MANA_LOW; return 0; }	// no heals for less than one point

	if (!can_help(cn,co)) { error=ERR_ILLEGAL_ATTACK; return 0; }

	if ((ch[cn].flags&CF_PLAYER) && areaID==33) { error=ERR_UNKNOWN_SPELL; return 0; }

	str=ch[cn].value[0][V_HEAL]*POWERSCALE/2;			// strength is spell strength
	str=min(str,(ch[co].value[0][V_HP]*POWERSCALE)-ch[co].hp);	// but only up to max hp
	str=min(str,ch[cn].mana*2);					// but only with as much mana as we have left

	if (str<1) { error=ERR_NO_EFFECT; return 0; }

	ch[cn].mana-=str/2;
	ch[cn].dir=bigdir(ch[cn].dir);

	if (cn==co) {
		ch[cn].action=AC_HEAL_SELF;
		ch[cn].act1=co;
		ch[cn].act2=str;
		ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
		if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);
	} else {
		ch[cn].action=AC_HEAL1;
		ch[cn].act1=co;
		ch[cn].act2=str;
		ch[cn].dir=offset2dx(ch[cn].x,ch[cn].y,ch[co].x,ch[co].y);
		ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION/2);
		if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);
	}

        return 1;
}
Exemple #6
0
int
main(int argc, char *argv[])
{
  printf(1, "usertests starting\n");

  if(open("usertests.ran", 0) >= 0){
    printf(1, "already ran user tests -- rebuild fs.img\n");
    exit();
  }
  close(open("usertests.ran", O_CREATE));

  createdelete();
  linkunlink();
  concreate();
  fourfiles();
  sharedfd();

  bigargtest();
  bigwrite();
  bigargtest();
  bsstest();
  sbrktest();
  validatetest();

  opentest();
  writetest();
  writetest1();
  createtest();

  openiputtest();
  exitiputtest();
  iputtest();

  mem();
  pipe1();
  preempt();
  exitwait();

  rmdot();
  fourteen();
  bigfile();
  subdir();
  linktest();
  unlinkread();
  dirfile();
  iref();
  forktest();
  bigdir(); // slow
  exectest();

  exit();
}
Exemple #7
0
int do_bless(int cn,int co)
{
	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (co<1 || co>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[co].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if (!char_see_char(cn,co)) { error=ERR_NOT_VISIBLE; return 0; }

	if (!ch[cn].value[0][V_BLESS]) { error=ERR_UNKNOWN_SPELL; return 0; }

	if (ch[cn].mana<BLESSCOST) { error=ERR_MANA_LOW; return 0; }

	if ((ch[cn].flags&CF_PLAYER) && !(ch[co].flags&(CF_PLAYER|CF_PLAYERLIKE))) { error=ERR_NOT_PLAYER; return 0; }

	if (!may_add_spell(co,IDR_BLESS)) { error=ERR_ALREADY_WORKING; return 0; }

	if (!can_help(cn,co)) { error=ERR_ILLEGAL_ATTACK; return 0; }

	if (cn!=co && (ch[cn].flags&CF_PLAYER) && (ch[co].flags&CF_NOBLESS)) { error=ERR_ILLEGAL_ATTACK; return 0; }

	// dont allow bless other in teufelheim arena
	if (areaID==34 && cn!=co && (map[ch[cn].x+ch[cn].y*MAXMAP].flags&MF_ARENA)) { error=ERR_ILLEGAL_ATTACK; return 0; }

        ch[cn].mana-=BLESSCOST;
	ch[cn].dir=bigdir(ch[cn].dir);

	if (cn==co) {
		ch[cn].action=AC_BLESS_SELF;
		ch[cn].act1=co;
		ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
		if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);		
	} else {
		ch[cn].action=AC_BLESS1;
		ch[cn].act1=co;
		ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION/2);
		ch[cn].dir=offset2dx(ch[cn].x,ch[cn].y,ch[co].x,ch[co].y);
		if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);
	}

        return 1;
}
Exemple #8
0
int do_ball(int cn,int x,int y)
{
	int dir;

	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if (!ch[cn].value[0][V_FLASH]) { error=ERR_UNKNOWN_SPELL; return 0; }

	if (x<1 || x>=MAXMAP-1 || y<1 || y>=MAXMAP-1) { error=ERR_ILLEGAL_COORDS; return 0; }

	if (ch[cn].mana<FLASHCOST) { error=ERR_MANA_LOW; return 0; }

        dir=offset2dx(ch[cn].x,ch[cn].y,x,y);
	if (!dir) {
		if (!may_add_spell(cn,IDR_FLASH)) { error=ERR_ALREADY_WORKING; return 0; }
		ch[cn].action=AC_FLASH;
		ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
		ch[cn].dir=bigdir(ch[cn].dir);
	} else {
		ch[cn].action=AC_BALL1;
		ch[cn].act1=x;
		ch[cn].act2=y;
		ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION/2);
		ch[cn].dir=dir;
	}

	ch[cn].mana-=FLASHCOST;

	
	if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);

        return 1;
}
Exemple #9
0
int do_freeze(int cn)
{
	if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; }

	if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; }

	if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; }

	if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; }

	if (!ch[cn].value[0][V_FREEZE]) { error=ERR_UNKNOWN_SPELL; return 0; }

	if (ch[cn].mana<FREEZECOST) { error=ERR_MANA_LOW; return 0; }

	ch[cn].mana-=FREEZECOST;

        ch[cn].action=AC_FREEZE;
        ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION);
	if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn);
	ch[cn].dir=bigdir(ch[cn].dir);

        return 1;
}