Posts for jlun2

Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Sorry if it sounds very naive, since I don't know about Mupen coding, but how difficult/tricky/idk would it be to rewrite/fix the AVI writer in it? I know it doesn't fix the desync issues in certain games apparently, but (maybe) encoding runs would be less annoying?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Well, apparently, the reason why the rating system isn't updated is because coding it seems to be the problem. I wonder would it be possible to open source it, and try getting help from social media? Not sure if there would be (or how much of a) security risk open sourcing the sections needed though.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
feos wrote:
How is stopping at the save screen any worse than stopping at the next screen? Neither is part of the TAS, neither matters, neither needs to be in the encode. I don't see any meaning in getting to the screen where the character endlessly stands in one place, let alone skipping credits just to show that screen faster. Is there any serious reasoning not to replace the movie with one that only gets to the credits asap, other than feelings?
jlun2 wrote:
There's at least 2 runs published where since the credits cannot be skipped, and there's a very short dialogue at the end, they're forced to include it into the run.
Why do you say they are forced?
There's a bit of dialogue at the end of both those games post-credits. They don't auto-proceed until you press something. If it's fine in the future, I suppose that means a runner can ignore it, cutting multiple minutes off the displayed time? Not trying to be against anything, just don't want tons of future drama and clarification. Edit: Like, legit there's at least one game in the future I wish to (eventually) finish a TAS where's there's post credit dialogue, so clarification would be helpful.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Warp wrote:
I don't usually watch trailers because I don't want to get spoilers. I watched a bit of the beginning of that trailer, though, because I was curious about the art style. It looks a bit weird. It clearly heavily uses 3D CGI, but it also seems to use a form of animation that looks hand-drawn in the classical cartoon style. It would be interesting to know if it's indeed hand-drawn, or if it's some kind of advanced Flash graphics editing.
I only noticed it after someone posted a comparison:
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
http://tasvideos.org/userfiles/info/40307113752467222 Managed to reliably manipulate your ally to help out almost every single turn during Scrippa (Basic) fight, so that saved off 1,000+ frames compared to only criticals every time. This allowed me to OHKO the rival later. I manipulated the drops to be the full DP heal drinks, since I need them for the desert fights + final. After thinking about whether to use the secret Denjuu, it seems somewhat faster at a glance to not use it. I think I can use it for recruiting Scrippa, but I need to check given that I need to dial and recruit it, followed by calling Scrippa shortly after. Edit: 4,000+ frames faster to use secret Denjuu to recruit Scrippa. Now I need to check how to route a bit, since While Rupicola can kill the 4 Hermits in 1 hit along with the bosses before, I also need to check if doing so would still get me the XP enough to kill other bosses with Scrippa. Edit2: Ok, just rechecked. Using Scrippa saves 3 turns; 1 turn in Demerus boss, 2 turns in Easydog. Ideally, this would be ~3000 frames, but the Easydog fight requires some insane luck (Scrippa's ally target Easydog, then Scrippa spec's Easydog, followed by crit ally from Cotta, then spec the enemy cotta) , and it would still take some time to switch from Rupicola -> Scrippa. It takes ~5000 frames to recruit Scrippa using Rupicola. That's still 2000 frames gone even in ideal situations. I think I'll stick with using mostly the secret Denjuu + Cotta. Edit 3: Ok, even if I use ally + normal hit for the first 2 fights, I still ended up needing 8 drinks in total. However, this lets me not need to heal in the labs.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I just realized a problem for the first set of stages. 1. You really want to buy the camera before the Karnath Jungle, since its needed for a sidequest. 2. It seems shop stocks don't exactly "change" just by leaving and reentering, so chances are, I'm going to be forced to visit at least every shop once to get everything (n eed to recheck). 3. Entering a shop takes time, so its not recommended to buy from the same store twice. Which means I need to somehow get enough cash to buy everything from Blackwich in 1 visit. Naively, I'd simply redo the first stage several times (or the first treasure stage), but even the shortest one (Blown Away) takes 1000+ frames per attempt, and that'd only give 40gp/gold. I also need to take account the chests that respawn and give an extra 10 coins to utilize as much of the stage as possible (ignoring coins from running away, since that's 1gp). Gonna have to check which stage to grind. Edit: At the very least, check if it is possible to get everything in a stage in 1 attempt without buying anything.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Amaraticando wrote:
Well, arg is nil. Maybe this version of Lua doesn't support arg for varargs. Try table.pack https://www.lua.org/manual/5.2/manual.html#pdf-table.pack
I wrote this:
Language: lua

temp = table.pack(98,99,100,101,102,103,104) console.log(temp[2])
And it gave the error:
NLua.Exceptions.LuaScriptException: [string "main"]:1: attempt to call field 'pack' (a nil value)
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Sorry about that. Just redownloaded and it worked with getinput now (without crashing yet). I tried this piece of code:
Language: lua

