Code
-- keep blank
help()
print("cur "..current.GetEnergyScore())
print("credit "..creditbest.GetEnergyScore())
recentbest.Save()
local controlgroup=false --made sure not to load old environment variables, guess lua here is ok
fuseki=true--false --opposite of endgame, beg. game really --set true for debugging uh SS
--assume playr has already tried something before starting the recipe, try polish
while os.time()<puzzle.GetExpirationTime() and true --or for override
do
if not controlgroup and fuseki then
if math.random(40)>1 then
recentbest.Restore()
band.DeleteAll()
else puzzle.StartOver() end
behavior.SetClashImportance(1)
behavior.SetSidechainHBondImportance(1)
behavior.SetBackboneHBondImportance(1)
selection.DeselectAll()
chainOrJoint=math.random(0,1) --set to 0 for just hel?
xloop=math.random(0,2) --extra loops in the cornerstone of the arch,
--set to -1 for just helices? crash
xlup=math.random(0,2)
--sometimes the recipe fails anyways (even in an otherwise successful location, making a big helix)
repeat
cornerstone=math.random(1+5+xloop,structure.GetCount()-5-xlup)
for i=cornerstone-xloop,cornerstone+xlup do
segslocked=false or structure.IsLocked(i)
end
until not segslocked
seth={cornerstone-2-xloop,cornerstone-1-xloop,cornerstone+1+xlup,cornerstone+2+xlup,
cornerstone-4-xloop,cornerstone-3-xloop,cornerstone+3+xlup,cornerstone+4+xlup,
cornerstone-5-xloop, cornerstone+5+xlup,}
ss={"h","e","l","a"}
pillar1ss=ss[math.random(2)]
if chainOrJoint==0 then
pillar2ss=pillar1ss
else
pillar2ss=ss[math.random(2)]
end
for i =cornerstone-5-xloop,cornerstone-1-xloop do
print("first pillar "..i)
structure.SetSecondaryStructure(i,pillar1ss)
selection.Select(i)
end
for i =cornerstone+1+xlup,cornerstone+5+xlup do
print("2nd pillar "..i)
structure.SetSecondaryStructure(i,pillar2ss)
selection.Select(i)
end
structure.SetSecondaryStructure(cornerstone-xloop,"l")
structure.SetSecondaryStructure(cornerstone+xlup,"l")
structure.SetSecondaryStructure(cornerstone,"l")
--selection.Select(cornerstone)
structure.IdealSSSelected()--seth[i])
if chainOrJoint==1 then
cornerstoneToHel=band.AddBetweenSegments(cornerstone-2-xloop,cornerstone+1+xlup)
cornerstoneBow=band.AddBetweenSegments(cornerstone-1-xloop,cornerstone+1+xlup)
cornerstoneToHel2=band.AddBetweenSegments(cornerstone-1-xloop,cornerstone+2+xlup)
helixToHelix=band.AddBetweenSegments(cornerstone-2-xloop,cornerstone+2+xlup)
downHelixToDownHelix=band.AddBetweenSegments(cornerstone-4-xloop,cornerstone+4+xlup)
downHelix5ToDownHelix5=band.AddBetweenSegments(cornerstone-5-xloop,cornerstone+5+xlup)
--sometimes swapping close and far after it looks good can help squeeze the helices together
closeHel=band.AddBetweenSegments(cornerstone+2+xlup,cornerstone)
farHel=band.AddBetweenSegments(cornerstone-2-xloop,cornerstone)
print(cornerstoneBow,cornerstoneToHel,helixToHelix,cornerstoneToHel2)
band.SetGoalLength(cornerstoneBow,6.63+xloop+xlup+9)--extra extra extra expansion at before fulcrum
band.SetGoalLength(cornerstoneToHel,8.98+xloop+xlup)
band.SetGoalLength(cornerstoneToHel2,6.05+xloop+xlup)--approx
band.SetGoalLength(downHelix5ToDownHelix5,12.21-12)--jiayou
band.SetGoalLength(downHelixToDownHelix,5.31)
band.SetGoalLength(helixToHelix,9.54)--fulcrum
band.SetGoalLength(farHel,5.53)-- far hel (corner+2) to corner
band.SetGoalLength(closeHel,5.25)-- close hel (corner-2) to corner
band.SetStrength(cornerstoneToHel,1.5)
band.SetStrength(cornerstoneToHel2,1.5)
band.SetStrength(downHelixToDownHelix,1.5)--max
band.SetStrength(downHelix5ToDownHelix5,1.5)--max
band.SetStrength(helixToHelix,1.5)
band.SetStrength(farHel,1.5)
band.SetStrength(closeHel,1.5)
band.SetStrength(cornerstoneBow,1.5)
end
structure.LocalWiggleAll(10)
structure.WiggleAll(6)--10)
behavior.SetClashImportance(1)
behavior.SetSidechainHBondImportance(1)
behavior.SetBackboneHBondImportance(1)
if chainOrJoint==1 then
band.SetGoalLength(cornerstoneBow,6.63+xloop+xlup)--extra extra w/o expansion past fulcrum
band.SetGoalLength(downHelix5ToDownHelix5,12.21)--fangxin
--structure.IdealSSSelected()--seth[i])
end
wannafreeze=false
if wannafreeze then
for i =1,#seth
do print(i)
--freeze.Freeze(seth[i],true,false)--bb ss
--selection.Select(seth[i])
end
end
end
band.DisableAll()
previters=current.GetEnergyScore()
for iseg=1, structure.GetCount() do
if
structure.GetAminoAcid(iseg)~="e" then
structure.SetAminoAcid(iseg,"e")
end
end
repeat
previters=current.GetEnergyScore()
structure.LocalWiggleAll(10)
structure.WiggleAll(10)
structure.ShakeSidechainsAll(1)
structure.MutateSidechainsAll(1)
until
previters+2>=current.GetEnergyScore()
fuseki=true --forfeit, rematch, reopen the [drawing] board
end
print("ur protein powder expired. override this in code")