Hey Reddit, my name's Josh Goldberg; I'm the programmer behind FullScreenMario.com - an HTML5 remake of Nintendo's Super Mario Bros. You can play it for yourself on http://www.fullscreenmario.com, or grab the source code on http://www.github.com/DiogenesTheCynic/FullScreenMario (please post all bug reports there as well, after checking if they're already posted). Go ahead and AMA!

Proof: http://reddit.fullscreenmario.com, https://twitter.com/FullScreenMario, https://www.facebook.com/FullScreenMario

4:45 update: All right everyone, thanks for the great questions! Keanu Reaves is doing an AMA so we're done here.

Comments: 271 • Responses: 70  • Date: 

radium-v243 karma

I'm going to be brutally honest here, and I'm probably going to get down-voted, but I'm not impressed with the underlying code for the project. I don't even know where to begin.

You're obviously passionate about Javascript, but runtime engines and best practices have changed dramatically in the last few years. Some things that stick out could easily be chocked up to coding style or preference, but when those preferences aren't well-adjusted to current-day standards, it leads to a perpetuation of those bad practices and hinders the growth and evolution of web development overall.

I'm posting this here, instead of on Github, because these aren't quite bug reports. I'd be more than happy to contribute though.

  1. Syntax and readability are more important than shortcuts.

    Cutting corners in the interest of character count is useless. It's better to be able to read the code than to have to interpret it line-by-line.

    For hinting, I recommend JSHint. It'll be nicer than JSLint, but it'll still likely hurt your feelings.

    Here are some JSHint errors/warnings that popped up:

    The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.

    Expected an identifier and instead saw 'arguments' (a reserved word).

    Expected a 'break' statement before 'case'.

    A lot of syntax errors can be solved by linting or hinting, and following a style guide. Here's Google's Javascript Style Guide. You'll find that most projects on Github follow the same code conventions, and for very good reason. When you make your code consistent and readable, other developers will be more likely to like you and contribute to your projects.

  2. Read Douglas Crockford's Javascript: The Good Parts and Nicholas Zakas' Maintainable Javascript.

  3. Use an AMD-style, modular system like Require.js or Yahoo Module Pattern because Global variables are evil. The basic idea behind a modular system is that every piece of functionality is broken down to its basic form, and no less. It helps to keep things organized. Even if you choose not to use a framework, following a trusted organizational pattern is a good idea. Consistency is key.

  4. Check out Backbone.js or Underscore for data manipulation.

I really like the project, but the code is unwieldy and confusing.

HurpaDurpDeeDurp308 karma

Upvoted, I definitely agree with you on all aspects. I started the project not really knowing much about Javascript, or larger projects in general.

BobbyTrouble125 karma

Humility from a programmer? You're a rare breed, friend.

TwinBottles36 karma

No he is not. Programmers are a humble bunch.

saltyjohnson58 karma

Well I know I'm a million times as humble as thou art.

HurpaDurpDeeDurp3 karma

amlettes

3R1C45 karma

This was very respectful and well-written. The author is a student and seems enthusiastically open to suggestions and commits to the source, so I'm sure he will appreciate this.

HurpaDurpDeeDurp37 karma

also upvoted :P

jav03251 karma

kill fuck marry: Peach, Baby Peach, Mario.

HurpaDurpDeeDurp158 karma

Kill Mario, Marry Peach, not allowed to say the last one.

abelcc45 karma

Do you have permission from Nintendo to do it?

HurpaDurpDeeDurp67 karma

Nope! I emailed their legal team but other than the WashPost article they haven't said anything.

NO0x03330 karma

Have you gotten any job offers as a a result of this project?

HurpaDurpDeeDurp48 karma

A few ;)

HonorConnor14 karma

[deleted]

HurpaDurpDeeDurp51 karma

I don't know the etiquette for this type of stuff, yeah.

Cognuss24 karma

Obviously you're a talented web developer, so as a fellow web dev I must ask. What do you do for a living? Do you do web development for a large/medium/small company, self-employed, do something completely different?

Above all, thanks and much congratulations, good sir!

HurpaDurpDeeDurp46 karma

implying I make a living