local Map = {} function assign_multi(string,...) for i, v in ipairs(arg) do Map[v] = string end end assign_multi("Bandit's Hideout",98,99,100,101,102,103,104) console.log(Map[99])
It worked with previous versions of BizHawk (including 2.0 on the download page) but in the interim it gave:
NLua.Exceptions.LuaScriptException: [string "main"]:3: bad argument #1 to 'ipairs' (table expected, got nil)
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
zeromus wrote:
To everyone I've told to stop using LUA. I've begun testing NLua+KopiLua in place of LuaInterface+Lua. Please evaluate. That means, start using LUA again in buildbot builds.
I tried drag and dropping a lua file on the interim, and immediately got this error Then BizHawk crashed.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
https://greasyfork.org/scripts/30833-tumblr-image-url-redirect/code/Tumblr%20Image%20URL%20Redirect.user.js Using Tampermonkey, add this script. Once added, if you open a tumblr image on a new tab, it will redirect automatically to the highest resolution. https://fimfetch.net/ A site that backs up one type of fanfiction from 3 different sites. https://ci.appveyor.com/project/zeromus/bizhawk-udexo/build/artifacts The interim builds for BizHawk, since apparently only listed in the TAStudios thread, and not every uses it.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Rather late, but I realized the 2 other RNG values: *03005E08 *03005E10 Actually do affect battles. Naively recording the values of damage dealt with 03002C16 fixed at 0x5/0x24/0x3F will cause the outcome to be quite different than if you delayed input, and had the values for the above 2 change "as intended". Gonna see if I can figure out how to list the damage dealt in this case. Edit: This ugly script:
Language: lua

