Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Munkeymon
Aug 14, 2003

Motherfucker's got an
armor-piercing crowbar! Rigoddamndicu𝜆ous.



ExcessBLarg! posted:

code:
BITS = BITS && BITS;

BANANA

please tell me this machine that probably costs more than my home is named banana

Adbot
ADBOT LOVES YOU

Gul Banana
Nov 28, 2003

<-- i'm afraid there's a simpler reason..

Munkeymon
Aug 14, 2003

Motherfucker's got an
armor-piercing crowbar! Rigoddamndicu𝜆ous.



Gul Banana posted:

<-- i'm afraid there's a simpler reason..

Aww crud :(

Nippashish
Nov 2, 2005

Let me see you dance!

Subjunctive posted:

This basically never happens successfully. Maybe the next version is in a different language, but for a lot of this code there isn't and never will be another major version.

What kind of things are people doing with mainframes anyway?

Subjunctive
Sep 12, 2006

✨sparkle and shine✨

Ever had a bank account?

kitten smoothie
Dec 29, 2001

Up until at least the early 2000s my university used a mainframe for student records. Up until about 1999 or so, you would have to register for classes by either using a 3270 emulator on your home computer if you were lucky. Otherwise they had actual 3270 terminals littered about campus in various places, and on registration day you got to wait in a long-rear end line to use a terminal.

In 2000 they turned it into a web interface, but I'm about 99.9% sure it was just a 3270 screen scraper under the hood. It was slow as hell.

1337JiveTurkey
Feb 17, 2005

Nippashish posted:

What kind of things are people doing with mainframes anyway?

The one example I absolutely love is the Semi-Automated Business Research Environment which was the first (?) distributed business application. It basically replaced the old manual system of booking airline flights back in the late 1950s by letting travel agencies use teletypes to query and book flights remotely on some ancient IBM mainframes. Originally it was just American Airlines but then they spun it off into a company called SABRE (later Sabre Holdings). SABRE offered their service to travel agents across the country and later on Compuserve and AOL, still running on mainframes. Eventually they decided to make the move into the modern world and built a web frontend for their mainframe app. The name?

Travelocity.

Scaramouche
Mar 26, 2001

SPACE FACE! SPACE FACE!

I had to deal with EBCDIC when making a no-holds-barred EDI parser. So weird, so old. Probably still present in about 1/4 of most of the major businesses out there that use EDI.

WHERE MY HAT IS AT
Jan 7, 2011

I'll spin up a zVM named banana in your honor at work tomorrow.

Gul Banana, I sent you a PM, I've been looking for another IBMer who knows stuff about mainframes to hopefully give me a hand with a long standing problem I haven't been able to figure out (I'm hoping you still work there and not at some other company that uses them). If you have a second I'd love to pick your brain.

nuvan
Mar 29, 2008

And the gentle call of the feral 3am "Everything is going so well you can't help but panic."

Nippashish posted:

What kind of things are people doing with mainframes anyway?

I would imagine that many insurance companies probably have a mainframe doing something somewhere.

I work for a fairly large TelCo, and we have some mainframe systems as well.

If anyone here is a student, and the mainframe stuff is interesting, IBM has in the past run a contest for students each year:
Master the Mainframe

The contest usually starts in October, IIRC.

I am, unfortunately, no longer eligible to compete, as I'm no longer a student. But I did get a number of t-shirts out of them, and in my last year of school, some extra swag for being fast on part 2.

carry on then
Jul 10, 2010

by VideoGames

(and can't post for 10 years!)

Oh man, z/OS. Where I work we have a product that runs on z/OS, and the builds for it always seem to have special issues that builds for the other platforms don't. I think someone was sending around a "no really, programming z/OS isn't that scary once you know the differences" PDF on the mailing list :v:

Marsol0
Jun 6, 2004
No avatar. I just saved you some load time. You're welcome.
The County Government from where I grew up still uses a mainframe to handle property taxes. When they moved into their current building the mainframe didn't come apart into small enough pieces to fit in the freight elevator (for some reason they decided the data center should be on the 10th floor), so they took the windows off the side of the building and helicoptered it up.

Cast_No_Shadow
Jun 8, 2010

The Republic of Luna Equestria is a huge, socially progressive nation, notable for its punitive income tax rates. Its compassionate, cynical population of 714m are ruled with an iron fist by the dictatorship government, which ensures that no-one outside the party gets too rich.

The problem in moving away from mainframes in banking and insurance is the combination of the current stuff works and is really stable and solid if a pain to work with and moving to new stuff comes with a truely insane price tag.

ijustam
Jun 20, 2005

I do VoIP integrations (connecting IVR inputs to external systems and the like) and mainframes are surprisingly common, particularly with government and health insurance.

Hiowf
Jun 28, 2013

We don't do .DOC in my cave.
This one takes a smidgen of crypto knowledge, but it's fairly hilarious if you do. Maybe slightly less so if you use Google Sync.

(Google Sync protocol, used by Chrome for storing your personal data safely etc)
https://chromium.googlesource.com/chromium/src.git/+/master/sync/util/nigori_unittest.cc

Check line 105, 109 and compare to line 123 and 128.

...yes, someone wrote a unit test *ensuring* the authentication does *not* detect some modifications of the message.

I'll leave the explanation for people that don't want to do crypto 101 for a later post.

Deus Rex
Mar 5, 2005

Skuto posted:

This one takes a smidgen of crypto knowledge, but it's fairly hilarious if you do. Maybe slightly less so if you use Google Sync.

(Google Sync protocol, used by Chrome for storing your personal data safely etc)
https://chromium.googlesource.com/chromium/src.git/+/master/sync/util/nigori_unittest.cc

Check line 105, 109 and compare to line 123 and 128.

...yes, someone wrote a unit test *ensuring* the authentication does *not* detect some modifications of the message.

I'll leave the explanation for people that don't want to do crypto 101 for a later post.

For the sake of posterity, here is a link to the file that goes to a specific commit so if somebody updates the file, the line numbers will be right and the error preserved:

https://chromium.googlesource.com/chromium/src.git/+/a17a62ab89a227166c665a4da0391c02111152ae/sync/util/nigori.cc

Hiowf
Jun 28, 2013

We don't do .DOC in my cave.

Deus Rex posted:

For the sake of posterity, here is a link to the file that goes to a specific commit so if somebody updates the file, the line numbers will be right and the error preserved:

https://chromium.googlesource.com/chromium/src.git/+/a17a62ab89a227166c665a4da0391c02111152ae/sync/util/nigori.cc

That's not really the correct one, I pointed to the unit test because I found the tests ensuring and documenting the brokenness more noteworthy than the actual crypto fail:
https://chromium.googlesource.com/chromium/src.git/+/a17a62ab89a227166c665a4da0391c02111152ae/sync/util/nigori_unittest.cc

In your file, the problem is at 206-207 and 220:
code:
  std::string iv(input.substr(0, kIvSize));  
  std::string ciphertext(input.substr(kIvSize, input.size() - (kIvSize + kHashSize)));
...
  if (!hmac.Sign(ciphertext, &expected[0], expected.size()))
Which is probably only obvious to people who do crypto regularly. The unit test on the other hand literally documents "we're now going to modify the message and check if the authentication still passes".

This passed code review, too.

zergstain
Dec 15, 2005

Is the problem that they should be including the IV in the hash?

Hiowf
Jun 28, 2013

We don't do .DOC in my cave.

zergstain posted:

Is the problem that they should be including the IV in the hash?

Yes. Without it being in the hash you can clobber the IV parts of the stream/packet and it'll decrypt the entire stream/packet as gibberish on the other side, yet will pass verification as "this is exactly the same as what the other side sent you!".

And someone wrote a test to confirm that.

DARPA Dad
Dec 9, 2008
(formatting and indentation preserved)

431 pages of C# code all in a single file.

quote:

if (saveload.getMapGridX == mapGridX && saveload.getMapGridY == mapGridY && saveload.getMapPosX == recallMapPosX && saveload.getMapPosY == recallMapPosY && saveload.getGoldNow == goldNow && saveload.getGoldAvailable == goldAvailable && saveload.getGoldTotal == goldTotal && saveload.getAtkLV == atkLevel && saveload.getBreathMaxBonus == breathMaxBonus && saveload.getBreathDmgBonus == breathDmgBonus && saveload.getClawDmgBonus == clawDmgBonus && saveload.getCritBonus == breathCritBonus && saveload.getCycleBonus == breathCycleBonus && saveload.getDefLV == defLevel && saveload.getHPBonus == drgnHPBonus && saveload.getSpikeBonus == spikeDRBonus && saveload.getDRBonus == drgnDRBonus && saveload.getSprLV == sptLevel && saveload.getFlyBonus == drgnFlyBonus && saveload.getFreezeBonus == freezeTimeBonus && saveload.getPreserveGP == preserveGP && saveload.getArmorRedBonus == acidArmorRedBonus && saveload.getEXPReducer == EXPReducer && saveload.getHPXP == drgnHPXP && saveload.getBreathMaxXP == breathMaxXP && saveload.getFlyXP == drgnFlyXP && saveload.getClawXP == clawXP && saveload.getBreathDmgXP == breathXP && saveload.getHPLV == drgnHPLV && saveload.getBreathMaxLV == breathMaxLV && saveload.getFlyLV == drgnFlyLV && saveload.getClawLV == clawLV && saveload.getBreathDmgLV == breathLV && saveload.getHatchling == have01Hatchling && saveload.getHPTreasure1 == drgnHPTreasure1 && saveload.getSmile == have02Smile && saveload.getHPTreasure2 == drgnHPTreasure2 && saveload.getCrest == have03Crest && saveload.getDRTreasure1 == drgnDRTreasure1 && saveload.getUnderpants == have04Underpants && saveload.getDRTreasure2 == drgnDRTreasure2 && saveload.getSollerets == have05Sollerets && saveload.getSpikeTreasure == spikeDRTreasure && saveload.getScepter == have06Scepter && saveload.getBreathDmgTreasure1 == breathDmgTreasure1 && saveload.getMomiji == have07Momiji && saveload.getBreathDmgTreasure2 == breathDmgTreasure2 && saveload.getNinjato == have08Ninjato && saveload.getBreathMaxTreasure1 == breathMaxTreasure1 && saveload.getRing == have09Ring && saveload.getBreathMaxTreasure2 == breathMaxTreasure2 && saveload.getSunset == have10Sunset && saveload.getBreathMaxTreasure3 == breathMaxTreasure3 && saveload.getDreihander == have11Dreihander && saveload.getClawDmgTreasure1 == clawDmgTreasure1 && saveload.getEndeavour == have12Endeavour && saveload.getClawDmgTreasure2 == clawDmgTreasure2 && saveload.getDoll == have13Doll && saveload.getClawSize == clawSize && saveload.getLiqueur == have14Liqueur && saveload.getArmorRedTreasure == acidArmorRedTreasure && saveload.getPenultima == have15Penultima && saveload.getBreathCycleTreasure == breathCycleTreasure && saveload.getLeaf == have16Leaf && saveload.getFlyTreasure1 == drgnFlyTreasure1 && saveload.getHTTYD == have17HTTYD && saveload.getFlyTreasure2 == drgnFlyTreasure2 && saveload.getGust == have18Gust && saveload.getFlyTreasure3 == drgnFlyTreasure3 && saveload.getShirt == have19Shirt && saveload.getFlyTreasure4 == drgnFlyTreasure4 && saveload.getDeduction == have20Deduction && saveload.getFreezeTreasure == freezeTreasure && saveload.getTopaz == have21Topaz && saveload.getSapphire == have22Sapphire && saveload.getGarnet == have23Garnet && saveload.getRuby == have24Ruby && saveload.getDiamond == have25Diamond && saveload.gets1e2On == on1e2 && saveload.gets1e3On == on1e3 && saveload.gets1ebOn == on1eB && saveload.gets2e1On == on2e1 && saveload.gets2e2On == on2e2 && saveload.gets2e3On == on2e3 && saveload.gets2ebOn == on2eB && saveload.gets3e1On == on3e1 && saveload.gets3e2On == on3e2 && saveload.gets3e3On == on3e3 && saveload.gets3ebOn == on3eB && saveload.gets4e1On == on4e1 && saveload.gets4e2On == on4e2 && saveload.gets4e3On == on4e3 && saveload.gets4e4On == on4e4 && saveload.gets4ebOn == on4eB && saveload.gets5e1On == on5e1 && saveload.gets5e2On == on5e2 && saveload.gets5ebOn == on5eB && saveload.gets6e1On == on6e1 && saveload.gets6eBOn == on6eB && saveload.gets7eBOn == on7eB && saveload.gets1e2Seen == seenStory1_2 && saveload.gets1eBSeen == seenStory1_B && saveload.gets2e2Seen == seenStory2_2 && saveload.gets2eBSeen == seenStory2_B && saveload.gets3eBSeen == seenStory3_B && saveload.gets4e4Seen == seenStory4_4 && saveload.gets4eBSeen == seenStory4_B && saveload.gets5eBSeen == seenStory5_B && saveload.gets6e1Seen == seenStory6_1 && saveload.gets7eBSeen == seenStory7_B && saveload.gethaveBolt == haveBolt && saveload.gethaveCold == haveFrost && saveload.gethaveAcid == haveAcid && saveload.gethaveHerb == haveGanja)
{
saveload.InitiateSave();
savingGame = false;
}

All this to not save the game.

EDIT: he loads all of his textures into memory every single frame

quote:

#region Instantiate Texture2D
Texture2D dragonSPSH, dragonClaw, dragonBreath, EdreySS, //player sprites
hudHP, hudBreath, breathHUD, HPBorder, hudCurrency, //HUD sprites
levelUpBG, levelUpNumerals, levelUpPrice, levelUpText,//level up sprites
mapBG, mapDragon, mapExit, mapHome, mapStage1e1, mapStage1e2, mapStage1e3, mapStage1eB,
mapStage2e1, mapStage2e2, mapStage2e3, mapStage2e4, mapStage2eB,
mapStage3e1, mapStage3e2, mapStage3e3, mapStage3eB,
mapStage4e1, mapStage4e2, mapStage4e3, mapStage4e4, mapStage4eB,
mapStage5e1, mapStage5e2, mapStage5eB,
mapStage6e1, mapStage6eB,
mapStage7eB, //world map sprites
mapConnectorHto1_1, mapConnector1_1to1_2, mapConnector1_2to1_3, mapConnector1_3to1_B, mapConnector1_3to6_1,
mapConnector1_Bto2_1, mapConnector1_Bto3_1, mapConnector1_Bto5_1,
mapConnector2_1to2_2, mapConnector2_1to4_2, mapConnector2_2to2_3, mapConnector2_2to2_4, mapConnector2_2to7_B, mapConnector2_3to2_B, mapConnector2_4to2_B,
mapConnector3_1to3_2, mapConnector3_2to3_3, mapConnector3_2to4_1, mapConnector3_3to3_B, mapConnector3_3to6_B,
mapConnector4_1to4_3, mapConnector4_2to4_3, mapConnector4_3to4_4, mapConnector4_4to4_B,
mapConnector5_1to5_2, mapConnector5_2to5_B, //world map connectors
a1BG, b5BG, //background sprites
campfireSS, smokeSS, //end of stage sprites
warpSS, //warp sprite
houseFG, houseBG, houseFG2F, houseBG2F, //house sprites
home01, home02, home03, home04, home05, home06, home07, home08, home09, home10, home11, home12, home13, home14, home15, home16, home17, home18, home19, home20, home21, home22, home23, home24, home25, homeGold, //home treasure sprites
a1s3p1FG, a1s3p2FG, a1s3p2BG, a1s3p3FG, a1s3p3BG, a1s3p4FG, a1s3p4aBG, a1s3p4bBG, a1s3p5FG, a1s3p5BG, a1s3p6BG, a1s3near1BG, a1s3near2BG, a1s3farBG, truckSS, truckSmokeSS, //1-3 sprites
boss1Floor, boss1BG, boss1LightsA, boss1LightsB, boss1SpectatorA, boss1SpectatorB, boss1SpectatorC, //1-B sprites
boss5Floor, boss5Chandelier, boss5BG, boss5FG, kingSS, kingProj, //5-B sprites
boss7Floor, boss7BGnear, boss7BGfar, //7-B sprites
coinSS, puffSS, plinkSS, sparkleSS, //system sprites
squireSS, sheepSS, ramSS, XXSS, stampedeSS, archerSS, //monster sprites
//monster projectile sprites
archerProjSS,
tm061SS, thunderShotSS, thunderBlastSS, thunderCloudSS, thunderClawDownSS, thunderClawUpSS, thunderClawHighSS, thunderClawLowSS,
ninjaGreenSS, ninjaPurpleSS, ninjaRedSS, ninjaYellowSS, ninjaDodgeSS,//boss 5 sprites
greenProj, greenBolt, greenCall, greenEsc, purpleProj, purpleGas, purpleSlash, redProj, redFireball, redPillar, redStar, redEsc, yellowProj, yellowLaser, yellowEsc,//boss 5 projectile sprites
generalSS,//boss 7a sprite
mechBodySS, mechArmFSS, mechSwordSS, mechCapeSS, mechHandFSS, mechArmBSS, mechPipesSS, mechHeadSS, mechBroochSS, //boss 7b sprites
mechCloudsSS, mechExhaustSS, mechFireLaserSS, mechIceStormSS, mechLaserCageSS, mechLaserReadySS, mechRocketFistSS, mechRocketFistRearSS, mechSatThunderSS, mechFeedbackSS, mechTeslaSS, mechThunderAltSS, mechThunderStruckSS, //boss 7b animations
allTreasureSS, text1SS, text2SS, text3SS, text4SS, text5SS, text6SS, text7SS, text8SS, text9SS, text10SS, text11SS, text12SS, text13SS, text14SS, text15SS, text16SS, text17SS, text18SS, text19SS, text20SS, text21SS, text22SS, text23SS, text24SS, text25SS, // treasure sprites
story1pg1SS, story1pg2SS, story1pg3SS, story1TextSS, //story 0
story1_2pg1SS, story1_2pg2SS, story1_2pg3SS, story1_2TextSS, //story 1-2
story1B_Apg1SS, story1B_Apg2SS, story1B_ATextSS,
story1B_Bpg1SS, story1B_Bpg2SS, story1B_BTextSS, //story 1-B
story7B_Apg1SS, story7B_ATextSS,
story7B_Bpg1SS, story7B_Bpg2SS, story7B_Bpg3SS, story7B_BTextSS, //story 7-B
storyEndingpg1SS, storyEndingpg2SS, storyEndingpg3SS, storyEndingpg4SS, storyEndingpg5SS,
endingOverlay1, endingOverlay2, endingOverlay3, endingOverlay4, endingFlight,
storyEnding_A_pg6SS, storyEnding_A_pg7SS,
storyEnding_B_pg6SS, storyEnding_B_pg7SS,
storyEnding_A_textSS, storyEnding_B_textSS, //story ending
creditsBlackBars, creditsPageSS, creditsBackgroundsSS, credits1, credits2, credits3, credits4, credits5, credits6, credits7, credits8, credits9, credits10, credits11, credits12, credits13, credits14, credits15, credits16, credits17, credits18, credits19, CressidaSS, FritzSS, creditsFinalPage; //credits
#endregion

#region Load Mattes
if (blackMatteSS == null)
{
blackMatteSS = Content.Load<Texture2D>("System/matteblack");
}
if (whiteMatteSS == null)
{
whiteMatteSS = Content.Load<Texture2D>("System/mattewhite");
}
Vector2 blackMatteLoc = new Vector2(drgnCamX - 50, drgnCamY - 90);
Vector2 whiteMatteLoc = new Vector2(drgnCamX - 50, drgnCamY - 90);
if (blackMatteOpacity > 0)
{
spriteBatch.Draw(blackMatteSS, new Rectangle(0, 0, 1380, 900), null, new Color(blackMatteOpacity, blackMatteOpacity, blackMatteOpacity, blackMatteOpacity), 0, -blackMatteLoc, SpriteEffects.None, 15);
}
if (whiteMatteOpacity > 0)
{
spriteBatch.Draw(whiteMatteSS, new Rectangle(0, 0, 1380, 900), null, new Color(whiteMatteOpacity, whiteMatteOpacity, whiteMatteOpacity, whiteMatteOpacity), 0, -whiteMatteLoc, SpriteEffects.None, 15);
}
#endregion

DARPA Dad fucked around with this message at 19:57 on Feb 24, 2015

Space Kablooey
May 6, 2009


i'm the ganja

DARPA Dad
Dec 9, 2008
Here's all of it if anyone wants to gaze upon the Ark of the Covenant https://www.dropbox.com/s/fj2nludeaaikbxc/drgn.txt

Kallikrates
Jul 7, 2002
Pro Lurker
Can't have more than 10 enemies?, a fun game.

Polio Vax Scene
Apr 5, 2009



That's by goon The White Dragon, his game is actually pretty fun but this is like his first foray into coding anything ever

v I dont deny that

Polio Vax Scene fucked around with this message at 20:15 on Feb 24, 2015

DARPA Dad
Dec 9, 2008

Manslaughter posted:

That's by goon The White Dragon, his game is actually pretty fun but this is like his first foray into coding anything ever

it's still really really funny

Dessert Rose
May 17, 2004

awoken in control of a lucid deep dream...
He hasn't ever heard of classes, apparently, and thinks that they are called "ints":

code:
    //dragon sprite int: facingdir, waittimer, damage done, damage received, etc.
        #region Dragon Sprite System int
        int drgnFacingDir = 0; //if DRAGON is facing right or left, increase y-pos on sprite sheet
        int drgnWaitTimer = 0; //if player touches nothing, DRAGON's idle animation
        int drgnInvTimer = 0; //counts DRAGON's invincibility franes
        int drgnInvOpacity = 255; //makes DRAGON blink while invincible
        int drgnKnockbackTimer = 0;
        int totalDamage = 0;
        int drgnHitTimer = 0;
        int drgnDamageTaken = 0;
        int damageCheck = 0;
        int ducking = 1;
        int duckingYMod = 0;
        int clawhitboxsize = 60;

        int drgnFacingHitbox = 0;
        #endregion
edit: apparently that's the only data type he knows how to use

Dessert Rose fucked around with this message at 20:18 on Feb 24, 2015

canis minor
May 4, 2011

DARPA Dad posted:

(formatting and indentation preserved)

431 pages of C# code all in a single file.


All this to not save the game.

EDIT: he loads all of his textures into memory every single frame

How can you even rationalize that? I guess everybody has different approach to the code, but at some point, one should take a look and ask themselves "how can I write it simpler". For example today, for me, it was 4 lines of different conditions, spanning two screen widths. I could have continued to add || and && and everything would be fine, yet I chose to rewrite it in a multiple of steps with assignments. Sure - writing code short is what I think of first, but there's this threshold where things start to get messy and I think of simplicity, for my own, and for my colleagues, sake.

How do you arrive to the code like this, where you don't see anything wrong? Is it the case "I'm worried of refactoring in case I break something", "it worked so far" laziness or what?

No Safe Word
Feb 26, 2005

Manslaughter posted:

That's by goon The White Dragon, his game is actually pretty fun but this is like his first foray into coding anything ever

v I dont deny that

Yup, if you have archives here's where the fun starts

Space Kablooey
May 6, 2009


canis minor posted:

How can you even rationalize that? I guess everybody has different approach to the code, but at some point, one should take a look and ask themselves "how can I write it simpler". For example today, for me, it was 4 lines of different conditions, spanning two screen widths. I could have continued to add || and && and everything would be fine, yet I chose to rewrite it in a multiple of steps with assignments. Sure - writing code short is what I think of first, but there's this threshold where things start to get messy and I think of simplicity, for my own, and for my colleagues, sake.

How do you arrive to the code like this, where you don't see anything wrong? Is it the case "I'm worried of refactoring in case I break something", "it worked so far" laziness or what?

I don't think he didn't see anything wrong with that (much in the contrary, actually), but he didn't know (AFAIK) that things like classes, functions and loops existed, much less knowing how they work and where to use them. And I'm almost certain that he had no one else to review his code, so why bother making it pretty?

I'm 99% sure he got better, so.

HappyHippo
Nov 19, 2003
Do you have an Air Miles Card?
I remember first learning BASIC as a kid and writing out stuff like "x1 = ..., x2 = ..., x3 = ..." and thinking there must be a better way. Then I learned about arrays and for loops and my whole world changed. I never would have had the patience to write that much code without them.

Spatial
Nov 15, 2007

Reminds me of the code in a similar act of pure lunatic perseverence, The Demon Rush. At least 10,000 lines of hardcoded dialogue, all manually line wrapped, all surrounded with quotes in a language with no escape characters, all assigned to individual variables. The entire game is a series of thousands upon thousands of if statements, all checked every frame.

You have to respect their willpower. :shobon:

Zorro KingOfEngland
May 7, 2008

Was that the one that had Hebrew language support and printer drivers in the executable?

Hammerite
Mar 9, 2007

And you don't remember what I said here, either, but it was pompous and stupid.
Jade Ear Joe
At one point I was kind of similar, but I did everything with arrays. I think everyone (certainly everyone self-taught) starts off doing things in oddball ways. It's when someone refuses to try to take on board ideas about how to improve that there is an actual issue.

Drastic Actions
Apr 7, 2009

FUCK YOU!
GET PUMPED!
Nap Ghost

Reading through that file filled me with both :psyduck: and :aaaaa:.

FlapYoJacks
Feb 12, 2009
It's amazing in every way, a true coding horror masterpiece.

qntm
Jun 17, 2009

quote:

This is a 22000 line game with all the logic in a single function and no loops

seiken
Feb 7, 2005

hah ha ha

I still have nightmares about it. Sometimes in a brief moment of lucidity I catch myself wondering whether we wouldn't have all been better off if nobody had gone and invented loops

New Yorp New Yorp
Jul 18, 2003

Only in Kenya.
Pillbug
That guy is awesome. If he can ship a working game while knowing that little about good programming practices, imagine what he'll be pulling off once he learns the ropes.

seiken
Feb 7, 2005

hah ha ha
Yeah, I definitely agree to some extent. When I was a teenager and hadn't set eyes on proper computer science yet I just used arrays for everything (like somebody above said) and I can't believe how much I managed to get done with only linear-scan algorithms. Associative containers were a complete eye-opener when some kind soul pointed out "what the gently caress". If this dude has the discipline to get something working using only scalar variables there's no telling what sort of things he'll be capable of once he reaches full power

Adbot
ADBOT LOVES YOU

Dessert Rose
May 17, 2004

awoken in control of a lucid deep dream...
I had no idea how to store an arbitrary number of things somewhere. Like, I knew what arrays were, and I knew what objects were, I just didn't know how you made an array of dynamic size at runtime.

Then someone showed me linked lists and it blew my mind.

I wrote a reasonably complex online game in mIRC script, before it had hash tables. I was dynamically composing variable names and storing all my player data in .ini files.

I wish I still had the files for that game, it would probably be a magical experience.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply