Exemplo n.º 1
0
char	*loop_cmd(t_param *param, t_history **history)
{
  int	start;
  int	ret;
  char	buff[10];

  ret = 1;
  start = 0;
  while (ret > 0)
    {
      if ((ret = read(0, buff, 9)) == -1)
        return (NULL);
      buff[ret] = '\0';
      if (buff[0] == CTRLD && buff[1] == '\0')
        return (NULL);
      if (buff[0] == '\n' && buff[1] == '\0')
        return (return_string(param->cmd, param));
      if (buff[0] != '\n' && start == 0)
	actu_begin_pos(param, &start);
      if (get_window_size(param->cmd, param->begin_pos_x) == 1 &&
          gere_keyboard(buff, param->cmd, param, history) == 1)
        {
          add_character(param->cmd, param, buff[0]);
          view(param->cmd, param);
        }
    }
  return (param->cmd);
}
Exemplo n.º 2
0
CDVBString::CDVBString(const char * the_content, const int size)
{
    int i;

    if (size > 0)
    {
        if ((((unsigned char)the_content[0]) >= 0x01) && (((unsigned char)the_content[0]) <= 0x05))
            encoding = (t_encoding)((unsigned char)the_content[0]);
        else if (((unsigned char)the_content[0]) >= 0x20)
            encoding = ISO_6937;
        else
            encoding = UNKNOWN;  // resp. we do not handle them
    }
    else
        encoding = UNKNOWN;

    for (i = 0; i < size; i++)                            // skip initial encoding information
        if (((unsigned char)the_content[i]) >= 0x20)
            break;

    if (size - i == 0)
        content = "";
    else
    {
        while(i < size)
        {
            // skip characters 0x00 - 0x1F & 0x80 - 0x9F
            if ((((unsigned char)the_content[i]) & 0x60) != 0)
                i += add_character((unsigned char)the_content[i], (unsigned char)the_content[i + 1]);
            else
                i++;
        }
    }
};
Exemplo n.º 3
0
		void environment::spawn_player(point2 location)
		{
			// player props
			auto weapon = std::make_shared<body_component::item_type>();
			weapon->add({ rl::effect::weapon_damage, 0x00, 50 });
			weapon->add({ rl::effect::equipment, static_cast<unsigned int>(rl::equipment_slot::hand_main) });
			weapon->set_name("Copper Sword");
			weapon->set_tag("copper_sword");

			// make player
			auto task = m_factory->produce();
			auto img = task->add_appearance('@', { 1, 1, 1 });
			auto pawn = task->add_location(location);
			auto body = task->add_body(100, 100);
			auto character = task->add_character();

			// setup
			body->set_name("You");
			body->set_tag("player");
			body->join_faction(1);
			body->add(weapon);
			body->equip(weapon);

			character->add_skill("sk_bash");
			character->add_skill("sk_panacea");
			character->add_skill("sk_teleport");
			character->add_skill("sk_fireball");
			character->add_skill("sk_indigo");

			m_terrain.add(task->assemble(persistency::permanent));

			impersonate(pawn);
		}
Exemplo n.º 4
0
char	*decal_string_cmd(char *cmd, t_param *param,
			  char *s, char *buff)
{
  int	indice_buff;

  indice_buff = -1;
  while (buff[++indice_buff] != '\0' && s[indice_buff] != '\0' &&
	 buff[indice_buff] == s[indice_buff]);
  if (buff[indice_buff] == '\0')
    return (cmd);
  if (param->pos != my_strlen(cmd) && cmd[param->pos] != ' ')
    {
      while (cmd[++param->pos] != '\0' &&
	     cmd[++param->pos] != ' ');
      if (cmd[param->pos] == '\0')
      	param->pos = my_strlen(cmd);
    }
  if (occurence_string(buff, s) == -2)
    return (cmd);
  indice_buff = occurence_string(buff, s);
  while (buff[++indice_buff] != '\0')
    if (buff[indice_buff] != cmd[param->pos])
      add_character(cmd, param, buff[indice_buff]);
  return (cmd);
}
Exemplo n.º 5
0
/**
 * 格式化错误信息
 * @param format [description]
 * @param v      [description]
 * @param ap     [description]
 */