memory.usememorydomain("IWRAM") --[[ Example for the below: 41F2 - EID 41F3 - ELV 41F4 - EHP(Current) 41F5 - EHP(Max) 41F6 - EDP 41F7 - ESPD 41F8 - EATK 41F9 - EDEF 41FA - ESPEC 41FC - Nature 41FD - FD 4207 - 1st move 4209 - 1st move power 4210 - 2nd move 4211 - 2nd move power 4218 - 3rd move 4219 - 3rd move power 4220 - 4th move 4221 - 4th move power 4228 - next denjuu's turn ]]-- --Check if power or speed version; they have addresses in different places function version() if memory.read_u32_le(0x0000A8,"ROM") == 0x574F5032 then return "Power" elseif memory.read_u32_le(0x0000A8,"ROM") == 0x45505332 then return "Speed" else return "NA" end end local Picture_Book = { [0] = 15,[1] = 16,[2] = 17,[3] = 176,[4] = 177,[5] = 18,[6] = 19,[7] = 20,[8] = 21,[9] = 22, [10] = 23,[11] = 24,[12] = 25,[13] = 26,[14] = 27,[15] = 28,[16] = 29,[17] = 30,[18] = 31,[19] = 32, [20] = 37,[21] = 38,[22] = 39,[23] = 40,[24] = 33,[25] = 34,[26] = 35,[27] = 36,[28] = 41,[29] = 42, [30] = 43,[31] = 44,[32] = 45,[33] = 46,[34] = 47,[35] = 48,[36] = 49,[37] = 178,[38] = 179,[39] = 180, [40] = 50,[41] = 51,[42] = 52,[43] = 53,[44] = 54,[45] = 55,[46] = 56,[47] = 57,[48] = 58,[49] = 59, [50] = 60,[51] = 61,[52] = 62,[53] = 63,[54] = 64,[55] = 65,[56] = 66,[57] = 67,[58] = 68,[59] = 69, [60] = 70,[61] = 71,[62] = 72,[63] = 73,[64] = 74,[65] = 75,[66] = 76,[67] = 77,[68] = 78,[69] = 79, [70] = 80,[71] = 81,[72] = 82,[73] = 83,[74] = 84,[75] = 85,[76] = 86,[77] = 87,[78] = 181,[79] = 182, [80] = 183,[81] = 184,[82] = 185,[83] = 186,[84] = 187,[85] = 88,[86] = 89,[87] = 90,[88] = 188,[89] = 189, [90] = 190,[91] = 191,[92] = 192,[93] = 193,[94] = 91,[95] = 92,[96] = 93,[97] = 94,[98] = 194,[99] = 195, [100] = 95,[101] = 96,[102] = 97,[103] = 98,[104] = 99,[105] = 100,[106] = 101,[107] = 102,[108] = 103,[109] = 196, [110] = 197,[111] = 104,[112] = 105,[113] = 106,[114] = 107,[115] = 108,[116] = 109,[117] = 110,[118] = 111,[119] = 112, [120] = 113,[121] = 114,[122] = 115,[123] = 116,[124] = 117,[125] = 118,[126] = 119,[127] = 120,[128] = 121,[129] = 122, [130] = 123,[131] = 124,[132] = 125,[133] = 198,[134] = 199,[135] = 126,[136] = 127,[137] = 128,[138] = 129,[139] = 130, [140] = 131,[141] = 132,[142] = 133,[143] = 134,[144] = 135,[145] = 136,[146] = 137,[147] = 138,[148] = 139,[149] = 140, [150] = 141,[151] = 142,[152] = 143,[153] = 144,[154] = 145,[155] = 146,[156] = 147,[157] = 148,[158] = 149,[159] = 150, [160] = 151,[161] = 152,[162] = 153,[163] = 154,[164] = 155,[165] = 156,[166] = 157,[167] = 158,[168] = 159,[169] = 160, [170] = 161,[171] = 162,[172] = 163,[173] = 164,[174] = 165,[175] = 166,[176] = 167,[177] = 168,[178] = 169,[179] = 170, [180] = 0,[181] = 1,[182] = 2,[183] = 3,[184] = 4,[185] = 5,[186] = 6,[187] = 7,[188] = 8,[189] = 9, [190] = 10,[191] = 11,[192] = 12,[193] = 13,[194] = 14,[195] = 171,[196] = 172,[197] = 173,[198] = 174,[199] = 175} --Attack names local Attacks = { [0] = "????",[1] = "Spark",[2] = "Falling Star",[3] = "Pillar of Fire",[4] = "Small Fire",[5] = "Will-o\'-the-Wisp",[6] = "Flame Shot",[7] = "Raging Fire",[8] = "Fire Wheel",[9] = "Disk Cutter", [10] = "Wheel",[11] = "Chainsaw",[12] = "Drill",[13] = "Rocket Punch",[14] = "Twin Drill",[15] = "Rotation Cutter",[16] = "Spiral Cutter",[17] = "Waterfall",[18] = "Soap Ball",[19] = "Water Drop", [20] = "Water Gun",[21] = "Wave Crash",[22] = "Squall",[23] = "Icicle Trap",[24] = "Watersprout",[25] = "Rock Claw",[26] = "Boulder Roll",[27] = "Sand Vortex",[28] = "Boulder Ball",[29] = "Boulder Avalanche",[30] = "Shake-Out", [31] = "Falling Rocks",[32] = "Small Quake",[33] = "Vaccum Cutter",[34] = "Shock Wave",[35] = "Whirlwind",[36] = "Gust",[37] = "Flap",[38] = "Tornado",[39] = "Gale", [40] = "Kamaitachi",[41] = "Ion Ball",[42] = "Positive Electricity",[43] = "Electric Claw",[44] = "Discharge",[45] = "Electric Shock",[46] = "Electric Arrow",[47] = "Big Electric Current",[48] = "Electric Field",[49] = "Claw", [50] = "Iron Claw",[51] = "Scales",[52] = "Ring",[53] = "Bite",[54] = "Beak",[55] = "Kicking",[56] = "Continuous Kicking",[57] = "Sabre",[58] = "Tail",[59] = "Suddenness (1)", [60] = "Suddenness (2)",[61] = "Jump",[62] = "Tentacle",[63] = "Numb Tentacle",[64] = "Body Blow",[65] = "Spit Spray",[66] = "Headbutt",[67] = "Suddenness (3)",[68] = "Horn",[69] = "Iron Horn", [70] = "Wing",[71] = "Thorn",[72] = "Rush",[73] = "Drain",[74] = "Bloodsuck",[75] = "Strike",[76] = "Razor Punch",[77] = "Hammer Punch",[78] = "Lick",[79] = "Needle", [80] = "Suddenness (4)",[81] = "Scissors",[82] = "Petal",[83] = "Feather Sabre",[84] = "Feather Knife",[85] = "Acupuncture",[86] = "Poison Sting",[87] = "Numbing Sting",[88] = "Hoof",[89] = "Suddenness (5)", [90] = "Suddenness (6)",[91] = "Whiplash",[92] = "Electric Wire",[93] = "Digestive Fluids",[94] = "Melting Fluids",[95] = "Stab",[96] = "Continuous Stab",[97] = "Ice Rock",[98] = "Big Wave",[99] = "Whirling Tides", [100] = "Ice Bullet",[101] = "Blizzard",[102] = "Big Water Pressure",[103] = "Big Tsunami",[104] = "Ion Beam",[105] = "Small Bolt",[106] = "Plasma Laser",[107] = "Lightning Strike",[108] = "Thunder Storm",[109] = "Mega Bolt", [110] = "Electric Hell",[111] = "Ibo Ibo Missile",[112] = "Gatling Gun",[113] = "Rapid-Fire Missile",[114] = "Bazooka",[115] = "Drill Missile",[116] = "Homing Missile",[117] = "Bombing",[118] = "Wave Attack",[119] = "Aura Wave", [120] = "Sandstorm",[121] = "Big Stream Pressure",[122] = "Vacuum Hole",[123] = "Hurricane",[124] = "Black Hole",[125] = "Heat Beam",[126] = "Small Burn",[127] = "Small Flame",[128] = "Flamethrower",[129] = "Fire Breath", [130] = "Big Burn",[131] = "Suddenness (7)",[132] = "Bomb Rock",[133] = "Small Rock",[134] = "Sand Prison",[135] = "Mega Quake",[136] = "Mega Rock",[137] = "Meteor Drop",[138] = "Diamond Rain",[139] = "Mushroom Bomb", [140] = "Egg Bomb",[141] = "Bomb",[142] = "Wave Beam",[143] = "Beam Light",[144] = "Blaster",[145] = "Suicide Attack",[146] = "String Discard",[147] = "Adhesive Liquid",[148] = "Smokescreen",[149] = "Flash", [150] = "Dust Cloud",[151] = "Recovery",[152] = "Big Recovery",[153] = "Shout",[154] = "Stare",[155] = "Glare",[156] = "Quick Step",[157] = "Speed Up",[158] = "Charging",[159] = "Big Charging", [160] = "Ultrasonic",[161] = "Curse Song",[162] = "Iron Defense",[163] = "Venom",[164] = "Poison Gas",[165] = "Numb Gas",[166] = "Cure",[167] = "Alarm Clock",[168] = "Roar",[169] = "Hot Wind", [170] = "Shrill Voice",[171] = "Cold Air",[172] = "Sleep Gas",[173] = "Lullaby",[174] = "Meditate",[175] = "Denma Barrier",[176] = "Persist",[177] = "Support",[178] = "Defense",[179] = "Shield", [180] = "Blessing",[181] = "Contemplate",[182] = "Hide",[183] = "Dive",[184] = "Skin Thicken",[185] = "Avoid",[186] = "Spore Shed",[187] = "Tongue Sticking Out",[188] = "Provoke",[189] = "Denma Seal", [190] = "Denma Drain",[191] = "Twister Song",[192] = "Energy Break",[193] = "Mega Break",[194] = "Count Down",[195] = "Strawberry Kiss",[196] = "Injection Plug",[197] = "Deflation Spiral",[198] = "Hot Bath",[199] = "Nove Smasher"} --List of Denjuu by names, sorted by Index local Denjuu = { [0] = "Muscovy (Basic)",[1] = "Muscovy (Natural)",[2] = "Muscovy (Aquatic)",[3] = "Major (Basic)",[4] = "Major (Grassland)",[5] = "Fraby (Basic)",[6] = "Fraby (Mountain)",[7] = "Fraby (Sky)",[8] = "Kagu (Basic)",[9] = "Kagu (Natural)", [10] = "Purchera (Basic)",[11] = "Purchera (Sky)",[12] = "Purchera (Forest)",[13] = "Mentalis (Basic)",[14] = "Mentalis (Natural)",[15] = "Mentalis (Forest)",[16] = "Mentalis (Grassland)",[17] = "Karinota (Basic)",[18] = "Karinota (Grassland)",[19] = "Karinota (Mountain)", [20] = "Chukar (Basic)",[21] = "Chukar (Natural)",[22] = "Chukar (Mountain)",[23] = "Chukar (Aquatic)",[24] = "Laperouse (Basic)",[25] = "Laperouse (Natural)",[26] = "Laperouse (Desert)",[27] = "Laperouse (Grassland)",[28] = "Anpipitto (Basic)",[29] = "Anpipitto (Sky)", [30] = "Anpipitto (Desert)",[31] = "Ruficors (Basic)",[32] = "Ruficors (Grassland)",[33] = "Ruficors (Aquatic)",[34] = "Cotta (Basic)",[35] = "Cotta (Natural)",[36] = "Cotta (Desert)",[37] = "Rupicola (Basic)",[38] = "Rupicola (Grassland)",[39] = "Rupicola (Sky)", [40] = "Willcock (Basic)",[41] = "Willcock (Natural)",[42] = "Willcock (Forest)",[43] = "Skrippa (Basic)",[44] = "Skrippa (Aquatic)",[45] = "Cabot (Basic)",[46] = "Cabot (Natural)",[47] = "Makyuretto (Basic)",[48] = "Makyuretto (Natural)",[49] = "Makyuretto (Grassland)", [50] = "Makyuretto (Forest)",[51] = "Coronet (Basic)",[52] = "Coronet (Aquatic)",[53] = "Coronet (Grassland)",[54] = "Tataupa (Basic)",[55] = "Tataupa (Desert)",[56] = "Tataupa (Forest)",[57] = "Chigomozu (Basic)",[58] = "Chigomozu (Natural)",[59] = "Koikaru (Basic)", [60] = "Koikaru (Natural)",[61] = "Koikaru (Forest)",[62] = "Pewee (Basic)",[63] = "Pewee (Natural)",[64] = "Pewee (Aquatic)",[65] = "Pewee (Mountain)",[66] = "Chapmani (Basic)",[67] = "Chapmani (Natural)",[68] = "Hyuming (Basic)",[69] = "Hyuming (Natural)", [70] = "Hyuming (Mountain)",[71] = "Pamirio (Basic)",[72] = "Pamirio (Natural)",[73] = "Pamirio (Sky)",[74] = "Pamirio (Desert)",[75] = "Mistashi (Basic)",[76] = "Mistashi (Forest)",[77] = "Mistashi (Aquatic)",[78] = "Parrotto (Basic)",[79] = "Parrotto (Natural)", [80] = "Nebularia (Basic)",[81] = "Nebularia (Natural)",[82] = "Granti (Basic)",[83] = "Granti (Nautral)",[84] = "Granti (Desert)",[85] = "Penelope (Basic)",[86] = "Penelope (Aquatic)",[87] = "Penelope (Mountain)",[88] = "Ardea (Basic)",[89] = "Ardea (Natural)", [90] = "Ardea (Forest)",[91] = "Cerator (Basic)",[92] = "Cerator (Natural)",[93] = "Cerator (Mountain)",[94] = "Alpina (Basic)",[95] = "Alpina (Natural)",[96] = "Alpina (Aquatic)",[97] = "Alpina (Sky)",[98] = "Isuka (Basic)",[99] = "Isuka (Grassland)", [100] = "Bicolour (Basic)",[101] = "Bicolour (Natural)",[102] = "Hermit (Basic)",[103] = "Hermit (Natural)",[104] = "Hermit (Desert)",[105] = "Hermit (Grassland)",[106] = "Phoebe (Basic)",[107] = "Phoebe (Aquatic)",[108] = "Phoebe (Desert)",[109] = "Blossom (Basic)", [110] = "Blossom (Mountain)",[111] = "Rabricol (Basic)",[112] = "Rabricol (Natural)",[113] = "Rabricol (Aquatic)",[114] = "Demerus (Basic)",[115] = "Demerus (Natural)",[116] = "Demerus (Desert)",[117] = "Sparsa (Basic)",[118] = "Sparsa (Natural)",[119] = "Sparsa (Forest)", [120] = "Purprea (Basic)",[121] = "Purprea (Sky)",[122] = "Purprea (Grassland)",[123] = "Etopirika (Basic)",[124] = "Etopirika (Natural)",[125] = "Etopirika (Forest)",[126] = "Regulus (Basic)",[127] = "Regulus (Desert)",[128] = "Regulus (Sky)",[129] = "Akretto (Basic)", [130] = "Akretto (Natural)",[131] = "Akretto (Grassland)",[132] = "Akretto (Mountain)",[133] = "Seiran (Basic)",[134] = "Seiran (Mountain)",[135] = "Tectus (Basic)",[136] = "Tectus (Natural)",[137] = "Serrata (Basic)",[138] = "Serrata (Sky)",[139] = "Serrata (Forest)", [140] = "Kaya (T2)",[141] = "Beebalm (T2)",[142] = "Easydog (T2)",[143] = "Ruscus (T2)",[144] = "Ryuuguu (T2)",[145] = "Kanzou (T2)",[146] = "Ornithogalum (T2)",[147] = "Teletel (T2)",[148] = "Dendel (T2)",[149] = "Suguri (T2)", [150] = "Suguline (T2)",[151] = "Saiguliger (T2)",[152] = "Punica (T2)",[153] = "Punisto (T2)",[154] = "Oshe (T2)",[155] = "Barriarm (T2)",[156] = "Bashou (T2)",[157] = "Gentiana (T2)",[158] = "Gonum (T2)",[159] = "Gust (T2)", [160] = "Storm (T2)",[161] = "Tsunonasu (T2)",[162] = "Gigagigearth (T2)",[163] = "Liriope (T2)",[164] = "Lirimonarch (T2)",[165] = "Waratah (T2)",[166] = "Enteiou (T2)",[167] = "Gumi (T2)",[168] = "Gymnos (T2)",[169] = "Gymbaron (T2)", [170] = "Gymzyrus (T2)",[171] = "Gymzatan (T2)",[172] = "Angios (T2)",[173] = "Angigorgo (T2)",[174] = "Angipower (T2)",[175] = "Angioros (T2)",[176] = "Fungus (T2)",[177] = "Fungwar (T2)",[178] = "Funboost (T2)",[179] = "Funblade (T2)", [180] = "Rex (Basic)",[181] = "Rex (Natural-1)",[182] = "Rex (Desert)",[183] = "Rex (Forest)",[184] = "Rex (Natural-2)",[185] = "Doon (Basic)",[186] = "Doon (Natural-1)",[187] = "Doon (Sky)",[188] = "Doon (Aquatic)",[189] = "Doon (Natural-2)", [190] = "Gyuun (Basic)",[191] = "Gyuun (Natural-1)",[192] = "Gyuun (Aquatic)",[193] = "Gyuun (Forest)",[194] = "Gyuun (Natural-2)",[195] = "Diablos (Basic)",[196] = "Diablos (Natural-1)",[197] = "Diablos (Mountain)",[198] = "Diablos (Grassland)",[199] = "Diablos (Natural-2)"} --Names for the states that matter local BattleStates = { [5] = "Damage/Crit determination", [36] = "Move used determination", [63] = "hit/miss determiniation" } --Addresses I'm interested regarding speed version local Speed = { Enemy = {0x41F2,0x422A,0x4262}, State = 0x042C, Map = 0x4F90, Player_X = 0x4CF8, Player_Y = 0x4CFC, Money = 0x4CF4, Boss = 0x2888, Story = 0x4DD7, Music = 0x4AE2, --Seems like it's the background music ID; can use this to check if in battle Counter = 0x0840, Battle_State = 0x2C16, Miss = 0x2C14, Crit = 0x2C22, Move = 0x2B06, Damage = 0x2A0B, RNG1 = 0x5E08, RNG2 = 0x5E10 } --Addresses I'm interested regarding power version local Power = { Enemy = {0x4202,0x423A,0x4272}, State = 0x043C, Map = 0x4FA0, Player_X = 0x4D08, Player_Y = 0x4D0C, Money = 0x4D04, Boss = 0x2898, Story = 0x4DE7, Music = 0x4AF2, Counter = 0x0850, Battle_State = 0x2C26, Miss = 0x2C24, Crit = 0x2C32, Move = 0x2B16, Damage = 0x2A1B, RNG1 = 0x5E18, RNG2 = 0x5E20 } local Enemy_data = { Level, HP_Max, HP_Now, DP, Speed, Attack, Defence, Special, Nature, FD, Friend, Attack1, Attack2, Attack3, Attack4, Next } local framelimit = 500 --[[Since its determined as "Move used" followed by "Miss/Hit" followed by "Damage/Crit" in that order, all separately, it makes more sense to have a toggle rather than record all 3 Toggle parameters are Crit, Moves or Miss ]]-- local toggle = {[5]="Crit",[36]="Moves",[63]="Miss",[31]="Ally"} --In Hex, the above is 0x5, 0x24, 0x3F, 0x1F respectively while true do local Addresses local RNG1 local RNG2 local miss local crit local ally while version() ~= "NA" do Addresses = (version() == "Power" and Power or Speed) State = memory.readbyte(Addresses.Battle_State) RNG1 = memory.read_u32_le(Addresses.RNG1) RNG2 = memory.read_u32_le(Addresses.RNG2) if toggle[State] == nil then console.log("Please start the script at the states 5, 31, 36 or 63") console.log("In Hex, the above is 0x5, 0x24, 0x1F, 0x3F respectively") console.log("RNG is:") console.log(memory.read_u32_le(0x5E08).."\t"..memory.read_u32_le(0x5E10)) client.pause() end --Just in case something happens that causes map to go above 170 --Checking if in battle if (memory.readbyte(Addresses.Music) >= 6 and memory.readbyte(Addresses.Music) <9> 199) then io.write(emu.framecount().."\t"..memory.read_u32_le(Addresses.Counter).."\t"..Attacks[0].." ("..memory.readbyte(Addresses.Move)..")\r\n") else io.write(emu.framecount().."\t"..memory.read_u32_le(Addresses.Counter).."\t"..Attacks[memory.readbyte(Addresses.Move)].." ("..memory.readbyte(Addresses.Move)..")\r\n") end emu.frameadvance() end io.close(file) elseif toggle[State] == "Miss" then file = io.open("Miss.txt", "w") io.output(file) io.write("Frames\tCounter\tMiss\tValue\r\n") for i = 0, framelimit do memory.writebyte(Addresses.Battle_State,0x3F) --To keep it at 0x3F memory.write_u32_le(Addresses.RNG1,RNG1) memory.write_u32_le(Addresses.RNG2,RNG2) if (memory.readbyte(Addresses.Miss) == 61) then miss = "Hit" elseif (memory.readbyte(Addresses.Miss) == 64) then miss = "Miss" else miss = "UNDEF" end io.write(emu.framecount().."\t"..memory.read_u32_le(Addresses.Counter).."\t"..miss.."\t"..memory.readbyte(Addresses.Miss).."\r\n") emu.frameadvance() end io.close(file) elseif toggle[State] == "Ally" then file = io.open("Ally.txt", "w") io.output(file) io.write("Frames\tCounter\tAlly\tValue\r\n") for i = 0, framelimit do memory.writebyte(Addresses.Battle_State,0x1F) --To keep it at 0x1F, or else it goes away --press A once in 0x1F to get 0x88, then another frame to find result savestate.saveslot(1) joypad.set({A = 1}) emu.frameadvance() emu.frameadvance() if (memory.readbyte(Addresses.Battle_State) == 0x89) then ally = "No" elseif (memory.readbyte(Addresses.Battle_State) == 0x55) then ally = "Yes" else ally = "UNDEF" end io.write(emu.framecount().."\t"..memory.read_u32_le(Addresses.Counter).."\t"..ally.."\t"..memory.readbyte(Addresses.Battle_State).."\r\n") savestate.loadslot(1) emu.frameadvance() end io.close(file) end end break end client.pause() break end
Moves are determined 5 frames after pressing A from whatever interface. Damage dealt and crits are determined a while after pressing A, after a bit of lag when the NPC does its attack sprite. For the script to print out correctly, go to the frame right before one of the 3 things you want to know is determined, and make a savestate. Then run the script. This is sadly needed, since I can't figure out how 03005E08, 03005E10 advances based on the counter. This also means it's technically possible to manipulate the battle a tiny bit by advancing the 2 RNGs from above before entering a fight. The good thing about this is that it's the counter (03000840) which seems to determine what Denjuu appears (they can group up). I'm trying to manipulate the event that your ally appears before your turn, since it means I can hit twice.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
MUGG wrote:
I'd like to run a luascript on a gameboy or GBA ROM to play self-written sound effects. Is this doable and how?
No idea, but did you mean formats like .wav or did you mean writing to memory to play sounds?
Niamek wrote:
Here is a part of my code.
Language: lua

hotkey = input.get() if hotkey[p] == true then gui.drawText(20,20,"Test") end
So I wrote this test code. My final aim is to display stuffs only when I press one key on the keyboard. However, with this code, I'm not seeing "Test" anywhere. Did I forget something?
1. Are you using BizHawk 2.0? I tried a script that uses input.get, and it either crashes or fails. It works in 1.11.4 however. 2. I made a function something like this, and it works in 1.11.4 Download hotkey test.lua
Language: lua

function inputdelay(inputs, delay) local is = input.get() local start = false if inputs ~= nil and (is[tostring(inputs)] ~=nil) then --console.log(is) --debugging while (delay > 0) do emu.frameadvance() delay = delay -1 end start = true return start end return start end local toggle = 0 while true do if inputdelay("C",10) then toggle = 1 elseif inputdelay("V",10) then toggle = 0 end if toggle == 1 then gui.drawText(20,20,"Test") end emu.frameadvance() end
I had to specify "C" and "V" to toggle, but otherwise it worked. I tested very briefly on 2.0 as well, and it didn't immediately crash at least. The toggle is placed outside the while loop so it won't get set back to 0 every frame.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Windows Normal Super Mario Bros. ""Any/100%"" in 02:18.78
What does that even mean when the game has only 1 stage with seemingly nothing to collect? Also what's "PoC"?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Does this only apply for games where the credits can be skipped? There's at least 2 runs published where since the credits cannot be skipped, and there's a very short dialogue at the end, they're forced to include it into the run. Also I wasn't expecting controversy regarding input time for this game. However, after looking at the guidelines, and realizing there's no mention of this anywhere, I guess here you go: http://tasvideos.org/userfiles/info/40211434841770422 I still don't think stopping at the "Save" screen looks too great for those playing back on emulator, but I don't want the run be rejected on something like this.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Blazephlozard wrote:
I could try to do the despawn glitch at more locations, but, I'd assume you already tried pretty thoroughly where it would be useful; the info I gave about the Stranglehold Swamp one is the most I know about it, seeming to require a pixel-perfect Sabreman location as well as letting the camera fully finish panning.
Please do if you have time; I probably miss some given the fact I missed the note on speedup. Also I've been thinking on how to record the times for Silver/Bronze treasures, so I made a script that checks the times and state of said treasure: Download sabre wulf treasure.lua
Language: lua

memory.usememorydomain("IWRAM") local area = {[0] = "Campsite Clearing", "River Crossing", "Blown Away", "Blackwyche Swamp", "Outlaw Inn", "Eastern Karnath", "Wishing Well", "Blackwyche Laboratory", "Karnath Canopy", "Tangle Terror", "Lower Karnath Mines", "Overgrown Outpost", "Knightlore Falls", "Upper Karnath Mines", "Tangle Terror Lookout", "Karnath Laboratory", "Torchlight Torment", "Deep Dark Dugout", "Stinky Cavern", "Mining Mayhem", "Lookout Ledge", "Crumble Crevice", "Stranglehold Swamp", "Underwurlde Laboratory", "Stinger Strangle", "Frantic Fissure", "Hobbled Hamlet", "Stinkhorn Swamp", "Rocky Mount", "Viper Vines", "Terror Temple", "Entombed Laboratory", "Snowy Knoll", "Frosty's Grotto", "Shivery Peaks", "Wafty Shaft", "Icy Nook", "Gusty Gully", "Coalhouse Climb", "Knightlore Laboratory", "Flames of Fury", "Ritval Ruins", "Filthy Factory", "Mortar Mountain", "Industrial Carnage", "House on the Hill", "Heavy Metal", "Nightshade Laboratory", "Tumbledown Temple", "Watch Out Below", "Magical Mayhem", "Town and Out", "Wings of Steel", "Craggy Crack", "This Old House", "Imhotep Laboratory", "Rooftop Rampage", "Temple Plains", "Cluster Keep", "Factory Furnace", "Bind Alley", "Firing Squad", "Cobbled Courtyard", "Dragonskulle Laboratory"} local silver = 0 local bronze = 0 local prev = 0 while true do local state = memory.read_s8(0x53BA) local timer = memory.read_u32_le(0x0230) local map = memory.read_s8(0x01A4) gui.drawText(0,30,area[map],null,null,10,null,null) gui.drawText(0,40,"State "..state,null,null,10,null,null) gui.drawText(0,50,"Time "..timer,null,null,10,null,null) gui.drawText(0,60,"Silver: "..silver.."Bronze: "..bronze) gui.drawText(0,70,"Prev: "..prev) if area[map] ~= nil and state > 0 then if prev ~= state then if state == 2 then silver = timer end if state == 3 then bronze = timer end prev = state end end if state == 0 then silver = 0 bronze = 0 prev = 0 end emu.frameadvance() end
I ran this on every stage, and got these frames https://docs.google.com/spreadsheets/d/1rmYdGHPpAbha9eFiMUP4GPH_kiyfsX6pQKIxo_zVFmc/edit?usp=sharing See the "Treasure" sheet for the times. Gold is worth 50GP each, silver 35GP, and bronze 20GP. Buying one of everything from the store costs 5600GP however. Additionally, some of the treasure only appear the 2nd time you play through the stage, so that makes it only 40 stages worth of gold, or 2000GP. Where would I get the rest of 3600GP? One good thing at least is that this leaves 16 stages where I can ignore the timer, since there's no treasure there for the first run of it.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Sorry to bump this, but has there been any progress on this?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Blazephlozard wrote:
jlun2 wrote:
Fog wrote:
For an encoding point of view, it's better to have the credits, and we can cut out the save your progress bit afterwards (like what is done for for Harry Potter PSX)
I rather have the encode be extended with a note that the last input has been changed to show the credits rather than extend the displayed time by ~10% of the run. I have poor experience with people who seem to only look at the displayed time on Youtube at a glance, and go "your run is slower than X" without actually knowing why it was longer. Sorry.
He's saying to make last input be what takes you to credits (which would make the displayed movie length shorter) and the encoder could do the save input (or you provide a secondary movie file that does the save input for encoders to use). I did the same with Grunty's Revenge. And I do agree it'd be nice to have the credits in.
I already mentioned I'd allowed the encoder to extend the movie, but not replace the file but here you go http://tasvideos.org/userfiles/info/40188099112600993 Please do not replace the run with that and only use it for encoding. Ie. do what was done with FatRatKnight's run please.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I know it looks rather demotivating that the forums seems rather dead, but I recommend you at least still post your findings and WIPs on it. More than once I ended up reinventing the wheel, because I forgot to post some tricks I found, then completely forgot they existed until I went back to the run much later. Even if you get no feedback, it would still help anyone in the future looking back at the thread, if they were ever interested in the run.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Hey I remember this game. I'm glad you didn't quit over the first rejection; thanks for making this run! 😊
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Since this run, while is Vault eligible, does not show much of the game, I'm going to make a run that forgoes using the demo unlock glitch, which will aim for the Moons tier. Actually, I've already started, but it's going to take a while to finish.
I envy you. I have ideas similar to this for different games more than once, but usually end up backing off due to the sheer complexity of either the game, the route, or "what constitutes as not broken if everything is broken". lol Regarding the run, it was short, but rather boring due you walking from 1 castle to the next with pauses in between. Voted no. Also should this be branchless since it's an any%?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Sesame Street ABC "100%"
I rerecorded around 10-20 different sections about 3 or 4 times.
I know I shouldn't judge runs by the rerecord counter, but given the "100%" goal is usually "harder" relatively speaking than an any%, and this last 5 minutes and takes 3-4 rerecords every 10-20 sections, for all I know this is the easiest 100% goal I've ever seen (so far). Can someone please encode this? Edit: Don't have FCEUX 2.1.4 (desynced in 2.2.2) but apparently it lacks a percentage counter. Oh well.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Fog wrote:
For an encoding point of view, it's better to have the credits, and we can cut out the save your progress bit afterwards (like what is done for for Harry Potter PSX)
I rather have the encode be extended with a note that the last input has been changed to show the credits rather than extend the displayed time by ~10% of the run. I have poor experience with people who seem to only look at the displayed time on Youtube at a glance, and go "your run is slower than X" without actually knowing why it was longer. Sorry.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Fog wrote:
Is there a reason why the credits were skipped? Would it be a problem to update the movie file with a file which doesn't skip the credits?
The credits start at frame 193481. If I let it roll, it would last until 212525. If I don't press A at the end, it will get stuck at this screen: Which in case if the image fails to load, it is the "Save your progress?" screen. I decided that waiting 05:17.40 just to press A would not add too much, so I skipped it.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I love how they messed up the transparency for the bomb sprites lol. The run is ok. Meh vote. Is there no other way to clip out earlier? What happens if you clip OoB in other places?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
jlun2 wrote:
Sorry for the double post, but does anyone have an issue with the latest (1.13.0) version for BizHawk where this box for recent files http://i.imgur.com/kfTv5ES.png appears to be always blank once the emulator is closed then reopened? As in it saves the last file used until the emulator is closed, which it then "forgets" everything in recent.
This appears to still be the case for 2.0. I tried opening a movie on the interim build, but it simply gives an error: https://pastebin.com/CXVvhnSc If it helps, this is my system: Edit: Got a file running by making a new TASproj using 2.0, then transplanting the old input to it. Unfortunately, the recent tab still does not remember the movie after closing and reopening BizHawk. Edit2: For future reference, the errors from the pics seems to stem from opening a tasproj from a past BizHawk revision on 2.0. If anyone ever reads this and gets a similar error, make a new tasproj using 2.0, then copy paste the input from the old tasproj to it. You'll lose the states, but it recovers the movie input. Edit 3: Another bug: Right click the branches box here: Move the mouse slightly next to the tooltip shown, and right click again on the branch box. It will give an error: https://pastebin.com/UkHjJdnr