I've done a few websites, but so far my income comes from the folks, and a summer internship that extends part time during the year.

keko19120 karma

1)Make a blog

2)Adsense the blog

3) Link from the game to adsensed blog

4) ????

5) Profit

HurpaDurpDeeDurp14 karma

Man, if only I had the time...

rsoxguy1223 karma

How is assignment 2 for web sys dev coming?

HurpaDurpDeeDurp28 karma

LOL ... forgot about that. We'll get around to it...

Dcourtwreck20 karma

May I ask why the game runs so slowly for me? Is it because of firefox? I don't have a powerhouse of a machine, but I feel a triple core phenom and a couple gigs of ram should do the trick.

HurpaDurpDeeDurp14 karma

It should, but the game's rendering engine isn't extremely powerful. Try Chrome? Otherwise you can try making the screen size smaller, which kinda kills the point of naming it "full screen" but makes it easier for your browser to redraw.

phree_radical9 karma

It's painfully slow for me in Chrome. If I had to guess, I'd bet you're rendering everything as tiles across the entire screen and could improve it by prerendering them to larger tiles. But that still doesn't seem like such a big deal, so I'd go so far as to guess that you're rendering the tiles for the entire level even if they're off the screen...

HurpaDurpDeeDurp21 karma

You seem like you know what you're talking about - if you can optimize the code, it'd be great if you can make a commit!

https://github.com/Diogenesthecynic/FullScreenMario/blob/master/sprites.js

MrStarr12 karma

Do you plan on making any other old school full screen games?

HurpaDurpDeeDurp41 karma

If Nintendo doesn't send a Cease & Desist, Pokemon's next! That won't be for a while though, there are soooo many things to be done with Mario...

abrAaKaHanK28 karma

Nope. Skip Mario. Make Pokemon. I will pay you millions of dollars.

HurpaDurpDeeDurp19 karma

It's a deal!

savemejebus011 karma

I thought I wasted enough of my life in my childhood. Thanks for bringing it back! How much information is the entire game?

HurpaDurpDeeDurp8 karma

If you're asking about documentation, there should be some good stuff on the GitHub. I'll be submitting an article to GamaSutra soon, which will go over the basics of how it works.

Necro edit: http://bit.ly/HhIAKq

Toyou4yu9 karma

What inspired you to do this?

HurpaDurpDeeDurp16 karma

Three things:

  1. It's the 21st century and we're still emulating games from the 1980s that were made for screens the size of post-its. Nintendo can make as many Pokemon XYZ ice cream cones or whatever as they want that take advantage of modern tech, but our nostalgia's already been attached to the older stuff. We should be able to play games like SMB or Mario or Zelda without cheesy modern remake graphics.

  2. Tech recruiters.

  3. A joke so incredibly vulgar nobody shall ever hear or speak of it again.

Edit: Oh crap almost forgot, four things! http://marathon.sourceforge.net/

corporat11 karma

We need to hear the joke.

HurpaDurpDeeDurp7 karma

You won't.

corporat9 karma

Hey Josh! Congrats on being awesome.

Are there any funny bugs that you found during development that you'd like to share?

What kind of work went into the random level generator to make it not just a jumbled mess?

How much is it costing you to run the server?

Thanks for doing the AMA. Press on

HurpaDurpDeeDurp14 karma

Peach flipping the player off, that's one I didn't know before.

The random level generator was a pretty easy thing at first but took FOREVER to get right (and it still messes up once in a while). It follows a pretty simple logic for most settings:

  1. Place a floor of a random length

  2. Place 'obstacles' every 3 or 4 blocks on that floor

Within that logic, each obstacle can be anything from a pipe to some bricks to nothing at all; it changes for each setting.

There's actually no back-end at all for FSM beyond just a file server, so it's on Dreamhost shared hosting right now. $10 a month because there wasn't a sale when I signed up years ago :( CloudFlare is doing CDN/caching so it doesn't keep crashing, like when it first got discovered.

xraindrop8 karma

Ah yes, read an article about you yesterday on a Dutch tech site. You're not concerned about paying lots of money just because you made something awesome like this?

HurpaDurpDeeDurp13 karma