static void format_message(MessageFormat *format, VString *v, va_list ap){
        int i;
        char buf[LINE_BUF_SIZE];
        int arg_name_index;
        char arg_name[LINE_BUF_SIZE];
        MessageArgument arg[MESSAGE_ARGUMENT_MAX];
        MessageArgument cur_arg;


        create_message_argument(arg, ap);

        for (i = 0; format->format[i] != '\0'; i++) {
                if (format->format[i] != '$') {
                        add_character(v, format->format[i]);
                        continue;
                }

                assert(format->format[i + 1] == '(');

                i += 2;

                for (arg_name_index = 0;
                     format->format[i] != ')';
                     arg_name_index++, i++) {
                        arg_name[arg_name_index] = format->format[i];
                }

                arg_name[arg_name_index] = '\0';
                assert(format->format[i] == ')');

                search_argument(arg, arg_name, &cur_arg);

                switch (cur_arg.type) {
                case INT_MESSAGE_ARGUMENT:
                        sprintf(buf, "%d", cur_arg.u.int_val);
                        add_string(v, buf);
                        break;
                case DOUBLE_MESSAGE_ARGUMENT:
                        sprintf(buf, "%f", cur_arg.u.double_val);
                        add_string(v, buf);
                        break;
                case STRING_MESSAGE_ARGUMENT:
                        strcpy(buf, cur_arg.u.string_val);
                        add_string(v, cur_arg.u.string_val);
                        break;
                case POINTER_MESSAGE_ARGUMENT:
                        sprintf(buf, "%c", cur_arg.u.character_val);
                        add_string(v, buf);
                        break;
                case MESSAGE_ARGUMENT_END:
                        assert(0);
                        break;
                default:
                        assert(0);
                }
        }
}
Exemplo n.º 6
0
/**
 * @brief Updates displaying the characters in the 3 lines.
 */
void DialogBox::update_lines() {

  uint32_t now = System::now();
  while (!is_full() && now >= next_char_date) {

     // check the end of the current line
     while (!is_full() && char_index >= lines[line_index].size()) {
       char_index = 0;
       line_index++;
     }

     if (!is_full()) {
       add_character();
     }
   }
}
Exemplo n.º 7
0
/**
 * @brief Stops displaying gradually the current 3 lines, shows them
 * immediately.
 * If the 3 lines were already finished, the next group of 3 lines starts
 * (if any).
 */
