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.
@@ -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,p2) **\n** "
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(self.method(:RMaybe))
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(self.method(:SMaybe))
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(self.method(:Vmaybe))
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
- # See: metaverbs.rb
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 unless i
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?(j)
1264
+ return j if j.add_to_scope.include?(i)
1208
1265
  end
1209
- return false
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
- loop do
1231
- break unless ancestor && (i = ObjectScopedBySomething(ancestor)).nil?
1287
+ i = nil
1288
+ while !ancestor.nil? && (i = ObjectScopedBySomething(ancestor)) == false
1232
1289
  ancestor = parent(ancestor)
1233
1290
  end
1234
- unless i.nil?
1235
- return false
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
- # First, a barrier between the persona and the ancestor. The persona
1242
- # can only be in a sequence of enterable objects, and only closed
1243
- # containers form a barrier.
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
- if persona != ancestor
1246
- i = parent(persona)
1247
- loop do
1248
- break unless i != ancestor
1249
- if i.has?(:container) && i.hasnt?(:open)
1250
- return true if flag1
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
- # Second, a barrier between the item and the ancestor. The item can
1258
- # be carried by someone, part of a piece of machinery, in or on top
1259
- # of something and so on.
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
- if item != ancestor
1262
- i = parent(item)
1263
- loop do
1264
- break unless !i.nil? && i != ancestor
1265
- if flag2 && i.hasnt?(:container, :supporter) # && i.hasnt?(:supporter)
1266
- if i.has?(:animate)
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, 8, item)
1322
+ return L__M(:Take, 6, i)
1276
1323
  end
1277
- if !i.nil? && i.has?(:container) && i.hasnt?(:open)
1324
+ if i.has?(:transparent)
1278
1325
  return true if flag1
1279
- return L__M(:Take, 9, i)
1326
+ return L__M(:Take, 7, i)
1280
1327
  end
1281
- i = parent(i)
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 println L__M(:Take, 11, item); return true; end
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? :worn }
1338
-
1339
- if ValueOrRun(@player, :capacity) < k
1340
- # TODO: FIXME
1341
- # return L__M(:Take, 12) if SACK_OBJECT.nil?
1342
- #
1343
- # if SACK_OBJECT.parent != @player
1344
- # return L__M(:Take, 12)
1345
- # end
1346
- # j = nil
1347
- # @player.objectloop { |k|
1348
- # if k != SACK_OBJECT && k.hasnt?(:worn) && k.hasnt?(:light); j = k; end
1349
- # }
1350
- #
1351
- # if !j.nil?
1352
- # L__M(:Take, 13, j)
1353
- # @keep_silent = true; Insert j, SACK_OBJECT; keep_silent = false
1354
- # return true if !j < SACK_OBJECT
1355
- # end
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
- _invoke :Exit if parent(@player) == noun
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 @location.&(:out_to) || (@location == thedark && @real_location.&(:out_to))
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 = RunRoutines(i, :before); @location = j if k != 3
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) unless k
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
- return true if j == true
1677
- if j && j.is_a?(String) then print j.to_s; new_line; return false; end
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
- unless j
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
- if k == false then return L__M(:Go, 6, j) end
1695
- if k == true then return true end
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
- light_adjusted @player
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
- o.link :location, j if o.linked? :location
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
- if OffersLight(j)
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
- if (obj.has?(:door) || obj.has?(:container)) && obj.has?(:open) && obj.respond_to?(:when_open)
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.respond_to?(:when_closed)
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.respond_to?(:when_on)
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.respond_to?(:when_off)
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
- # unless @player.visited.include?(@location)
1842
- # @player.visited.push @location
1843
- # if @location.has? :scored
1844
- # score = score + ROOM_SCORE
1845
- # places_score = places_score + ROOM_SCORE
1846
- # end
1847
- # end
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
- if OffersLight(@real_location)
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 || !@player.visited.include?(@location)
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.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: 2.6.8
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: 3.7.2
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.