Nintendo's legal efforts are a little more concerning now that the site's gotten discovered... Hopefully they'll either let it stay up (who knows?) or just send a C&D like with most other projects, in which case I'll comply. A few legal folks have mentioned bringing the case to court, but I don't have the resources or patience to deal with that.

anonymousamish7 karma

Change sprint/fire to something other than shift. Sticky keys got me killed!

HurpaDurpDeeDurp19 karma

Updated! Clear your cache, and the ctrl key will also work.

PrinceSebastian6 karma

Do you plan to make any other Mario or any 2D side scrollers full screen?

HurpaDurpDeeDurp5 karma

Oh, after Pokemon, who knows? I'd probably go on to Zelda or Metroid or something, but that's so far in the future it's hard to plan.

Captainstarbucs3 karma

No minus world? :(

HurpaDurpDeeDurp3 karma

:( maybe later? Post an issue on the GitHub and we'll see!

noshore4me3 karma

What's your favorite book?

HurpaDurpDeeDurp2 karma

Whew, good question... I haven't had time for reading much the last couple years, which is really sad because it's a terrific activity and something that definitely helped me grow as a kid/teen. Maybe one of the 4 in the Black Company's Glittering Stones series by Glen Cook?

Edit: Remembering One-Eye and Goblin, lol

trest523 karma

Because of you, I have started teaching my son TODAY about Mario (he's 5 and we're now having a blast on your website!) Always wanted to teach him but don't know how to get a hold of a funtional Nintendo. Thank you!!!

zelllooooooo5 karma

There are...other...ways to play Nintendo games using a computer.

HurpaDurpDeeDurp3 karma

That's beyond our legality. You must never go there, zelllooooooo.

HurpaDurpDeeDurp3 karma

Aww awesome!

Holocaust__Denier3 karma

Why do you hate Safari users?

HurpaDurpDeeDurp3 karma

That's clearly it!

(I'm working on IE and Safari support, there's something wrong with either the library or sprite rendering)

VerticalNystagmus3 karma

Can you start hanging out with the guy from Super Mario Crossover and make more awesome throwback Mario games? My 9 year old nephew loves your website and anything old-school Mario.

HurpaDurpDeeDurp6 karma

We haven't ever talked, but SMC's pretty freaking cool. Your nephew has terrific taste!

smokedrugsplz2 karma

I don't understand, there are tons of websites with the same exact game. Is this different or somthing?

HurpaDurpDeeDurp10 karma

Regular game size:

[:(]

This game's size:

[ :) :) :) :) :) :) :) ]

dsotm752 karma

Do you plan on doing something similar with other NES games in the future?

HurpaDurpDeeDurp2 karma

Definitely!

meowchamp442 karma

what made you pick the original Mario? Also how long did it take you to make this?

HurpaDurpDeeDurp5 karma

Older games are a lot simpler because they don't have complicated crap. Still, this crapper took a year to make.

MaxedTitans2 karma

What made you chose Mario over other older games?

HurpaDurpDeeDurp6 karma

Sentimental attachment! Also the game's popularity.

barryq252 karma

Have Nintendo said anything?

HurpaDurpDeeDurp3 karma

Just to Timothy B. Lee from the Washington Post: "Nintendo is seeking the removal of the content, as we vigorously protect against infringement of our intellectual property rights."

esyples2 karma

Check out all of the haters. Haha... Enjoy the success with this website

HurpaDurpDeeDurp8 karma

haters gonna hate, lovers gonna love

PartisanDrinkTank5 karma

I don't even want none of the above. I want to pias on you.

HurpaDurpDeeDurp2 karma

PartisanDrinkTank

Golden showers

Interesting...

jamisonglory2 karma

just curious
whens fullscreenPokemonRed coming out?

HurpaDurpDeeDurp3 karma

I actually bought the fullscreenpokemon.com domain, just so nobody else can take it :) but it'll be a very very long time, if ever.

mitman1 karma

What's your programming background like?

