From 2dabd068522a6433630194cea47785e2d680c294 Mon Sep 17 00:00:00 2001 From: nothere Date: Thu, 27 May 2004 16:05:37 +0000 Subject: [PATCH] =?utf8?q?=E3=82=AC=E3=83=A9=E3=82=B9=E3=81=AE=E5=9C=B0?= =?utf8?q?=E5=BD=A2=E3=81=A7=E3=81=82=E3=82=8B=E3=81=93=E3=81=A8=E3=82=92?= =?utf8?q?=E7=A4=BA=E3=81=99=E5=9C=B0=E5=BD=A2=E3=83=95=E3=83=A9=E3=82=B0G?= =?utf8?q?LASS=E3=82=92=E5=AE=9F=E8=A3=85.=20=E3=82=AC=E3=83=A9=E3=82=B9?= =?utf8?q?=E3=81=AE=E5=9C=B0=E5=BD=A2=E3=81=AF=E4=BB=A5=E4=B8=8B=20?= =?utf8?q?=E3=81=AE=E4=BB=95=E6=A7=98=E3=81=A8=E3=81=97=E3=81=9F.=20*=20?= =?utf8?q?=E3=82=AC=E3=83=A9=E3=82=B9=E3=81=AE=E5=9C=B0=E5=BD=A2=E3=82=92?= =?utf8?q?=E5=8F=A9=E3=81=8D=E9=96=8B=E3=81=91=E3=82=8B=20(BASH),=20?= =?utf8?q?=E6=8E=98=E3=82=8B=20(TUNNEL),=20=E5=B2=A9=E7=9F=B3=E3=81=AB?= =?utf8?q?=E5=8A=B9=E3=81=8F=E9=AD=94=E6=B3=95=E3=82=92=E4=BD=BF=20=20=20?= =?utf8?q?=E3=81=86=20(HURT=5FROCK),=20=E5=88=86=E8=A7=A3=E3=81=99?= =?utf8?q?=E3=82=8B=20(HURT=5FDISI)=20=E3=81=A8=E5=89=B2=E3=82=8C=E3=82=8B?= =?utf8?q?.=20*=20=E3=83=89=E3=82=A2=E3=82=92=E5=8F=A9=E3=81=8D=E9=96=8B?= =?utf8?q?=E3=81=91=E3=82=8B=E6=99=82=E3=81=AF=E9=80=9A=E5=B8=B8=E3=81=AE?= =?utf8?q?=E3=83=89=E3=82=A2=E3=81=A8=E9=81=95=E3=81=84OPEN=E3=82=A2?= =?utf8?q?=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AF=E5=AE=9F=E8=A1=8C?= =?utf8?q?=E3=81=95=E3=82=8C=E3=81=9A,=20=E5=BF=85=20=20=20=E3=81=9ABASH?= =?utf8?q?=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8C=E5=AE=9F?= =?utf8?q?=E8=A1=8C=E3=81=95=E3=82=8C=E3=82=8B.=20*=20=E7=A0=B4=E7=89=87?= =?utf8?q?=E3=81=A750=E3=83=80=E3=83=A1=E3=83=BC=E3=82=B8=E4=BB=A5?= =?utf8?q?=E4=B8=8A,=20=E8=BD=9F=E9=9F=B3=E3=81=A7200=E3=83=80=E3=83=A1?= =?utf8?q?=E3=83=BC=E3=82=B8=E4=BB=A5=E4=B8=8A=E3=82=92=E4=B8=8E=E3=81=88?= =?utf8?q?=E3=82=8B=E3=81=A8=E5=89=B2=E3=82=8C=E3=82=8B.=20=E3=83=80?= =?utf8?q?=E3=83=A1=E3=83=BC=20=20=20=E3=82=B8=E3=81=8C=E8=93=84=E7=A9=8D?= =?utf8?q?=E3=81=99=E3=82=8B=E3=82=8F=E3=81=91=E3=81=A7=E3=81=AF=E3=81=AA?= =?utf8?q?=E3=81=84.=20*=20=E3=82=AC=E3=83=A9=E3=82=B9=E3=81=AE=E5=9C=B0?= =?utf8?q?=E5=BD=A2=E3=81=8C=E5=89=B2=E3=82=8C=E3=82=8B=E3=81=A8=E5=8D=8A?= =?utf8?q?=E5=BE=841=E3=81=AE=E7=A0=B4=E7=89=87=E7=88=86=E7=99=BA=E3=81=8C?= =?utf8?q?=E7=99=BA=E7=94=9F=E3=81=99=E3=82=8B.=20=E3=83=80=E3=83=A1?= =?utf8?q?=E3=83=BC=E3=82=B8=E3=81=AF=E4=B8=AD=E5=BF=83=E9=83=A8=E3=81=A7?= =?utf8?q?=20=20=20=E3=82=8225=E3=82=92=E4=B8=8A=E9=99=90=E3=81=A8?= =?utf8?q?=E3=81=99=E3=82=8B.=20=E7=A0=B4=E7=89=87=E7=88=86=E7=99=BA?= =?utf8?q?=E3=81=AE=20"=E8=A9=A0=E5=94=B1=E8=80=85"=20ID=E3=81=AB=E3=81=AF?= =?utf8?q?=E7=89=B9=E6=AE=8AID=E3=82=92=E7=94=A8=E3=81=84=E3=82=8B.=20*=20?= =?utf8?q?=E3=83=A2=E3=83=B3=E3=82=B9=E3=82=BF=E3=83=BC=E3=81=8C=E5=9C=B0?= =?utf8?q?=E5=BD=A2=E3=82=92=E7=A0=B4=E5=A3=8A=E3=81=97=E3=81=9F=E9=9A=9B?= =?utf8?q?=E3=81=AE=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=8C?= =?utf8?q?=E5=A4=89=E3=82=8F=E3=82=8B.=20*=20=E3=82=AC=E3=83=A9=E3=82=B9?= =?utf8?q?=E3=81=AE=E5=9C=B0=E5=BD=A2=E3=81=8C=E5=A3=8A=E3=82=8C=E3=82=8B?= =?utf8?q?=E9=9A=9B=E3=81=AE=E3=82=B5=E3=82=A6=E3=83=B3=E3=83=89=E3=82=92l?= =?utf8?q?ib/xtra/sound/sound.cfg=E3=81=AEglass=20=20=20=E3=82=A8=E3=83=B3?= =?utf8?q?=E3=83=88=E3=83=AA=E3=81=A7=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=81=8D?= =?utf8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F.=20?= =?utf8?q?=E3=81=93=E3=81=AE=E3=82=B5=E3=82=A6=E3=83=B3=E3=83=89=E3=81=AF?= =?utf8?q?=E9=8F=A1=E3=81=8C=E5=89=B2=E3=82=8C=E3=81=9F=E9=9A=9B=E3=81=AB?= =?utf8?q?=E3=82=82=E7=94=A8=E3=81=84=20=20=20=E3=82=89=E3=82=8C=E3=82=8B.?= =?utf8?q?=20=E3=81=AA=E3=81=8A,=20=E3=82=AC=E3=83=A9=E3=82=B9=E3=81=AE?= =?utf8?q?=E3=83=89=E3=82=A2=E3=82=92=E5=A3=8A=E3=81=97=E3=81=9F=E5=A0=B4?= =?utf8?q?=E5=90=88=E3=81=AF=E9=80=9A=E5=B8=B8=E3=81=AEopendoor=E3=82=A8?= =?utf8?q?=E3=83=B3=E3=83=88=E3=83=AA=E3=81=AE=E3=82=B5=20=20=20=E3=82=A6?= =?utf8?q?=E3=83=B3=E3=83=89=E3=81=AF=E7=94=A8=E3=81=84=E3=82=89=E3=82=8C?= =?utf8?q?=E3=81=AA=E3=81=84.=20=E3=81=BE=E3=81=9F,=20=E5=9C=B0=E5=BD=A2?= =?utf8?q?=E3=82=92=E7=A0=B4=E5=A3=8A=E3=81=97=E3=81=A6=E3=82=82=E5=85=83?= =?utf8?q?=E3=80=85=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=81=AE?= =?utf8?q?=E3=81=AA=E3=81=84=E9=83=A8=20=20=20=E5=88=86=E3=81=A7=E3=81=AF?= =?utf8?q?=E3=82=B5=E3=82=A6=E3=83=B3=E3=83=89=E3=81=AF=E9=B3=B4=E3=82=89?= =?utf8?q?=E3=81=AA=E3=81=84.=20*=20HP=E3=81=8C=E5=B0=91=E3=81=AA=E3=81=84?= =?utf8?q?=E9=9D=9ESTUPID=E3=81=AE=E3=83=A2=E3=83=B3=E3=82=B9=E3=82=BF?= =?utf8?q?=E3=83=BC=E3=81=AF=E3=82=AC=E3=83=A9=E3=82=B9=E3=81=AE=E5=9C=B0?= =?utf8?q?=E5=BD=A2=E3=81=AE=E7=A0=B4=E5=A3=8A=E3=82=92=E8=A9=A6=E3=81=BF?= =?utf8?q?=E3=81=AA=E3=81=84.=20*=20=E3=82=AC=E3=83=A9=E3=82=B9=E3=81=AE?= =?utf8?q?=E5=9C=B0=E5=BD=A2=E3=82=92=E5=B2=A9=E5=96=B0=E3=81=84=E3=81=A7?= =?utf8?q?=E9=A3=9F=E3=81=B9=E3=82=8B=E3=81=93=E3=81=A8=E3=81=AF=E3=81=A7?= =?utf8?q?=E3=81=8D=E3=81=AA=E3=81=84.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 関連して, 以下の変更を含む. * ガラスの破片が飛び散った位置が視界外かどうか判定するため, project_m()の変数see_s_msgを引数に変更. そのsee_s_msgの設定は地形の 処理以前に行うようにした. * project_m()で, モンスターが見えていない場合は思い出ウィンドウ再描画 を行わないように変更. ただしモンスターが死ぬ瞬間には再描画する. * 壁掘り能力で破壊可能な地形判定をTUNNELではなくHURT_DISIに変更. * ガラスの床は割れると暗い穴になるように変更. --- lib/edit/f_info.txt | 45 +++++++++++++------------- lib/xtra/sound/sound.cfg | 1 + src/cave.c | 11 +++++++ src/cmd1.c | 2 +- src/cmd2.c | 15 ++++++--- src/defines.h | 12 ++++--- src/init1.c | 1 + src/melee2.c | 80 +++++++++++++++++++++++++++++++--------------- src/mutation.c | 22 +++++++++---- src/spells1.c | 82 +++++++++++++++++++++++++++++++++++++++++------- src/tables.c | 9 +++--- src/variable.c | 1 + 12 files changed, 203 insertions(+), 78 deletions(-) diff --git a/lib/edit/f_info.txt b/lib/edit/f_info.txt index e30be5b08..98bed59e0 100644 --- a/lib/edit/f_info.txt +++ b/lib/edit/f_info.txt @@ -1473,7 +1473,9 @@ J: E:glass floor G:.:w:LIT W:2 -F:LOS | PROJECT | MOVE | PLACE | DROP | FLOOR | CAN_FLY | TELEPORTABLE +K:DESTROYED:DARK_PIT +F:LOS | PROJECT | MOVE | PLACE | DROP | FLOOR | CAN_FLY | HURT_DISI | +F:TELEPORTABLE | GLASS N:200:OPEN_GLASS_DOOR J:³«¤¤¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1483,7 +1485,7 @@ W:10 K:DESTROYED:*FLOOR* K:CLOSE:CLOSED_GLASS_DOOR F:LOS | PROJECT | MOVE | PLACE | NOTICE | REMEMBER | CLOSE | DOOR | CAN_FLY | -F:HURT_DISI | TELEPORTABLE +F:HURT_DISI | TELEPORTABLE | GLASS N:201:BROKEN_GLASS_DOOR J:²õ¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1492,7 +1494,7 @@ G:':W W:10 K:DESTROYED:*FLOOR* F:LOS | PROJECT | MOVE | PLACE | DROP | NOTICE | REMEMBER | CLOSE | DOOR | -F:CAN_FLY | HURT_DISI | TELEPORTABLE +F:CAN_FLY | HURT_DISI | TELEPORTABLE | GLASS N:202:CLOSED_GLASS_DOOR J:¥¬¥é¥¹¤Î¥É¥¢ @@ -1504,7 +1506,7 @@ K:OPEN:OPEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_1 F:POWER_0 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:203:LOCKED_GLASS_DOOR_1 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1518,7 +1520,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_2 K:DISARM:CLOSED_GLASS_DOOR F:POWER_1 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:204:LOCKED_GLASS_DOOR_2 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1532,7 +1534,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_3 K:DISARM:CLOSED_GLASS_DOOR F:POWER_2 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:205:LOCKED_GLASS_DOOR_3 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1546,7 +1548,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_4 K:DISARM:CLOSED_GLASS_DOOR F:POWER_3 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:206:LOCKED_GLASS_DOOR_4 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1560,7 +1562,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_5 K:DISARM:CLOSED_GLASS_DOOR F:POWER_4 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:207:LOCKED_GLASS_DOOR_5 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1574,7 +1576,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_6 K:DISARM:CLOSED_GLASS_DOOR F:POWER_5 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:208:LOCKED_GLASS_DOOR_6 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1588,7 +1590,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_7 K:DISARM:CLOSED_GLASS_DOOR F:POWER_6 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:209:LOCKED_GLASS_DOOR_7 J:¸°¤Î¤«¤«¤Ã¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1602,7 +1604,7 @@ K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_7 K:DISARM:CLOSED_GLASS_DOOR F:POWER_7 | LOS | NOTICE | REMEMBER | OPEN | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:210:JAMMED_GLASS_DOOR_0 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1615,7 +1617,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_1 F:POWER_0 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:211:JAMMED_GLASS_DOOR_1 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1628,7 +1630,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_2 F:POWER_1 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:212:JAMMED_GLASS_DOOR_2 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1641,7 +1643,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_3 F:POWER_2 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:213:JAMMED_GLASS_DOOR_3 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1654,7 +1656,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_4 F:POWER_3 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:214:JAMMED_GLASS_DOOR_4 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1667,7 +1669,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_5 F:POWER_4 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:215:JAMMED_GLASS_DOOR_5 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1680,7 +1682,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_6 F:POWER_5 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:216:JAMMED_GLASS_DOOR_6 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1693,7 +1695,7 @@ K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR K:SPIKE:JAMMED_GLASS_DOOR_7 F:POWER_6 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:217:JAMMED_GLASS_DOOR_7 J:¤¯¤µ¤Ó¤¬ÂǤ¿¤ì¤¿¥¬¥é¥¹¤Î¥É¥¢ @@ -1705,7 +1707,7 @@ K:DESTROYED:*FLOOR* K:OPEN:BROKEN_GLASS_DOOR K:BASH:BROKEN_GLASS_DOOR F:POWER_7 | LOS | NOTICE | REMEMBER | BASH | SPIKE | TUNNEL | DOOR | -F:HURT_ROCK | CAN_PASS | HURT_DISI +F:HURT_ROCK | CAN_PASS | HURT_DISI | GLASS N:218:GLASS_WALL J:¥¬¥é¥¹¤ÎÊÉ @@ -1713,7 +1715,8 @@ E:glass wall G:#:w:LIT W:2 K:DESTROYED:*FLOOR* -F:POWER_40 | LOS | REMEMBER | TUNNEL | WALL | HURT_ROCK | CAN_PASS | HURT_DISI +F:POWER_40 | LOS | REMEMBER | TUNNEL | WALL | HURT_ROCK | CAN_PASS | +F:HURT_DISI | GLASS N:219:PERMANENT_GLASS_WALL J:±Êµ×¥¬¥é¥¹¤ÎÊÉ @@ -1721,7 +1724,7 @@ E:permanent glass wall G:#:w:LIT W:5 K:UNPERM:GLASS_WALL -F:REMEMBER | LOS | TUNNEL | WALL | PERMANENT +F:REMEMBER | LOS | TUNNEL | WALL | PERMANENT | GLASS #### Curtains (220-221) (for testing) #### diff --git a/lib/xtra/sound/sound.cfg b/lib/xtra/sound/sound.cfg index eb3a7f39f..f6582b065 100644 --- a/lib/xtra/sound/sound.cfg +++ b/lib/xtra/sound/sound.cfg @@ -76,4 +76,5 @@ moan = show = unused = explode = +glass = diff --git a/src/cave.c b/src/cave.c index b781a52c9..7739bf831 100644 --- a/src/cave.c +++ b/src/cave.c @@ -4747,6 +4747,17 @@ void cave_alter_feat(int y, int x, int action) #endif } } + + if (feature_action_flags[action] & FAF_CRASH_GLASS) + { + feature_type *old_f_ptr = &f_info[oldfeat]; + + if (have_flag(old_f_ptr->flags, FF_GLASS) && character_dungeon) + { + project(PROJECT_WHO_GLASS_SHARDS, 1, y, x, MIN(dun_level, 100) / 4, GF_SHARDS, + (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); + } + } } diff --git a/src/cmd1.c b/src/cmd1.c index 91d49dd9b..e5181cb8b 100644 --- a/src/cmd1.c +++ b/src/cmd1.c @@ -3864,7 +3864,7 @@ void move_player(int dir, bool do_pickup, bool break_trap) /* Player can not walk through "walls"... */ /* unless in Shadow Form */ - p_can_kill_walls = p_ptr->kill_wall && have_flag(f_ptr->flags, FF_TUNNEL) && + p_can_kill_walls = p_ptr->kill_wall && have_flag(f_ptr->flags, FF_HURT_DISI) && (!p_can_enter || !have_flag(f_ptr->flags, FF_LOS)) && !have_flag(f_ptr->flags, FF_PERMANENT); diff --git a/src/cmd2.c b/src/cmd2.c index 505fd0a79..22b027c9e 100644 --- a/src/cmd2.c +++ b/src/cmd2.c @@ -1608,6 +1608,9 @@ static bool do_cmd_tunnel_aux(int y, int x) } #endif + /* Sound */ + if (have_flag(f_ptr->flags, FF_GLASS)) sound(SOUND_GLASS); + /* Remove the feature */ cave_alter_feat(y, x, FF_TUNNEL); @@ -2235,12 +2238,15 @@ static bool do_cmd_bash_aux(int y, int x, int dir) /* Get grid */ cave_type *c_ptr = &cave[y][x]; + /* Get feature */ + feature_type *f_ptr = &f_info[c_ptr->feat]; + /* Hack -- Bash power based on strength */ /* (Ranges from 3 to 20 to 100 to 200) */ int bash = adj_str_blow[p_ptr->stat_ind[A_STR]]; /* Extract door power */ - int temp = f_info[c_ptr->feat].power; + int temp = f_ptr->power; bool more = FALSE; @@ -2274,9 +2280,11 @@ static bool do_cmd_bash_aux(int y, int x, int dir) msg_format("The %s crashes open!", name); #endif + /* Sound */ + sound(have_flag(f_ptr->flags, FF_GLASS) ? SOUND_GLASS : SOUND_OPENDOOR); /* Break down the door */ - if ((randint0(100) < 50) || (feat_state(c_ptr->feat, FF_OPEN) == c_ptr->feat)) + if ((randint0(100) < 50) || (feat_state(c_ptr->feat, FF_OPEN) == c_ptr->feat) || have_flag(f_ptr->flags, FF_GLASS)) { cave_alter_feat(y, x, FF_BASH); } @@ -2287,9 +2295,6 @@ static bool do_cmd_bash_aux(int y, int x, int dir) cave_alter_feat(y, x, FF_OPEN); } - /* Sound */ - sound(SOUND_OPENDOOR); - /* Hack -- Fall through the door */ move_player(dir, FALSE, FALSE); } diff --git a/src/defines.h b/src/defines.h index bf1f15a95..d98190f8c 100644 --- a/src/defines.h +++ b/src/defines.h @@ -1289,8 +1289,9 @@ #define FF_UNPERM 109 #define FF_TELEPORTABLE 110 #define FF_CONVERT 111 +#define FF_GLASS 112 -#define FF_FLAG_MAX 112 +#define FF_FLAG_MAX 113 #define FF_FLAG_SIZE (1 + ((FF_FLAG_MAX - 1) / 32)) /* Which features are dynamic */ @@ -1307,8 +1308,9 @@ /* * Feature action flags */ -#define FAF_DESTROY 0x01 -#define FAF_NO_DROP 0x02 +#define FAF_DESTROY 0x01 +#define FAF_NO_DROP 0x02 +#define FAF_CRASH_GLASS 0x04 /* @@ -2707,6 +2709,7 @@ * Special caster ID for project() */ #define PROJECT_WHO_UNCTRL_POWER -1 +#define PROJECT_WHO_GLASS_SHARDS -2 /* @@ -4571,11 +4574,12 @@ extern int PlayerUID; #define SOUND_SHOW 62 /* A monster makes a "show" attack */ #define SOUND_UNUSED 63 /* (no sound for gaze attacks) */ #define SOUND_EXPLODE 64 /* Something (or somebody) explodes */ +#define SOUND_GLASS 65 /* A glass feature was crashed */ /* * Mega-Hack -- maximum known sounds */ -#define SOUND_MAX 65 +#define SOUND_MAX 66 #define MAX_VIRTUE 18 diff --git a/src/init1.c b/src/init1.c index b137c1e0f..97e1f72e4 100644 --- a/src/init1.c +++ b/src/init1.c @@ -247,6 +247,7 @@ static cptr f_info_flags[] = "UNPERM", "TELEPORTABLE", "CONVERT", + "GLASS", }; diff --git a/src/melee2.c b/src/melee2.c index 82aac23cc..4ee3b46de 100644 --- a/src/melee2.c +++ b/src/melee2.c @@ -2846,12 +2846,26 @@ msg_format("%^s%s", m_name, monmessage); do_move = TRUE; } + /* Possibly a monster to attack */ else if (c_ptr->m_idx) { - /* Possibly a monster to attack */ do_move = TRUE; } + /* Monster destroys walls (and doors) */ + else if ((r_ptr->flags2 & RF2_KILL_WALL) && + (can_cross ? !have_flag(f_ptr->flags, FF_LOS) : !is_riding_mon) && + have_flag(f_ptr->flags, FF_HURT_DISI) && !have_flag(f_ptr->flags, FF_PERMANENT) && + (!have_flag(f_ptr->flags, FF_GLASS) || (r_ptr->flags2 & RF2_STUPID) || (m_ptr->hp >= MAX(m_ptr->maxhp / 3, 200)))) + { + /* Eat through walls/doors/rubble */ + do_move = TRUE; + if (!can_cross) must_alter_to_move = TRUE; + + /* Monster destroyed a wall (later) */ + did_kill_wall = TRUE; + } + /* Floor is open? */ else if (can_cross) { @@ -2865,25 +2879,6 @@ msg_format("%^s%s", m_name, monmessage); /* Monster went through a wall */ did_pass_wall = TRUE; } - - if ((r_ptr->flags2 & RF2_KILL_WALL) && have_flag(f_ptr->flags, FF_TUNNEL) && - !have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_PERMANENT)) - { - /* Monster destroyed a wall (later) */ - did_kill_wall = TRUE; - } - } - - /* Monster destroys walls (and doors) */ - else if ((r_ptr->flags2 & RF2_KILL_WALL) && !is_riding_mon && - have_flag(f_ptr->flags, FF_TUNNEL) && !have_flag(f_ptr->flags, FF_PERMANENT)) - { - /* Eat through walls/doors/rubble */ - do_move = TRUE; - must_alter_to_move = TRUE; - - /* Monster destroyed a wall (later) */ - did_kill_wall = TRUE; } /* Handle doors and secret doors */ @@ -2937,10 +2932,17 @@ msg_format("%^s%s", m_name, monmessage); if (randint0(m_ptr->hp / 10) > f_ptr->power) { /* Message */ + if (have_flag(f_ptr->flags, FF_GLASS)) +#ifdef JP + msg_print("¥¬¥é¥¹¤¬ºÕ¤±¤ë²»¤¬¤·¤¿¡ª"); +#else + msg_print("You hear a glass was crashed!"); +#endif + else #ifdef JP - msg_print("¥É¥¢¤ò᤭³«¤±¤ë²»¤¬¤·¤¿¡ª"); + msg_print("¥É¥¢¤ò᤭³«¤±¤ë²»¤¬¤·¤¿¡ª"); #else - msg_print("You hear a door burst open!"); + msg_print("You hear a door burst open!"); #endif /* Disturb (sometimes) */ @@ -2960,9 +2962,19 @@ msg_format("%^s%s", m_name, monmessage); if (did_open_door || did_bash_door) { /* Break down the door */ - if (did_bash_door && ((randint0(100) < 50) || (feat_state(c_ptr->feat, FF_OPEN) == c_ptr->feat))) + if (did_bash_door && ((randint0(100) < 50) || (feat_state(c_ptr->feat, FF_OPEN) == c_ptr->feat) || have_flag(f_ptr->flags, FF_GLASS))) { cave_alter_feat(ny, nx, FF_BASH); + + if (!m_ptr->r_idx) /* Killed by shards of glass, etc. */ + { + /* Update some things */ + p_ptr->update |= (PU_FLOW); + p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_BASH_DOOR); + + return; + } } /* Open the door */ @@ -3172,14 +3184,32 @@ msg_format("%^s%s", m_name, monmessage); { if (one_in_(GRINDNOISE)) { + if (have_flag(f_ptr->flags, FF_GLASS)) #ifdef JP - msg_print("¥®¥·¥®¥·¤¤¤¦²»¤¬Ê¹¤³¤¨¤ë¡£"); + msg_print("²¿¤«¤ÎºÕ¤±¤ë²»¤¬Ê¹¤³¤¨¤ë¡£"); #else - msg_print("There is a grinding sound."); + msg_print("There is a crashing sound."); +#endif + else +#ifdef JP + msg_print("¥®¥·¥®¥·¤¤¤¦²»¤¬Ê¹¤³¤¨¤ë¡£"); +#else + msg_print("There is a grinding sound."); #endif } cave_alter_feat(ny, nx, FF_HURT_DISI); + + if (!m_ptr->r_idx) /* Killed by shards of glass, etc. */ + { + /* Update some things */ + p_ptr->update |= (PU_FLOW); + p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_KILL_WALL); + + return; + } + f_ptr = &f_info[c_ptr->feat]; /* Note changes to viewable region */ diff --git a/src/mutation.c b/src/mutation.c index 2ea3d9261..14fe6dabc 100644 --- a/src/mutation.c +++ b/src/mutation.c @@ -3465,17 +3465,18 @@ bool mutation_power_aux(u32b power) { int x, y; cave_type *c_ptr; - feature_type *f_ptr; + feature_type *f_ptr, *mimic_f_ptr; if (!get_rep_dir2(&dir)) return FALSE; y = py + ddy[dir]; x = px + ddx[dir]; c_ptr = &cave[y][x]; f_ptr = &f_info[c_ptr->feat]; + mimic_f_ptr = &f_info[get_feat_mimic(c_ptr)]; if (music_singing_any()) stop_singing(); - if (!have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_HURT_ROCK)) + if (!have_flag(mimic_f_ptr->flags, FF_HURT_ROCK)) { #ifdef JP msg_print("¤³¤ÎÃÏ·Á¤Ï¿©¤Ù¤é¤ì¤Ê¤¤¡£"); @@ -3487,9 +3488,9 @@ bool mutation_power_aux(u32b power) else if (have_flag(f_ptr->flags, FF_PERMANENT)) { #ifdef JP - msg_format("¤¤¤Æ¤Ã¡ª¤³¤Î%s¤Ï¤¢¤Ê¤¿¤Î»õ¤è¤ê¹Å¤¤¡ª", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("¤¤¤Æ¤Ã¡ª¤³¤Î%s¤Ï¤¢¤Ê¤¿¤Î»õ¤è¤ê¹Å¤¤¡ª", f_name + mimic_f_ptr->name); #else - msg_format("Ouch! This %s is harder than your teeth!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("Ouch! This %s is harder than your teeth!", f_name + mimic_f_ptr->name); #endif break; } @@ -3514,6 +3515,15 @@ bool mutation_power_aux(u32b power) #endif break; } + else if (have_flag(f_ptr->flags, FF_GLASS)) + { +#ifdef JP + msg_print("¥¬¥é¥¹¤ÎÌ£¤Ï¹¥¤­¤¸¤ã¤Ê¤¤¡ª"); +#else + msg_print("You don't like the glassy taste!"); +#endif + break; + } else if (have_flag(f_ptr->flags, FF_DOOR) || have_flag(f_ptr->flags, FF_CAN_DIG)) { (void)set_food(p_ptr->food + 3000); @@ -3525,9 +3535,9 @@ bool mutation_power_aux(u32b power) else { #ifdef JP - msg_format("¤³¤Î%s¤Ï¤È¤Æ¤â¤ª¤¤¤·¤¤¡ª", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("¤³¤Î%s¤Ï¤È¤Æ¤â¤ª¤¤¤·¤¤¡ª", f_name + mimic_f_ptr->name); #else - msg_format("This %s is very filling!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("This %s is very filling!", f_name + mimic_f_ptr->name); #endif (void)set_food(p_ptr->food + 10000); } diff --git a/src/spells1.c b/src/spells1.c index 473af57f8..bcaffd3c2 100644 --- a/src/spells1.c +++ b/src/spells1.c @@ -1112,11 +1112,33 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) #else msg_print("The mirror was crashed!"); #endif + sound(SOUND_GLASS); remove_mirror(y, x); project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); } + + if (have_flag(f_ptr->flags, FF_GLASS) && !have_flag(f_ptr->flags, FF_PERMANENT) && (dam >= 50)) + { + /* Message */ + if (known && (c_ptr->info & CAVE_MARK)) + { +#ifdef JP + msg_format("%s¤¬³ä¤ì¤¿¡ª", f_name + f_info[get_feat_mimic(c_ptr)].name); +#else + msg_format("The %s was crashed!", f_name + f_info[get_feat_mimic(c_ptr)].name); +#endif + sound(SOUND_GLASS); + } + + /* Destroy the wall */ + cave_alter_feat(y, x, FF_HURT_ROCK); + + /* Update some things */ + p_ptr->update |= (PU_FLOW); + } break; } + case GF_SOUND: { if (is_mirror_grid(c_ptr) && p_ptr->lev < 40) @@ -1126,9 +1148,30 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) #else msg_print("The mirror was crashed!"); #endif + sound(SOUND_GLASS); remove_mirror(y, x); project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); } + + if (have_flag(f_ptr->flags, FF_GLASS) && !have_flag(f_ptr->flags, FF_PERMANENT) && (dam >= 200)) + { + /* Message */ + if (known && (c_ptr->info & CAVE_MARK)) + { +#ifdef JP + msg_format("%s¤¬³ä¤ì¤¿¡ª", f_name + f_info[get_feat_mimic(c_ptr)].name); +#else + msg_format("The %s was crashed!", f_name + f_info[get_feat_mimic(c_ptr)].name); +#endif + sound(SOUND_GLASS); + } + + /* Destroy the wall */ + cave_alter_feat(y, x, FF_HURT_ROCK); + + /* Update some things */ + p_ptr->update |= (PU_FLOW); + } break; } @@ -1639,7 +1682,7 @@ msg_format("%s * We attempt to return "TRUE" if the player saw anything "useful" happen. */ /* "flg" was added. */ -static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) +static bool project_m(int who, int r, int y, int x, int dam, int typ, int flg, bool see_s_msg) { int tmp; @@ -1664,9 +1707,6 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) /* Can the player know about this effect? */ bool known = ((m_ptr->cdis <= MAX_SIGHT) || p_ptr->inside_battle); - /* Can the player see the source of this effect? */ - bool see_s_msg = ((who <= 0) || is_seen(caster_ptr)); - /* Were the effects "irrelevant"? */ bool skipped = FALSE; @@ -6206,14 +6246,14 @@ msg_print(" /* XXX XXX XXX Verify this code */ /* Update the monster */ - update_mon(c_ptr->m_idx, FALSE); + if (m_ptr->r_idx) update_mon(c_ptr->m_idx, FALSE); /* Redraw the monster grid */ lite_spot(y, x); /* Update monster recall window */ - if (p_ptr->monster_race_idx == m_ptr->r_idx) + if ((p_ptr->monster_race_idx == m_ptr->r_idx) && (seen || !m_ptr->r_idx)) { /* Window stuff */ p_ptr->window |= (PW_MONSTER); @@ -6413,6 +6453,14 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int #endif break; + case PROJECT_WHO_GLASS_SHARDS: +#ifdef JP + strcpy(killer, "¥¬¥é¥¹¤ÎÇËÊÒ"); +#else + strcpy(killer, "shards of glass"); +#endif + break; + default: #ifdef JP strcpy(killer, "æ«"); @@ -8203,6 +8251,9 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons /* Attacker's name (prepared before polymorph)*/ char who_name[80]; + /* Can the player see the source of this effect? */ + bool see_s_msg = TRUE; + /* Initialize by null string */ who_name[0] = '\0'; @@ -8405,7 +8456,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons { y = GRID_Y(path_g[j]); x = GRID_X(path_g[j]); - if(project_m(0,0,y,x,dam,GF_SEEKER,flg))notice=TRUE; + if(project_m(0,0,y,x,dam,GF_SEEKER,flg,TRUE))notice=TRUE; if(!who && (project_m_n==1) && !jump ){ if(cave[project_m_y][project_m_x].m_idx >0 ){ monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; @@ -8427,7 +8478,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons int x,y; y = GRID_Y(path_g[i]); x = GRID_X(path_g[i]); - if(project_m(0,0,y,x,dam,GF_SEEKER,flg)) + if(project_m(0,0,y,x,dam,GF_SEEKER,flg,TRUE)) notice=TRUE; if(!who && (project_m_n==1) && !jump ){ if(cave[project_m_y][project_m_x].m_idx >0 ){ @@ -8557,7 +8608,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons int x,y; y = GRID_Y(path_g[i]); x = GRID_X(path_g[i]); - (void)project_m(0,0,y,x,dam,GF_SUPER_RAY,flg); + (void)project_m(0,0,y,x,dam,GF_SUPER_RAY,flg,TRUE); if(!who && (project_m_n==1) && !jump ){ if(cave[project_m_y][project_m_x].m_idx >0 ){ monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; @@ -8841,6 +8892,13 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons if (p_ptr->update) update_stuff(); + if (flg & PROJECT_KILL) + { + see_s_msg = (who > 0) ? is_seen(&m_list[who]) : + (!who ? TRUE : player_can_see_bold(y1, x1)); + } + + /* Check features */ if (flg & (PROJECT_GRID)) { @@ -9067,7 +9125,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons } /* Affect the monster in the grid */ - if (project_m(who, effective_dist, y, x, dam, typ,flg)) notice = TRUE; + if (project_m(who, effective_dist, y, x, dam, typ, flg, see_s_msg)) notice = TRUE; } @@ -9333,7 +9391,7 @@ bool binding_field( int dam ) { if (player_has_los_bold(y, x) && projectable(py, px, y, x)) { (void)project_m(0,0,y,x,dam,GF_MANA, - (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP)); + (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP),TRUE); } } } @@ -9361,7 +9419,7 @@ void seal_of_mirror( int dam ) if( is_mirror_grid(&cave[y][x])) { if(project_m(0,0,y,x,dam,GF_GENOCIDE, - (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP))) + (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP),TRUE)) { if( !cave[y][x].m_idx ) { diff --git a/src/tables.c b/src/tables.c index 9d70ec3db..9a89f59f4 100644 --- a/src/tables.c +++ b/src/tables.c @@ -7144,11 +7144,11 @@ byte feature_action_flags[FF_FLAG_MAX] = 0, /* REMEMBER */ 0, /* OPEN */ 0, /* CLOSE */ - 0, /* BASH */ + FAF_CRASH_GLASS, /* BASH */ 0, /* SPIKE */ FAF_DESTROY, /* DISARM */ 0, /* STORE */ - FAF_DESTROY, /* TUNNEL */ + FAF_DESTROY | FAF_CRASH_GLASS, /* TUNNEL */ 0, /* MAY_HAVE_GOLD */ 0, /* HAS_GOLD */ 0, /* HAS_ITEM */ @@ -7179,7 +7179,7 @@ byte feature_action_flags[FF_FLAG_MAX] = 0, /* SHALLOW */ 0, /* DEEP */ 0, /* FILLED */ - FAF_DESTROY, /* HURT_ROCK */ + FAF_DESTROY | FAF_CRASH_GLASS, /* HURT_ROCK */ 0, /* HURT_FIRE */ 0, /* HURT_COLD */ 0, /* HURT_ACID */ @@ -7234,7 +7234,7 @@ byte feature_action_flags[FF_FLAG_MAX] = 0, /* SPREAD */ 0, /* SPECIAL */ - FAF_DESTROY | FAF_NO_DROP, /* HURT_DISI */ + FAF_DESTROY | FAF_NO_DROP | FAF_CRASH_GLASS, /* HURT_DISI */ 0, /* QUEST_ENTER */ 0, /* QUEST_EXIT */ 0, /* QUEST */ @@ -7249,4 +7249,5 @@ byte feature_action_flags[FF_FLAG_MAX] = 0, /* UNPERM */ 0, /* TELEPORTABLE */ 0, /* CONVERT */ + 0, /* GLASS */ }; diff --git a/src/variable.c b/src/variable.c index c300cf58f..bb3242a1b 100644 --- a/src/variable.c +++ b/src/variable.c @@ -646,6 +646,7 @@ char angband_sound_name[SOUND_MAX][16] = "show", "unused", "explode", + "glass", }; -- 2.11.0