ID:2349595
 
(See the best response by Kaiochao.)
I haven't touched the software in ages, but I recently had the urge to make a Grim Prospects variant to test the revamped physical version I've always wanted to make. Unfortunately, the old version doesn't appear to even run anymore so I don't know how much I need to reprogram. I get a blank ad screen and then it crashes. (I've yet to try all my other games yet, but those I have appear to work.)

1) Does the game work for anyone else? http://www.byond.com/games/ACWraith/GrimProspects

2) Is anyone aware of what BYOND changes I need to adjust for? For reference, this is a BYOND 4.x mapless game using multiple grids and nested frames.
Best response
I see the same thing: a blank black window that quickly closes automatically. It isn't "crashing" though.

By hosting the game in Dream Daemon, I've managed to catch a runtime error that is probably causing the client to fail to connect to a mob properly:
runtime error: list index out of bounds
proc name: New (/client/New)
usr: null
src: Kaiochao (/client)
call stack:
Kaiochao (/client): New()

Nothing comes to mind that would make this depend on the BYOND version you're using to run it, though...
I haven't touched the code in years. I wonder if there's been skin API changes. The code grabs some buttons when a client is created.



Code:
client

//==========================================================================
var
picURL = ""
volumeEffects = 50
volumeMusic = 100
hearGlobal = TRUE
speakGlobal = FALSE

globalEnter = TRUE
globalChat = TRUE
globalExit = TRUE

localEnter = TRUE
localChat = TRUE
localExit = TRUE

//==========================================================================
//--------------------------------------------------------------------------
New()
var/list/buttons = params2list( \
winget(src,"enterGlobal;chatGlobal;exitGlobal;enterLocal;chatLocal;exitLocal;","is-checked") )
src.globalEnter = (buttons[buttons[1]] == "true")
src.globalChat = (buttons[buttons[2]] == "true")
src.globalExit = (buttons[buttons[3]] == "true")
src.localEnter = (buttons[buttons[4]] == "true")
src.localChat = (buttons[buttons[5]] == "true")
src.localExit = (buttons[buttons[6]] == "true")

..()

winset(src,null,"globalSpeak.is-checked=false;globalHear.is-checked=true;globalHear.is-visible=true;")

var
Player/P = src.mob
nameClient = "[src]"
if ( istype(P) )
P.ResetPic()
nameClient = P.nameChat
G.gMines.p_OutputAll("\[[time2text(world.realtime,"hh:mm:ss")]\] <strong>[nameClient]</strong> entered the server.","roomsLog")

G.gMOTD.motd_DisplayAdministrator(src)

if (ckey(world.host) == ckey(src.key))
G.AddHostInterface(src)
else
G.RemoveHostInterface(src)
if (world.port)
winset(src,"childSub","left=motd;right=motd_confirm;")
else
winset(src,"childSub","left=chat_out;right=chat_in;")
src << output("\icon['banner32.png'] <span class='admin'>You may play this game alone or on a server with others. To host a server, log in with BYOND Dream Seeker or use BYOND Dream Daemon.</span>","chat")

G.gMines.p_DisplayRoomsToViewer(src.mob)
if ( src.CheckPassport(PASSPORT_GRIM_PROSPECTS) || src.CheckPassport(PASSPORT_FOOLDOM_COME) )
winset(src,"buttonSubscribe","command=createRoom;text='Create Mine';")
else
winset(src,"buttonSubscribe","command=subscribe;text=Subscribe;")

src.help()
src.music()


//==========================================================================
verb
//----------------------------------------------------------------------
help()
src << browse('GrimProspects.css',"display=0")

src << browse('GPcave.png',"display=0")

src << browse('GPchoice.png',"display=0")

src << browse('GPtunnelOH.png',"display=0")
src << browse('GPtunnelPH.png',"display=0")

src << browse('GPdiamond.png',"display=0")
src << browse('GPshovel.png',"display=0")

src << browse('GPpickaxe.png',"display=0")
src << browse('GPpickaxe2.png',"display=0")

src << browse('GPsword.png',"display=0")
src << browse('GPsword2.png',"display=0")

src << browse('GPsingleA.png',"display=0")
src << browse('GPsingleB.png',"display=0")
src << browse('GPsingleC.png',"display=0")

src << browse('GPsupportA.png',"display=0")
src << browse('GPsupportB.png',"display=0")
src << browse('GPsupportC.png',"display=0")

src << browse('GPtransfer.png',"display=0")

src << output('GrimProspects.html',"help")

winset(src,"childDefault","left=manual")

//----------------------------------------------------------------------
music()
src.volumeMusic = text2num( winget(src,"music","value") )
G.gMusic.volume = src.volumeMusic
G.gMusic.status |= SOUND_UPDATE
src << G.gMusic
It seems to be changes with in how the default client New() proc acts. I cut my code above the ..() and pasted it underneath the ..(). It ran. I'll mess around with it some more and see if anything else is broken. Thanks. =)
winget sleeps. sleeping in client new has issues if you do it before the ..() since this is what accepts the client and assigns it a mob.