• R/O
  • HTTP
  • SSH
  • HTTPS

hengband: コミット

変愚蛮怒のメインリポジトリです


コミットメタ情報

リビジョン5fa23fd0534aa5b8657cb1bec4462795d0b0a669 (tree)
日時2020-02-24 21:12:52
作者Hourier <hourier@user...>
コミッターHourier

ログメッセージ

[Refactor] #39962 files.c からpermanent-resistances.c/h を分離 / Separated permanent-resistances.c/h from files.c

変更サマリ

差分

--- a/Hengband_vcs2017/Hengband/Hengband.vcxproj
+++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj
@@ -213,6 +213,7 @@
213213 <ClCompile Include="..\..\src\player-sex.c" />
214214 <ClCompile Include="..\..\src\player-skill.c" />
215215 <ClCompile Include="..\..\src\player-status.c" />
216+ <ClCompile Include="..\..\src\player\permanent-resistances.c" />
216217 <ClCompile Include="..\..\src\quest.c" />
217218 <ClCompile Include="..\..\src\realm-craft.c" />
218219 <ClCompile Include="..\..\src\realm-crusade.c" />
@@ -325,6 +326,7 @@
325326 <ClInclude Include="..\..\src\monster-dist-offsets.h" />
326327 <ClInclude Include="..\..\src\object-flavor.h" />
327328 <ClInclude Include="..\..\src\player-inventory.h" />
329+ <ClInclude Include="..\..\src\player\permanent-resistances.h" />
328330 <ClInclude Include="..\..\src\signal-handlers.h" />
329331 <ClInclude Include="..\..\src\uid-checker.h" />
330332 <ClInclude Include="..\..\src\view\display-util.h" />
--- a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters
+++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters
@@ -424,6 +424,9 @@
424424 <ClCompile Include="..\..\src\character-dump.c">
425425 <Filter>io</Filter>
426426 </ClCompile>
427+ <ClCompile Include="..\..\src\player\permanent-resistances.c">
428+ <Filter>player</Filter>
429+ </ClCompile>
427430 </ItemGroup>
428431 <ItemGroup>
429432 <ClInclude Include="..\..\src\gamevalue.h" />
@@ -830,6 +833,9 @@
830833 <ClInclude Include="..\..\src\character-dump.h">
831834 <Filter>io</Filter>
832835 </ClInclude>
836+ <ClInclude Include="..\..\src\player\permanent-resistances.h">
837+ <Filter>player</Filter>
838+ </ClInclude>
833839 </ItemGroup>
834840 <ItemGroup>
835841 <None Include="..\..\src\wall.bmp" />
--- a/src/files.c
+++ b/src/files.c
@@ -18,6 +18,7 @@
1818 #include "view/display-util.h"
1919 #include "view/status-first-page.h"
2020 #include "uid-checker.h"
21+#include "player/permanent-resistances.h"
2122 #include "files.h"
2223 #include "core.h"
2324
@@ -1211,459 +1212,6 @@ static void display_player_middle(player_type *creature_ptr)
12111212
12121213
12131214 /*!
1214- * @brief プレイヤーの職業、種族に応じた耐性フラグを返す
1215- * Prints ratings on certain abilities
1216- * @param creature_ptr 参照元クリーチャーポインタ
1217- * @param flgs フラグを保管する配列
1218- * @return なし
1219- * @details
1220- * Obtain the "flags" for the player as if he was an item
1221- * @todo
1222- * xtra1.c周りと多重実装になっているのを何とかする
1223- */
1224-static void player_flags(player_type *creature_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE])
1225-{
1226- for (int i = 0; i < TR_FLAG_SIZE; i++)
1227- flgs[i] = 0L;
1228-
1229- switch (creature_ptr->pclass)
1230- {
1231- case CLASS_WARRIOR:
1232- if (creature_ptr->lev > 44)
1233- add_flag(flgs, TR_REGEN);
1234- case CLASS_SAMURAI:
1235- if (creature_ptr->lev > 29)
1236- add_flag(flgs, TR_RES_FEAR);
1237- break;
1238- case CLASS_PALADIN:
1239- if (creature_ptr->lev > 39)
1240- add_flag(flgs, TR_RES_FEAR);
1241- break;
1242- case CLASS_CHAOS_WARRIOR:
1243- if (creature_ptr->lev > 29)
1244- add_flag(flgs, TR_RES_CHAOS);
1245- if (creature_ptr->lev > 39)
1246- add_flag(flgs, TR_RES_FEAR);
1247- break;
1248- case CLASS_MONK:
1249- case CLASS_FORCETRAINER:
1250- if ((creature_ptr->lev > 9) && !heavy_armor(creature_ptr))
1251- add_flag(flgs, TR_SPEED);
1252- if ((creature_ptr->lev > 24) && !heavy_armor(creature_ptr))
1253- add_flag(flgs, TR_FREE_ACT);
1254- break;
1255- case CLASS_NINJA:
1256- if (heavy_armor(creature_ptr))
1257- add_flag(flgs, TR_SPEED);
1258- else
1259- {
1260- if ((!creature_ptr->inventory_list[INVEN_RARM].k_idx || creature_ptr->migite) &&
1261- (!creature_ptr->inventory_list[INVEN_LARM].k_idx || creature_ptr->hidarite))
1262- add_flag(flgs, TR_SPEED);
1263- if (creature_ptr->lev > 24)
1264- add_flag(flgs, TR_FREE_ACT);
1265- }
1266-
1267- add_flag(flgs, TR_SLOW_DIGEST);
1268- add_flag(flgs, TR_RES_FEAR);
1269- if (creature_ptr->lev > 19) add_flag(flgs, TR_RES_POIS);
1270- if (creature_ptr->lev > 24) add_flag(flgs, TR_SUST_DEX);
1271- if (creature_ptr->lev > 29) add_flag(flgs, TR_SEE_INVIS);
1272- break;
1273- case CLASS_MINDCRAFTER:
1274- if (creature_ptr->lev > 9)
1275- add_flag(flgs, TR_RES_FEAR);
1276- if (creature_ptr->lev > 19)
1277- add_flag(flgs, TR_SUST_WIS);
1278- if (creature_ptr->lev > 29)
1279- add_flag(flgs, TR_RES_CONF);
1280- if (creature_ptr->lev > 39)
1281- add_flag(flgs, TR_TELEPATHY);
1282- break;
1283- case CLASS_BARD:
1284- add_flag(flgs, TR_RES_SOUND);
1285- break;
1286- case CLASS_BERSERKER:
1287- add_flag(flgs, TR_SUST_STR);
1288- add_flag(flgs, TR_SUST_DEX);
1289- add_flag(flgs, TR_SUST_CON);
1290- add_flag(flgs, TR_REGEN);
1291- add_flag(flgs, TR_FREE_ACT);
1292- add_flag(flgs, TR_SPEED);
1293- if (creature_ptr->lev > 39) add_flag(flgs, TR_REFLECT);
1294- break;
1295- case CLASS_MIRROR_MASTER:
1296- if (creature_ptr->lev > 39)add_flag(flgs, TR_REFLECT);
1297- break;
1298- default:
1299- break;
1300- }
1301-
1302- /* Races */
1303- if (creature_ptr->mimic_form)
1304- {
1305- switch (creature_ptr->mimic_form)
1306- {
1307- case MIMIC_DEMON:
1308- add_flag(flgs, TR_HOLD_EXP);
1309- add_flag(flgs, TR_RES_CHAOS);
1310- add_flag(flgs, TR_RES_NETHER);
1311- add_flag(flgs, TR_RES_FIRE);
1312- add_flag(flgs, TR_SEE_INVIS);
1313- add_flag(flgs, TR_SPEED);
1314- break;
1315- case MIMIC_DEMON_LORD:
1316- add_flag(flgs, TR_HOLD_EXP);
1317- add_flag(flgs, TR_RES_CHAOS);
1318- add_flag(flgs, TR_RES_NETHER);
1319- add_flag(flgs, TR_RES_FIRE);
1320- add_flag(flgs, TR_RES_COLD);
1321- add_flag(flgs, TR_RES_ELEC);
1322- add_flag(flgs, TR_RES_ACID);
1323- add_flag(flgs, TR_RES_POIS);
1324- add_flag(flgs, TR_RES_CONF);
1325- add_flag(flgs, TR_RES_DISEN);
1326- add_flag(flgs, TR_RES_NEXUS);
1327- add_flag(flgs, TR_RES_FEAR);
1328- add_flag(flgs, TR_IM_FIRE);
1329- add_flag(flgs, TR_SH_FIRE);
1330- add_flag(flgs, TR_SEE_INVIS);
1331- add_flag(flgs, TR_TELEPATHY);
1332- add_flag(flgs, TR_LEVITATION);
1333- add_flag(flgs, TR_SPEED);
1334- break;
1335- case MIMIC_VAMPIRE:
1336- add_flag(flgs, TR_HOLD_EXP);
1337- add_flag(flgs, TR_RES_DARK);
1338- add_flag(flgs, TR_RES_NETHER);
1339- if (creature_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE_1);
1340- add_flag(flgs, TR_RES_POIS);
1341- add_flag(flgs, TR_RES_COLD);
1342- add_flag(flgs, TR_SEE_INVIS);
1343- add_flag(flgs, TR_SPEED);
1344- break;
1345- }
1346- }
1347- else
1348- {
1349- switch (creature_ptr->prace)
1350- {
1351- case RACE_ELF:
1352- add_flag(flgs, TR_RES_LITE);
1353- break;
1354- case RACE_HOBBIT:
1355- add_flag(flgs, TR_HOLD_EXP);
1356- break;
1357- case RACE_GNOME:
1358- add_flag(flgs, TR_FREE_ACT);
1359- break;
1360- case RACE_DWARF:
1361- add_flag(flgs, TR_RES_BLIND);
1362- break;
1363- case RACE_HALF_ORC:
1364- add_flag(flgs, TR_RES_DARK);
1365- break;
1366- case RACE_HALF_TROLL:
1367- add_flag(flgs, TR_SUST_STR);
1368- if (creature_ptr->lev <= 14) break;
1369-
1370- add_flag(flgs, TR_REGEN);
1371- if ((creature_ptr->pclass == CLASS_WARRIOR) || (creature_ptr->pclass == CLASS_BERSERKER))
1372- {
1373- add_flag(flgs, TR_SLOW_DIGEST);
1374- /*
1375- * Let's not make Regeneration a disadvantage
1376- * for the poor warriors who can never learn
1377- * a spell that satisfies hunger (actually
1378- * neither can rogues, but half-trolls are not
1379- * supposed to play rogues)
1380- */
1381- }
1382-
1383- break;
1384- case RACE_AMBERITE:
1385- add_flag(flgs, TR_SUST_CON);
1386- add_flag(flgs, TR_REGEN);
1387- break;
1388- case RACE_HIGH_ELF:
1389- add_flag(flgs, TR_RES_LITE);
1390- add_flag(flgs, TR_SEE_INVIS);
1391- break;
1392- case RACE_BARBARIAN:
1393- add_flag(flgs, TR_RES_FEAR);
1394- break;
1395- case RACE_HALF_OGRE:
1396- add_flag(flgs, TR_SUST_STR);
1397- add_flag(flgs, TR_RES_DARK);
1398- break;
1399- case RACE_HALF_GIANT:
1400- add_flag(flgs, TR_RES_SHARDS);
1401- add_flag(flgs, TR_SUST_STR);
1402- break;
1403- case RACE_HALF_TITAN:
1404- add_flag(flgs, TR_RES_CHAOS);
1405- break;
1406- case RACE_CYCLOPS:
1407- add_flag(flgs, TR_RES_SOUND);
1408- break;
1409- case RACE_YEEK:
1410- add_flag(flgs, TR_RES_ACID);
1411- if (creature_ptr->lev > 19)
1412- add_flag(flgs, TR_IM_ACID);
1413- break;
1414- case RACE_KLACKON:
1415- add_flag(flgs, TR_RES_CONF);
1416- add_flag(flgs, TR_RES_ACID);
1417- if (creature_ptr->lev > 9)
1418- add_flag(flgs, TR_SPEED);
1419- break;
1420- case RACE_KOBOLD:
1421- add_flag(flgs, TR_RES_POIS);
1422- break;
1423- case RACE_NIBELUNG:
1424- add_flag(flgs, TR_RES_DISEN);
1425- add_flag(flgs, TR_RES_DARK);
1426- break;
1427- case RACE_DARK_ELF:
1428- add_flag(flgs, TR_RES_DARK);
1429- if (creature_ptr->lev > 19)
1430- add_flag(flgs, TR_SEE_INVIS);
1431- break;
1432- case RACE_DRACONIAN:
1433- add_flag(flgs, TR_LEVITATION);
1434- if (creature_ptr->lev > 4)
1435- add_flag(flgs, TR_RES_FIRE);
1436- if (creature_ptr->lev > 9)
1437- add_flag(flgs, TR_RES_COLD);
1438- if (creature_ptr->lev > 14)
1439- add_flag(flgs, TR_RES_ACID);
1440- if (creature_ptr->lev > 19)
1441- add_flag(flgs, TR_RES_ELEC);
1442- if (creature_ptr->lev > 34)
1443- add_flag(flgs, TR_RES_POIS);
1444- break;
1445- case RACE_MIND_FLAYER:
1446- add_flag(flgs, TR_SUST_INT);
1447- add_flag(flgs, TR_SUST_WIS);
1448- if (creature_ptr->lev > 14)
1449- add_flag(flgs, TR_SEE_INVIS);
1450- if (creature_ptr->lev > 29)
1451- add_flag(flgs, TR_TELEPATHY);
1452- break;
1453- case RACE_IMP:
1454- add_flag(flgs, TR_RES_FIRE);
1455- if (creature_ptr->lev > 9)
1456- add_flag(flgs, TR_SEE_INVIS);
1457- break;
1458- case RACE_GOLEM:
1459- add_flag(flgs, TR_SEE_INVIS);
1460- add_flag(flgs, TR_FREE_ACT);
1461- add_flag(flgs, TR_RES_POIS);
1462- add_flag(flgs, TR_SLOW_DIGEST);
1463- if (creature_ptr->lev > 34)
1464- add_flag(flgs, TR_HOLD_EXP);
1465- break;
1466- case RACE_SKELETON:
1467- add_flag(flgs, TR_SEE_INVIS);
1468- add_flag(flgs, TR_RES_SHARDS);
1469- add_flag(flgs, TR_HOLD_EXP);
1470- add_flag(flgs, TR_RES_POIS);
1471- if (creature_ptr->lev > 9)
1472- add_flag(flgs, TR_RES_COLD);
1473- break;
1474- case RACE_ZOMBIE:
1475- add_flag(flgs, TR_SEE_INVIS);
1476- add_flag(flgs, TR_HOLD_EXP);
1477- add_flag(flgs, TR_RES_NETHER);
1478- add_flag(flgs, TR_RES_POIS);
1479- add_flag(flgs, TR_SLOW_DIGEST);
1480- if (creature_ptr->lev > 4)
1481- add_flag(flgs, TR_RES_COLD);
1482- break;
1483- case RACE_VAMPIRE:
1484- add_flag(flgs, TR_HOLD_EXP);
1485- add_flag(flgs, TR_RES_DARK);
1486- add_flag(flgs, TR_RES_NETHER);
1487- if (creature_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE_1);
1488- add_flag(flgs, TR_RES_POIS);
1489- add_flag(flgs, TR_RES_COLD);
1490- break;
1491- case RACE_SPECTRE:
1492- add_flag(flgs, TR_LEVITATION);
1493- add_flag(flgs, TR_FREE_ACT);
1494- add_flag(flgs, TR_RES_COLD);
1495- add_flag(flgs, TR_SEE_INVIS);
1496- add_flag(flgs, TR_HOLD_EXP);
1497- add_flag(flgs, TR_RES_NETHER);
1498- add_flag(flgs, TR_RES_POIS);
1499- add_flag(flgs, TR_SLOW_DIGEST);
1500- if (creature_ptr->lev > 34)
1501- add_flag(flgs, TR_TELEPATHY);
1502- break;
1503- case RACE_SPRITE:
1504- add_flag(flgs, TR_RES_LITE);
1505- add_flag(flgs, TR_LEVITATION);
1506- if (creature_ptr->lev > 9)
1507- add_flag(flgs, TR_SPEED);
1508- break;
1509- case RACE_BEASTMAN:
1510- add_flag(flgs, TR_RES_SOUND);
1511- add_flag(flgs, TR_RES_CONF);
1512- break;
1513- case RACE_ANGEL:
1514- add_flag(flgs, TR_LEVITATION);
1515- add_flag(flgs, TR_SEE_INVIS);
1516- break;
1517- case RACE_DEMON:
1518- add_flag(flgs, TR_RES_FIRE);
1519- add_flag(flgs, TR_RES_NETHER);
1520- add_flag(flgs, TR_HOLD_EXP);
1521- if (creature_ptr->lev > 9)
1522- add_flag(flgs, TR_SEE_INVIS);
1523- break;
1524- case RACE_DUNADAN:
1525- add_flag(flgs, TR_SUST_CON);
1526- break;
1527- case RACE_S_FAIRY:
1528- add_flag(flgs, TR_LEVITATION);
1529- break;
1530- case RACE_KUTAR:
1531- add_flag(flgs, TR_RES_CONF);
1532- break;
1533- case RACE_ANDROID:
1534- add_flag(flgs, TR_FREE_ACT);
1535- add_flag(flgs, TR_RES_POIS);
1536- add_flag(flgs, TR_SLOW_DIGEST);
1537- add_flag(flgs, TR_HOLD_EXP);
1538- break;
1539- default:
1540- break;
1541- }
1542- }
1543-
1544- if (creature_ptr->muta3)
1545- {
1546- if (creature_ptr->muta3 & MUT3_FLESH_ROT)
1547- {
1548- remove_flag(flgs, TR_REGEN);
1549- }
1550-
1551- if ((creature_ptr->muta3 & MUT3_XTRA_FAT) ||
1552- (creature_ptr->muta3 & MUT3_XTRA_LEGS) ||
1553- (creature_ptr->muta3 & MUT3_SHORT_LEG))
1554- {
1555- add_flag(flgs, TR_SPEED);
1556- }
1557-
1558- if (creature_ptr->muta3 & MUT3_ELEC_TOUC)
1559- {
1560- add_flag(flgs, TR_SH_ELEC);
1561- }
1562-
1563- if (creature_ptr->muta3 & MUT3_FIRE_BODY)
1564- {
1565- add_flag(flgs, TR_SH_FIRE);
1566- add_flag(flgs, TR_LITE_1);
1567- }
1568-
1569- if (creature_ptr->muta3 & MUT3_WINGS)
1570- {
1571- add_flag(flgs, TR_LEVITATION);
1572- }
1573-
1574- if (creature_ptr->muta3 & MUT3_FEARLESS)
1575- {
1576- add_flag(flgs, TR_RES_FEAR);
1577- }
1578-
1579- if (creature_ptr->muta3 & MUT3_REGEN)
1580- {
1581- add_flag(flgs, TR_REGEN);
1582- }
1583-
1584- if (creature_ptr->muta3 & MUT3_ESP)
1585- {
1586- add_flag(flgs, TR_TELEPATHY);
1587- }
1588-
1589- if (creature_ptr->muta3 & MUT3_MOTION)
1590- {
1591- add_flag(flgs, TR_FREE_ACT);
1592- }
1593- }
1594-
1595- if (creature_ptr->pseikaku == SEIKAKU_SEXY)
1596- add_flag(flgs, TR_AGGRAVATE);
1597- if (creature_ptr->pseikaku == SEIKAKU_CHARGEMAN)
1598- add_flag(flgs, TR_RES_CONF);
1599- if (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)
1600- {
1601- add_flag(flgs, TR_RES_BLIND);
1602- add_flag(flgs, TR_RES_CONF);
1603- add_flag(flgs, TR_HOLD_EXP);
1604- if (creature_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE_1);
1605- if (creature_ptr->lev > 9)
1606- add_flag(flgs, TR_SPEED);
1607- }
1608-
1609- if (creature_ptr->special_defense & KATA_FUUJIN)
1610- add_flag(flgs, TR_REFLECT);
1611-
1612- if (creature_ptr->special_defense & KAMAE_GENBU)
1613- add_flag(flgs, TR_REFLECT);
1614-
1615- if (creature_ptr->special_defense & KAMAE_SUZAKU)
1616- add_flag(flgs, TR_LEVITATION);
1617-
1618- if (creature_ptr->special_defense & KAMAE_SEIRYU)
1619- {
1620- add_flag(flgs, TR_RES_FIRE);
1621- add_flag(flgs, TR_RES_COLD);
1622- add_flag(flgs, TR_RES_ACID);
1623- add_flag(flgs, TR_RES_ELEC);
1624- add_flag(flgs, TR_RES_POIS);
1625- add_flag(flgs, TR_LEVITATION);
1626- add_flag(flgs, TR_SH_FIRE);
1627- add_flag(flgs, TR_SH_ELEC);
1628- add_flag(flgs, TR_SH_COLD);
1629- }
1630-
1631- if (creature_ptr->special_defense & KATA_MUSOU)
1632- {
1633- add_flag(flgs, TR_RES_FEAR);
1634- add_flag(flgs, TR_RES_LITE);
1635- add_flag(flgs, TR_RES_DARK);
1636- add_flag(flgs, TR_RES_BLIND);
1637- add_flag(flgs, TR_RES_CONF);
1638- add_flag(flgs, TR_RES_SOUND);
1639- add_flag(flgs, TR_RES_SHARDS);
1640- add_flag(flgs, TR_RES_NETHER);
1641- add_flag(flgs, TR_RES_NEXUS);
1642- add_flag(flgs, TR_RES_CHAOS);
1643- add_flag(flgs, TR_RES_DISEN);
1644- add_flag(flgs, TR_REFLECT);
1645- add_flag(flgs, TR_HOLD_EXP);
1646- add_flag(flgs, TR_FREE_ACT);
1647- add_flag(flgs, TR_SH_FIRE);
1648- add_flag(flgs, TR_SH_ELEC);
1649- add_flag(flgs, TR_SH_COLD);
1650- add_flag(flgs, TR_LEVITATION);
1651- add_flag(flgs, TR_LITE_1);
1652- add_flag(flgs, TR_SEE_INVIS);
1653- add_flag(flgs, TR_TELEPATHY);
1654- add_flag(flgs, TR_SLOW_DIGEST);
1655- add_flag(flgs, TR_REGEN);
1656- add_flag(flgs, TR_SUST_STR);
1657- add_flag(flgs, TR_SUST_INT);
1658- add_flag(flgs, TR_SUST_WIS);
1659- add_flag(flgs, TR_SUST_DEX);
1660- add_flag(flgs, TR_SUST_CON);
1661- add_flag(flgs, TR_SUST_CHR);
1662- }
1663-}
1664-
1665-
1666-/*!
16671215 * @brief プレイヤーの一時的魔法効果による耐性を返す
16681216 * Prints ratings on certain abilities
16691217 * @param creature_ptr プレーヤーへの参照ポインタ
--- /dev/null
+++ b/src/player/permanent-resistances.c
@@ -0,0 +1,454 @@
1+#include "permanent-resistances.h"
2+#include "player-personality.h"
3+
4+/*!
5+ * @brief プレイヤーの職業、種族に応じた耐性フラグを返す
6+ * Prints ratings on certain abilities
7+ * @param creature_ptr 参照元クリーチャーポインタ
8+ * @param flgs フラグを保管する配列
9+ * @return なし
10+ * @details
11+ * Obtain the "flags" for the player as if he was an item
12+ * @todo
13+ * xtra1.c周りと多重実装になっているのを何とかする
14+ */
15+void player_flags(player_type *creature_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE])
16+{
17+ for (int i = 0; i < TR_FLAG_SIZE; i++)
18+ flgs[i] = 0L;
19+
20+ switch (creature_ptr->pclass)
21+ {
22+ case CLASS_WARRIOR:
23+ if (creature_ptr->lev > 44)
24+ add_flag(flgs, TR_REGEN);
25+ case CLASS_SAMURAI:
26+ if (creature_ptr->lev > 29)
27+ add_flag(flgs, TR_RES_FEAR);
28+ break;
29+ case CLASS_PALADIN:
30+ if (creature_ptr->lev > 39)
31+ add_flag(flgs, TR_RES_FEAR);
32+ break;
33+ case CLASS_CHAOS_WARRIOR:
34+ if (creature_ptr->lev > 29)
35+ add_flag(flgs, TR_RES_CHAOS);
36+ if (creature_ptr->lev > 39)
37+ add_flag(flgs, TR_RES_FEAR);
38+ break;
39+ case CLASS_MONK:
40+ case CLASS_FORCETRAINER:
41+ if ((creature_ptr->lev > 9) && !heavy_armor(creature_ptr))
42+ add_flag(flgs, TR_SPEED);
43+ if ((creature_ptr->lev > 24) && !heavy_armor(creature_ptr))
44+ add_flag(flgs, TR_FREE_ACT);
45+ break;
46+ case CLASS_NINJA:
47+ if (heavy_armor(creature_ptr))
48+ add_flag(flgs, TR_SPEED);
49+ else
50+ {
51+ if ((!creature_ptr->inventory_list[INVEN_RARM].k_idx || creature_ptr->migite) &&
52+ (!creature_ptr->inventory_list[INVEN_LARM].k_idx || creature_ptr->hidarite))
53+ add_flag(flgs, TR_SPEED);
54+ if (creature_ptr->lev > 24)
55+ add_flag(flgs, TR_FREE_ACT);
56+ }
57+
58+ add_flag(flgs, TR_SLOW_DIGEST);
59+ add_flag(flgs, TR_RES_FEAR);
60+ if (creature_ptr->lev > 19) add_flag(flgs, TR_RES_POIS);
61+ if (creature_ptr->lev > 24) add_flag(flgs, TR_SUST_DEX);
62+ if (creature_ptr->lev > 29) add_flag(flgs, TR_SEE_INVIS);
63+ break;
64+ case CLASS_MINDCRAFTER:
65+ if (creature_ptr->lev > 9)
66+ add_flag(flgs, TR_RES_FEAR);
67+ if (creature_ptr->lev > 19)
68+ add_flag(flgs, TR_SUST_WIS);
69+ if (creature_ptr->lev > 29)
70+ add_flag(flgs, TR_RES_CONF);
71+ if (creature_ptr->lev > 39)
72+ add_flag(flgs, TR_TELEPATHY);
73+ break;
74+ case CLASS_BARD:
75+ add_flag(flgs, TR_RES_SOUND);
76+ break;
77+ case CLASS_BERSERKER:
78+ add_flag(flgs, TR_SUST_STR);
79+ add_flag(flgs, TR_SUST_DEX);
80+ add_flag(flgs, TR_SUST_CON);
81+ add_flag(flgs, TR_REGEN);
82+ add_flag(flgs, TR_FREE_ACT);
83+ add_flag(flgs, TR_SPEED);
84+ if (creature_ptr->lev > 39) add_flag(flgs, TR_REFLECT);
85+ break;
86+ case CLASS_MIRROR_MASTER:
87+ if (creature_ptr->lev > 39)add_flag(flgs, TR_REFLECT);
88+ break;
89+ default:
90+ break;
91+ }
92+
93+ /* Races */
94+ if (creature_ptr->mimic_form)
95+ {
96+ switch (creature_ptr->mimic_form)
97+ {
98+ case MIMIC_DEMON:
99+ add_flag(flgs, TR_HOLD_EXP);
100+ add_flag(flgs, TR_RES_CHAOS);
101+ add_flag(flgs, TR_RES_NETHER);
102+ add_flag(flgs, TR_RES_FIRE);
103+ add_flag(flgs, TR_SEE_INVIS);
104+ add_flag(flgs, TR_SPEED);
105+ break;
106+ case MIMIC_DEMON_LORD:
107+ add_flag(flgs, TR_HOLD_EXP);
108+ add_flag(flgs, TR_RES_CHAOS);
109+ add_flag(flgs, TR_RES_NETHER);
110+ add_flag(flgs, TR_RES_FIRE);
111+ add_flag(flgs, TR_RES_COLD);
112+ add_flag(flgs, TR_RES_ELEC);
113+ add_flag(flgs, TR_RES_ACID);
114+ add_flag(flgs, TR_RES_POIS);
115+ add_flag(flgs, TR_RES_CONF);
116+ add_flag(flgs, TR_RES_DISEN);
117+ add_flag(flgs, TR_RES_NEXUS);
118+ add_flag(flgs, TR_RES_FEAR);
119+ add_flag(flgs, TR_IM_FIRE);
120+ add_flag(flgs, TR_SH_FIRE);
121+ add_flag(flgs, TR_SEE_INVIS);
122+ add_flag(flgs, TR_TELEPATHY);
123+ add_flag(flgs, TR_LEVITATION);
124+ add_flag(flgs, TR_SPEED);
125+ break;
126+ case MIMIC_VAMPIRE:
127+ add_flag(flgs, TR_HOLD_EXP);
128+ add_flag(flgs, TR_RES_DARK);
129+ add_flag(flgs, TR_RES_NETHER);
130+ if (creature_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE_1);
131+ add_flag(flgs, TR_RES_POIS);
132+ add_flag(flgs, TR_RES_COLD);
133+ add_flag(flgs, TR_SEE_INVIS);
134+ add_flag(flgs, TR_SPEED);
135+ break;
136+ }
137+ }
138+ else
139+ {
140+ switch (creature_ptr->prace)
141+ {
142+ case RACE_ELF:
143+ add_flag(flgs, TR_RES_LITE);
144+ break;
145+ case RACE_HOBBIT:
146+ add_flag(flgs, TR_HOLD_EXP);
147+ break;
148+ case RACE_GNOME:
149+ add_flag(flgs, TR_FREE_ACT);
150+ break;
151+ case RACE_DWARF:
152+ add_flag(flgs, TR_RES_BLIND);
153+ break;
154+ case RACE_HALF_ORC:
155+ add_flag(flgs, TR_RES_DARK);
156+ break;
157+ case RACE_HALF_TROLL:
158+ add_flag(flgs, TR_SUST_STR);
159+ if (creature_ptr->lev <= 14) break;
160+
161+ add_flag(flgs, TR_REGEN);
162+ if ((creature_ptr->pclass == CLASS_WARRIOR) || (creature_ptr->pclass == CLASS_BERSERKER))
163+ {
164+ add_flag(flgs, TR_SLOW_DIGEST);
165+ /*
166+ * Let's not make Regeneration a disadvantage
167+ * for the poor warriors who can never learn
168+ * a spell that satisfies hunger (actually
169+ * neither can rogues, but half-trolls are not
170+ * supposed to play rogues)
171+ */
172+ }
173+
174+ break;
175+ case RACE_AMBERITE:
176+ add_flag(flgs, TR_SUST_CON);
177+ add_flag(flgs, TR_REGEN);
178+ break;
179+ case RACE_HIGH_ELF:
180+ add_flag(flgs, TR_RES_LITE);
181+ add_flag(flgs, TR_SEE_INVIS);
182+ break;
183+ case RACE_BARBARIAN:
184+ add_flag(flgs, TR_RES_FEAR);
185+ break;
186+ case RACE_HALF_OGRE:
187+ add_flag(flgs, TR_SUST_STR);
188+ add_flag(flgs, TR_RES_DARK);
189+ break;
190+ case RACE_HALF_GIANT:
191+ add_flag(flgs, TR_RES_SHARDS);
192+ add_flag(flgs, TR_SUST_STR);
193+ break;
194+ case RACE_HALF_TITAN:
195+ add_flag(flgs, TR_RES_CHAOS);
196+ break;
197+ case RACE_CYCLOPS:
198+ add_flag(flgs, TR_RES_SOUND);
199+ break;
200+ case RACE_YEEK:
201+ add_flag(flgs, TR_RES_ACID);
202+ if (creature_ptr->lev > 19)
203+ add_flag(flgs, TR_IM_ACID);
204+ break;
205+ case RACE_KLACKON:
206+ add_flag(flgs, TR_RES_CONF);
207+ add_flag(flgs, TR_RES_ACID);
208+ if (creature_ptr->lev > 9)
209+ add_flag(flgs, TR_SPEED);
210+ break;
211+ case RACE_KOBOLD:
212+ add_flag(flgs, TR_RES_POIS);
213+ break;
214+ case RACE_NIBELUNG:
215+ add_flag(flgs, TR_RES_DISEN);
216+ add_flag(flgs, TR_RES_DARK);
217+ break;
218+ case RACE_DARK_ELF:
219+ add_flag(flgs, TR_RES_DARK);
220+ if (creature_ptr->lev > 19)
221+ add_flag(flgs, TR_SEE_INVIS);
222+ break;
223+ case RACE_DRACONIAN:
224+ add_flag(flgs, TR_LEVITATION);
225+ if (creature_ptr->lev > 4)
226+ add_flag(flgs, TR_RES_FIRE);
227+ if (creature_ptr->lev > 9)
228+ add_flag(flgs, TR_RES_COLD);
229+ if (creature_ptr->lev > 14)
230+ add_flag(flgs, TR_RES_ACID);
231+ if (creature_ptr->lev > 19)
232+ add_flag(flgs, TR_RES_ELEC);
233+ if (creature_ptr->lev > 34)
234+ add_flag(flgs, TR_RES_POIS);
235+ break;
236+ case RACE_MIND_FLAYER:
237+ add_flag(flgs, TR_SUST_INT);
238+ add_flag(flgs, TR_SUST_WIS);
239+ if (creature_ptr->lev > 14)
240+ add_flag(flgs, TR_SEE_INVIS);
241+ if (creature_ptr->lev > 29)
242+ add_flag(flgs, TR_TELEPATHY);
243+ break;
244+ case RACE_IMP:
245+ add_flag(flgs, TR_RES_FIRE);
246+ if (creature_ptr->lev > 9)
247+ add_flag(flgs, TR_SEE_INVIS);
248+ break;
249+ case RACE_GOLEM:
250+ add_flag(flgs, TR_SEE_INVIS);
251+ add_flag(flgs, TR_FREE_ACT);
252+ add_flag(flgs, TR_RES_POIS);
253+ add_flag(flgs, TR_SLOW_DIGEST);
254+ if (creature_ptr->lev > 34)
255+ add_flag(flgs, TR_HOLD_EXP);
256+ break;
257+ case RACE_SKELETON:
258+ add_flag(flgs, TR_SEE_INVIS);
259+ add_flag(flgs, TR_RES_SHARDS);
260+ add_flag(flgs, TR_HOLD_EXP);
261+ add_flag(flgs, TR_RES_POIS);
262+ if (creature_ptr->lev > 9)
263+ add_flag(flgs, TR_RES_COLD);
264+ break;
265+ case RACE_ZOMBIE:
266+ add_flag(flgs, TR_SEE_INVIS);
267+ add_flag(flgs, TR_HOLD_EXP);
268+ add_flag(flgs, TR_RES_NETHER);
269+ add_flag(flgs, TR_RES_POIS);
270+ add_flag(flgs, TR_SLOW_DIGEST);
271+ if (creature_ptr->lev > 4)
272+ add_flag(flgs, TR_RES_COLD);
273+ break;
274+ case RACE_VAMPIRE:
275+ add_flag(flgs, TR_HOLD_EXP);
276+ add_flag(flgs, TR_RES_DARK);
277+ add_flag(flgs, TR_RES_NETHER);
278+ if (creature_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE_1);
279+ add_flag(flgs, TR_RES_POIS);
280+ add_flag(flgs, TR_RES_COLD);
281+ break;
282+ case RACE_SPECTRE:
283+ add_flag(flgs, TR_LEVITATION);
284+ add_flag(flgs, TR_FREE_ACT);
285+ add_flag(flgs, TR_RES_COLD);
286+ add_flag(flgs, TR_SEE_INVIS);
287+ add_flag(flgs, TR_HOLD_EXP);
288+ add_flag(flgs, TR_RES_NETHER);
289+ add_flag(flgs, TR_RES_POIS);
290+ add_flag(flgs, TR_SLOW_DIGEST);
291+ if (creature_ptr->lev > 34)
292+ add_flag(flgs, TR_TELEPATHY);
293+ break;
294+ case RACE_SPRITE:
295+ add_flag(flgs, TR_RES_LITE);
296+ add_flag(flgs, TR_LEVITATION);
297+ if (creature_ptr->lev > 9)
298+ add_flag(flgs, TR_SPEED);
299+ break;
300+ case RACE_BEASTMAN:
301+ add_flag(flgs, TR_RES_SOUND);
302+ add_flag(flgs, TR_RES_CONF);
303+ break;
304+ case RACE_ANGEL:
305+ add_flag(flgs, TR_LEVITATION);
306+ add_flag(flgs, TR_SEE_INVIS);
307+ break;
308+ case RACE_DEMON:
309+ add_flag(flgs, TR_RES_FIRE);
310+ add_flag(flgs, TR_RES_NETHER);
311+ add_flag(flgs, TR_HOLD_EXP);
312+ if (creature_ptr->lev > 9)
313+ add_flag(flgs, TR_SEE_INVIS);
314+ break;
315+ case RACE_DUNADAN:
316+ add_flag(flgs, TR_SUST_CON);
317+ break;
318+ case RACE_S_FAIRY:
319+ add_flag(flgs, TR_LEVITATION);
320+ break;
321+ case RACE_KUTAR:
322+ add_flag(flgs, TR_RES_CONF);
323+ break;
324+ case RACE_ANDROID:
325+ add_flag(flgs, TR_FREE_ACT);
326+ add_flag(flgs, TR_RES_POIS);
327+ add_flag(flgs, TR_SLOW_DIGEST);
328+ add_flag(flgs, TR_HOLD_EXP);
329+ break;
330+ default:
331+ break;
332+ }
333+ }
334+
335+ if (creature_ptr->muta3)
336+ {
337+ if (creature_ptr->muta3 & MUT3_FLESH_ROT)
338+ {
339+ remove_flag(flgs, TR_REGEN);
340+ }
341+
342+ if ((creature_ptr->muta3 & MUT3_XTRA_FAT) ||
343+ (creature_ptr->muta3 & MUT3_XTRA_LEGS) ||
344+ (creature_ptr->muta3 & MUT3_SHORT_LEG))
345+ {
346+ add_flag(flgs, TR_SPEED);
347+ }
348+
349+ if (creature_ptr->muta3 & MUT3_ELEC_TOUC)
350+ {
351+ add_flag(flgs, TR_SH_ELEC);
352+ }
353+
354+ if (creature_ptr->muta3 & MUT3_FIRE_BODY)
355+ {
356+ add_flag(flgs, TR_SH_FIRE);
357+ add_flag(flgs, TR_LITE_1);
358+ }
359+
360+ if (creature_ptr->muta3 & MUT3_WINGS)
361+ {
362+ add_flag(flgs, TR_LEVITATION);
363+ }
364+
365+ if (creature_ptr->muta3 & MUT3_FEARLESS)
366+ {
367+ add_flag(flgs, TR_RES_FEAR);
368+ }
369+
370+ if (creature_ptr->muta3 & MUT3_REGEN)
371+ {
372+ add_flag(flgs, TR_REGEN);
373+ }
374+
375+ if (creature_ptr->muta3 & MUT3_ESP)
376+ {
377+ add_flag(flgs, TR_TELEPATHY);
378+ }
379+
380+ if (creature_ptr->muta3 & MUT3_MOTION)
381+ {
382+ add_flag(flgs, TR_FREE_ACT);
383+ }
384+ }
385+
386+ if (creature_ptr->pseikaku == SEIKAKU_SEXY)
387+ add_flag(flgs, TR_AGGRAVATE);
388+ if (creature_ptr->pseikaku == SEIKAKU_CHARGEMAN)
389+ add_flag(flgs, TR_RES_CONF);
390+ if (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)
391+ {
392+ add_flag(flgs, TR_RES_BLIND);
393+ add_flag(flgs, TR_RES_CONF);
394+ add_flag(flgs, TR_HOLD_EXP);
395+ if (creature_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE_1);
396+ if (creature_ptr->lev > 9)
397+ add_flag(flgs, TR_SPEED);
398+ }
399+
400+ if (creature_ptr->special_defense & KATA_FUUJIN)
401+ add_flag(flgs, TR_REFLECT);
402+
403+ if (creature_ptr->special_defense & KAMAE_GENBU)
404+ add_flag(flgs, TR_REFLECT);
405+
406+ if (creature_ptr->special_defense & KAMAE_SUZAKU)
407+ add_flag(flgs, TR_LEVITATION);
408+
409+ if (creature_ptr->special_defense & KAMAE_SEIRYU)
410+ {
411+ add_flag(flgs, TR_RES_FIRE);
412+ add_flag(flgs, TR_RES_COLD);
413+ add_flag(flgs, TR_RES_ACID);
414+ add_flag(flgs, TR_RES_ELEC);
415+ add_flag(flgs, TR_RES_POIS);
416+ add_flag(flgs, TR_LEVITATION);
417+ add_flag(flgs, TR_SH_FIRE);
418+ add_flag(flgs, TR_SH_ELEC);
419+ add_flag(flgs, TR_SH_COLD);
420+ }
421+
422+ if (creature_ptr->special_defense & KATA_MUSOU)
423+ {
424+ add_flag(flgs, TR_RES_FEAR);
425+ add_flag(flgs, TR_RES_LITE);
426+ add_flag(flgs, TR_RES_DARK);
427+ add_flag(flgs, TR_RES_BLIND);
428+ add_flag(flgs, TR_RES_CONF);
429+ add_flag(flgs, TR_RES_SOUND);
430+ add_flag(flgs, TR_RES_SHARDS);
431+ add_flag(flgs, TR_RES_NETHER);
432+ add_flag(flgs, TR_RES_NEXUS);
433+ add_flag(flgs, TR_RES_CHAOS);
434+ add_flag(flgs, TR_RES_DISEN);
435+ add_flag(flgs, TR_REFLECT);
436+ add_flag(flgs, TR_HOLD_EXP);
437+ add_flag(flgs, TR_FREE_ACT);
438+ add_flag(flgs, TR_SH_FIRE);
439+ add_flag(flgs, TR_SH_ELEC);
440+ add_flag(flgs, TR_SH_COLD);
441+ add_flag(flgs, TR_LEVITATION);
442+ add_flag(flgs, TR_LITE_1);
443+ add_flag(flgs, TR_SEE_INVIS);
444+ add_flag(flgs, TR_TELEPATHY);
445+ add_flag(flgs, TR_SLOW_DIGEST);
446+ add_flag(flgs, TR_REGEN);
447+ add_flag(flgs, TR_SUST_STR);
448+ add_flag(flgs, TR_SUST_INT);
449+ add_flag(flgs, TR_SUST_WIS);
450+ add_flag(flgs, TR_SUST_DEX);
451+ add_flag(flgs, TR_SUST_CON);
452+ add_flag(flgs, TR_SUST_CHR);
453+ }
454+}
--- /dev/null
+++ b/src/player/permanent-resistances.h
@@ -0,0 +1,5 @@
1+#pragma once
2+
3+#include "angband.h"
4+
5+void player_flags(player_type *creature_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE]);
旧リポジトリブラウザで表示