Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I investigated the warp glitch a bit. Basicly, when a room loads you can move for 1 frame before the fade-in. If you stand on the ground, you can turn around and/or jump. If you are in midair, you can press up or down to move a pixel up or down (I don't know why this works. Maybe game thinks you are on a vine.). When entering a level 1 stump, you are incidentally right below the exit loading zone so you can move into it before the fade-in. But not all loading zones have this "finish level early" glitch. Throughout all levels that I tested by editing positioning, there is only one other I found, in Level 5's bottom secret if you hold "up" when you enter. Perhaps this only works with loading zones where you have to go "up". I noticed, those "up" loading zones do not work if you fall from above down through them. They only work if you ascend into them, unlike other loading zones. --- I found out why there are out of bounds bees and stars in level 6, now. It's because the level is actually on one big room instead of several separate rooms. --- Sprite glitch in Dragon boss now works correctly on Gambatte. It did not work correctly in VBA 24m.. There doesn't seem to be anything special happening by throwing a gazillion presents into the air, though, apart from occasional graphical map loading glitches.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Low score test TAS, Hard difficulty, 18410 points http://dehacked.2y.net/microstorage.php/info/297019712/smurfs%20lowscore.bk2 Bizhawk 1.11.9.1 Not interesting at all, just for documentation
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Random trivia about ingame seconds Ingame seconds depend on difficulty. Easy = 135 frames Normal = 90 frames Hard = 80 frames Enemy list: 00 = [glitch? causes instant death] 01 = moscito 02 = bee 03 = jumping fish 04 = horizontal moving fish ? 05 = bad smurf 06 = worm 07 = back and forth fish ? 08 = horizontal moving crow 09 = vertical moving crow 0A = hedgehog 0B = ice bear 0C = [enemy vanishes] 0D = springboard (stationary) 0E = mushroom with 1up 0F = mushroom with raspberry 10 = mushroom with leaf 11 = springboard (pick up) 12 = present (pick up) 13 = infinite presents 14 = key 15 = 1up 16 = star 17 = leaf 18 = raspberry 19 = S-boost 1A = ? 1B = eagle (Act 12) 1C = eagle (Act 7) 1D = eagle (Act 11) 1E = squirrel's nut 1F = nut (falling straight down) 20 = ? 21 = ? 22 = ? 23 = ? 24 = falling rock (Act 6) 25 = ? 26 = falling rock (Act 8) 27 = falling rock (Act 8) 28 = Azrael 29 = ? 2A = ? 2B = ? 2C = ? 2D = ? 2E = hole in ground 2F = ? 30 = ? 31 = ? 32 = ? 33 = ? 34 = ? 35 = bird that you can jump on 36 = squirrel 37 = thunder cloud 38 = thrown present 39 = dropped present 3A = ? 3B = ? 3C = ? 3D = ? 3E = ? 3F = ? 40 = ? 41 = ? 42 = ? 43 = ? 44 = ? 45 = ? 46 = ? 47 = ? 48 = leaf that you can jump on 49 = ? 4A = frog 4B = frog 4C = dragon boss 4D = ? 4E = ? 4F = ? 50 = ? 51~FF = [glitch] Lua for Bizhawk, v1.0 ROM
Language: Lua

local ScriptInfo = {"SMURFS Luascript by Mugg1991", "v0.1", "Oct 2017"} memory.usememorydomain("System Bus") function text(x, y, text, color, backcolor) if backcolor==nil then backcolor=0x00000000 end gui.drawText(x, y, text,color,backcolor,10,"Arial") end client.SetGameExtraPadding(80,0,0,0) console.clear() for i=1,table.getn(ScriptInfo),1 do print(ScriptInfo[i]) end XposBefore=0 nomove=0 event.onexit(function() client.SetGameExtraPadding(0,0,0,0) end) event.onloadstate(function() nomove=0 end) local dirTable = { [16] = 1, [32] = 2, [48] = 3 } while true do Xcam = memory.read_u16_le(0xFF97) Ycam = memory.read_u16_le(0xFF99) Xpos = memory.read_u16_le(0xFFA1) Ypos = memory.read_u16_le(0xFFA3) Xvelo = memory.read_u8(0xFFCB) dir = memory.read_u8(0xFFEF) timerTen = memory.read_u8(0xF9CD) timerOne = memory.read_u8(0xF9CE) timerSub = "." .. string.format("%02d",memory.read_u8(0xF93E)) timer = string.format("%x%x",timerTen,timerOne) invuln = memory.read_s8(0xF9AA) health = memory.read_s8(0xF9B6) rng = memory.read_u8(0xFAB1) difficulty = memory.read_u8(0xD9DB) text(18,24,"velX " .. Xvelo,0xFFFFFF00) text(26,33,"dir " .. tostring(dirTable[dir]),0xFFFFFF00) text(32,49,"X " .. Xpos,0xFFFFFF00) text(32,58,"Y " .. Ypos,0xFFFFFF00) text(12,67,"camX " .. Xcam,0xFFFFFF00) text(12,76,"camY " .. Ycam,0xFFFFFF00) text(8,91,"invuln " .. invuln,0xFFFFFF00) text(8,100,"health " .. health,0xFFFFFF00) text(18,109,"time " .. timer,0xFFFFFF00) text(54,109,timerSub,0xFFFFFF00) text(24,118,"rng " .. rng,0xFFFFFF00) text(2,127,"difficulty " .. difficulty,0xFFFFFF00) if XposBefore ~= Xpos then nomove=0 else nomove=nomove+1 end text(8,49,nomove,0xFFFF4000) XposBefore = Xpos emu.frameadvance() end
I found 90 frames improvement. So I might start a new run sometime.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
frame comparison
---Old---New
VBA-23Bizhawk
20112017 ---Total timesave
first frame fade-in (copyright info)1618+2
white screen186188+2
first frame fade-in (language select)204208+4
white screen254257+3
first frame fade-in (gargamel house)272--
white screen321329+8
first frame fade-in (menu)339357+18
first frame fade-out (from menu)377395+18
first frame fade-in Act 1 (character is visible)481529+48
first frame fade-out (entering the stump)810858+48
completely white screen Act 1 complete869934+65
white screen (from score tally)12031276+73
first frame fade-in Act 2 (character is visible)12921390+98
completely white screen Act 2 complete4384--
white screen (from score tally)4650--
first frame fade-in Act 3 (character is visible)47394874+135
completely white screen Act 3 complete60266161+135
white screen (from score tally)6336--
first frame fade-in Act 4 (character is visible)64256596+171
completely white screen Act 4 complete78478010+163
white screen (from score tally)81538326+173
first frame fade-in Snake (character visible)81728364+192
completely white screen Snake complete8839--
white screen (from rescue cutscene)9131--
(...)---
Remaining ingame time Note: 12.34 means 12 ingame seconds and 34 frames. 1 ingame second equals 80 frames (on Hard difficulty).
---Old---New---Timesave per level
Act 01 - The Forest96.2396.230.00
Act 02 - The River Smurf62.0462.040.00
Act 03 - The Bridge84.4984.490.00
Act 04 - The Swamps82.7783.04-0.07
Snake92.2992.290.00
Act 05 - The Sarsaparilla Fields79.6079.600.00
Act 06 - The Mountains (part 1)89.6089.67-0.07
Act 06 - The Mountains81.1182.35-1.24
Act 07 - The Flight on a Stork62.0262.04-0.02
Act 08 - The Old Gold Mine69.3769.38-0.01
Act 09 - Inside the Volcano86.1586.21-0.06
Dragon87.5757.62-0.05
Act 10 - The Sledge Race70.1070.100.00
Act 11 - The Cliff87.7087.700.00
Act 12 - Gargamel's Manor House (part 1)87.6787.70-0.03
Act 12 - Gargamel's Manor House80.4681.09-0.43
Gargamel87.1687.21-0.05
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I found that you can stand on the ledge of the cooking pot (Act 12) without taking damage. It might be a timesaver to jump on the ledge like that, instead of taking damage like in the current run.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
MUGG wrote:
I found that you can stand on the ledge of the cooking pot (Act 12) without taking damage. It might be a timesaver to jump on the ledge like that, instead of taking damage like in the current run.
I tested it and it is 16 frames faster and induces 1 less lag frame right after that, so 17 frames faster. However, you have to get the star which means 10 frames lost on the score tallying screen, so 7 frames faster in total.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I made a "no B presses" / "walkathon" TAS. You can get the Bk2 here. Note for future reference: I might have lost 1F on selecting the difficulty. Pressing B+Up+Start sets it hard while also closing the options, which was done in the regular TAS. This can probably be easily fixed. Link to video