HurpaDurpDeeDurp1 karma

  • Java on BlueJ in high school for CS1 - AP

  • C++ in RPI's Data Structures, super hard but incredible class

  • PHP, MySQL, and JS for work with Matlab on the side (Drupal site, then some server stuff, a MySQL manager for BCI2000 in Matlab, and now moving BCI2000 from Qt4 to Qt5 with a video player).

  • This thing

masterofweapon1 karma

Why did you decide to use the up arrow for jump as opposed to a separate button? Really throws off my muscle memory! Are custom controls a possible future feature?

HurpaDurpDeeDurp1 karma

Yup! Real soon :)

_suited_up1 karma

where do you see the video game industry heading in 20 years time?

HurpaDurpDeeDurp9 karma

No idea, ask me when I'm drunk.

uknowme13371 karma

okay how big is it really. you know what i mean.

HurpaDurpDeeDurp1 karma

Forty nine.

RationalHeretic231 karma

Are you worried about the legal implications that could come of this? Would you take a personal financial/legal hit or would the site just be taken down?

HurpaDurpDeeDurp4 karma

The latter, by far. There's no way I'd suit up for this in court.

14bowlingz1 karma

Will an iOS compatible version ever become available?

HurpaDurpDeeDurp2 karma

Maybe? It depends how the Safari/IE compatibility goes. Touch controls would be terrific, though I don't know how it would fare on mobile in terms of performance.

LordAnkou1 karma

Hey, I'm a firefox user that actually just discovered FSM yesterday. Any chance you'll make it so us firefox users can play too without having to download chrome?

EDIT: Wow, so ignore this question. Last time I tried to play it it said I couldn't without chrome. Now I clicked it and it works for firefox. Thank you for being psychic and answering my question before I asked it.

HurpaDurpDeeDurp1 karma

Yup, clear your cache!

jayfeather3141 karma

Where would one report a glitch? I found one while playing a few days ago, and it's still not resolved.

HurpaDurpDeeDurp1 karma

GitHub and awaaay!

jayfeather3141 karma

Ah, thank you. It seems as though the issue has already been brought up. It's the world 1-2 jump-and-disappear glitch.

HurpaDurpDeeDurp1 karma

Yeah what the hell is with that?! That has literally never popped up while I'm in the room.

TheDalyGamer1 karma

If you could remake any other game, what would it be and why?

HurpaDurpDeeDurp2 karma

Pokemon Crystal (or Gen I+II in general), because hhnnghhh so good! Also I know how I could get the programming to work, and it would terrific for user engagement. Imagine being able to log onto any computer with internet+browser anywhere, logging on, and continuing your Pokemon game, in full screen. Boom!

Shadic1 karma

Any chance of you directly replicating the physics from the original game? Super Mario Bros. has some pretty fantastic and smooth controls that I think are missed often by fan replications.

HurpaDurpDeeDurp3 karma

missed often by fan replications

You can say it, FSM's not perfect :P

It's an active issue on the GitHub page, and definitely something I/we're working on.

branewalker2 karma

Are you aware of this guide?

HurpaDurpDeeDurp2 karma

Holy cow, that's a good one! No, I was just using my own GBAsp and The Mushroom Kingdom

Quenty1 karma

How much time did it take you to make this, and how did you learn/were motivated to learn HTML5? Web programming is cool, but finding an application is really hard -- where would you suggest starting?

HurpaDurpDeeDurp2 karma

Take classes if you can, but otherwise try some small projects on your own. www.codeacademy.com is a great place to start, HTML5/JS/CSS3 are terrific tools and really the future of the web.

RowTheBME1 karma

Hey Josh, that's what she said.

HurpaDurpDeeDurp2 karma

Heh, so glad you came!

AREXSCHMUL1 karma

Josh, stop making out with Lloyd and answer some damn questions!

HurpaDurpDeeDurp3 karma

EBONY AND IVORY, TOGETHER IN PERFECT HARMONY

AREXSCHMUL1 karma

Sorry, I was forced by the president.

HurpaDurpDeeDurp3 karma

Tell the Specialist Staff Captain Brigadier General Elect, 1.4 Stars, that once he gets his own AMA he can call the shots.

(Edit: unless you mean the actual b-president, in which case yes sir how are you doing today)

mitman1 karma

Hey Josh! Thank you for making it. It really brought back some good memories.

