bool do_control_drop(void) { monster_type *m_ptr = get_monster(p_ptr->control); if (!p_ptr->control) return FALSE; monster_drop_carried_objects(m_ptr); return TRUE; }
void talk_to_monster(s32b m_idx) { char m_name[100]; /* Extract monster name (or "it") */ monster_desc(m_name, get_monster(m_idx), 0); /* Process hook if there are any */ if (!process_hooks(HOOK_CHAT, "(d)", m_idx)) { msg_print("The monster does not want to chat."); } }
int run_epikong() { t_map map; char *path; if ((path = init_screen()) == NULL) return (EXIT_FAILURE); if (start_music() == EXIT_FAILURE) return (EXIT_FAILURE); if (start_parsing(path, &map) == EXIT_FAILURE) return (EXIT_FAILURE); if (get_monster(&map) == EXIT_FAILURE) return (EXIT_FAILURE); if (get_hero(&map) == EXIT_FAILURE) return (EXIT_FAILURE); if (parse_map(&map) == EXIT_FAILURE) return (EXIT_FAILURE); return (EXIT_SUCCESS); }
/* Returns if a new companion is allowed */ bool can_create_companion(void) { s32b i, mcnt = 0; for_flags(&monst_list); { i = __key; /* Access the monster */ monster_type *m_ptr = get_monster(i); /* Ignore "dead" monsters */ if (!m_ptr->r_idx) continue; if ((m_ptr->faction == FACTION_PLAYER) && has_flag(m_ptr, FLAG_PERMANENT)) mcnt++; } end_for_flags(); if (mcnt < (1 + get_skill_scale(SKILL_LORE, 6))) return (TRUE); else return (FALSE); }
/* Multiply !! */ bool ai_multiply(s32b m_idx) { monster_type *m_ptr = get_monster(m_idx); s32b k, y, x, oy = m_ptr->fy, ox = m_ptr->fx; bool is_frien = (is_friend(m_ptr) > 0); /* Count the adjacent monsters */ for (k = 0, y = oy - 1; y <= oy + 1; y++) { for (x = ox - 1; x <= ox + 1; x++) { if (cave[y][x].m_idx) k++; } } if (is_friend(m_ptr) > 0) { is_frien = TRUE; } else { is_frien = FALSE; } /* Hack -- multiply slower in crowded areas */ if ((k < 4) && (!k || !rand_int(k * MON_MULT_ADJ))) { /* Try to multiply */ if (multiply_monster(m_idx, (is_frien), FALSE)) { /* Take note if visible */ if (m_ptr->ml) monstmem_add(RT_MISC, FLAG_MULTIPLY, m_ptr, 0); /* Multiplying takes energy */ return TRUE; } } return FALSE; }
/* Finds the controlled monster and "reconnect" to it */ bool do_control_reconnect() { s32b i; for_flags(&monst_list); { i = __key; /* Access the monster */ monster_type *m_ptr = get_monster(i); /* Ignore "dead" monsters */ if (!m_ptr->r_idx) continue; if (m_ptr->mflag & MFLAG_CONTROL) { p_ptr->control = i; return TRUE; } } end_for_flags(); return FALSE; }
bool do_control_pickup(void) { monster_type *m_ptr = get_monster(p_ptr->control); cave_type *c_ptr; bool done = FALSE; if (!p_ptr->control) return FALSE; /* Scan all objects in the grid */ c_ptr = &cave[m_ptr->fy][m_ptr->fx]; #if 0 //DGDGDGDG for_inventory_slot(&c_ptr->inventory, o_ptr); { /* Skip gold */ if (has_flag(o_ptr, FLAG_GOLD_VALUE) continue; /* Excise the object */ excise_object_idx(this_o_idx); /* Forget mark */ o_ptr->marked = FALSE; /* Forget location */ o_ptr->iy = o_ptr->ix = 0; /* Memorize monster */ o_ptr->held_m_idx = p_ptr->control; /* Build a stack */ o_ptr->next_o_idx = m_ptr->hold_o_idx; /* Carry object */ m_ptr->hold_o_idx = this_o_idx; done = TRUE; } #endif if (done) msg_print("You pick up all objects on the floor."); return TRUE; }
/* * Turns a simple pet into a faithful companion */ void do_cmd_companion() { monster_type *m_ptr; s32b ii, jj; if (!can_create_companion()) { msg_print("You cannot get anymore companion."); return; } if (!tgt_pt(&ii, &jj)) { msg_print("You must target a pet."); return; } if (cave[jj][ii].m_idx) { char m_name[100]; m_ptr = get_monster(cave[jj][ii].m_idx); monster_desc(m_name, m_ptr, 0); if (m_ptr->faction == FACTION_PLAYER) { bool_flag(m_ptr, FLAG_PERMANENT); msg_format("%^s agrees to follow you.", m_name); } else { msg_format("%^s is not in your faction!", m_name); } } else msg_print("You must target a monster of your own faction."); }
void ai_deincarnate(s32b m_idx) { #if 0 // DGDGDGDG monster_type *m_ptr = get_monster(m_idx); s32b r2_idx = m_ptr->possessor, r_idx = m_ptr->r_idx; monster_race *r_ptr = &r_info[r2_idx]; s32b i; char m_name[80]; monster_desc(m_name, m_ptr, 0x04); if (m_ptr->ml) msg_format("The soul of %s deincarnates!", m_name); m_ptr->r_idx = r2_idx; m_ptr->ego = 0; /* No "damage" yet */ m_ptr->stunned = 0; m_ptr->confused = 0; m_ptr->monfear = 0; /* No target yet */ m_ptr->target = -1; /* Assume no sleeping */ m_ptr->csleep = 0; /* Assign maximal hitpoints */ if (has_flag(r_ptr, FLAG_FORCE_MAXHP)) { m_ptr->maxhp = maxroll(r_ptr->hdice, r_ptr->hside); } else { m_ptr->maxhp = damroll(r_ptr->hdice, r_ptr->hside); } /* And start out fully healthy */ m_ptr->hp = m_ptr->maxhp; /* Some basic info */ for (i = 0; i < 4; i++) { m_ptr->blow[i].method = r_ptr->blow[i].method; m_ptr->blow[i].effect = r_ptr->blow[i].effect; m_ptr->blow[i].d_dice = r_ptr->blow[i].d_dice; m_ptr->blow[i].d_side = r_ptr->blow[i].d_side; } m_ptr->ac = r_ptr->ac; m_ptr->level = r_ptr->level; m_ptr->speed = r_ptr->speed; m_ptr->exp = MONSTER_EXP(m_ptr->level); /* Extract the monster base speed */ m_ptr->mspeed = m_ptr->speed; m_ptr->energy = 0; /* Hack -- Count the number of "reproducers" */ if (has_flag(r_ptr, FLAG_MULTIPLY)) num_repro++; /* Hack -- Notice new multi-hued monsters */ if (has_flag(r_ptr, FLAG_ATTR_MULTI)) shimmer_monsters = TRUE; /* Hack -- Count the monsters on the level */ r_ptr->cur_num++; r_info[r_idx].cur_num--; m_ptr->possessor = 0; /* Update the monster */ update_mon(m_idx, TRUE); #endif }
static void fix_m_list(void) { s32b i, j; /* Scan windows */ for (j = 0; j < 8; j++) { term *old = Term; s32b c = 0; /* No window */ if (!angband_term[j]) continue; /* No relevant flags */ if (!flag_exists(&window_flag[j], FLAG_PW_M_LIST)) continue; /* Activate */ Term_activate(angband_term[j]); /* Clear */ Term_clear(); /* Hallucination */ if (intrinsic(HALLUCINATE)) { c_prt(TERM_WHITE, "You can not see clearly", 0, 0); /* Fresh */ Term_fresh(); /* Restore */ Term_activate(old); return; } /* reset visible count */ for (i = 1; i < max_r_idx; i++) { monster_race *r_ptr = &r_info[i]; r_ptr->total_visible = 0; } /* Count up the number visible in each race */ for_flags(&monst_list); { i = __key; monster_type *m_ptr = get_monster(i); monster_race *r_ptr = &r_info[m_ptr->r_idx]; object_type *o_ptr = get_obj_mimic_obj_at(m_ptr->fy, m_ptr->fx); /* Skip dead monsters */ if (m_ptr->hp < 0) continue; /* Skip unseen monsters */ if (o_ptr != NULL && !o_ptr->marked) { /* Memorized objects */ if (!o_ptr->marked) continue; } else if (!m_ptr->ml) continue; /* Increase for this race */ r_ptr->total_visible++; /* Increase total Count */ c++; } end_for_flags(); /* Are monsters visible? */ if (c) { s32b w, h, num = 0; (void)Term_get_size(&w, &h); c_prt(TERM_WHITE, format("You can see %d monster%s", c, (c > 1 ? "s:" : ":")), 0, 0); for (i = 1; i < max_r_idx; i++) { monster_race *r_ptr = &r_info[i]; /* Default Colour */ byte attr = TERM_SLATE; /* Only visible monsters */ if (!r_ptr->total_visible) continue; /* Uniques */ if (has_flag(r_ptr, FLAG_UNIQUE)) { attr = TERM_L_BLUE; } /* Have we ever killed one? */ if (r_ptr->r_tkills) { if (r_ptr->level > dun_level) { attr = TERM_VIOLET; if (has_flag(r_ptr, FLAG_UNIQUE)) { attr = TERM_RED; } } } else { if (!has_flag(r_ptr, FLAG_UNIQUE)) attr = TERM_GREEN; } /* Dump the monster name */ if (r_ptr->total_visible == 1) { c_prt(attr, (r_ptr->name), (num % (h - 1)) + 1, (num / (h - 1) * 26)); } else { c_prt(attr, format("%s (x%d)", r_ptr->name, r_ptr->total_visible), (num % (h - 1)) + 1, (num / (h - 1)) * 26); } num++; } } else { c_prt(TERM_WHITE, "You see no monsters.", 0, 0); } /* Fresh */ Term_fresh(); /* Restore */ Term_activate(old); } }
int main(int argc, char **argv) { int i,j,maxn,maxm; const char str[]="../test/2/input20.txt";//14 15 char bool_show=1; freopen(str,"rt",stdin); scanf("%d%d\n",&maxn,&maxm); char **map; map=(char **)malloc(maxn*sizeof(char *)); for (i=0;i<maxn;i++) map[i]=(char *)malloc(maxm*sizeof(char)); ELEM_POINT *Gold, *Monster, *Player; int cgolds=0,cmonsters=0,cplayers=0; for (i=0;i<maxn;i++) { char *string=(char *)malloc((maxm+2)*sizeof(char)); gets(string); for (j=0;j<maxm;j++) { map[i][j]=string[j]; if (map[i][j]>='0' && map[i][j]<='9') cplayers++; if (map[i][j]=='*') cgolds++; if (map[i][j]=='@') cmonsters++; } } fclose(stdin); Player=(ELEM_POINT *)malloc(cplayers*sizeof(ELEM_POINT)); Gold=(ELEM_POINT *)malloc(cgolds*sizeof(ELEM_POINT)); Monster=(ELEM_POINT *)malloc(cmonsters*sizeof(ELEM_POINT)); int *score=(int *)malloc(cplayers*sizeof(int)); for (i=0;i<cplayers;i++) score[i]=0; int numbergame; for (numbergame=0;numbergame<factorial(cplayers);numbergame++) { printf("Number of game = %d\n",numbergame); //usleep(3*1000*1000); int move=0,indexgold,indexmonster,indexplayer; //set position int iteration=-1; int number_of_iteration=0; int *massive_iteration=(int *)malloc(cplayers*sizeof(int)) ; while (iteration!=numbergame) { iteration++; while (1) { int index_of_iteration, tmp_number_of_iteration=number_of_iteration; for (index_of_iteration=cplayers-1;index_of_iteration>=0;index_of_iteration--) { massive_iteration[index_of_iteration]=tmp_number_of_iteration%cplayers; tmp_number_of_iteration/=cplayers; } int flagin=1; for (i=0;i<cplayers-1;i++) { for (j=i+1;j<cplayers;j++) { if (massive_iteration[i]==massive_iteration[j]) { flagin=0; break; } } if (flagin==0) break; } number_of_iteration++; if (flagin==1) break; } } freopen(str,"rt",stdin); scanf("%d%d\n",&maxn,&maxm); int cgolds=0,cmonsters=0,cplayers=0; for (i=0;i<maxn;i++) { for (j=0;j<maxm;j++) { map[i][j]='.'; } } for (i=0;i<maxn;i++) { char *string=(char *)malloc((maxm+2)*sizeof(char)); gets(string); for (j=0;j<maxm;j++) { map[i][j]=string[j]; if (map[i][j]>='0' && map[i][j]<='9') { cplayers++; Player[ map[i][j]-'0' ].y=i; Player[ map[i][j]-'0' ].x=j; Player[ map[i][j]-'0' ].alive=map[i][j]; } if (map[i][j]=='*') cgolds++; if (map[i][j]=='@') cmonsters++; } } fclose(stdin); for (i=0;i<cplayers;i++) { map[Player[i].y][Player[i].x]=Player[massive_iteration[i]].alive; } free(massive_iteration); while (1) { cgolds=0; cmonsters=0; indexgold=0; indexmonster=0; indexplayer=0; system("clear"); for (i=0;i<maxn;i++) { for (j=0;j<maxm;j++) { if (bool_show) { if (map[i][j]>='0' && map[i][j]<='9') printf("\033[33m%c",map[i][j]); if (map[i][j]=='#') printf("\033[35m%c",map[i][j]); if (map[i][j]=='*') printf("\033[31m%c",map[i][j]); if (map[i][j]=='@') printf("\033[36m%c",map[i][j]); if (map[i][j]=='.') printf("\033[37m%c",map[i][j]);//37 printf("\033[37m"); //printf("%c",map[i][j]); } if (map[i][j]>='0' && map[i][j]<='9') { Player[ map[i][j]-'0' ].y=i; Player[ map[i][j]-'0' ].x=j; Player[ map[i][j]-'0' ].alive=map[i][j]; } if (map[i][j]=='*') { Gold[indexgold].y=i; Gold[indexgold].x=j; Gold[indexgold].alive=1; indexgold++; } if (map[i][j]=='@') { Monster[indexmonster].y=i; Monster[indexmonster].x=j; Monster[indexmonster].alive=1; indexmonster++; } } if (bool_show) printf("\n"); } //if (move==0) usleep(1000*1000); cgolds=indexgold; cmonsters=indexmonster; if (move>=10000 || cgolds==0) break; int command; clock_t time; printf("Players think "); //0 if (cplayers>-1) { int isGold=0; for (i=0;i<maxn;i++) { for (j=0;j<maxm;j++) { if (map[i][j]=='*') { isGold=1; break; } } if (isGold) break; } if (isGold) { indexplayer=0; time=clock(); get_player1(map,maxn,maxm,Player[indexplayer].y,Player[indexplayer].x,&command); time = clock()-time; printf("%3.0f ms ", 1000*(double)time/CLOCKS_PER_SEC); if (1000*(double)time/CLOCKS_PER_SEC<1000) { switch (command) { case 0: break; case 1: if (Player[indexplayer].x>0 && map[Player[indexplayer].y][Player[indexplayer].x-1]!='#') Player[indexplayer].x--; break; case 2: if (Player[indexplayer].y>0 && map[Player[indexplayer].y-1][Player[indexplayer].x]!='#') Player[indexplayer].y--; break; case 3: if (Player[indexplayer].x<maxm-1 && map[Player[indexplayer].y][Player[indexplayer].x+1]!='#') Player[indexplayer].x++; break; case 4: if (Player[indexplayer].y<maxn-1 && map[Player[indexplayer].y+1][Player[indexplayer].x]!='#') Player[indexplayer].y++; break; default : break; } } updatemap(map,maxn,maxm,Monster,cmonsters,Gold,cgolds,Player,cplayers,indexplayer,score); } } //1 if (cplayers>0) { int isGold=0; for (i=0;i<maxn;i++) { for (j=0;j<maxm;j++) { if (map[i][j]=='*') { isGold=1; break; } } if (isGold) break; } if (isGold) { indexplayer=1; time=clock(); get_player2(map,maxn,maxm,Player[indexplayer].y,Player[indexplayer].x,&command); time = clock()-time; printf("%3.0f ms ", 1000*(double)time/CLOCKS_PER_SEC); if (1000*(double)time/CLOCKS_PER_SEC<1000) { switch (command) { case 0: break; case 1: if (Player[indexplayer].x>0 && map[Player[indexplayer].y][Player[indexplayer].x-1]!='#') Player[indexplayer].x--; break; case 2: if (Player[indexplayer].y>0 && map[Player[indexplayer].y-1][Player[indexplayer].x]!='#') Player[indexplayer].y--; break; case 3: if (Player[indexplayer].x<maxm-1 && map[Player[indexplayer].y][Player[indexplayer].x+1]!='#') Player[indexplayer].x++; break; case 4: if (Player[indexplayer].y<maxn-1 && map[Player[indexplayer].y+1][Player[indexplayer].x]!='#') Player[indexplayer].y++; break; default : break; } } updatemap(map,maxn,maxm,Monster,cmonsters,Gold,cgolds,Player,cplayers,indexplayer,score); } } /* //2 if (cplayers>0) { int isGold=0; for (i=0;i<maxn;i++) { for (j=0;j<maxm;j++) { if (map[i][j]=='*') { isGold=1; break; } } if (isGold) break; } if (isGold) { indexplayer=2; time=clock(); get_player3(map,maxn,maxm,Player[indexplayer].y,Player[indexplayer].x,&command); time = clock()-time; printf("%3.0f ms ", 1000*(double)time/CLOCKS_PER_SEC); if (1000*(double)time/CLOCKS_PER_SEC<1000) { switch (command) { case 0: break; case 1: if (Player[indexplayer].x>0 && map[Player[indexplayer].y][Player[indexplayer].x-1]!='#') Player[indexplayer].x--; break; case 2: if (Player[indexplayer].y>0 && map[Player[indexplayer].y-1][Player[indexplayer].x]!='#') Player[indexplayer].y--; break; case 3: if (Player[indexplayer].x<maxm-1 && map[Player[indexplayer].y][Player[indexplayer].x+1]!='#') Player[indexplayer].x++; break; case 4: if (Player[indexplayer].y<maxn-1 && map[Player[indexplayer].y+1][Player[indexplayer].x]!='#') Player[indexplayer].y++; break; default : break; } } updatemap(map,maxn,maxm,Monster,cmonsters,Gold,cgolds,Player,cplayers,indexplayer,score); } } //3 if (cplayers>1) { int isGold=0; for (i=0;i<maxn;i++) { for (j=0;j<maxm;j++) { if (map[i][j]=='*') { isGold=1; break; } } if (isGold) break; } if (isGold) { indexplayer=3; time=clock(); get_player4(map,maxn,maxm,Player[indexplayer].y,Player[indexplayer].x,&command); time = clock()-time; printf("%3.0f ms ", 1000*(double)time/CLOCKS_PER_SEC); if (1000*(double)time/CLOCKS_PER_SEC<1000) { switch (command) { case 0: break; case 1: if (Player[indexplayer].x>0 && map[Player[indexplayer].y][Player[indexplayer].x-1]!='#') Player[indexplayer].x--; break; case 2: if (Player[indexplayer].y>0 && map[Player[indexplayer].y-1][Player[indexplayer].x]!='#') Player[indexplayer].y--; break; case 3: if (Player[indexplayer].x<maxm-1 && map[Player[indexplayer].y][Player[indexplayer].x+1]!='#') Player[indexplayer].x++; break; case 4: if (Player[indexplayer].y<maxn-1 && map[Player[indexplayer].y+1][Player[indexplayer].x]!='#') Player[indexplayer].y++; break; default : break; } } updatemap(map,maxn,maxm,Monster,cmonsters,Gold,cgolds,Player,cplayers,indexplayer,score); } } */ printf("\nScores : "); //results for (indexplayer=0;indexplayer<cplayers;indexplayer++) { printf("%d | ",score[indexplayer]); } //monsters for (indexmonster=0;indexmonster<cmonsters;indexmonster++) { command = get_monster(map,maxn,maxm,Monster[indexmonster].y,Monster[indexmonster].x); switch (command) { case 0: break; case 1: Monster[indexmonster].x--; break; case 2: Monster[indexmonster].y--; break; case 3: Monster[indexmonster].x++; break; case 4: Monster[indexmonster].y++; break; default : break; } updatemap2(map,maxn,maxm,Monster,cmonsters,Gold, cgolds, Player, cplayers, score); } printf("move = %d\n",move); usleep(timesleep*1000); move++; } for (indexplayer=0;indexplayer<cplayers;indexplayer++) { printf("Player %d : scores %d\n",indexplayer,score[indexplayer]); } printf("move = %d\n",move); } free(Player); free(Gold); free(Monster); for (i=0;i<maxn;i++) free(map[i]); free(map); //RATING ELO typedef struct profile { char name[100]; int rating; } profile; profile data[10], *P=(profile *)malloc(cplayers*sizeof(profile)); int cdata=0; //current players freopen("../test/cur_game.txt","rt",stdin); for (i=0;i<cplayers;i++) { scanf("%s\n",P[i].name); } fclose(stdin); freopen("../test/rating.txt","rt",stdin); int *ind=(int *)malloc(cplayers*sizeof(int)); //indexs of players in data while (1) { char st[100]; scanf("%s\n",st); st[(int)strlen(st)]='\0'; if (!strcmp(st,"0")) break; int rate; scanf("%d\n",&rate); for (i=0;i<(int)strlen(st)+1;i++) data[cdata].name[i]=st[i]; data[cdata].rating=rate; for (i=0;i<cplayers;i++) { if (!strcmp(data[cdata].name,P[i].name)) { ind[i]=cdata; } } cdata++; } fclose(stdin); printf("BEFORE : \n"); double *addition=(double *)malloc(cplayers*sizeof(double)); for (i=0;i<cplayers;i++) { addition[i]=0; } for (i=0;i<cplayers-1;i++) { for (j=i+1;j<cplayers;j++) { double x= (score[i]>score[j]) ? 1.0 : (score[i]==score[j]) ? 0.5 : 0.0; double E1=1.0/(1.0+pow(10.0,(double)(data[ind[j]].rating-data[ind[i]].rating)/400.0)), E2=1.0/(1.0+pow(10.0,(double)(data[ind[i]].rating-data[ind[j]].rating)/400.0)); addition[i]+=x-E1; addition[j]+=1.0-x-E2; } } for (i=0;i<cplayers;i++) { data[ind[i]].rating+=(int)(30.0*addition[i]); } free(P); free(addition); //HISTORY OF GAMES char history[1000][100]; int indexhistory=0,chistory=0; freopen("../test/result_games.txt","rt",stdin); while (1) { gets(history[indexhistory]); if (!strcmp(history[indexhistory],"\0")) break; indexhistory++; } chistory=indexhistory; fclose(stdin); freopen("../test/result_games.txt","wt",stdout); for (indexhistory=0;indexhistory<chistory;indexhistory++) { printf("%s\n",history[indexhistory]); } int indexplayer; printf("%s\n",str); for (indexplayer=0;indexplayer<cplayers;indexplayer++) { printf("%d player = %d\n",indexplayer,score[indexplayer]); } fclose(stdout); free(score); printf("AFTER : \n"); for (i=0;i<cdata;i++) { printf("%10s %4d\n",data[i].name,data[i].rating); } freopen("../test/rating.txt","wt",stdout); for (i=0;i<cdata;i++) { printf("%s\n%d\n",data[i].name,data[i].rating); } printf("0"); fclose(stdout); return 0; }
/* * Display current pets */ static void do_cmd_knowledge_pets(void) { s32b i; PHYSFS_file *fff; monster_type *m_ptr; monster_race *r_ptr; s32b t_friends = 0; s32b t_levels = 0; s32b show_upkeep = 0; s32b upkeep_divider = 20; char file_name[1024]; /* Temporary file */ if (path_temp(file_name, 1024)) return; /* Open a new file */ fff = my_fopen(file_name, "w"); if (has_ability(AB_PERFECT_CASTING)) upkeep_divider = 15; /* Process the monsters (backwards) */ for_flags(&monst_list); { i = __key; /* Access the monster */ m_ptr = get_monster(i); r_ptr = &r_info[m_ptr->r_idx]; /* Ignore "dead" monsters */ if (!m_ptr->r_idx) continue; /* Calculate "upkeep" for friendly monsters */ if (is_friend(m_ptr) == 1) { char pet_name[80]; t_friends++; t_levels += m_ptr->level; monster_desc(pet_name, m_ptr, 0x88); fprintf(fff, "%s%s (%s)\n", ((has_flag(m_ptr, FLAG_UNIQUE))) ? "#####G" : "", pet_name, (has_flag(m_ptr, FLAG_PERMANENT)) ? "friend" : "companion"); } } end_for_flags(); if (t_friends > 1 + (p_ptr->lev / (upkeep_divider))) { show_upkeep = (t_levels); if (show_upkeep > 100) show_upkeep = 100; else if (show_upkeep < 10) show_upkeep = 10; } fprintf(fff, "----------------------------------------------\n"); fprintf(fff, " Total: %d pet%s.\n", t_friends, (t_friends == 1 ? "" : "s")); fprintf(fff, " Upkeep: %d%% mana.\n", show_upkeep); /* Close the file */ my_fclose(fff); /* Display the file contents */ show_file(file_name, "Current Pets", 0, 0); /* Remove the file */ fd_kill(file_name); }