case NIKKI_HIGAWARI:
{
#ifdef JP
- fprintf(fff, "%dÆüÌÜ\n",day);
+ if (day < MAX_DAYS) fprintf(fff, "%dÆüÌÜ\n", day);
+ else fputs("*****ÆüÌÜ\n", fff);
#else
- fprintf(fff, "Day %d\n",day);
+ if (day < MAX_DAYS) fprintf(fff, "Day %d\n", day);
+ else fputs("Day *****\n", fff);
#endif
do_level = FALSE;
break;
#ifdef JP
fprintf(fff, " %2d:%02d %20s ¥é¥ó¥À¥à¥¯¥¨¥¹¥È(%s)¤òãÀ®¤·¤¿¡£\n", hour, min, note_level, name);
#else
- fprintf(fff, " %2d:%02d %20s completed randome quest '%s'\n", hour, min, note_level, name);
+ fprintf(fff, " %2d:%02d %20s completed random quest '%s'\n", hour, min, note_level, name);
#endif
break;
}
fprintf(fff, " %2d:%02d %20s ", hour, min, note_level);
switch (num)
{
- case 0:
+ case RECORD_NAMED_PET_NAME:
#ifdef JP
fprintf(fff, "%s¤òι¤Îͧ¤Ë¤¹¤ë¤³¤È¤Ë·è¤á¤¿¡£\n", note);
#else
fprintf(fff, "decided to travel together with %s.\n", note);
#endif
break;
- case 1:
+ case RECORD_NAMED_PET_UNNAME:
#ifdef JP
fprintf(fff, "%s¤Î̾Á°¤ò¾Ã¤·¤¿¡£\n", note);
#else
fprintf(fff, "unnamed %s.\n", note);
#endif
break;
- case 2:
+ case RECORD_NAMED_PET_DISMISS:
#ifdef JP
fprintf(fff, "%s¤ò²òÊü¤·¤¿¡£\n", note);
#else
fprintf(fff, "dismissed %s.\n", note);
#endif
break;
- case 3:
+ case RECORD_NAMED_PET_DEATH:
#ifdef JP
fprintf(fff, "%s¤¬»à¤ó¤Ç¤·¤Þ¤Ã¤¿¡£\n", note);
#else
fprintf(fff, "%s died.\n", note);
#endif
break;
- case 4:
+ case RECORD_NAMED_PET_MOVED:
#ifdef JP
fprintf(fff, "%s¤ò¤ª¤¤¤ÆÊ̤ΥޥåפذÜÆ°¤·¤¿¡£\n", note);
#else
fprintf(fff, "moved to another map leaving %s behind.\n", note);
#endif
break;
- case 5:
+ case RECORD_NAMED_PET_LOST_SIGHT:
#ifdef JP
fprintf(fff, "%s¤È¤Ï¤°¤ì¤Æ¤·¤Þ¤Ã¤¿¡£\n", note);
#else
fprintf(fff, "lost sight of %s.\n", note);
#endif
break;
- case 6:
+ case RECORD_NAMED_PET_DESTROY:
#ifdef JP
fprintf(fff, "%s¤¬*Ç˲õ*¤Ë¤è¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
#else
fprintf(fff, "%s was made disappeared by *destruction*.\n", note);
#endif
break;
- case 7:
+ case RECORD_NAMED_PET_EARTHQUAKE:
#ifdef JP
fprintf(fff, "%s¤¬´äÀФ˲¡¤·ÄÙ¤µ¤ì¤¿¡£\n", note);
#else
fprintf(fff, "%s was crushed by falling rocks.\n", note);
#endif
break;
+ case RECORD_NAMED_PET_GENOCIDE:
+#ifdef JP
+ fprintf(fff, "%s¤¬Ëõ»¦¤Ë¤è¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
+#else
+ fprintf(fff, "%s was made disappeared by genocide.\n", note);
+#endif
+ break;
+ case RECORD_NAMED_PET_WIZ_ZAP:
+#ifdef JP
+ fprintf(fff, "%s¤¬¥Ç¥Ð¥Ã¥°¥³¥Þ¥ó¥É¤Ë¤è¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
+#else
+ fprintf(fff, "%s was removed by debug command.\n", note);
+#endif
+ break;
+ case RECORD_NAMED_PET_TELE_LEVEL:
+#ifdef JP
+ fprintf(fff, "%s¤¬¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë¤Ë¤è¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
+#else
+ fprintf(fff, "%s was made disappeared by teleport level.\n", note);
+#endif
+ break;
+ case RECORD_NAMED_PET_BLAST:
+#ifdef JP
+ fprintf(fff, "%s¤òÇúÇˤ·¤¿¡£\n", note);
+#else
+ fprintf(fff, "blasted %s.\n", note);
+#endif
+ break;
+ case RECORD_NAMED_PET_HEAL_LEPER:
+#ifdef JP
+ fprintf(fff, "%s¤Îɵ¤¤¬¼£¤ê餫¤é³°¤ì¤¿¡£\n", note);
+#else
+ fprintf(fff, "%s was healed and left.\n", note);
+#endif
+ break;
+ case RECORD_NAMED_PET_COMPACT:
+#ifdef JP
+ fprintf(fff, "%s¤¬¥â¥ó¥¹¥¿¡¼¾ðÊ󰵽̤ˤè¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
+#else
+ fprintf(fff, "%s was made disappeared by compacting monsters.\n", note);
+#endif
+ break;
+ case RECORD_NAMED_PET_LOSE_PARENT:
+#ifdef JP
+ fprintf(fff, "%s¤Î¾¤´¼Ô¤¬´û¤Ë¤¤¤Ê¤¤¤¿¤á¾Ã¤¨µî¤Ã¤¿¡£\n", note);
+#else
+ fprintf(fff, "%s disappeared because there does not exist summoner.\n", note);
+#endif
+ break;
default:
fprintf(fff, "\n");
break;
/* Describe that action */
#ifdef JP
- prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
+ prt("¥Þ¥¯¥í¹ÔÆ°¤¬(¤â¤·¤¢¤ì¤Ð)²¼¤Ëɽ¼¨¤µ¤ì¤Þ¤¹:", 20, 0);
#else
prt("Current action (if any) shown below:", 20, 0);
#endif
#endif
/* Dump monsters */
- for (i = 1; i < max_r_idx; i++)
+ for (i = 0; i < max_r_idx; i++)
{
monster_race *r_ptr = &r_info[i];
#endif
/* Dump objects */
- for (i = 1; i < max_k_idx; i++)
+ for (i = 0; i < max_k_idx; i++)
{
char o_name[80];
object_kind *k_ptr = &k_info[i];
/* Skip non-entries */
if (!k_ptr->name) continue;
- /* Skip entries with flavor */
- if (k_ptr->flavor) continue;
+ if (!k_ptr->flavor)
+ {
+ /* Tidy name */
+ strip_name(o_name, i);
+ }
+ else
+ {
+ object_type forge;
- /* Tidy name */
- strip_name(o_name, i);
+ /* Prepare dummy object */
+ object_prep(&forge, i);
+
+ /* Get un-shuffled flavor name */
+ object_desc(o_name, &forge, OD_FORCE_FLAVOR);
+ }
/* Dump a comment */
auto_dump_printf("# %s\n", o_name);
#endif
/* Dump features */
- for (i = 1; i < max_f_idx; i++)
+ for (i = 0; i < max_f_idx; i++)
{
feature_type *f_ptr = &f_info[i];
"¥´¥ß",
"¶õ¤Î¥Ó¥ó",
"¹ü",
+ "»àÂÎ",
"Åá·õÎà", /* "Swords" */
"Æß´ï", /* "Blunt Weapons" */
"ĹÊÁÉð´ï", /* "Polearms" */
"´§", /* "Crowns" */
"¥Ö¡¼¥Ä", /* "Boots" */
"ËâË¡½ñ",
+ "ºâÊõ",
"²¿¤«",
#else
"Mushrooms",
"Junks",
"Bottles",
"Skeletons",
+ "Corpses",
"Swords",
"Blunt Weapons",
"Polearms",
"Crowns",
"Boots",
"Spellbooks",
+ "Treasure",
"Something",
#endif
NULL
TV_JUNK,
TV_BOTTLE,
TV_SKELETON,
+ TV_CORPSE,
TV_SWORD,
TV_HAFTED,
TV_POLEARM,
TV_CROWN,
TV_BOOTS,
TV_LIFE_BOOK, /* Hack -- all spellbooks */
+ TV_GOLD,
0,
0,
};
if (mode & 0x02)
{
- if (k_ptr->flavor) continue;
+ /* Any objects will be displayed */
}
else
{
/*
* Display known uniques
+ * With "XTRA HACK UNIQHIST" (Originally from XAngband)
*/
static void do_cmd_knowledge_uniques(void)
{
char file_name[1024];
+ int n_alive[10];
+ int n_alive_surface = 0;
+ int n_alive_over100 = 0;
+ int n_alive_total = 0;
+ int max_lev = -1;
+
+ for (i = 0; i < 10; i++) n_alive[i] = 0;
+
/* Open a new file */
fff = my_fopen_temp(file_name, 1024);
- if (!fff) {
+ if (!fff)
+ {
#ifdef JP
msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
#else
for (i = 1; i < max_r_idx; i++)
{
monster_race *r_ptr = &r_info[i];
+ int lev;
- /* Use that monster */
- if (r_ptr->name) who[n++] = i;
+ if (!r_ptr->name) continue;
+
+ /* Require unique monsters */
+ if (!(r_ptr->flags1 & RF1_UNIQUE)) continue;
+
+ /* Only display "known" uniques */
+ if (!cheat_know && !r_ptr->r_sights) continue;
+
+ /* Only print rarity <= 100 uniques */
+ if (!r_ptr->rarity || ((r_ptr->rarity > 100) && !(r_ptr->flags1 & RF1_QUESTOR))) continue;
+
+ /* Only "alive" uniques */
+ if (r_ptr->max_num == 0) continue;
+
+ if (r_ptr->level)
+ {
+ lev = (r_ptr->level - 1) / 10;
+ if (lev < 10)
+ {
+ n_alive[lev]++;
+ if (max_lev < lev) max_lev = lev;
+ }
+ else n_alive_over100++;
+ }
+ else n_alive_surface++;
+
+ /* Collect "appropriate" monsters */
+ who[n++] = i;
}
/* Select the sort method */
/* Sort the array by dungeon depth of monsters */
ang_sort(who, &why, n);
+ if (n_alive_surface)
+ {
+#ifdef JP
+ fprintf(fff, " ÃϾå À¸Â¸: %3dÂÎ\n", n_alive_surface);
+#else
+ fprintf(fff, " Surface alive: %3d\n", n_alive_surface);
+#endif
+ n_alive_total += n_alive_surface;
+ }
+ for (i = 0; i <= max_lev; i++)
+ {
+#ifdef JP
+ fprintf(fff, "%3d-%3d³¬ À¸Â¸: %3dÂÎ\n", 1 + i * 10, 10 + i * 10, n_alive[i]);
+#else
+ fprintf(fff, "Level %3d-%3d alive: %3d\n", 1 + i * 10, 10 + i * 10, n_alive[i]);
+#endif
+ n_alive_total += n_alive[i];
+ }
+ if (n_alive_over100)
+ {
+#ifdef JP
+ fprintf(fff, "101- ³¬ À¸Â¸: %3dÂÎ\n", n_alive_over100);
+#else
+ fprintf(fff, "Level 101- alive: %3d\n", n_alive_over100);
+#endif
+ n_alive_total += n_alive_over100;
+ }
+
+ if (n_alive_total)
+ {
+#ifdef JP
+ fputs("--------- -----------\n", fff);
+ fprintf(fff, " ¹ç·× À¸Â¸: %3dÂÎ\n\n", n_alive_total);
+#else
+ fputs("------------- ----------\n", fff);
+ fprintf(fff, " Total alive: %3d\n\n", n_alive_total);
+#endif
+ }
+ else
+ {
+#ifdef JP
+ fputs("¸½ºß¤Ï´ûÃΤÎÀ¸Â¸¥æ¥Ë¡¼¥¯¤Ï¤¤¤Þ¤»¤ó¡£\n", fff);
+#else
+ fputs("No known uniques alive.\n", fff);
+#endif
+ }
+
/* Scan the monster races */
for (k = 0; k < n; k++)
{
monster_race *r_ptr = &r_info[who[k]];
- /* Only print Uniques */
- if (r_ptr->flags1 & (RF1_UNIQUE))
- {
- bool dead = (r_ptr->max_num == 0);
-
- if (dead) continue;
-
- /* Only display "known" uniques */
- if (dead || cheat_know || r_ptr->r_sights)
- {
- /* Print a message */
+ /* Print a message */
#ifdef JP
- fprintf(fff, " %s¤Ï¤Þ¤ÀÀ¸¤¤Æ¤¤¤ë¡£\n",
- (r_name + r_ptr->name));
+ fprintf(fff, " %s (¥ì¥Ù¥ë%d)\n", r_name + r_ptr->name, r_ptr->level);
#else
- fprintf(fff, " %s is alive\n",
- (r_name + r_ptr->name));
+ fprintf(fff, " %s (level %d)\n", r_name + r_ptr->name, r_ptr->level);
#endif
-
- }
- }
}
/* Free the "who" array */
fprintf(fff, "----------------------------------------------\n");
#ifdef JP
- fprintf(fff, " ¹ç·×: %d ɤ¤Î¥Ú¥Ã¥È\n", t_friends);
+ fprintf(fff, " ¹ç·×: %d ÂΤΥڥåÈ\n", t_friends);
fprintf(fff, " °Ý»ý¥³¥¹¥È: %d%% MP\n", show_upkeep);
#else
fprintf(fff, " Total: %d pet%s.\n",
#else
fprintf(fff,"You have defeated no enemies yet.\n\n");
#endif
-
- else if (Total == 1)
-#ifdef JP
- fprintf(fff,"¤¢¤Ê¤¿¤Ï°ìɤ¤ÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n");
-#else
- fprintf(fff,"You have defeated one enemy.\n\n");
-#endif
-
else
#ifdef JP
- fprintf(fff,"¤¢¤Ê¤¿¤Ï %lu ɤ¤ÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n", Total);
+ fprintf(fff,"¤¢¤Ê¤¿¤Ï%ldÂΤÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n", Total);
#else
- fprintf(fff,"You have defeated %lu enemies.\n\n", Total);
+ fprintf(fff,"You have defeated %ld %s.\n\n", Total, (Total == 1) ? "enemy" : "enemies");
#endif
-
}
Total = 0;
if (This > 0)
{
#ifdef JP
- /* p,t¤Ï¿Í¤È¿ô¤¨¤ë by ita*/
- if(my_strchr("pt",r_ptr->d_char))
+ /* p,t¤Ï¿Í¤È¿ô¤¨¤ë by ita */
+ if (my_strchr("pt", r_ptr->d_char))
fprintf(fff, " %3d ¿Í¤Î %s\n", This, r_name + r_ptr->name);
else
- fprintf(fff, " %3d ɤ¤Î %s\n", This, r_name + r_ptr->name);
+ fprintf(fff, " %3d ÂΤΠ%s\n", This, r_name + r_ptr->name);
#else
if (This < 2)
{
fprintf(fff,"----------------------------------------------\n");
#ifdef JP
- fprintf(fff," ¹ç·×: %lu ɤ¤òÅݤ·¤¿¡£\n", Total);
+ fprintf(fff," ¹ç·×: %lu ÂΤòÅݤ·¤¿¡£\n", Total);
#else
fprintf(fff," Total: %lu creature%s killed.\n",
Total, (Total == 1 ? "" : "s"));
case 'P':
case 'p':
- if (attr_idx || (!(char_idx & 0x80) && char_idx)) /* Allow ATTR_DARK text */
+ if (attr_idx || (!(char_idx & 0x80) && char_idx)) /* Allow TERM_DARK text */
{
/* Set the char */
*cur_attr_ptr = attr_idx;
if (direct_r_idx < 0) prt("Group", 4, 0);
prt("Name", 4, max + 3);
if (p_ptr->wizard || visual_only) prt("Idx", 4, 62);
- prt("Sym ", 4, 67);
- if (!visual_only) prt(" Kills", 4, 72);
+ prt("Sym", 4, 68);
+ if (!visual_only) prt("Kills", 4, 73);
#endif
for (i = 0; i < 78; i++)
{
char o_name[80];
byte a, c;
+ object_kind *flavor_k_ptr;
/* Get the object index */
int k_idx = object_idx[object_top + i];
byte attr = ((k_ptr->aware || visual_only) ? TERM_WHITE : TERM_SLATE);
byte cursor = ((k_ptr->aware || visual_only) ? TERM_L_BLUE : TERM_BLUE);
+
+ if (k_ptr->flavor)
+ {
+ /* Appearance of this object is shuffled */
+ flavor_k_ptr = &k_info[k_ptr->flavor];
+ }
+ else
+ {
+ /* Appearance of this object is very normal */
+ flavor_k_ptr = k_ptr;
+ }
+
+
+
attr = ((i + object_top == object_cur) ? cursor : attr);
- /* Tidy name */
- strip_name(o_name, k_idx);
+ if (!k_ptr->flavor || k_ptr->aware)
+ {
+ /* Tidy name */
+ strip_name(o_name, k_idx);
+ }
+ else
+ {
+ /* Flavor name */
+ strcpy(o_name, k_name + flavor_k_ptr->flavor_name);
+ }
/* Display the name */
c_prt(attr, o_name, row + i, col);
/* Hack -- visual_list mode */
if (per_page == 1)
{
- c_prt(attr, format("%02x/%02x", k_ptr->x_attr, k_ptr->x_char), row + i, (p_ptr->wizard || visual_only) ? 64 : 68);
+ c_prt(attr, format("%02x/%02x", flavor_k_ptr->x_attr, flavor_k_ptr->x_char), row + i, (p_ptr->wizard || visual_only) ? 64 : 68);
}
if (p_ptr->wizard || visual_only)
{
c_prt(attr, format("%d", k_idx), row + i, 70);
}
- a = k_ptr->flavor ? misc_to_attr[k_ptr->flavor] : k_ptr->x_attr;
- c = k_ptr->flavor ? misc_to_char[k_ptr->flavor] : k_ptr->x_char;
-
- /* Symbol is unknown */
- if (!k_ptr->aware && !p_ptr->wizard)
- {
- c = ' ';
- a = TERM_DARK;
- }
+ a = flavor_k_ptr->x_attr;
+ c = flavor_k_ptr->x_char;
/* Display symbol */
Term_queue_bigchar(use_bigtile ? 76 : 77, row + i, a, c, 0, 0);
/* Hack -- Handle stuff */
handle_stuff();
- if (!screen_object(o_ptr, FALSE))
+ if (!screen_object(o_ptr, SCROBJ_FAKE_OBJECT | SCROBJ_FORCE_DETAIL))
{
#ifdef JP
msg_print("ÆäËÊѤï¤Ã¤¿¤È¤³¤í¤Ï¤Ê¤¤¤è¤¦¤À¡£");
}
else
{
+ object_kind *k_ptr = &k_info[direct_k_idx];
+ object_kind *flavor_k_ptr;
+
+ if (k_ptr->flavor)
+ {
+ /* Appearance of this object is shuffled */
+ flavor_k_ptr = &k_info[k_ptr->flavor];
+ }
+ else
+ {
+ /* Appearance of this object is very normal */
+ flavor_k_ptr = k_ptr;
+ }
+
object_idx[0] = direct_k_idx;
object_old = direct_k_idx;
object_cnt = 1;
object_idx[1] = -1;
(void)visual_mode_command('v', &visual_list, browser_rows - 1, wid - (max + 3),
- &attr_top, &char_left, &k_info[direct_k_idx].x_attr, &k_info[direct_k_idx].x_char, need_redraw);
+ &attr_top, &char_left, &flavor_k_ptr->x_attr, &flavor_k_ptr->x_char, need_redraw);
}
/* Terminate the list */
while (!flag)
{
char ch;
- object_kind *k_ptr;
+ object_kind *k_ptr, *flavor_k_ptr;
if (redraw)
{
/* Get the current object */
k_ptr = &k_info[object_idx[object_cur]];
+ if (k_ptr->flavor)
+ {
+ /* Appearance of this object is shuffled */
+ flavor_k_ptr = &k_info[k_ptr->flavor];
+ }
+ else
+ {
+ /* Appearance of this object is very normal */
+ flavor_k_ptr = k_ptr;
+ }
+
/* Prompt */
#ifdef JP
prt(format("<Êý¸þ>%s%s%s, ESC",
(!visual_list && !visual_only) ? ", 'r'¤Ç¾ÜºÙ¤ò¸«¤ë" : "",
- k_ptr->flavor ? "" : visual_list ? ", ENTER¤Ç·èÄê" : ", 'v'¤Ç¥·¥ó¥Ü¥ëÊѹ¹",
+ visual_list ? ", ENTER¤Ç·èÄê" : ", 'v'¤Ç¥·¥ó¥Ü¥ëÊѹ¹",
(attr_idx || char_idx) ? ", 'c', 'p'¤Ç¥Ú¡¼¥¹¥È" : ", 'c'¤Ç¥³¥Ô¡¼"),
hgt - 1, 0);
#else
prt(format("<dir>%s%s%s, ESC",
(!visual_list && !visual_only) ? ", 'r' to recall" : "",
- k_ptr->flavor ? "" : visual_list ? ", ENTER to accept" : ", 'v' for visuals",
+ visual_list ? ", ENTER to accept" : ", 'v' for visuals",
(attr_idx || char_idx) ? ", 'c', 'p' to paste" : ", 'c' to copy"),
hgt - 1, 0);
#endif
if (visual_list)
{
- place_visual_list_cursor(max + 3, 7, k_ptr->x_attr, k_ptr->x_char, attr_top, char_left);
+ place_visual_list_cursor(max + 3, 7, flavor_k_ptr->x_attr, flavor_k_ptr->x_char, attr_top, char_left);
}
else if (!column)
{
ch = inkey();
/* Do visual mode command if needed */
- /* Symbol of objects with flavor cannot be changed */
- if (!k_ptr->flavor && visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &k_ptr->x_attr, &k_ptr->x_char, need_redraw))
+ if (visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &flavor_k_ptr->x_attr, &flavor_k_ptr->x_char, need_redraw))
{
if (direct_k_idx >= 0)
{
case 'p':
if (!visual_list)
{
- /* Allow ATTR_DARK text */
+ /* Allow TERM_DARK text */
for (i = F_LIT_NS_BEGIN; i < F_LIT_MAX; i++)
{
if (attr_idx_feat[i] || (!(char_idx_feat[i] & 0x80) && char_idx_feat[i])) f_ptr->x_attr[i] = attr_idx_feat[i];
char desc[1024];
char buf[1024];
+ char day_buf[10];
FILE *fff;
#endif
+ if (day < MAX_DAYS) sprintf(day_buf, "%d", day);
+ else strcpy(day_buf, "*****");
+
/* Message */
#ifdef JP
- msg_format("%d ÆüÌÜ,»þ¹ï¤Ï%d:%02d %s¤Ç¤¹¡£",
- day, (hour % 12 == 0) ? 12 : (hour % 12),
+ msg_format("%sÆüÌÜ, »þ¹ï¤Ï%d:%02d %s¤Ç¤¹¡£",
+ day_buf, (hour % 12 == 0) ? 12 : (hour % 12),
min, (hour < 12) ? "AM" : "PM");
#else
- msg_format("This is day %d. The time is %d:%02d %s.",
- day, (hour % 12 == 0) ? 12 : (hour % 12),
+ msg_format("This is day %s. The time is %d:%02d %s.",
+ day_buf, (hour % 12 == 0) ? 12 : (hour % 12),
min, (hour < 12) ? "AM" : "PM");
#endif