fixes outer wall infloop, improves error handling, fixes puppy placement

This commit is contained in:
duncathan 2019-03-21 04:14:56 -06:00
parent a3431e2fc6
commit 770fd79308
7 changed files with 52 additions and 55 deletions

View file

@ -1 +1 @@
=:S``i`=:l}~qls}<7D>``flvqy````lu~t=:S``ia=:l}~qls}<7D>``flvqy```alu~t=:S``ib=:l}~qls}<7D>``flvqy```blu~t=:S``ic=:l}~qls}<7D>``flvqy```clu~t=:S``id=:l}~qls}<7D>``flvqy```dlu~t=:S``ii=:l{u炼}~qls}<7D>``f=:lq~<7E>`a``j```aj````lvqy```d=:ls~<7E>`c`aj`aabj```bl𩺰y`a``=:lq~<7E>`a``j````j````=:l}缆````lt~<7E>`c`al<61>slu~t=:S`a``=:l{u炼}<7D>t𡼏<74><EFBFBD>䣳P<E4A3B3>P<EFBFBD>P<EFBFBD>Pq═坾㏄<E59DBE>=:<3A>奴𦶧l轮z````ls|=:ls~<7E>`c``j`aaaj```blx}sl𩺰y``f`lq~<7E>`a``j```aj````=:l𩺰y`a``lvq```dl<64>q```aj``iij```ej```h=:=:=:=:S`a`a=:l<><6C>l<EFBFBD><6C>`aalt~<7E>`a`alvq````l<>q``bij``i`j``ahj```i=:=:S`a`b=:l<><6C>l<EFBFBD><6C>`aalt~<7E>`a`alvq````l<>q``caj``i`j``ahj```i=:S`a`c=:l<><6C>l<EFBFBD><6C>`aalt~<7E>`a`clvq```dlv|z`eicj`a`el<65>q``ccj``idj``abj``a`=:S`a`d=:l<><6C>lvq```dl<64>q``cdj``idj```ej``ab=:S`a`e=:l<><6C>l<EFBFBD>q``cfj``idj``abj``a`=:S`a`f=:l<><6C>lvq```dl<64>q```ij``idj```cj``ei=:S`ae`=:l<><6C>l}<7D>l<EFBFBD><6C>=:PPPPPPPPPPPPPPPz<50><7A>WΝx䰻<78>l~tlu~t=:S`aea=:l<><6C>l}<7D>l<EFBFBD><6C>=:PPPPP<50>腼P<E885BC><EFBFBD>P<EFBFBD><50>P<EFBFBD><50>P<EFBFBD><EFBFBD><EFBFBD>l~tlu~t=:S`b``=:l{u炼<75>z```gj`b`al<61>[```glu<6C>`b`b=:S`b`a=:l<><6C>u<EFBFBD>`b`b=:S`b`b=:l{u炼}缆```blt~<7E>`b``lv}<7D>v~`b`aj``afl𩺰y`a``l<><6C>=:l}<7D>yP<79>𠠬r<F0A0A0AC><72>𢰦<EFBFBD><F0A2B0A6><EFBFBD>P<EFBFBD>=:<3A>Ν𤣳予^^^ls}<7D>```l~tls|=:ls~<7E>`b`fj``fgj````l𩺰y``a`l𩺰y``i`=:lq~<7E>`b`fj``acj````=:l}<7D>lvqs``af<61><66><EFBFBD>P<EFBFBD><EFBFBD>P<EFBFBD>腼ol~tls|lvqs````=:l<>q``e`l𩺰y``b`=:l}<7D>=:oQl𩺰y``e`l~tls|<7C>vqs``ae~髿P<E9ABBF>佅驣Ν<E9A9A3>P<EFBFBD><50>=:<3A><EFBFBD>P<EFBFBD>P<EFBFBD><EFBFBD><E58C95>𧊀<EFBFBD>^l~tls|lq~<7E>`b`fj``b`j````=:lrq``b`ls}<7D>``glr<6C>````=:l<><6C>`ba`j``a`l<><6C>`ba`j``aalu~t=:S`b`a=:S`b`b=:S`b`c=:S`b`d=:S`b`e=:S`b`f=:S`ba`=:l{u炼𩺰y`be`ls}<7D>```=:l<><6C>}<7D>ls}<7D>`ae=:t<><74><EFBFBD><E7A182><7F>Ql𩺰y`af`l~tls|<7C><>P<EFBFBD><50><EFBFBD>P<EFBFBD>𠠬<EFBFBD>𢶠<EFBFBD><F0A2B6A0>Ν<EFBFBD><CE9D>=:<3A><>P<EFBFBD>𣶸<EFBFBD>^l~tls|=:lv}``afls}<7D>``f=:l<><6C>`ba`j``a`l<><6C>`ba`j``aalu~t=:=:S0bb`=:lv|z`bgbj`bbalu~t=:S`bba=:l{u炼t~<7E>`bb`l}缆````l𩺰y``e`=:lq~<7E>`b`bj``a`j````l𩺰y``dd=:lq~<7E>`b`cj``a`j```bl𩺰y`abh=:lt~<7E>`b`blt~<7E>`b`clv|[`bgclu~t=:S`bc`=:lv|z`fb`j`bcc=:lv|z`bghj`bcb=:l<><6C>l}<7D>|<7C><>𣻸^^l~tlu~t=:S`bca=:l𩺰y``e`=:lq~<7E>`b`dj``a`j````l𩺰y```h=:lq~<7E>`b`ej``a`j```bl𩺰y`abh=:lt~<7E>`b`dlt~<7E>`b`elu<6C>`bcb=:S`bcb=:l<><6C>lvq```dl<64>q``cej`e``j```ej```i=:S`bcc=:l<><6C>lvq```dl<64>q``cej``idj```ej```i=:S`c``=:S`c`a=:S`ca`=:S`cb`=:l{u炼t~<7E>`cb`ls}<7D>```l}缆````l𩺰y``e`=:lq~<7E>`ca`j```aj```bl}<7D>lvqs``be=:QQl~tls|=:lq~<7E>`ca`j```cj````l𩺰y`ae`=:lt~<7E>`ca`l<><6C>u~t=:S`cd`=:lv|z`eicj`cdalu~t=:S`cda=:lv|z`bgdj`cdblu~t=:S`cdb=:lv|[`bh`lt~<7E>`cd`lu~t=:S`ce`=:l<><6C>l}<7D>qP<71><50><EFBFBD>Ν<EFBFBD><CE9D>P<EFBFBD><50><EFBFBD>P<EFBFBD>P膄^^^l~tlu~t=:S`cf`=:l<><6C>l}<7D>l<EFBFBD><6C>佅𠠬<E4BD85>P<EFBFBD>𠠬<EFBFBD><F0A0A0AC>P<EFBFBD><50>\P<>佅𠠬𢅛<F0A0A0AC>=:𩡗𤟠<F0A9A197>佅P<E4BD85>P<EFBFBD><50>袇P<E8A287>佅𠠬<E4BD85>𠠬<EFBFBD><F0A0A0AC>=:<3A>ㄒP<E38492><50><EFBFBD><EFBFBD>𠠬<EFBFBD><F0A0A0AC>γl~tls|<7C><><EFBFBD>P<EFBFBD>Ν𢅛𠠬<F0A2859B><F0A0A0AC><EFBFBD>P<EFBFBD><50>=:𩡗ㄘ<F0A9A197><E38498>^l~tlu~t=:S`d`a=:lt~<7E>`d`alv|[`bgelu<6C>`dba=:S`d`b=:l<><6C>l}<7D>l<EFBFBD><6C>a`el<65><6C><EFBFBD>Ql~tlt~<7E>`d`blv|[`bgflu<6C>``b`=:S`daa=:lt~<7E>`daalu~t=:S`dab=:l<><6C>l<EFBFBD><6C>`bbls~<7E>`dabj``baj````=:lv|[`bgilu<6C>`dbc=:S`dba=:lu<6C>``b`=:S`dbb=:lu<6C>``b`=:S`dbc=:lu<6C>``b`=:S`e``=:l<><6C>lt~<7E>`e``l<><6C>`bblu<6C>`e`b=:S`e`a=:l<><6C>lt~<7E>`e`al<61><6C>`bblu<6C>`e`c=:S`e`b=:lu<6C>``ad=:S`e`c=:lu<6C>``ad=:S`f``=:S`f`a=:l{u炼}~qls}<7D>``f=:lq~<7E>`fa`j```aj````lvqy```d=:ls~<7E>`f`aj`aabj````l𩺰y`a``=:lq~<7E>`fa`j````j````=:l}缆````lt~<7E>`f`al<61>slu~t=:S`fa`=:l{u炼v|z`bdcj`faa=:l{u炼}<7D>qP<71><50><EFBFBD>═佅^l~tls|<7C><EFBFBD>Ν<EFBFBD>P<EFBFBD><50>兣l~tlu~t=:S`faa=:ls~<7E>`f``j`aaaj```blx}sl𩺰y``f`lq~<7E>`fa`j```aj````=:l𩺰y`a``lvq```dl<64>q```ij`f`aj``ahj``fd=:Sab``=:l{u炼q~<7E>ab``j``b`j```a=:lv~ab``j``aflvqy```a=:l𩺰y`a``lvq```al<61>q``cijab``j``faj``ab
=:S``i`=:l}~qls}<7D>``flvqy````lu~t=:S``ia=:l}~qls}<7D>``flvqy```alu~t=:S``ib=:l}~qls}<7D>``flvqy```blu~t=:S``ic=:l}~qls}<7D>``flvqy```clu~t=:S``id=:l}~qls}<7D>``flvqy```dlu~t=:S``ii=:l{u炼}~qls}<7D>``f=:lq~<7E>`a``j```aj````lvqy```d=:ls~<7E>`c`aj`aabj```bl𩺰y`a``=:lq~<7E>`a``j````j````=:l}缆````lt~<7E>`c`al<61>slu~t=:S`a``=:l{u炼}<7D>t𡼏<74><EFBFBD>䣳P<E4A3B3>P<EFBFBD>P<EFBFBD>Pq═坾㏄<E59DBE>=:<3A>奴𦶧l轮z````ls|=:ls~<7E>`c``j`aaaj```blx}sl𩺰y``f`lq~<7E>`a``j```aj````=:l𩺰y`a``lvq```dl<64>q```aj``iij```ej```h=:=:=:=:S`a`a=:l<><6C>l<EFBFBD><6C>`aalt~<7E>`a`alvq````l<>q``bij``i`j``ahj```i=:=:S`a`b=:l<><6C>l<EFBFBD><6C>`aalt~<7E>`a`alvq````l<>q``caj``i`j``ahj```i=:S`a`c=:l<><6C>l<EFBFBD><6C>`aalt~<7E>`a`clvq```dlv|z`eicj`a`el<65>q``ccj``idj``abj``a`=:S`a`d=:l<><6C>lvq```dl<64>q``cdj``idj```ej``ab=:S`a`e=:l<><6C>l<EFBFBD>q``cfj``idj``abj``a`=:S`a`f=:l<><6C>lvq```dl<64>q```ij``idj```cj``ei=:S`ae`=:l<><6C>l}<7D>l<EFBFBD><6C>=:PPPPPPPPPPPPPPPz<50><7A>WΝx䰻<78>l~tlu~t=:S`aea=:l<><6C>l}<7D>l<EFBFBD><6C>=:PPPPP<50>腼P<E885BC><EFBFBD>P<EFBFBD><50>P<EFBFBD><50>P<EFBFBD><EFBFBD><EFBFBD>l~tlu~t=:S`b``=:l{u炼<75>z```gj`b`al<61>[```glu<6C>`b`b=:S`b`a=:l<><6C>u<EFBFBD>`b`b=:S`b`b=:l{u炼}缆```blt~<7E>`b``lv}<7D>v~`b`aj``afl𩺰y`a``l<><6C>=:l}<7D>yP<79>𠠬r<F0A0A0AC><72>𢰦<EFBFBD><F0A2B0A6><EFBFBD>P<EFBFBD>=:<3A>Ν𤣳予^^^ls}<7D>```l~tls|=:ls~<7E>`b`fj``fgj````l𩺰y``a`l𩺰y``i`=:lq~<7E>`b`fj``acj````=:l}<7D>lvqs``af<61><66><EFBFBD>P<EFBFBD><EFBFBD>P<EFBFBD>腼ol~tls|lvqs````=:l<>q``e`l𩺰y``b`=:l}<7D>=:oQl𩺰y``e`l~tls|<7C>vqs``ae~髿P<E9ABBF>佅驣Ν<E9A9A3>P<EFBFBD><50>=:<3A><EFBFBD>P<EFBFBD>P<EFBFBD><EFBFBD><E58C95>𧊀<EFBFBD>^l~tls|lq~<7E>`b`fj``b`j````=:lrq``b`ls}<7D>``glr<6C>````=:l<><6C>`ba`j``a`l<><6C>`ba`j``aalu~t=:S`b`a=:S`b`b=:S`b`c=:S`b`d=:S`b`e=:S`b`f=:S`ba`=:l{u炼𩺰y`be`ls}<7D>```=:l<><6C>}<7D>ls}<7D>`ae=:t<><74><EFBFBD><E7A182><7F>Ql𩺰y`af`l~tls|<7C><>P<EFBFBD><50><EFBFBD>P<EFBFBD>𠠬<EFBFBD>𢶠<EFBFBD><F0A2B6A0>Ν<EFBFBD><CE9D>=:<3A><>P<EFBFBD>𣶸<EFBFBD>^l~tls|=:lv}``afls}<7D>``f=:l<><6C>`ba`j``a`l<><6C>`ba`j``aalu~t=:=:S0bb`=:lv|z`bgbj`bbalu~t=:S`bba=:l{u炼t~<7E>`bb`l}缆````l𩺰y``e`=:lq~<7E>`b`bj``a`j````l𩺰y``dd=:lq~<7E>`b`cj``a`j```bl𩺰y`abh=:lt~<7E>`b`blt~<7E>`b`clv|[`bgclu~t=:S`bc`=:lv|z`fb`j`bcc=:lv|z`bghj`bcb=:l<><6C>l}<7D>|<7C><>𣻸^^l~tlu~t=:S`bca=:l𩺰y``e`=:lq~<7E>`b`dj``a`j````l𩺰y```h=:lq~<7E>`b`ej``a`j```bl𩺰y`abh=:lt~<7E>`b`dlt~<7E>`b`elu<6C>`bcb=:S`bcb=:l<><6C>lvq```dl<64>q``cej`e``j```ej```i=:S`bcc=:l<><6C>lvq```dl<64>q``cej``idj```ej```i=:S`c``=:S`c`a=:S`ca`=:S`cb`=:l{u炼t~<7E>`cb`ls}<7D>```l}缆````l𩺰y``e`=:lq~<7E>`ca`j```aj```bl}<7D>lvqs``be=:QQl~tls|=:lq~<7E>`ca`j```cj````l𩺰y`ae`=:lt~<7E>`ca`l<><6C>u~t=:S`cd`=:lv|z`eicj`cdalu~t=:S`cda=:lv|z`bgdj`cdblu~t=:S`cdb=:lv|[`bh`lt~<7E>`cd`lu~t=:S`ce`=:l<><6C>l}<7D>qP<71><50><EFBFBD>Ν<EFBFBD><CE9D>P<EFBFBD><50><EFBFBD>P<EFBFBD>P膄^^^l~tlu~t=:S`cf`=:l<><6C>l}<7D>l<EFBFBD><6C>佅𠠬<E4BD85>P<EFBFBD>𠠬<EFBFBD><F0A0A0AC>P<EFBFBD><50>\P<>佅𠠬𢅛<F0A0A0AC>=:𩡗𤟠<F0A9A197>佅P<E4BD85>P<EFBFBD><50>袇P<E8A287>佅𠠬<E4BD85>𠠬<EFBFBD><F0A0A0AC>=:<3A>ㄒP<E38492><50><EFBFBD><EFBFBD>𠠬<EFBFBD><F0A0A0AC>γl~tls|<7C><><EFBFBD>P<EFBFBD>Ν𢅛𠠬<F0A2859B><F0A0A0AC><EFBFBD>P<EFBFBD><50>=:𩡗ㄘ<F0A9A197><E38498>^l~tlu~t=:S`d`a=:lt~<7E>`d`alv|[`bgelu<6C>`dba=:S`d`b=:l<><6C>l}<7D>l<EFBFBD><6C>a`el<65><6C><EFBFBD>Ql~tlt~<7E>`d`blv|[`bgflu<6C>`dbb=:S`daa=:lt~<7E>`daalu~t=:S`dab=:l<><6C>l<EFBFBD><6C>`bbls~<7E>`dabj``baj````=:lv|[`bgilu<6C>`dbc=:S`dba=:lu<6C>``fd=:S`dbb=:lu<6C>``fd=:S`dbc=:lu<6C>``fd=:S`e``=:l<><6C>lt~<7E>`e``l<><6C>`bblu<6C>`e`b=:S`e`a=:l<><6C>lt~<7E>`e`al<61><6C>`bblu<6C>`e`c=:S`e`b=:lu<6C>``ad=:S`e`c=:lu<6C>``ad=:S`f``=:S`f`a=:l{u炼}~qls}<7D>``f=:lq~<7E>`fa`j```aj````lvqy```d=:ls~<7E>`f`aj`aabj````l𩺰y`a``=:lq~<7E>`fa`j````j````=:l}缆````lt~<7E>`f`al<61>slu~t=:S`fa`=:l{u炼v|z`bdcj`faa=:l{u炼}<7D>qP<71><50><EFBFBD>═佅^l~tls|<7C><EFBFBD>Ν<EFBFBD>P<EFBFBD><50>兣l~tlu~t=:S`faa=:ls~<7E>`f``j`aaaj```blx}sl𩺰y``f`lq~<7E>`fa`j```aj````=:l𩺰y`a``lvq```dl<64>q```ij`f`aj``ahj``fd=:Sab``=:l{u炼q~<7E>ab``j``b`j```a=:lv~ab``j``aflvqy```a=:l𩺰y`a``lvq```al<61>q``cijab``j``faj``ab

View file

@ -147,7 +147,7 @@ a symbol.<NOD<END
#0401
<DNP0401<FL+0275<EVE0421
#0402
<PRI<MSG<SOU0105<TURArf!<NOD<DNP0402<FL+0276<EVE0020
<PRI<MSG<SOU0105<TURArf!<NOD<DNP0402<FL+0276<EVE0422
#0411
<DNP0411<END
#0412
@ -155,11 +155,11 @@ a symbol.<NOD<END
<FL+0279<EVE0423
#0421
<EVE0020
<EVE0064
#0422
<EVE0020
<EVE0064
#0423
<EVE0020
<EVE0064
#0500

View file

@ -42,12 +42,12 @@ local function _itemData()
-- WEAPONS --
-------------
polarStar1 = {
name = "Polar Star",
name = "Polar Star 1",
script = "<EVE0002",
attributes = {"weaponBoss", "weaponSN", "polarStar", "mandatory"}
},
polarStar2 = {
name = "Polar Star",
name = "Polar Star 2",
script = "<EVE0002",
attributes = {"weaponBoss", "weaponSN", "polarStar", "mandatory"}
},
@ -211,12 +211,12 @@ local function _itemData()
attributes = {"mandatory"}
},
booster1 = {
name = "Booster",
name = "Booster 1",
script = "<EVE0068",
attributes = {"flight", "booster", "mandatory"}
},
booster2 = {
name = "Booster",
name = "Booster 2",
script = "<EVE0068",
attributes = {"flight", "booster", "mandatory"}
},

View file

@ -17,7 +17,8 @@ end
function C:canAccess(items)
if not self.region:canAccess(items) then return false end
return self.requirements == nil or self.requirements(self, items)
if self.requirements == nil then return true end
return self.requirements(self, items)
end
function C:hasItem()
@ -31,7 +32,10 @@ end
function C:writeItem(tscFiles, item)
item = item or self.item
assert(self.item ~= nil, self.name)
if item == nil then
logError("No item at " .. self.name)
return
end
if self.map == nil or self.event == nil or item.script == nil then return end
tscFiles[self.map]:placeItemAtLocation(item, self)
end

View file

@ -7,7 +7,8 @@ function C:new(worldGraph, name)
end
function C:canAccess(items)
return self.requirements == nil or self.requirements(self, items)
if self.requirements == nil then return true end
return self.requirements(self, items)
end
function C:getLocation(key)

View file

@ -2,11 +2,11 @@ local Region = require 'database.region'
local Location = require 'database.location'
function _has(items, attribute)
return _count(items, attribute) > 0
return _count(items, attribute, 1)
end
function _count(items, attribute)
return #_.filter(items, function(k,v) return _.contains(v.attributes, attribute) end)
function _count(items, attribute, num)
return #_.filter(items, function(k,v) return _.contains(v.attributes, attribute) end) >= num
end
local firstCave = Region:extend()
@ -38,13 +38,12 @@ function mimigaVillage:new(worldGraph)
}
self.requirements = function(self, items)
if _has(items, "weaponSN") and self.world.regions.firstCave:canAccess(items) then return true end
return false
return _has(items, "weaponSN")
end
self.locations.assembly.requirements = function(self, items) return _has(items, "juice") end
self.locations.mrLittle.requirements = function(self, items)
return _has(items, "flight") and _has(items, "locket") and self.region.world.regions.outerWall.locations.littleHouse:canAccess(items)
return _has(items, "locket") and self.region.world.regions.outerWall.locations.littleHouse:canAccess(items)
end
self.locations.grave.requirements = function(self, items) return _has(items, "locket") end
self.locations.mushroomChest.requirements = function(self, items)
@ -72,7 +71,7 @@ function arthur:new(worldGraph)
}
self.requirements = function(self, items)
if _has(items, "arthurKey") and self.world.regions.mimigaVillage:canAccess(items) then return true end
if _has(items, "arthurKey") and _has(items, "weaponSN") then return true end
return false
end
@ -109,8 +108,7 @@ function grasstownWest:new(worldGraph)
}
self.requirements = function(self, items)
if self.world.regions.arthur:canAccess(items) then return true end
return false
return self.world.regions.arthur:canAccess(items)
end
self.locations.santa.requirements = function(self, items) return _has(items, "santaKey") end
@ -173,8 +171,7 @@ function upperSandZone:new(worldGraph)
}
self.requirements = function(self, items)
if _has(items, "weaponSN") and self.world.regions.arthur:canAccess(items) then return true end
return false
return self.world.regions.arthur:canAccess(items)
end
self.locations.curly.requirements = function(self, items) return _has(items, "polarStar") end
@ -187,7 +184,7 @@ local lowerSandZone = Region:extend()
function lowerSandZone:new(worldGraph)
lowerSandZone.super.new(self, worldGraph, "Sand Zone (Lower)")
self.locations = {
chestPup = Location("Puppy (Chest)", "Sand", "0421", self),
chestPup = Location("Puppy (Chest)", "Sand", "0423", self),
darkPup = Location("Puppy (Dark)", "Dark", "0401", self),
runPup = Location("Puppy (Run)", "Sand", "0422", self),
sleepyPup = Location("Puppy (Sleep)", "Sand", "0421", self),
@ -198,16 +195,14 @@ function lowerSandZone:new(worldGraph)
}
self.requirements = function(self, items)
if not self.world.regions.arthur:canAccess(items) then return false end
if _has(items, "eventOmega") and self.world.regions.upperSandZone:canAccess(items) then return true end
return false
return _has(items, "eventOmega") and self.world.regions.upperSandZone:canAccess(items)
end
self.locations.jenka.requirements = function(self, items) return _count(items, "puppy") == 5 end
self.locations.jenka.requirements = function(self, items) return _count(items, "puppy", 5) end
self.locations.king.requirements = function(self, items) return _has(items, "eventToroko") end
self.locations.eventToroko.requirements = function(self, items)
return _count(items, "puppy") == 5 and _has(items, "weaponBoss")
return _count(items, "puppy", 5) and _has(items, "weaponBoss")
end
self.locations.eventToroko:setItem(self.world.items:getByKey("eventToroko"))
end
@ -235,7 +230,7 @@ function labyrinthW:new(worldGraph)
self.locations.mazeCapsule.requirements = function(self, items) return _has(items, "weapon") end
self.locations.turboChaba.requirements = function(self, items) return _has(items, "machineGun") end
self.locations.snakeChaba.requirements = function(self, items) return _has(items, "fireball") end
self.locations.whimChaba.requirements = function(self, items) return _count(items, "polarStar") == 2 end
self.locations.whimChaba.requirements = function(self, items) return _count(items, "polarStar", 2) end
self.locations.campChest.requirements = function(self, items) return _has(items, "flight") end
self.locations.puuBlack.requirements = function(self, items) return _has(items, "clinicKey") and _has(items, "weaponBoss") end
end
@ -248,8 +243,7 @@ function labyrinthB:new(worldGraph)
}
self.requirements = function(self, items)
if self.world.regions.arthur:canAccess(items) then return true end
return false
return self.world.regions.arthur:canAccess(items)
end
end
@ -336,7 +330,7 @@ function outerWall:new(worldGraph)
self.requirements = function(self, items)
if not self.world.regions.arthur:canAccess(items) then return false end
if _has(items, "eventKazuma") and _has(items, "flight") and self.world.regions.eggCorridor2:canAccess(items) then return true end
if _has(items, "eventKazuma") and _has(items, "flight") and _has(items, "eventCore") then return true end
if _has(items, "teleportKey") and self.world.regions.plantation:canAccess(items) then return true end
return false
end
@ -391,7 +385,7 @@ function lastCave:new(worldGraph)
redDemon = Location("Red Demon Boss", "Priso2", "0300", self)
}
self.requirements = function(self, items) return _has(items, "eventRocket") and _has(items, "weaponBoss") end
self.requirements = function(self, items) return _has(items, "eventRocket") and _has(items, "weaponBoss") and _count(items, booster, 2) end
end
local endgame = Region:extend()
@ -446,13 +440,17 @@ function worldGraph:getLocations()
end
function worldGraph:getPuppySpots()
local locations = self.locationsArray(self.regions.upperSandZone:getEmptyLocations())
for k, location in pairs(self.regions.lowerSandZone:getEmptyLocations()) do
if k ~= "jenka" and k ~= "king" and k ~= "eventToroko" then
table.insert(locations, location)
end
end
return locations
return {
self.regions.upperSandZone.locations.curly,
self.regions.upperSandZone.locations.curlyPup,
self.regions.upperSandZone.locations.panties,
self.regions.upperSandZone.locations.sandCapsule,
self.regions.lowerSandZone.locations.chestPup,
self.regions.lowerSandZone.locations.darkPup,
self.regions.lowerSandZone.locations.runPup,
self.regions.lowerSandZone.locations.sleepyPup,
self.regions.lowerSandZone.locations.pawCapsule
}
end
function worldGraph:getHellSpots()
@ -495,7 +493,6 @@ end
function worldGraph:collect(preCollectedItems)
local collected = _.clone(preCollectedItems) or {}
assert(collected ~= nil)
local availableLocations = self:getFilledLocations()
local foundItems = 0
@ -523,12 +520,9 @@ end
function worldGraph.locationsArray(locations)
local array = {}
local countIn = 0
for k, v in pairs(locations) do
table.insert(array, v)
countIn = countIn + 1
end
assert(#array == countIn, string.format("Size of locations array incorrect! In: %d Out: %d", #locations, #array))
return array
end
@ -538,7 +532,7 @@ function worldGraph:logLocations()
logSpoiler("")
logSpoiler("Region: " .. r.name)
for k2,l in pairs(r.locations) do
if not _has({l.item}, "event") then
if l.item ~= nil and not _has({l.item}, "event") then
logSpoiler("\t " .. l.name .. ": " .. l.item.name)
end
end

View file

@ -101,9 +101,6 @@ function C:_writePlaintext(tscFiles)
end
function C:_shuffleItems(tscFiles)
local l, i = #self.worldGraph:getLocations(), #self.itemDeck:getItems()
assert(l == i, ("Locations: %d\r\nItems: %d"):format(l, i))
-- first fill puppies
self:_fastFillItems(self.itemDeck:getItemsByAttribute("puppy"), _.shuffle(self.worldGraph:getPuppySpots()))
@ -116,7 +113,7 @@ function C:_shuffleItems(tscFiles)
self:_fillItems(mandatory, _.shuffle(_.reverse(self.worldGraph:getEmptyLocations())))
self:_fastFillItems(optional, _.shuffle(self.worldGraph:getEmptyLocations()))
assert(#self.worldGraph:getEmptyLocations() == 0, self.worldGraph:emptyString() .. "\r\n" .. self.itemDeck:unplacedString())
--assert(#self.worldGraph:getEmptyLocations() == 0, self.worldGraph:emptyString() .. "\r\n" .. self.itemDeck:unplacedString())
self.worldGraph:writeItems(tscFiles)
self.worldGraph:logLocations()
end
@ -131,11 +128,12 @@ function C:_fillItems(items, locations)
local assumed = self.worldGraph:collect(itemsLeft)
local fillable = _.filter(locations, function(k,v) return not v:hasItem() and v:canAccess(assumed) end)
local empty = _.filter(locations, function(k,v) return not v:hasItem() end)
assert(#fillable > 0, ("No available locations for %s! Items left: %d"):format(item.name, #itemsLeft))
assert(item ~= nil, "No item found!")
logDebug(("Placing %s at %s"):format(item.name, fillable[1].name))
fillable[1]:setItem(item)
if #fillable > 0 then
logDebug(("Placing %s at %s"):format(item.name, fillable[1].name))
fillable[1]:setItem(item)
else
logError(("No available locations for %s! Items left: %d"):format(item.name, #itemsLeft))
end
until #itemsLeft == 0
end