Hey, managed to get 200 points in classic cement factory hard mode after over 45,000 frames. This makes it one of the slowest game modes, and most likely be skipped along with the easy version assuming 6 other games arent slower.
http://tasvideos.org/userfiles/info/24247709336349349
Here's a rough bot that attempts the game; it's posted here in case anyone in the future wants to do a 100%.
Edit: I'm still really curious about the final times, so I might try 1000 points later.
Edit2: I used cheats to quickly test Octopus. It seems on modern, the max amount of treasures you can carry at one time is 50. I can't seem to use pause to manipulate the tentacles, but I can use that to affect when it will shoot ink.
Edit3: It's way slower to hand in 50 points all at once; it's faster to hand in chunks of 9 points (10+ slows you down a lot).
0x03C1D2 is Mario's "timer" for movement; once it hits 0 you can move again.
0x03C1F2 is the points stored on bag. It affects the above as follows:
10+ - advances 0.5 unit per frame
7-9 - advances 1 unit per frame
4-6 - advances 2 units per frame
0-3 - advances 4 units per frame
Each tentacle has it's own addresses; however for pretty much the entire time, only the one closest to the treasure is of concern. 0x03C6C0 is the timer for when it strikes, and 0x03C6B2 is the cooldown which determines how long before the next attack. The cooldown timer is one of the reasons having 10+ loot is slower; by 150 points or so, the only counts up to ~100, and given your slow movement, you can't make it back in time to do anything. Even worse at 800+ points when it counts to 16 frames and strikes.
Edit4: Classic Octopus is completely different in scoring. Every time you get 1 loot and go back, 0x03A446 adds by 3. This slowly counts down, and 1 point is added to 0x03A3C8. Unfortunately, this is at a fixed rate, so unless I mess around a bit, chances are, there will be 3+ minutes of down time for BOTH classic octopus difficulties. 0x03A87D is the tentacle timer, and 0x03AECC is the speed which it ticks.
Here's a lua script that displays information regarding the classic version:
Language: lua
memory.usememorydomain("Combined WRAM")
posX = {[0]=30,[1]=25,[2]=75,[3]=120,[4]=160}
posY = {[0]=45,[1]=105,[2]=110,[3]=110,[4]=110}
full = {[0]=3,[1]=4,[2]=5,[3]=4,[4]=3} --full "length" of tentacles
while true do
gui.drawText(175,0,"+"..memory.read_u16_le(0x03A446),'BLACK') --Score saved up
gui.drawText(130,15,"Total:"..memory.read_u16_le(0x03A3C8)+memory.read_u16_le(0x03A446),'Black') -- and total
gui.drawText(0,145,"Timer:"..memory.readbyte(0x03A87D).."/"..(memory.readbyte(0x03AECC)+2),'Black') --Speed appears -2 than timer limit
for i = 0x03AACA, 0x03ACBA, 0x7C do --First tentacle and offsets
index = (i-0x03AACA)/0x7C --to convert i into natural numbers
--offset 0xA is state; 0 = DNE; 2 = Attack; 6 = Retreat
if memory.readbyte(i+0xA) == 2 then
gui.drawText(posX[index],posY[index],memory.readbyte(i).."/"..full[index].."\n"..memory.readbyte(i+0xA),'Maroon')
elseif memory.readbyte(i+0xA) == 6 and memory.readbyte(i) == full[index] then
gui.drawText(posX[index],posY[index],memory.readbyte(i).."/"..full[index].."\n"..memory.readbyte(i+0xA),'Red')
elseif (memory.readbyte(i+0xA) == 6 and memory.readbyte(i) ~= full[index]) then
gui.drawText(posX[index],posY[index],memory.readbyte(i).."/"..full[index].."\n"..memory.readbyte(i+0xA),'Orange')
elseif memory.readbyte(i+0xA) == 0 then
gui.drawText(posX[index],posY[index],memory.readbyte(i).."/"..full[index].."\n"..memory.readbyte(i+0xA),'Green')
end
end
emu.frameadvance()
end