void DialogBox::show_all_now() {

  if (is_full()) {
    show_more_lines();
  }
  else {

    // check the end of the current line
    while (!is_full()) {

      while (!is_full() && char_index >= lines[line_index].size()) {
        char_index = 0;
        line_index++;
      }
      if (!is_full()) {
        add_character();
      }
    }
  }
}
Exemplo n.º 8
0
Character& Character::operator += (const Character &character)
{
    //Character *temp = &character;
    add_character(&character);
    return *this;
}
character_t *create_monster(Dungeon_Space_Struct **dungeon, int *seed, vector<monsterClass> monsterList)
{	
	bool useParsed = false;
	int parsedMonIndex = -1;
	monster_t *monster;
	monsterClass monsterToUse;
	if(monsterList.size() > 0)
	{
		useParsed = true;
		//srand(time(NULL));
		parsedMonIndex = rand()%monsterList.size();
		monsterToUse = monsterList[parsedMonIndex];
		//printf("Monster used = %s\n", monsterToUse.name.c_str());
		//std::cout << "Monster used = " << monsterList.size() << std::endl;
		//monster = new_Monster_existing(&monsterToUse);
	}
	uint8_t powers = 0b0000;
	if(!useParsed)
	{
		powers = powers | ((rand()%2 == 0) ? 0x0 : 0x1) | ((rand()%2 == 0) ? 0x0 : 0x2) | ((rand()%2 == 0) ? 0x0 : 0x4) | ((rand()%2 == 0) ? 0x0 : 0x8);
	}
	else
	{
		powers = monsterToUse.get_abilities();
	}
	
	//printf("Monster %d is 0x%x\n", num_characters, powers);
	
	pos_t *open_pos = (pos_t *) malloc(sizeof(pos_t));
	pos_t mon_pos;
	int open_count = 0;
	if((0x4 & powers) == 0x4)
	{
		boolean pos_found = (boolean) FALSE;
		int attempts = 0;
		while(pos_found == FALSE && attempts < 10000)
		{
			attempts++;
			int x = (rand()%78)+1;
			int y = (rand()%19)+1;
			if(check_character_map(x, y) == -1)
			{
				mon_pos.x = x;
				mon_pos.y = y;
				pos_found = (boolean) TRUE;
			}
		}
		if(attempts == 10000)
		{
			return &NULL_CHARACTER;
		}
	}
	else
	{
		int x, y;
		for(x = 0; x < 80; x++)
		{
			for(y = 0; y < 21; y++)
			{
				pos_t new_pos;
				switch(dungeon[x][y].space_type)
				{
					case ROCK:
					break;
					
					case ROOM:
						if(check_character_map(x, y) == -1)
						{
							new_pos.x = x;
							new_pos.y = y;
							open_count++;
							open_pos = (pos_t *) realloc(open_pos, sizeof(pos_t) + (sizeof(pos_t) * open_count));
							open_pos[open_count-1] = new_pos;
							open_pos[open_count] = NULL_POS;
						}
					break;
					
					case CORRIDOR:
						if(check_character_map(x, y) == -1)
						{
							new_pos.x = x;
							new_pos.y = y;
							open_count++;
							open_pos = (pos_t *) realloc(open_pos, sizeof(pos_t) + (sizeof(pos_t) * open_count));
							open_pos[open_count-1] = new_pos;
							open_pos[open_count] = NULL_POS;
						}
					break;
				}
			}
		}
		if(open_count == 0)
		{
			return &NULL_CHARACTER;
		}
		mon_pos = open_pos[rand()%open_count];
	}
	
	
	monster = new_Monster_param(powers, (boolean) TRUE, NULL_POS);
	
	if((get_Monster_abilities(monster) & 0x2) == 0x2)
	{
		set_Monster_memory(monster, get_Character_pos(get_character_by_id(0)));
	}
	if((get_Monster_abilities(monster) & 0x4) == 0x4 && dungeon[mon_pos.x][mon_pos.y].space_type == ROCK)
	{
		dungeon[mon_pos.x][mon_pos.y] = Dungeon_Space_Struct_create(CORRIDOR, Dungeon_Space_Corridor_create());
	}
	character_t *mon = (character_t *) monster; //character_tag_create((rand()%16)+5, 0, num_characters, TRUE, mon_pos, dungeon[mon_pos.x][mon_pos.y], MONSTER, monster);
	if(!useParsed)
	{
		set_Character_all(mon, (rand()%16)+5, 0, num_characters, (boolean) TRUE, mon_pos, dungeon[mon_pos.x][mon_pos.y], MONSTER);
		char monSymbol;
		switch(powers)
		{
			case 0b0000:
			monSymbol = '0';
			break;
			
			case 0b0001:
			monSymbol = '1';
			break;
			
			case 0b0010:
			monSymbol = '2';
			break;
			
			case 0b0011:
			monSymbol = '3';
			break;
			
			case 0b0100:
			monSymbol = '4';
			break;
			
			case 0b0101:
			monSymbol = '5';
			break;
			
			case 0b0110:
			monSymbol = '6';
			break;
			
			case 0b0111:
			monSymbol = '7';
			break;
			
			case 0b1000:
			monSymbol = '8';
			break;
			
			case 0b1001:
			monSymbol = '9';
			break;
			
			case 0b1010:
			monSymbol = 'a';
			break;
			
			case 0b1011:
			monSymbol = 'b';
			break;
			
			case 0b1100:
			monSymbol = 'c';
			break;
			
			case 0b1101:
			monSymbol = 'd';
			break;
			
			case 0b1110:
			monSymbol = 'e';
			break;
			
			case 0b1111:
			monSymbol = 'f';
			break;
		}
		set_Character_symbol(mon, monSymbol);
		set_Character_color(mon, 1);
	}
	else
	{
		set_Character_all(mon, monsterToUse.speedDice.roll(*seed), 0, num_characters, (boolean) TRUE, mon_pos, dungeon[mon_pos.x][mon_pos.y], MONSTER);
		set_Character_healthPoints(mon, monsterToUse.hp.roll(*seed));
		set_Character_magicPoints(mon, 0);
		set_Character_parsed_data(mon, monsterToUse.name, monsterToUse.description, monsterToUse.symbol, monsterToUse.color, monsterToUse.damage);
	}
	add_character(mon);
	free(open_pos);
	return mon;
}
character_t *Place_Player(Dungeon_Space_Struct **dungeon, int *seed)
{
	pos_t *open_pos = (pos_t *) malloc(sizeof(pos_t));
	open_pos[0] = NULL_POS;
	character_t *player;
	
	int x, y, open_count = 0;
	for(x = 0; x < 80; x++)
	{
		for(y = 0; y < 21; y++)
		{
			pos_t new_pos;
			switch(dungeon[x][y].space_type)
			{
				case ROCK:
				break;
				
				case ROOM:
					new_pos.x = x;
					new_pos.y = y;
					open_count++;
					open_pos = (pos_t *) realloc(open_pos, sizeof(pos_t) + (sizeof(pos_t) * open_count));
					open_pos[open_count-1] = new_pos;
					open_pos[open_count] = NULL_POS;
				break;
				
				case CORRIDOR:
					new_pos.x = x;
					new_pos.y = y;
					open_count++;
					open_pos = (pos_t *) realloc(open_pos, sizeof(pos_t) + (sizeof(pos_t) * open_count));
					open_pos[open_count-1] = new_pos;
					open_pos[open_count] = NULL_POS;
				break;
			}
		}
	}
	
	int seed_local;
	
	if(*seed <= 0)
	{
		seed_local = time(NULL);
		*seed = seed_local;
	}
	else if(*seed > 0)
	{
		seed_local = *seed;
	}
	srand(seed_local);
	pos_t new_pos = open_pos[rand()%open_count];
	pc = new_Player_param("Edwin");
	//pc.name = "Edwin";
	player = (character_t *) pc;//character_tag_create(10, 0, 0, TRUE, new_pos, dungeon[new_pos.x][new_pos.y], PLAYER, pc);
	set_Character_all(player, 10, 0, 0, (boolean) TRUE, new_pos, dungeon[new_pos.x][new_pos.y], PLAYER);
	set_Character_healthPoints(player, 1000);
	set_Character_parsed_data(player, "Dr. Sheaffer", "Professor of ComS 327", '@', 6, Dice(0, 1, 4));
	set_Character_magicPoints(player, 1000);
	create_character_list();
	add_character(player);
	free(open_pos);
	return player;
}