What are your favorite games to play/consoles to play on? How long did it take you to make?

Thanks for doing this AMA!

HurpaDurpDeeDurp3 karma

Oh boy, the first couple of Pokemon generations for GBC, Age of Conquerors for PC, Halo 1 for PC (also Xbox, but holy crap the PC multiplayer)...

I started it in October '12 and worked on it on and off for about the next year.

ArcticSpyder1 karma

How long did it take you to replicate the original game?

HurpaDurpDeeDurp2 karma

A year, off and on.

pixelsonascreen1 karma

Hey I jut discovered your site a few days ago! I wanted to thank you for the link to Aleph One I've been playing that as well as Mario now, have a good day!

kojoov1 karma

FSM. Flying Spaghetti Monster and Full Screen Mario, coincidence? I think not, also I sense a real lack of Mario's famous brother Loogy

HurpaDurpDeeDurp9 karma

3 letter acronyms, Half-Life 3 confirmed

erictheeric1 karma

Not sure how to post bugs in github...

Some OSs catch repeated tapping of shift and enable assistive technologies or launch a dialog prompting for such to be enabled. On my Windows 8 system, the latter occurs about halfway through 1-1 while running (after firing) and Mario sprints into a goomba to his death. Is there an alternative fire/sprint key?

HurpaDurpDeeDurp3 karma

I just updated the source to allow for using CTRL, and will be updating the public site for that within the hour. I'm also working on an options menu, so you can change your controls.

Edit: It's live! Clear your cache and ctrl'll work.

jayseejc1 karma

Any chance for multimonitor support? When I try and stretch the game accross both my screens it simply shows up blank on the second screen.

reciprocate061 karma

I broke Mario on the second level.

Hit the coin though the brick and he went up really fast and never came back.

but he can still shoot fire balls on the ground was unable to move him Picture for you http://imgur.com/a/1WJuo

all and all looks like a cool project though

pinkwaff1e1 karma

how's it going with the ladies?

HurpaDurpDeeDurp5 karma

Quick and easy, how I like 'em.

Bonejunky1 karma

If Nintendo forces you to shut down, will you shut the project down totally or will you just change the sprites and music?

HurpaDurpDeeDurp1 karma

I'll do whatever they want in shutting down, there's nothing to be gained by changing sprites and music. If the engine does become modular (like it should!), it'll probably end up just becoming a generalized framework, where Mario is just a replaceable module.

Fubar_Chess1 karma

Thanks for entertaining me during work hours! Wait, I didn't say that...shhhhh

If you had referenced the original code, was there anything that you were surprised about the method it was coded? (in terms of - "wow, that was very clever of him to do that particular level that way") and did you find any extra easter eggs?

HurpaDurpDeeDurp11 karma

World 1-1, first floor, 69 blocks wide. lel

TheMightyDane1 karma

I think I saw this in a tv show recently didn't I? I can't remember why I started playing it, but I came to the realization that I must've seen it being played somewhere.?

xraindrop0 karma

A fullscreen Legend of Zelda: Ocarina of Time would be awesome. Just Saiyan..

HonorConnor1 karma

I'm just Super Saiyan

HurpaDurpDeeDurp2 karma

http://www.youtube.com/watch?v=OYa5aQb3YGE

Edit: Turns out my roommate had never seen this, so we stopped his GTAV game to watch it. nnnghhh carrot cake

Dolphman1 karma

Is that even really possible? Thats is a 3d rendered game. few engines support web browser rendering

RoboRevo0 karma

I love Full Screen Mario. My question: will controller support be available? I don't know if it's even possible, but I'd love to play it with my Xbox controller.

StickleyMan-2 karma

Very cool game. Thanks!

Can your next game feature the live-action Super Mario? That would be fantastic.

HurpaDurpDeeDurp3 karma

kill me now D:

StickleyMan1 karma

But...Captain Lou Albano!

HurpaDurpDeeDurp3 karma

a cool guy

-MURS--3 karma

What kind of questions do you possibly expect to asked?

Why not just say I'm advertising the site?

HurpaDurpDeeDurp5 karma

I'm actually advertising myself, you silly goose.