IMPORTANT NOTE: The Vanilla Angband 'bugfix' 1379 has been reversed (as it caused the game to crash with Angband/65). This commit should bring 'Tactic' and 'Movement' type into use. From the character screen you can use 't' 'T' 'e' and 'E' to change how your character explores the dungeon.
With this update it has been decided to not support *Identity* in future releases. Use of *Identity* may be revisited after the beta release.
@@ -1001,7 +1001,7 @@ | ||
1001 | 1001 | generate_player(); |
1002 | 1002 | |
1003 | 1003 | /* Update stats with bonuses, etc. */ |
1004 | - get_bonuses(); | |
1004 | +/* get_bonuses(); */ /* TODO This change (Changeset 140) caused game crash */ | |
1005 | 1005 | } |
1006 | 1006 | |
1007 | 1007 | /* |
@@ -1040,8 +1040,9 @@ | ||
1040 | 1040 | if (quickstart_allowed) |
1041 | 1041 | save_roller_data(&quickstart_prev); |
1042 | 1042 | |
1043 | + do_birth_reset(quickstart_allowed, &quickstart_prev); | |
1043 | 1044 | reset_stats(stats, points_spent, &points_left); |
1044 | - do_birth_reset(quickstart_allowed, &quickstart_prev); | |
1045 | +/* do_birth_reset(quickstart_allowed, &quickstart_prev); */ /* TODO This change (Changeset 140) caused gamecrash */ | |
1045 | 1046 | |
1046 | 1047 | /* We're ready to start the interactive birth process. */ |
1047 | 1048 | event_signal(EVENT_ENTER_BIRTH); |
@@ -1058,8 +1059,10 @@ | ||
1058 | 1059 | |
1059 | 1060 | if (cmd.command == CMD_BIRTH_RESET) |
1060 | 1061 | { |
1062 | + do_birth_reset(quickstart_allowed, &quickstart_prev); | |
1063 | + generate_player(); | |
1061 | 1064 | reset_stats(stats, points_spent, &points_left); |
1062 | - do_birth_reset(quickstart_allowed, &quickstart_prev); | |
1065 | +/* do_birth_reset(quickstart_allowed, &quickstart_prev); */ /* Changeset 140 */ | |
1063 | 1066 | rolled_stats = FALSE; |
1064 | 1067 | } |
1065 | 1068 | else if (cmd.command == CMD_CHOOSE_SEX) |
@@ -826,3 +826,55 @@ | ||
826 | 826 | void do_cmd_quaff_potion(void) { do_item(ACTION_QUAFF_POTION); } |
827 | 827 | void do_cmd_read_scroll(void) { do_item(ACTION_READ_SCROLL); } |
828 | 828 | void do_cmd_refill(void) { do_item(ACTION_REFILL); } |
829 | + | |
830 | + | |
831 | +/* | |
832 | + * Place an item description on the screen. | |
833 | + * TODO REMOVE THIS if *identify* not to be used. | |
834 | + */ | |
835 | +void object_info_screen(const object_type *o_ptr) | |
836 | +{ | |
837 | + UNREFERENCED_PARAMETER(o_ptr); | |
838 | +#if 0 | |
839 | + bool has_description, has_info; | |
840 | + | |
841 | + /* Redirect output to the screen */ | |
842 | + text_out_hook = text_out_to_screen; | |
843 | + | |
844 | + /* Save the screen */ | |
845 | + screen_save(); | |
846 | + | |
847 | + text_out("\n"); | |
848 | + has_description = screen_out_head(o_ptr); | |
849 | + object_info_out_flags = object_flags_known; | |
850 | + | |
851 | + /* Dump the info */ | |
852 | + has_info = object_info_out(o_ptr); | |
853 | + | |
854 | + /* Dump origin info */ | |
855 | + text_out("\n"); | |
856 | + describe_origin(o_ptr); | |
857 | + | |
858 | + text_out("\n"); | |
859 | + if (!object_known_p(o_ptr)) | |
860 | + p_text_out("You do not know the full extent of this item's powers."); | |
861 | + else if (!has_description && !has_info) | |
862 | + p_text_out("This item does not seem to possess any special abilities."); | |
863 | + | |
864 | + text_out("\n"); | |
865 | + text_out_c(TERM_L_BLUE, "\n\n[Press any key to continue]\n"); | |
866 | + | |
867 | + /* Wait for input */ | |
868 | + (void)anykey(); | |
869 | + | |
870 | + /* Load the screen */ | |
871 | + screen_load(); | |
872 | + | |
873 | + /* Hack -- Browse book, then prompt for a command */ | |
874 | + if (o_ptr->tval == cp_ptr->spell_book) | |
875 | + { | |
876 | + /* Call the aux function */ | |
877 | + do_cmd_browse_aux(o_ptr); | |
878 | + } | |
879 | +#endif | |
880 | +} |
@@ -799,11 +799,9 @@ | ||
799 | 799 | a_ptr->pval++; |
800 | 800 | LOG_PRINT1("Increasing pval by 1, new value is: %d\n", a_ptr->pval); |
801 | 801 | } |
802 | + | |
802 | 803 | } |
803 | 804 | |
804 | - | |
805 | -#if 0 | |
806 | -// not used | |
807 | 805 | /* |
808 | 806 | * We've just added an ability which uses the p2val bonus. Make sure it's |
809 | 807 | * not zero. If it's currently negative, leave it negative (heh heh). |
@@ -811,10 +809,11 @@ | ||
811 | 809 | * There should be a better way of handling pval vs p2val than doing two |
812 | 810 | * functions but that can wait for later. |
813 | 811 | */ |
812 | +#if 0 | |
814 | 813 | static void do_p2val(artifact_type *a_ptr) |
815 | 814 | { |
816 | 815 | int factor= 1; |
817 | - | |
816 | + | |
818 | 817 | /* Track whether we have blows, might or shots on this item */ |
819 | 818 | if (a_ptr->flags[0] & TR0_BLOWS2) factor++; |
820 | 819 | /* HACK There is no MIGHT2 */ |
@@ -677,7 +677,7 @@ | ||
677 | 677 | TMD_COLD, TMD_ACID, TMD_ELEC, TMD_BLESSED, TMD_SINVIS, TMD_SINFRA, |
678 | 678 | TMD_OPP_ACID, TMD_OPP_ELEC, TMD_OPP_FIRE, TMD_OPP_COLD, TMD_OPP_POIS, |
679 | 679 | TMD_OPP_CONF, TMD_AMNESIA, TMD_TELEPATHY, TMD_STONESKIN, TMD_TERROR, |
680 | - TMD_SPRINT, TMD_LIFT, | |
680 | + TMD_SPRINT, TMD_LIFT, TMD_READING, | |
681 | 681 | |
682 | 682 | TMD_MAX |
683 | 683 | }; |
@@ -1293,6 +1293,7 @@ | ||
1293 | 1293 | #define PR_MONLIST 0x01000000L /* Display monster list */ |
1294 | 1294 | #define PR_BUTTONS 0x02000000L /* Display mouse buttons */ |
1295 | 1295 | #define PR_ITEMLIST 0x04000000L /* Display item list */ |
1296 | +#define PR_READ 0x08000000L /* TODO Make this work */ | |
1296 | 1297 | |
1297 | 1298 | /* Display Basic Info */ |
1298 | 1299 | #define PR_BASIC \ |
@@ -1375,7 +1376,6 @@ | ||
1375 | 1376 | #define IDENT_WORN 0x0100 /* Has been worn */ |
1376 | 1377 | #define IDENT_INDESTRUCT 0x0200 /* Tried to destroy it and failed */ |
1377 | 1378 | |
1378 | - | |
1379 | 1379 | /* |
1380 | 1380 | * Some bit-flags for the "smart" field of "monster_type". |
1381 | 1381 | * |
@@ -104,7 +104,7 @@ | ||
104 | 104 | EFFECT(ENCHANT_WEAPON, FALSE,12, "attempts to magically enhance a weapon both to-hit and to-dam") |
105 | 105 | EFFECT(ENCHANT_ARMOR, FALSE, 5, "attempts to magically enhance a piece of armor") |
106 | 106 | EFFECT(ENCHANT_ARMOR2, FALSE, 8, "attempts to magically enhance a piece of armor with high chance of success") |
107 | -EFFECT(IDENTIFY, FALSE, 9, "reveals to you the extent of an item's magical powers") | |
107 | +EFFECT(IDENTIFY, FALSE, 9, "reveals all unhidden powers of an object") | |
108 | 108 | EFFECT(REMOVE_CURSE, FALSE, 3, "removes all ordinary curses from all equipped items") |
109 | 109 | EFFECT(REMOVE_CURSE2, FALSE, 6, "removes all curses from all equipped items") |
110 | 110 | EFFECT(LIGHT, FALSE, 2, "lights up an area and inflicts 2d8 damage on light-sensitive creatures") |
@@ -277,8 +277,6 @@ | ||
277 | 277 | EFFECT(MULE_LEGS, FALSE, 0, "makes you able to carry heavy loads for a while.") |
278 | 278 | EFFECT(CREATE_TREASURE, FALSE, 0, "creates treasure right in front of you.") |
279 | 279 | /* See also Vanilla Angband History */ |
280 | -EFFECT(IDENTIFY2, FALSE, 0, "informs you of all hidden qualities and subtle aspects of one item.") | |
281 | -/* See also Vanilla Angband History */ | |
282 | 280 | EFFECT(DETECT_OBJECT, FALSE, 0, "lets you know if there are any objects in the dungeon around you.") |
283 | 281 | /* See also Vanilla Angband History */ |
284 | 282 | EFFECT(GENOCIDE, FALSE, 0, "lets you wipe one race in this dungeon level, at a cost of up to 10% of monster level in hitpoints per monster.") |
@@ -748,7 +748,6 @@ | ||
748 | 748 | } |
749 | 749 | } |
750 | 750 | |
751 | - | |
752 | 751 | /*** Update all flags ***/ |
753 | 752 | |
754 | 753 | /* Good flags */ |
@@ -811,7 +810,6 @@ | ||
811 | 810 | if (collect_f[2] & TR2_HOLD_LIFE) state->hold_life = TRUE; |
812 | 811 | |
813 | 812 | |
814 | - | |
815 | 813 | /*** Handle stats ***/ |
816 | 814 | |
817 | 815 | /* Calculate stats */ |
@@ -860,7 +858,6 @@ | ||
860 | 858 | state->stat_ind[i] = INT2S16B(ind); |
861 | 859 | } |
862 | 860 | |
863 | - | |
864 | 861 | /*** Temporary flags ***/ |
865 | 862 | |
866 | 863 | /* Apply temporary "stun" */ |
@@ -898,7 +895,6 @@ | ||
898 | 895 | p_ptr->state.skills[SKILL_SEARCH_FREQUENCY] += move_info[p_ptr->movement].to_percep; |
899 | 896 | p_ptr->state.skills[SKILL_STEALTH] += move_info[p_ptr->movement].to_stealth; |
900 | 897 | |
901 | - | |
902 | 898 | /* Invulnerability */ |
903 | 899 | if (p_ptr->timed[TMD_INVULN]) |
904 | 900 | { |
@@ -997,7 +993,6 @@ | ||
997 | 993 | state->dis_to_a += 8; |
998 | 994 | } |
999 | 995 | |
1000 | - | |
1001 | 996 | /*** Analyze weight ***/ |
1002 | 997 | |
1003 | 998 | /* Extract the current weight (in tenth pounds) */ |
@@ -1014,7 +1009,6 @@ | ||
1014 | 1009 | state->skills[SKILL_STEALTH] -= 5; |
1015 | 1010 | } |
1016 | 1011 | |
1017 | - | |
1018 | 1012 | /* Apply "encumbrance" from weight */ |
1019 | 1013 | if (j > i / 2) state->speed -= INT2S16B((j - (i / 2)) / (i / 10)); |
1020 | 1014 |
@@ -1046,7 +1040,6 @@ | ||
1046 | 1040 | state->dis_to_h += ((int)(adj_dex_th[state->stat_ind[A_DEX]]) - 128); |
1047 | 1041 | state->dis_to_h += ((int)(adj_str_th[state->stat_ind[A_STR]]) - 128); |
1048 | 1042 | |
1049 | - | |
1050 | 1043 | /*** Modify skills ***/ |
1051 | 1044 | |
1052 | 1045 | /* Affect Skill -- stealth (bonus one) */ |
@@ -1086,7 +1079,6 @@ | ||
1086 | 1079 | /* Obtain the "hold" value */ |
1087 | 1080 | hold = adj_str_hold[state->stat_ind[A_STR]]; |
1088 | 1081 | |
1089 | - | |
1090 | 1082 | /*** Analyze current bow ***/ |
1091 | 1083 | |
1092 | 1084 | /* Examine the "current bow" */ |
@@ -1181,7 +1173,6 @@ | ||
1181 | 1173 | if (state->num_fire < 1) state->num_fire = 1; |
1182 | 1174 | } |
1183 | 1175 | |
1184 | - | |
1185 | 1176 | /*** Analyze weapon ***/ |
1186 | 1177 | |
1187 | 1178 | /* Examine the "current weapon" */ |
@@ -1298,7 +1289,6 @@ | ||
1298 | 1289 | } |
1299 | 1290 | } |
1300 | 1291 | |
1301 | - | |
1302 | 1292 | /* Hack -- Telepathy Change */ |
1303 | 1293 | if (state->telepathy != old.telepathy) |
1304 | 1294 | { |
@@ -1386,9 +1376,6 @@ | ||
1386 | 1376 | /* TODO Is this the point to handle COULD2H and MUST2H ? */ |
1387 | 1377 | } |
1388 | 1378 | |
1389 | - | |
1390 | - | |
1391 | - | |
1392 | 1379 | /*** Generic "deal with" functions ***/ |
1393 | 1380 | |
1394 | 1381 | /* |
@@ -1503,7 +1490,6 @@ | ||
1503 | 1490 | update_flow(); |
1504 | 1491 | } |
1505 | 1492 | |
1506 | - | |
1507 | 1493 | if (p_ptr->update & (PU_DISTANCE)) |
1508 | 1494 | { |
1509 | 1495 | p_ptr->update &= ~(PU_DISTANCE); |
@@ -1517,7 +1503,6 @@ | ||
1517 | 1503 | update_monsters(FALSE); |
1518 | 1504 | } |
1519 | 1505 | |
1520 | - | |
1521 | 1506 | if (p_ptr->update & (PU_PANEL)) |
1522 | 1507 | { |
1523 | 1508 | p_ptr->update &= ~(PU_PANEL); |
@@ -1525,8 +1510,6 @@ | ||
1525 | 1510 | } |
1526 | 1511 | } |
1527 | 1512 | |
1528 | - | |
1529 | - | |
1530 | 1513 | struct flag_event_trigger |
1531 | 1514 | { |
1532 | 1515 | u32b flag; |
@@ -1533,8 +1516,6 @@ | ||
1533 | 1516 | game_event_type event; |
1534 | 1517 | }; |
1535 | 1518 | |
1536 | - | |
1537 | - | |
1538 | 1519 | /* |
1539 | 1520 | * Events triggered by the various flags. |
1540 | 1521 | */ |
@@ -1607,7 +1588,6 @@ | ||
1607 | 1588 | event_signal(EVENT_END); |
1608 | 1589 | } |
1609 | 1590 | |
1610 | - | |
1611 | 1591 | /* |
1612 | 1592 | * Handle "p_ptr->update" and "p_ptr->redraw" |
1613 | 1593 | */ |
@@ -1619,4 +1599,3 @@ | ||
1619 | 1599 | /* Redraw stuff */ |
1620 | 1600 | if (p_ptr->redraw) redraw_stuff(); |
1621 | 1601 | } |
1622 | - |
@@ -109,13 +109,10 @@ | ||
109 | 109 | byte py; /* Player location */ |
110 | 110 | byte px; /* Player location */ |
111 | 111 | |
112 | - s16b movement; /* Current movement type */ /* TODO Check this works! */ | |
113 | - s16b tactic; /* Current tactic type */ /* TODO Check this works! */ | |
114 | - | |
115 | 112 | byte psex; /* Sex index */ |
116 | 113 | byte prace; /* Race index */ |
117 | 114 | byte pclass; /* Class index */ |
118 | - byte oops; /* Unused */ /* TODO Get rid of this */ | |
115 | + byte oops; | |
119 | 116 | |
120 | 117 | byte hitdie; /* Hit dice (sides) */ |
121 | 118 | s16b expfact; /* Experience factor */ |
@@ -242,10 +239,8 @@ | ||
242 | 239 | s16b wt_birth; /* Birth Weight */ |
243 | 240 | s16b sc_birth; /* Birth social class */ |
244 | 241 | |
245 | -/* TODO These new parameters should possibly be better handled in different ways */ | |
246 | - s16b reading; /* Timed -- reading page/prayer */ | |
247 | - u32b redraw1; /* Desired Redraws (bit flags) */ | |
248 | - u32b redraw2; /* Desired Redraws (bit flags) */ | |
242 | + byte movement; /* Current movement type */ /* TODO Check this works! */ | |
243 | + byte tactic; /* Current tactic type */ /* TODO Check this works! */ | |
249 | 244 | |
250 | 245 | /* Variable and calculatable player state */ |
251 | 246 | player_state state; |
@@ -3882,9 +3882,9 @@ | ||
3882 | 3882 | |
3883 | 3883 | /* jk */ |
3884 | 3884 | /* don't disturb on the first turn */ |
3885 | - if ((p_ptr->reading) && (p_ptr->reading < max_reading)) /* TODO reading should be TMD effect ? */ | |
3885 | + if ((p_ptr->timed[TMD_READING]) && (p_ptr->timed[TMD_READING] < max_reading)) /* TODO reading should be TMD effect ? */ | |
3886 | 3886 | { |
3887 | - p_ptr->reading=0; | |
3887 | + p_ptr->timed[TMD_READING] = 0; | |
3888 | 3888 | read_spell(NULL, 0); |
3889 | 3889 | } |
3890 | 3890 |
@@ -167,7 +167,26 @@ | ||
167 | 167 | { |
168 | 168 | /* Added for Angband/65 0.0.0 */ |
169 | 169 | case EF_CREATE_TREASURE: |
170 | - case EF_IDENTIFY2: | |
170 | + { | |
171 | + int x = px, y = py; | |
172 | + place_gold(y, x, p_ptr->depth); | |
173 | + note_spot(x, y); | |
174 | + lite_spot(x, y); | |
175 | + if ((x==px) && (y==py)) | |
176 | + { | |
177 | + msg_print("You feel some treasure appear between your feet."); | |
178 | + } | |
179 | + else | |
180 | + { | |
181 | + if (p_ptr->timed[TMD_BLIND]) | |
182 | + msg_print("You hear something trinkle on the floor."); | |
183 | + else | |
184 | + msg_print("You see some treasure appear."); | |
185 | + } | |
186 | + | |
187 | + *ident = TRUE; | |
188 | + return TRUE; | |
189 | + } | |
171 | 190 | case EF_DETECT_OBJECT: |
172 | 191 | case EF_GENOCIDE: |
173 | 192 | case EF_GENOCIDE2: |
@@ -455,7 +455,7 @@ | ||
455 | 455 | { |
456 | 456 | penalize_spell(); |
457 | 457 | } |
458 | - p_ptr->redraw1 |= (PR1_MANA); /* TODO Should probably be done a different way */ | |
458 | + p_ptr->redraw |= PR_MANA; | |
459 | 459 | |
460 | 460 | return (TRUE); |
461 | 461 | } |
@@ -730,12 +730,12 @@ | ||
730 | 730 | return; |
731 | 731 | } |
732 | 732 | |
733 | - if (p_ptr->reading == 0) | |
733 | + if (p_ptr->timed[TMD_READING] == 0) | |
734 | 734 | { |
735 | 735 | if (was_reading) |
736 | 736 | { |
737 | 737 | msg_print("You know nothing more than before about this spell."); |
738 | - p_ptr->redraw2 |= (PR2_READ); | |
738 | + p_ptr->redraw |= PR_READ; | |
739 | 739 | redraw_stuff(); |
740 | 740 | was_reading = FALSE; |
741 | 741 |
@@ -861,7 +861,7 @@ | ||
861 | 861 | msg_format("You start to meditate on this spell.", chance); |
862 | 862 | was_reading = TRUE; |
863 | 863 | max_reading = chance; |
864 | - p_ptr->reading = chance; | |
864 | + p_ptr->timed[TMD_READING] = chance; | |
865 | 865 | k_ptr = o_ptr; |
866 | 866 | itemr = item; |
867 | 867 | return; |
@@ -875,7 +875,7 @@ | ||
875 | 875 | o_ptr = k_ptr; |
876 | 876 | item = itemr; |
877 | 877 | |
878 | - p_ptr->redraw2 |= (PR2_READ); | |
878 | + p_ptr->redraw |= PR_READ; | |
879 | 879 | redraw_stuff(); |
880 | 880 | |
881 | 881 | /* we can't read it if it's for the wrong class */ |
@@ -1471,6 +1471,6 @@ | ||
1471 | 1471 | { 0, 0, 0, 0, "normal"}, /* 4+0 */ |
1472 | 1472 | { 1, -4, -1, -4, "brisk"}, /* 4+1 */ |
1473 | 1473 | { 2, -6, -2, -8, "fast"}, /* 4+2 */ |
1474 | - { 3, -10, -3, -14, "very fast"}, /* 4+3 */ | |
1474 | + { 3, -10, -3, -14, "very fast"}, /* 4+3 */ | |
1475 | 1475 | { 4, -16, -5, -20, "running"} /* 4+4 */ |
1476 | 1476 | }; |
@@ -1347,7 +1347,7 @@ | ||
1347 | 1347 | # F:DETECT_DOORS_STAIRS |
1348 | 1348 | G:?:b |
1349 | 1349 | I:71:26:0:0 |
1350 | -W:40:0:5:0 | |
1350 | +W:40:0:5:100 | |
1351 | 1351 | # A:<locale>5/<chance>1 |
1352 | 1352 | D:This spell will let your God reveal doors and stairs to you. |
1353 | 1353 |
@@ -1495,7 +1495,7 @@ | ||
1495 | 1495 | # F:FIND_TRAPS |
1496 | 1496 | G:?:b |
1497 | 1497 | I:71:44:0:0 |
1498 | -W:40:0:5:0 | |
1498 | +W:40:0:5:70 | |
1499 | 1499 | # A:<locale>5/<chance>2 |
1500 | 1500 | D:This spell will let your God reveal hidden traps to you. |
1501 | 1501 |
@@ -1749,7 +1749,7 @@ | ||
1749 | 1749 | # F:PHASE_DOOR |
1750 | 1750 | G:?:b |
1751 | 1751 | I:71:72:0:0 |
1752 | -W:40:0:5:0 | |
1752 | +W:40:0:5:30 | |
1753 | 1753 | # A:<locale>5/<chance>1 |
1754 | 1754 | D:The spell will let you teleport some short distance away. |
1755 | 1755 |
@@ -1945,7 +1945,7 @@ | ||
1945 | 1945 | # F:SENSE_INVISIBLE |
1946 | 1946 | G:?:b |
1947 | 1947 | I:71:95:0:0 |
1948 | -W:40:0:5:0 | |
1948 | +W:40:0:5:30 | |
1949 | 1949 | # A:<locale>20/<chance>1 |
1950 | 1950 | D:This spell will reveal all invisible monsters to your blessed eyes for a time. |
1951 | 1951 |
@@ -2052,7 +2052,7 @@ | ||
2052 | 2052 | # F:TELEPORT |
2053 | 2053 | G:?:b |
2054 | 2054 | I:71:108:0:0 |
2055 | -W:40:0:5:0 | |
2055 | +W:40:0:5:80 | |
2056 | 2056 | # A:<locale>40/<chance>1 |
2057 | 2057 | D:This spell will teleport you across the dungeon in an instant. |
2058 | 2058 |
@@ -2068,7 +2068,7 @@ | ||
2068 | 2068 | # F:TELEPORT_LEVEL |
2069 | 2069 | G:?:b |
2070 | 2070 | I:71:110:0:0 |
2071 | -W:40:0:5:0 | |
2071 | +W:40:0:5:100 | |
2072 | 2072 | # A:<locale>50/<chance>1 |
2073 | 2073 | D:This spell will transport you to another level in the dungeon. |
2074 | 2074 |
@@ -2109,7 +2109,7 @@ | ||
2109 | 2109 | # F:TREASURE_DETECTION |
2110 | 2110 | G:?:b |
2111 | 2111 | I:71:115:0:0 |
2112 | -W:40:0:5:0 | |
2112 | +W:40:0:5:60 | |
2113 | 2113 | # A:<locale>5/<chance>1 |
2114 | 2114 | D:The spell will let you detect nearby treasure. |
2115 | 2115 |
@@ -2290,15 +2290,6 @@ | ||
2290 | 2290 | A:100:5 to 100 |
2291 | 2291 | F:EASY_KNOW |
2292 | 2292 | |
2293 | -N:238:*Identify* | |
2294 | -G:?:w | |
2295 | -I:70:13:0:0 | |
2296 | -W:30:0:5:1000 | |
2297 | -# A:<locale>30/<chance>1 | |
2298 | -D:It will learn you all hidden qualities and subtle aspects of one item. | |
2299 | -E:IDENTIFY2 | |
2300 | -F:EASY_KNOW | |
2301 | - | |
2302 | 2293 | N:239:Remove Curse |
2303 | 2294 | G:?:w |
2304 | 2295 | I:70:14:0:0 |