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); }
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++; } } };
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); }
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); }
/** * 格式化错误信息 * @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); } } }
/** * @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(); } } }
/** * @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(); } } } }
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; }