inform6lib 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/lib/inform/English.h.rb +31 -63
- data/lib/inform/Parser.h.rb +3 -3
- data/lib/inform/VerbLib.h.rb +1 -1
- data/lib/inform/infix.h.rb +1 -1
- data/lib/inform/parserm.h.rb +400 -512
- data/lib/inform/verblibm.h.rb +171 -135
- metadata +3 -3
data/lib/inform/verblibm.h.rb
CHANGED
|
@@ -101,7 +101,7 @@ module Verbs
|
|
|
101
101
|
|
|
102
102
|
def RunTimeError(n, p1 = nil, p2 = nil)
|
|
103
103
|
if defined? DEBUG
|
|
104
|
-
print "** Library error #{n} (p1
|
|
104
|
+
print "** Library error #{n} (#{p1},#{p2}) **\n** "
|
|
105
105
|
case n
|
|
106
106
|
when 1 then print "preposition not found (this should not occur)"
|
|
107
107
|
when 2 then print "Property value not routine or string: \"#{p2}\" of \"#{p1}\"" +
|
|
@@ -1054,11 +1054,11 @@ module Verbs
|
|
|
1054
1054
|
|
|
1055
1055
|
def RestartSub
|
|
1056
1056
|
L__M(:Restart, 1)
|
|
1057
|
-
__restart if YesOrNo()
|
|
1057
|
+
__restart { L__M(:Restart, 2) } if YesOrNo()
|
|
1058
1058
|
end
|
|
1059
1059
|
|
|
1060
1060
|
def RestoreSub
|
|
1061
|
-
return if self.respond_to?(:__restore) && __restore(
|
|
1061
|
+
return if self.respond_to?(:__restore) && __restore { RMaybe() }
|
|
1062
1062
|
L__M(:Restore, 1)
|
|
1063
1063
|
end
|
|
1064
1064
|
|
|
@@ -1067,7 +1067,7 @@ module Verbs
|
|
|
1067
1067
|
end
|
|
1068
1068
|
|
|
1069
1069
|
def SaveSub
|
|
1070
|
-
return if self.respond_to?(:__save) && __save(
|
|
1070
|
+
return if self.respond_to?(:__save) && __save { SMaybe() }
|
|
1071
1071
|
L__M(:Save, 1)
|
|
1072
1072
|
end
|
|
1073
1073
|
|
|
@@ -1076,7 +1076,7 @@ module Verbs
|
|
|
1076
1076
|
end
|
|
1077
1077
|
|
|
1078
1078
|
def VerifySub
|
|
1079
|
-
return if self.respond_to?(:__verify) && __verify(
|
|
1079
|
+
return if self.respond_to?(:__verify) && __verify { Vmaybe() }
|
|
1080
1080
|
Vwrong()
|
|
1081
1081
|
end
|
|
1082
1082
|
|
|
@@ -1140,7 +1140,64 @@ module Verbs
|
|
|
1140
1140
|
# The scoring system
|
|
1141
1141
|
# ----------------------------------------------------------------------------
|
|
1142
1142
|
|
|
1143
|
-
|
|
1143
|
+
def ScoreSub
|
|
1144
|
+
if defined?(NO_SCORE)
|
|
1145
|
+
return L__M(:Score, 2) if @deadflag == 0
|
|
1146
|
+
else
|
|
1147
|
+
L__M(:Score, 1)
|
|
1148
|
+
PrintRank()
|
|
1149
|
+
end # NO_SCORE
|
|
1150
|
+
end
|
|
1151
|
+
|
|
1152
|
+
unless defined?(TaskScore)
|
|
1153
|
+
def TaskScore(i)
|
|
1154
|
+
task_scores[i]
|
|
1155
|
+
end
|
|
1156
|
+
end
|
|
1157
|
+
|
|
1158
|
+
def Achieved(num)
|
|
1159
|
+
if task_done[num].nil?
|
|
1160
|
+
task_done[num] = true
|
|
1161
|
+
score = score + TaskScore(num)
|
|
1162
|
+
end
|
|
1163
|
+
end
|
|
1164
|
+
|
|
1165
|
+
def PANum(m)
|
|
1166
|
+
print " "
|
|
1167
|
+
n = m
|
|
1168
|
+
if n < 0 then n = -m; n = n*10; end
|
|
1169
|
+
if n < 10 then print " "; return Panuml(); end
|
|
1170
|
+
if n < 100 then print " "; return Panuml(); end
|
|
1171
|
+
if n < 1000 then print " "; end
|
|
1172
|
+
|
|
1173
|
+
Panuml()
|
|
1174
|
+
end
|
|
1175
|
+
|
|
1176
|
+
def Panuml
|
|
1177
|
+
print m + " "
|
|
1178
|
+
end
|
|
1179
|
+
|
|
1180
|
+
def FullScoreSub
|
|
1181
|
+
ScoreSub()
|
|
1182
|
+
return false if score == 0 || TASKS_PROVIDED == 1
|
|
1183
|
+
new_line
|
|
1184
|
+
L__M(:FullScore, 1)
|
|
1185
|
+
for i in 0..NUMBER_TASKS
|
|
1186
|
+
if task_done[i] == true
|
|
1187
|
+
PANum(TaskScore(i))
|
|
1188
|
+
PrintTaskName(i)
|
|
1189
|
+
end
|
|
1190
|
+
end
|
|
1191
|
+
if things_score != 0
|
|
1192
|
+
PANum(things_score)
|
|
1193
|
+
L__M(:FullScore, 2)
|
|
1194
|
+
end
|
|
1195
|
+
if places_score != 0
|
|
1196
|
+
PANum(places_score)
|
|
1197
|
+
L__M(:FullScore, 3)
|
|
1198
|
+
end
|
|
1199
|
+
new_line; PANum(score); L__M(:FullScore, 4)
|
|
1200
|
+
end
|
|
1144
1201
|
|
|
1145
1202
|
# ----------------------------------------------------------------------------
|
|
1146
1203
|
# Real verbs start here: Inventory
|
|
@@ -1201,12 +1258,12 @@ module Verbs
|
|
|
1201
1258
|
end
|
|
1202
1259
|
|
|
1203
1260
|
def ObjectScopedBySomething(item)
|
|
1204
|
-
i = item; return false
|
|
1261
|
+
i = item; return false if i.nil?
|
|
1205
1262
|
Inform::Object.each do |j|
|
|
1206
1263
|
next unless j.respond_to?(:add_to_scope)
|
|
1207
|
-
return j if j.add_to_scope.include?(
|
|
1264
|
+
return j if j.add_to_scope.include?(i)
|
|
1208
1265
|
end
|
|
1209
|
-
|
|
1266
|
+
false
|
|
1210
1267
|
end
|
|
1211
1268
|
|
|
1212
1269
|
def ObjectIsUntouchable(item, flag1 = nil, flag2 = nil, persona = nil)
|
|
@@ -1227,62 +1284,57 @@ module Verbs
|
|
|
1227
1284
|
ancestor = CommonAncestor(persona, item)
|
|
1228
1285
|
if ancestor.nil?
|
|
1229
1286
|
ancestor = item
|
|
1230
|
-
|
|
1231
|
-
|
|
1287
|
+
i = nil
|
|
1288
|
+
while !ancestor.nil? && (i = ObjectScopedBySomething(ancestor)) == false
|
|
1232
1289
|
ancestor = parent(ancestor)
|
|
1233
1290
|
end
|
|
1234
|
-
|
|
1235
|
-
return
|
|
1236
|
-
# return false if ObjectIsUntouchable(i, flag1, flag2) # TODO: FIXME
|
|
1291
|
+
if i != false && !i.nil?
|
|
1292
|
+
return true if ObjectIsUntouchable(i, flag1, flag2)
|
|
1237
1293
|
# An item immediately added to scope
|
|
1238
1294
|
end
|
|
1239
|
-
else
|
|
1240
1295
|
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1296
|
+
# First, a barrier between the persona and the ancestor. The persona
|
|
1297
|
+
# can only be in a sequence of enterable objects, and only closed
|
|
1298
|
+
# containers form a barrier.
|
|
1244
1299
|
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
return L__M(:Take, 9, i)
|
|
1252
|
-
end
|
|
1253
|
-
i = parent(i)
|
|
1300
|
+
elsif persona != ancestor
|
|
1301
|
+
i = parent(persona)
|
|
1302
|
+
while i != ancestor
|
|
1303
|
+
if i.has?(:container) && i.hasnt?(:open)
|
|
1304
|
+
return true if flag1
|
|
1305
|
+
return L__M(:Take, 9, i)
|
|
1254
1306
|
end
|
|
1307
|
+
i = parent(i)
|
|
1255
1308
|
end
|
|
1309
|
+
end
|
|
1256
1310
|
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1311
|
+
# Second, a barrier between the item and the ancestor. The item can
|
|
1312
|
+
# be carried by someone, part of a piece of machinery, in or on top
|
|
1313
|
+
# of something and so on.
|
|
1260
1314
|
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
return true if flag1
|
|
1268
|
-
return L__M(:Take, 6, i)
|
|
1269
|
-
end
|
|
1270
|
-
if i.has?(:transparent)
|
|
1271
|
-
return true if flag1
|
|
1272
|
-
return L__M(:Take, 7, i)
|
|
1273
|
-
end
|
|
1315
|
+
i = parent(item)
|
|
1316
|
+
if item != ancestor && i != @player
|
|
1317
|
+
while i != ancestor
|
|
1318
|
+
# break unless !i.nil? && i != ancestor
|
|
1319
|
+
if flag2 && i.hasnt?(:container, :supporter) # && i.hasnt?(:supporter)
|
|
1320
|
+
if i.has?(:animate)
|
|
1274
1321
|
return true if flag1
|
|
1275
|
-
return L__M(:Take,
|
|
1322
|
+
return L__M(:Take, 6, i)
|
|
1276
1323
|
end
|
|
1277
|
-
if
|
|
1324
|
+
if i.has?(:transparent)
|
|
1278
1325
|
return true if flag1
|
|
1279
|
-
return L__M(:Take,
|
|
1326
|
+
return L__M(:Take, 7, i)
|
|
1280
1327
|
end
|
|
1281
|
-
|
|
1328
|
+
return true if flag1
|
|
1329
|
+
return L__M(:Take, 8, item)
|
|
1330
|
+
end
|
|
1331
|
+
if !i.nil? && i.has?(:container) && i.hasnt?(:open)
|
|
1332
|
+
return true if flag1
|
|
1333
|
+
return L__M(:Take, 9, i)
|
|
1282
1334
|
end
|
|
1335
|
+
i = parent(i)
|
|
1283
1336
|
end
|
|
1284
1337
|
end
|
|
1285
|
-
# if ancestor.nil?
|
|
1286
1338
|
|
|
1287
1339
|
return false
|
|
1288
1340
|
end
|
|
@@ -1328,33 +1380,32 @@ module Verbs
|
|
|
1328
1380
|
end
|
|
1329
1381
|
|
|
1330
1382
|
if item.has? :scenery then println L__M(:Take, 10, item); return true; end
|
|
1331
|
-
if item.has? :static then
|
|
1383
|
+
if item.has? :static then println L__M(:Take, 11, item); return true; end
|
|
1332
1384
|
|
|
1333
1385
|
# The item is now known to be available for taking. Is the player
|
|
1334
1386
|
# carrying too much? If so, possibly juggle items into the rucksack
|
|
1335
1387
|
# to make room.
|
|
1336
1388
|
|
|
1337
|
-
k = 0; @player.objectloop { |j2| k += 1 if j2.hasnt?
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
# return L__M(:Take, 12)
|
|
1389
|
+
k = 0; @player.objectloop { |j2| k += 1 if j2.hasnt?(:worn) }
|
|
1390
|
+
|
|
1391
|
+
capacity_value = ValueOrRun(@player, :capacity)
|
|
1392
|
+
if capacity_value < k
|
|
1393
|
+
return L__M(:Take, 12) if SACK_OBJECT.nil?
|
|
1394
|
+
|
|
1395
|
+
return L__M(:Take, 12) if SACK_OBJECT.parent != @player
|
|
1396
|
+
|
|
1397
|
+
j = nil
|
|
1398
|
+
@player.objectloop do |k|
|
|
1399
|
+
if k != SACK_OBJECT && k.hasnt?(:worn) && k.hasnt?(:light); j = k; end
|
|
1400
|
+
end
|
|
1401
|
+
|
|
1402
|
+
unless j.nil?
|
|
1403
|
+
L__M(:Take, 13, j)
|
|
1404
|
+
@keep_silent = true; Insert j, SACK_OBJECT; keep_silent = false
|
|
1405
|
+
return true if !j < SACK_OBJECT
|
|
1406
|
+
end
|
|
1407
|
+
|
|
1408
|
+
return L__M(:Take, 12)
|
|
1358
1409
|
end
|
|
1359
1410
|
|
|
1360
1411
|
# Transfer the item.
|
|
@@ -1574,7 +1625,6 @@ module Verbs
|
|
|
1574
1625
|
# ----------------------------------------------------------------------------
|
|
1575
1626
|
|
|
1576
1627
|
def EnterSub
|
|
1577
|
-
# return go noun if noun.in?(Compass) || noun.has?(:door) # TODO: FIXME
|
|
1578
1628
|
return invoke(:Go, noun) if noun.in?(Compass) || noun.has?(:door)
|
|
1579
1629
|
|
|
1580
1630
|
return L__M(:Enter, 1, noun) if @player.in? noun
|
|
@@ -1610,15 +1660,18 @@ module Verbs
|
|
|
1610
1660
|
end
|
|
1611
1661
|
end
|
|
1612
1662
|
|
|
1663
|
+
return L__M(:Enter, 3, noun) if noun.has?(:container) &&
|
|
1664
|
+
noun.hasnt?(:open) && ImplicitOpen(noun)
|
|
1613
1665
|
move @player, noun
|
|
1666
|
+
|
|
1614
1667
|
return true if AfterRoutines()
|
|
1615
1668
|
return true if @keep_silent
|
|
1616
|
-
Locale(noun)
|
|
1617
1669
|
L__M(:Enter, 5, noun)
|
|
1670
|
+
Locale(noun)
|
|
1618
1671
|
end
|
|
1619
1672
|
|
|
1620
1673
|
def GetOffSub
|
|
1621
|
-
|
|
1674
|
+
return divert_to_action :Exit if parent(@player) == noun
|
|
1622
1675
|
L__M(:GetOff, 1, noun)
|
|
1623
1676
|
end
|
|
1624
1677
|
|
|
@@ -1626,7 +1679,7 @@ module Verbs
|
|
|
1626
1679
|
parent_obj = parent(@player)
|
|
1627
1680
|
return L__M(:Exit, 4, noun) if !noun.nil? && noun != parent_obj
|
|
1628
1681
|
if parent_obj == @location || (@location == thedark && parent_obj == @real_location)
|
|
1629
|
-
if
|
|
1682
|
+
if !@location.&(:out_to).nil? || (@location == thedark && !@real_location.&(:out_to).nil?)
|
|
1630
1683
|
invoke :Go, $out_obj
|
|
1631
1684
|
end
|
|
1632
1685
|
return L__M(:Exit, 1)
|
|
@@ -1634,12 +1687,10 @@ module Verbs
|
|
|
1634
1687
|
return L__M(:Exit, 2, parent_obj) if parent_obj.has?(:container) && parent_obj.hasnt?(:open)
|
|
1635
1688
|
|
|
1636
1689
|
move @player, parent(parent_obj)
|
|
1637
|
-
stand @player
|
|
1638
1690
|
|
|
1639
|
-
return true if AfterRoutines()
|
|
1640
|
-
return true if @keep_silent
|
|
1641
|
-
L__M(:Exit, 3, parent_obj)
|
|
1642
|
-
LookSub(true)
|
|
1691
|
+
return true if AfterRoutines() == true
|
|
1692
|
+
return true if @keep_silent == true
|
|
1693
|
+
L__M(:Exit, 3, parent_obj); LookSub(true)
|
|
1643
1694
|
end
|
|
1644
1695
|
|
|
1645
1696
|
def VagueGoSub; L__M(:VagueGo); end
|
|
@@ -1647,36 +1698,36 @@ module Verbs
|
|
|
1647
1698
|
def GoInSub; go $in_obj; end
|
|
1648
1699
|
|
|
1649
1700
|
def GoSub
|
|
1650
|
-
i = @player.parent
|
|
1651
|
-
return RunTimeError(10) if i.nil?
|
|
1652
|
-
RunRoutines(@player, :before) # Attempt to allow for route recollection TODO: Evaluate if necessary
|
|
1653
|
-
|
|
1654
1701
|
# first, check if any PushDir object is touchable
|
|
1655
1702
|
return if !second.nil? && !second.in?(Compass) && ObjectIsUntouchable(second)
|
|
1656
1703
|
|
|
1657
1704
|
old_loc = @location
|
|
1658
1705
|
movewith = nil
|
|
1706
|
+
i = @player.parent
|
|
1659
1707
|
if (@location != thedark && i != @location) || (@location == thedark && i != @real_location)
|
|
1660
1708
|
j = @location
|
|
1661
1709
|
@location = @real_location if @location == thedark
|
|
1662
|
-
k
|
|
1663
|
-
if k
|
|
1710
|
+
# Set k to 0 here if RunRoutines returns nil (Ruby quirk)
|
|
1711
|
+
k = RunRoutines(i, :before); k ||= 0; @location = j if k != 3
|
|
1712
|
+
if k == 1
|
|
1664
1713
|
movewith = i; i = i.parent
|
|
1665
1714
|
else
|
|
1666
|
-
L__M(:Go,1,i)
|
|
1715
|
+
L__M(:Go,1,i) if k == 0
|
|
1667
1716
|
return true
|
|
1668
1717
|
end
|
|
1669
1718
|
end
|
|
1670
1719
|
|
|
1671
|
-
return L__M(:Go, 6, noun) if noun.door_dir.nil?
|
|
1672
|
-
|
|
1673
1720
|
thedir = noun.door_dir
|
|
1721
|
+
thedir ||= RunRoutines(noun, :door_dir)
|
|
1674
1722
|
|
|
1675
|
-
j = i.&(thedir)
|
|
1676
|
-
|
|
1677
|
-
if
|
|
1723
|
+
j = i.&(thedir); k = ZRegion(j);
|
|
1724
|
+
if k == 3 then print j.to_s; new_line; return false; end
|
|
1725
|
+
if k == 2
|
|
1726
|
+
j = RunRoutines(i,thedir)
|
|
1727
|
+
return true if j == true
|
|
1728
|
+
end
|
|
1678
1729
|
|
|
1679
|
-
|
|
1730
|
+
if k == 0 || j == false
|
|
1680
1731
|
if i.respond_to?(:cant_go) && i.cant_go != CANTGO__TX then PrintOrRun(i, :cant_go)
|
|
1681
1732
|
else L__M(:Go,2)
|
|
1682
1733
|
end
|
|
@@ -1691,31 +1742,29 @@ module Verbs
|
|
|
1691
1742
|
return L__M(:Go, 5, j)
|
|
1692
1743
|
end
|
|
1693
1744
|
k = RunRoutines(j,:door_to)
|
|
1694
|
-
|
|
1695
|
-
if k ==
|
|
1745
|
+
return L__M(:Go, 6, j) if k == 0
|
|
1746
|
+
return true if k == 1
|
|
1696
1747
|
j = k
|
|
1697
1748
|
end
|
|
1698
|
-
|
|
1699
|
-
orig_loc = @real_location
|
|
1700
|
-
|
|
1701
1749
|
if movewith.nil? then move @player, j else move movewith, j end
|
|
1702
1750
|
|
|
1703
|
-
|
|
1751
|
+
orig_loc = @real_location
|
|
1704
1752
|
|
|
1705
1753
|
# Special addition for ensuring location is never forgotten after player logout.
|
|
1706
|
-
@player.link :location, j
|
|
1707
|
-
@player.descendants.each do |o|
|
|
1708
|
-
|
|
1709
|
-
end
|
|
1710
|
-
movewith.link :location, j if !movewith.nil? && movewith.linked?(:location)
|
|
1754
|
+
# @player.link :location, j
|
|
1755
|
+
# @player.descendants.each do |o|
|
|
1756
|
+
# o.link :location, j if o.linked? :location
|
|
1757
|
+
# end
|
|
1758
|
+
# movewith.link :location, j if !movewith.nil? && movewith.linked?(:location)
|
|
1711
1759
|
|
|
1712
1760
|
@location = j; MoveFloatingObjects();
|
|
1713
|
-
|
|
1761
|
+
df = OffersLight(j);
|
|
1762
|
+
if df != false
|
|
1714
1763
|
@location = j; @real_location = j; @lightflag = true
|
|
1715
1764
|
else
|
|
1716
1765
|
if old_loc == thedark
|
|
1717
1766
|
DarkToDark()
|
|
1718
|
-
return true if @deadflag
|
|
1767
|
+
return true if @deadflag != 0
|
|
1719
1768
|
end
|
|
1720
1769
|
@real_location = j
|
|
1721
1770
|
@location = thedark; @lightflag = false
|
|
@@ -1726,13 +1775,6 @@ module Verbs
|
|
|
1726
1775
|
LookSub(true)
|
|
1727
1776
|
end
|
|
1728
1777
|
|
|
1729
|
-
def ArrivalDir(dest, source = @real_location)
|
|
1730
|
-
link = dest.links.find { |l| l.to == source }
|
|
1731
|
-
return nil if link.nil?
|
|
1732
|
-
# TODO: Doesn't work for door objects FIXME
|
|
1733
|
-
direc = Compass.find { |dir| dir.door_dir == link.name.to_sym }
|
|
1734
|
-
end
|
|
1735
|
-
|
|
1736
1778
|
# ----------------------------------------------------------------------------
|
|
1737
1779
|
# Describing the world. SayWhatsOn(object) does just that (producing
|
|
1738
1780
|
# no text if nothing except possibly "scenery" and "concealed" items are).
|
|
@@ -1773,18 +1815,16 @@ module Verbs
|
|
|
1773
1815
|
PronounNotice(obj)
|
|
1774
1816
|
end
|
|
1775
1817
|
|
|
1776
|
-
give obj, :workflag
|
|
1777
|
-
k += 1
|
|
1778
|
-
property = :initial; f2 = 0
|
|
1779
|
-
|
|
1780
1818
|
if obj.hasnt? :scenery
|
|
1781
|
-
|
|
1819
|
+
give obj, :workflag; k += 1
|
|
1820
|
+
property = :initial; f2 = 0
|
|
1821
|
+
if (obj.has?(:door) || obj.has?(:container)) && obj.has?(:open) && !obj.&(:when_open).nil?
|
|
1782
1822
|
property = :when_open; f2 = 1
|
|
1783
|
-
elsif (obj.has?(:door) || obj.has?(:container)) && obj.hasnt?(:open) && obj
|
|
1823
|
+
elsif (obj.has?(:door) || obj.has?(:container)) && obj.hasnt?(:open) && !obj.&(:when_closed).nil?
|
|
1784
1824
|
property = :when_closed; f2 = 1
|
|
1785
|
-
elsif obj.has?(:switchable) && obj.has?(:on) && obj
|
|
1825
|
+
elsif obj.has?(:switchable) && obj.has?(:on) && !obj.&(:when_on).nil?
|
|
1786
1826
|
property = :when_on; f2 = 1
|
|
1787
|
-
elsif obj.has?(:switchable) && obj.hasnt?(:on) && obj
|
|
1827
|
+
elsif obj.has?(:switchable) && obj.hasnt?(:on) && !obj.&(:when_off).nil?
|
|
1788
1828
|
property = :when_off; f2 = 1
|
|
1789
1829
|
end
|
|
1790
1830
|
|
|
@@ -1838,13 +1878,13 @@ module Verbs
|
|
|
1838
1878
|
def LMode3Sub; @lookmode = 3; print Story; L__M(:LMode3); end # Superbrief
|
|
1839
1879
|
|
|
1840
1880
|
def ScoreArrival
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1881
|
+
if @location.hasnt?(:visited)
|
|
1882
|
+
give @location, :visited
|
|
1883
|
+
if @location.has?(:scored)
|
|
1884
|
+
@score = @score + ROOM_SCORE
|
|
1885
|
+
@places_score = @places_score + ROOM_SCORE
|
|
1886
|
+
end
|
|
1887
|
+
end
|
|
1848
1888
|
end
|
|
1849
1889
|
|
|
1850
1890
|
def NoteArrival
|
|
@@ -1875,7 +1915,8 @@ module Verbs
|
|
|
1875
1915
|
allow_abbrev = false if allow_abbrev.nil?
|
|
1876
1916
|
return RunTimeError(10) if parent(@player).nil?
|
|
1877
1917
|
|
|
1878
|
-
|
|
1918
|
+
df = OffersLight(@real_location)
|
|
1919
|
+
if df
|
|
1879
1920
|
@location = @real_location; @lightflag = true
|
|
1880
1921
|
else
|
|
1881
1922
|
@location = thedark; @lightflag = false
|
|
@@ -1927,7 +1968,6 @@ module Verbs
|
|
|
1927
1968
|
end
|
|
1928
1969
|
|
|
1929
1970
|
L__M(:Look, 3, @player) if @print_player_flag
|
|
1930
|
-
L__M(:Look, 9, @player) if @player.respond_to?(:builder?) && @player.builder?
|
|
1931
1971
|
new_line
|
|
1932
1972
|
|
|
1933
1973
|
# TODO: FIXME
|
|
@@ -1939,7 +1979,7 @@ module Verbs
|
|
|
1939
1979
|
# The room description (if visible)
|
|
1940
1980
|
|
|
1941
1981
|
if @lookmode < 3 && @visibility_ceiling == @location
|
|
1942
|
-
if allow_abbrev == false || @lookmode == 2 ||
|
|
1982
|
+
if allow_abbrev == false || @lookmode == 2 || @location.hasnt?(:visited)
|
|
1943
1983
|
if @location.respond_to? :describe
|
|
1944
1984
|
RunRoutines(@location, :describe)
|
|
1945
1985
|
else
|
|
@@ -1984,7 +2024,7 @@ module Verbs
|
|
|
1984
2024
|
end
|
|
1985
2025
|
PrintOrRun(i, :inside_description)
|
|
1986
2026
|
end
|
|
1987
|
-
nl_flag = true if Locale(i)
|
|
2027
|
+
nl_flag = true if Locale(i) != 0
|
|
1988
2028
|
j -= 1
|
|
1989
2029
|
end
|
|
1990
2030
|
end
|
|
@@ -2399,7 +2439,6 @@ module Verbs
|
|
|
2399
2439
|
end
|
|
2400
2440
|
|
|
2401
2441
|
def XTreeSub
|
|
2402
|
-
raise Parser::VerbUnrecognized unless @player.builder?
|
|
2403
2442
|
return XObj(noun, 1) unless noun.nil?
|
|
2404
2443
|
objectloop { |i|
|
|
2405
2444
|
XObj(i) if i.object? && parent(i).nil?
|
|
@@ -2407,7 +2446,6 @@ module Verbs
|
|
|
2407
2446
|
end
|
|
2408
2447
|
|
|
2409
2448
|
def GotoSub
|
|
2410
|
-
raise Parser::VerbUnrecognized unless @player.builder?
|
|
2411
2449
|
log.debug "<Goto noun> #=> #{noun}"
|
|
2412
2450
|
if !noun.is_a?(Inform::Object)
|
|
2413
2451
|
"[Not a safe place.]"
|
|
@@ -2419,7 +2457,6 @@ module Verbs
|
|
|
2419
2457
|
end
|
|
2420
2458
|
|
|
2421
2459
|
def GonearSub
|
|
2422
|
-
raise Parser::VerbUnrecognized unless @player.builder?
|
|
2423
2460
|
x = noun
|
|
2424
2461
|
loop do
|
|
2425
2462
|
break if parent(x).nil?
|
|
@@ -2431,7 +2468,6 @@ module Verbs
|
|
|
2431
2468
|
def Print_ScL(obj); println (@x_scope_count += 1) + ": " + a(obj) + " (" + obj.id + ")"; end
|
|
2432
2469
|
|
|
2433
2470
|
def ScopeSub
|
|
2434
|
-
raise Parser::VerbUnrecognized unless @player.admin?
|
|
2435
2471
|
@x_scope_count = 0
|
|
2436
2472
|
LoopOverScope(method(:Print_ScL), noun)
|
|
2437
2473
|
"Nothing is in scope." if @x_scope_count == 0
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: inform6lib
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nels Nelson
|
|
@@ -43,14 +43,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - ">="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version:
|
|
46
|
+
version: 4.0.0
|
|
47
47
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
48
|
requirements:
|
|
49
49
|
- - ">="
|
|
50
50
|
- !ruby/object:Gem::Version
|
|
51
51
|
version: '0'
|
|
52
52
|
requirements: []
|
|
53
|
-
rubygems_version:
|
|
53
|
+
rubygems_version: 4.0.16
|
|
54
54
|
specification_version: 4
|
|
55
55
|
summary: The Inform6 Library Ruby Port is a faithful port of the Inform6 interactive
|
|
56
56
|
fiction standard library in Ruby.
|