Post subject: Workflow questions on 3D games
ShilohPell
She/Her
Joined: 4/21/2017
Posts: 3
Hey there, guys. This is my first post on the forums. I've been messing around with TAS since I discovered it on Youtube and it's been a lot of fun. I'm excited to hone my skills. I do have a bit of an issue though. The tool I'm using right now is BizHawk and I've been studying its documentation and doing various experiments. I've gained a certain level of proficiency in creating input logs for 2D games like Sonic, Megaman, and Mario Bros so I thought I'd give a 3D game a try. So I loaded up Mario 64 and I'm kinda stuck. TASing 2D games is pretty simple. You just have to tell it what buttons you're pressing when. But I'm getting issues when I try to create an inputs log with an analog stick. I'm using the TAStudio of course and analogue inputs aren't as simple as clicking the box. I find I either have to grab my gamepad and hold down the stick while its in record mode, which tends to give me less precise results, or open up the virtual gamepad, record a single frame of input, advance the emulation, then drag the virtual analog stick back into the proper place again. And so on and so on through hundreds of frames. Neither of these methods are providing me satisfactory results so I thought I'd ask here and see if someone could kindly show me a demonstration of their workflow for 3D games so I have somewhere to start building my method. Any tips?
Noxxa
They/Them
Expert player, Moderator (4131)
Joined: 8/14/2009
Posts: 4083
Location: The Netherlands
What I do for 3D games in BizHawk is to load up a lua script that continually sets analog input using a few x/y variables, and uses keyboard input to modify said variables. There are several ways you can go with that, thanks to the power of lua scripting, but here's a simple example that maps WASD to analog inputs for player 1's left stick (script setup for PSXHawk, but can also be applied to N64 with minor changes):
Language: lua

local x = 128 local y = 128 while true do keyTable = input.get() analogTable = joypad.get(1) if keyTable ['A'] == true then x = "1" elseif keyTable ['D'] == true then x = "255" else x = "128" end if keyTable ['W'] == true then y = "1" elseif keyTable ['S'] == true then y = "255" else y = "128" end analogTable["LStick X"] = x analogTable["LStick Y"] = y joypad.setanalog(analogTable, 1) emu.yield() end
Of course this sample isn't practical for TASing yet, but there's plenty of stuff you can do with the x and y variables to get the numbers you want. Use keys to increase/decrease numbers, use forms to input numbers, etc.
http://www.youtube.com/Noxxa <dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects. <Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits <adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
Editor, Skilled player (1502)
Joined: 7/9/2010
Posts: 1317
Since by 3D you mean graphics and not optimaly vectors, and the problem you stated wasn't related to neither of those, but to input. As Mothrayas suggested a lua script is a good way to set the analog stick to a desired position in a few clicks, it's much quicker than typing it in TAStudio or in Virtual Pad. I also have some unfinished lua script for that: User movie #28485160549799088 But it's very clumsy as it is as BizHawk doesn't have lua functions to implement it properly. For ego shooters you probably don't need a script, unless the game accepts different input equally and you want to skip those.
Favorite animal: STOCK Gt(ROSA)26Sortm1.1(rtTA,EGFP)Nagy Grm7Tg(SMN2)89Ahmb Smn1tm1Msd Tg(SMN2*delta7)4299Ahmb Tg(tetO-SMN2,-luc)#aAhmb/J YouTube Twitch