--- Log opened Mon Mar 23 00:00:15 2009 |
00:17 | | AnnoDomini [~farkoff@Nightstar-29356.neoplus.adsl.tpnet.pl] has quit [Quit: Nobody makes jokes in base 13.] |
01:15 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Quit: <Insert Humorous and/or serious exit message here>] |
01:31 | | * gnolam makes a mental note to tell AnnoDomini to please, /please/ stay the fuck away from D&D when next he logs on. |
01:31 | <@gnolam> | Please just let the system die already. :P |
01:39 | < McMartin> | You do realize it's probably older than half the channel. |
01:39 | < McMartin> | It's not going to go anywhere. |
01:39 | <@gnolam> | I know. |
01:41 | <@gnolam> | And its age - and thus userbase - is the only real reason it's still around. But that doesn't mean that people should try to shoehorn it into any kind of computer game. Ever. |
01:43 | < McMartin> | The tradition of doing so is also probably older than half the channel. |
01:43 | < McMartin> | Especially when it boils down to "chance to hit is linear with skill", which is, um, the default setup for basically every CRPG that wasn't explicitly mimicking somebody else's system. |
01:44 | < McMartin> | Which was kind of what I was aiming for, there. |
01:44 | < McMartin> | (This is also, of course ignoring that the western RPG that is generally held up as the Best One Ever Made was in fact a fairly detailed AD&D 2e game in both setting and mechanics) |
02:20 | | gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has quit [Quit: Z?] |
02:57 | < Derakon> | Which would that be, McM? |
02:57 | < Derakon> | Dragonlance? ¬.¬ |
03:07 | | * Vornicus blings. |
03:14 | <@ToxicFrog> | McMartin: I think he refers more to "let's take D&D and use it verbatim as our rules engine", a la NWN, not "let's take some of the good ideas and file the serial numbers off" |
03:14 | <@ToxicFrog> | Also, Planescape Torment is awesome in spite of its ruleset, not because of it. |
03:14 | < Derakon> | Ahh, yes. |
03:16 | <@ToxicFrog> | It gets away with it because 90% of the game is brilliantly written conversation and fascinating settings, and the rules are completely invisible in the former and irrelevant to the latter. |
03:16 | <@ToxicFrog> | The remaining 10%, ie, combat and stat management, is a painful chore that must be tolerated to get to the next good part, and not coincidentally is also where the rules show most. |
03:46 | <@MyCatVerbs> | ToxicFrog: NWN broke a few of 3.0D&D's rules in various ways. |
03:48 | <@MyCatVerbs> | Like they split Diplomacy up into two or three different skills, added a "discipline" skill that opposes attempts to hit characters with things like called shot and disarm. |
03:48 | <@ToxicFrog> | Right. |
03:48 | <@MyCatVerbs> | Those are the only ones that I ever spotted, though. |
03:48 | <@ToxicFrog> | But if forced to classify it, you would say "D&D 3.x with a few house rules on top" |
03:48 | <@MyCatVerbs> | Mmmmhmm. |
03:49 | <@ToxicFrog> | Contrast, say, Arcanum, Fallout, any CRPG. |
03:49 | <@MyCatVerbs> | 3.0D&D's version of Black Tentacles is much, much stronger than 3.5's. |
03:49 | <@MyCatVerbs> | It's practically a game-breaker. |
03:49 | <@MyCatVerbs> | Resultingly, I found NWN's combat quite amusing for purely Lovecraftian reasons. |
03:50 | <@MyCatVerbs> | Never played 'em, I'm afraid. |
03:50 | <@ToxicFrog> | Never having played Arcanum is tragic but kind of expected as it's not very well know... |
03:50 | <@ToxicFrog> | ...but you've never played Fallout? |
03:51 | <@MyCatVerbs> | Indeed. |
03:51 | <@MyCatVerbs> | Nor any of the System Shock games, nor Marathon, nor any of LucasArts' SCUMM games. |
03:51 | <@ToxicFrog> | |
03:52 | <@MyCatVerbs> | Appropriate reaction. |
03:52 | <@ToxicFrog> | Why not? |
03:52 | <@ToxicFrog> | (full disclosure: after a bad experience with King's Quest, I didn't play any SCUMM games until a few years ago. And I still prefer Myst.) |
03:55 | <@MyCatVerbs> | Just missed out on 'em all, I guess. |
03:56 | < McMartin> | (You should still avoid everything pre-LOOM.) |
03:56 | < McMartin> | (And post-Grim Fandango) |
03:56 | <@Vornicus> | http://source.bungie.org/get <--- Do yourself a favor then. |
03:57 | | * MyCatVerbs makes with the favour'ing. |
04:00 | <@ToxicFrog> | Yeah, if you missed them all...Marathon is freeware, Fallout 1&2 are on GOG.com for $6 each, and as for Arcanum, System Shock, and the SCUMM games, I don't know where (or if) you can buy them, but they're not hard to find elsewhere. |
04:00 | <@ToxicFrog> | Well, Arcanum might be. |
04:02 | <@ToxicFrog> | McMartin: I should try Loom sometime. |
04:02 | <@ToxicFrog> | The problem in my case wasn't so much missing those games, as being put off the entire genre for a decade by the KQ games~ |
04:03 | <@MyCatVerbs> | King's Quest were Sierra shovelware, weren't they? |
04:04 | < McMartin> | No |
04:04 | < McMartin> | They were Sierra's flagship series. |
04:04 | < McMartin> | They are to the graphic adventure what Ultima and Might and Magic were to the RPG genre. |
04:04 | < McMartin> | Which is to say, poorly designed and implemented and actively painful to play, because people hadn't worked out how to do it right yet. |
04:06 | < McMartin> | Given how early they were in the history of the FPA, I'm actually to this day astonished at how much Cyan got right in their first foray. |
04:06 | < McMartin> | Myst is not without its problems but it has no right to be as good as it is, even from a modern critical viewpoint. |
04:06 | < Derakon> | Heh. |
04:07 | < McMartin> | My experience with the FPA genre meant I didn't play Myst for a decade because The 7th Guest put me off the genre. |
04:07 | < Derakon> | It helps to have a setting with a background good enough that you can actually write reasonably successful novels about it. |
04:07 | <@MyCatVerbs> | McMartin: ah! The Robinson Crusoes of their respective genres. |
04:08 | < McMartin> | King's Quest also has the unfortunate distinction of never getting a game during the brief period when Sierra was unquestionably Getting It Right. |
04:09 | < McMartin> | Space Quest III, QfG I and II, and the Conquests games are all excellent despite being noticably Old School in terms of punishing the player for fucking up |
04:09 | < McMartin> | QfG III and IV would have been excellent if they'd gotten any beta testing. |
04:09 | < McMartin> | QfG V was literally shipped half-finished after the money ran out at the request of the fans. |
04:09 | < McMartin> | Who, shall we say, learned their lesson. |
04:09 | <@MyCatVerbs> | *snerk* |
04:10 | < McMartin> | QfG V is unrelentingly shitty but you seriously cannot blame Sierra for it - they fully intended to shitcan it. |
04:10 | < McMartin> | Then came the letter writing campaigns with a "Seriously, we'll buy it anyway" vibe |
04:10 | < McMartin> | ... so they said, what the Hell, and published it, and we bought it, and were punished~ |
04:11 | < McMartin> | If you remove the bits like crash bugs in the middle of unavoidable plot-critical cutscenes, QfG4 is the best adventure game Sierra ever made. |
04:11 | <@MyCatVerbs> | Fair enough. |
04:11 | <@MyCatVerbs> | Wha. How does someone ship without even testing a single playthrough? Je ne comprende pas. |
04:11 | < McMartin> | My guess is that they were testing with a certain option off, that is on by default in the released version. |
04:11 | < McMartin> | The workaround is to turn this option off yourself. |
04:12 | < McMartin> | Unfortunately |
04:12 | < McMartin> | That option is the "maintain a backup save at the last safe point before the game is about to randomly unleash bullshit instadeath upon you" |
04:12 | < McMartin> | option |
04:12 | < McMartin> | Which one would generally like to keep on! |
04:13 | < McMartin> | QfG in general is actually a hybrid 3PA/RPG/Fighting game that is probably one reason I never got into RPGs. =P |
04:13 | < McMartin> | Because the hybrid is vastly more interesting. |
04:15 | < McMartin> | QfG4 also did some absolutely amazing things with MIDI, and if you had a proper Yamaha synth hooked up you got a truly superb soundtrack. |
04:15 | < McMartin> | I wonder how shitty it is on the default synths these days~ |
04:20 | | * MyCatVerbs mumbles. |
04:20 | < McMartin> | Hm. Actually, that's not too bad, as long as your synth can handle pitchbends right. |
04:20 | < McMartin> | Which Timidity rather pointedly does not. |
04:20 | <@MyCatVerbs> | I had an add-in soundcard with a cheap Taiwanese chipset in it at one point. |
04:21 | <@MyCatVerbs> | It worked great, mainly because the only thing that's normally wrong with that particular chipset is that it gets a lot of noise on its power supply when people solder it to a motherboard. |
04:21 | < McMartin> | (The main theme is mostly done on Electric Guitar and it was very clearly input with an actual one.) |
04:21 | <@MyCatVerbs> | But my favourite thing about it was that the manufacturer randomly soldered an OPL-3 to it. |
04:22 | < McMartin> | Nice. |
04:22 | < McMartin> | (Note that this is actual General MIDI, though, not OPLx) |
04:22 | <@MyCatVerbs> | Unfortunately, I've misplaced the damn thing, and I'm not sure what on Earth model it was to find another one. :/ |
04:23 | <@MyCatVerbs> | What is General MIDI? I had an idea that it was the name of a software MIDI synth that shipped with some or other versions of Windows, but maybe I'm completely off the mark there? |
04:24 | <@MyCatVerbs> | Oh! It's an extended MIDI standard. Heh, oops. |
04:25 | | * McMartin finds his old Sierra Soundtracks. |
04:26 | < McMartin> | ... this actually explains why the Super Metroid fanfare is sort of my default mental fanfare despite the fact that I never played it until my late 20s. |
04:26 | < Derakon> | Oh? |
04:26 | < McMartin> | The Time Rippers theme from Space Quest IV is very, very close to the Galactic Federation fanfare. |
04:26 | < Derakon> | Ahh. |
04:26 | < McMartin> | (My God, that was a terrible game.) |
04:27 | < Derakon> | SQ4 or SM? |
04:27 | < McMartin> | SQ4 |
04:27 | < Derakon> | Good. :p |
04:27 | < Derakon> | (That you didn't say SM) |
04:27 | < McMartin> | I still hold that SM is only good on replay. |
04:28 | < McMartin> | This may have something to do with the fact that my first three attempts at beating SM came to a tragic end after I accidentally used That One Save Point. |
04:28 | < McMartin> | The first time in all innocence. |
04:28 | < Derakon> | Heh. |
04:28 | < McMartin> | (LttP is similar.) |
04:28 | <@Vornicus> | That One Save Point? |
04:28 | < McMartin> | ... ahahahhahaaaa |
04:29 | < McMartin> | I forgot that they came within three notes of violating Lucas's copyright. |
04:29 | < Derakon> | The one that traps you at the bottom of a shaft with the creatures that are supposed to teach you to walljump. |
04:29 | <@Vornicus> | Oh. |
04:29 | < McMartin> | You cannot leave this area until you can walljump about 70 times in a row with no errors. |
04:29 | | * Vornicus never had trouble with wall jumping. |
04:29 | < McMartin> | Incidentally, I was playing this on emulator with randomized frameskip. |
04:29 | < McMartin> | On a P120. |
04:29 | < Derakon> | Yeah, that'd be a problem. |
04:29 | < McMartin> | So the minimum was about 3. |
04:29 | <@Vornicus> | ahaaaa. |
04:30 | < McMartin> | And even without, I think it took me an hour and a half to get out of that fucking tunnel and get the handful of missiles or whatever that were there. |
04:30 | < Derakon> | Super missiles, E-tank, and powerbomb expansion in that loop, IIRC. |
04:31 | < McMartin> | Yeah, that took me well over an hour to clear. |
04:31 | < Derakon> | Not a bad haul, but the big treasure is learning to walljump. Assuming you can do it. |
04:31 | <@ToxicFrog> | I didn't get around to playing SM until well after I had rock solid emulation and that one still gave me some trouble. |
04:32 | <@ToxicFrog> | They made walljumping much easier in M4 and M0, thankfully. |
04:32 | <@Vornicus> | m0 is the only one where I can reliably oobj too. |
04:32 | < Derakon> | OOBJ? |
04:32 | <@Vornicus> | infinite bomb jump |
04:32 | < Derakon> | Oh. |
04:32 | < Derakon> | Yeah, that's usually written IBJ. :p |
04:33 | | * McMartin is used to seeing M0 as MZM, as well. |
04:33 | <@Vornicus> | yes |
04:33 | < McMartin> | ... jesus, I miss QfG2. |
04:33 | < McMartin> | I may have to hunt it up |
04:33 | < McMartin> | It does everything wrong |
04:33 | < McMartin> | but it's so good. |
04:33 | <@Vornicus> | also, randomly: yay I have enough money to get my actual computer into the shop to fix its little fever! |
04:33 | < Derakon> | Yay! |
04:34 | <@ToxicFrog> | I should try out QFG games other than the demo of QFG4~ |
04:34 | < McMartin> | The remake of 1 is arguably the best in the series. |
04:34 | < McMartin> | 2 is my personal favorite but, um. |
04:35 | < McMartin> | You know everyone's complaint about UQM? |
04:35 | < McMartin> | QfG has about a half dozen of those. |
04:35 | < McMartin> | The game is heavily, heavily schedule-based. |
04:35 | <@Vornicus> | Which one, "wait wtf there's a time limit?" |
04:35 | < Derakon> | I like the physics of SM the best. |
04:36 | < McMartin> | Vorn: Quite. |
04:36 | < Derakon> | I don't like the speedbooster mechanics in MZM and MF. :\ |
04:36 | < McMartin> | In QfG's case, the plot is on rails and you must react appropriately to it or lose. |
04:36 | <@Vornicus> | I prefer, by far, MZM/MF's control scheme. |
04:36 | < Derakon> | I'm not talking controls, I'm talking physics. |
04:36 | < McMartin> | Hope you solved teh pre-req puzzles at least three days before that so you can train up the skills in them sufficiently to be able to face them~ |
04:37 | <@ToxicFrog> | ;.; |
04:37 | < McMartin> | That said, I'd been keeping enough savegame redundancy that I know where I was going and quickly enough that things worked out. |
04:38 | < McMartin> | I never lost more than a few game-days of time, if that. Most of the time it was just "Ha *HA*!" |
04:38 | < McMartin> | Of course, being a Wizard makes you awesome like that. |
04:39 | < McMartin> | For example, one of them requires you to fight an enemy who's only vulnerable to magical fire. |
04:39 | < McMartin> | Other classes have a quest involving getting some. |
04:39 | < McMartin> | The Wizard blows the shit out of it by spamming the Flame Dart spell, the first ranged offensive spell you ever learn in the series~ |
04:41 | < Derakon> | Anyway, since Metroid control schemes came up, here's what I'm thinking for Jetblade: |
04:42 | < Derakon> | Hold direction to run, steadily (and fairly quickly) increasing speed to maximum runspeed. Once quickdash ability is gained, double-tap direction to start running at about halfway along to max speed. Release direction to rapidly slow to a stop (or press opposite direction to stop instantly). |
04:42 | < McMartin> | (And really, I need to replay to see just how unfair it really is. My abiding memory was that I was living it up in town training, getting gossip, and going on occasional sidequsets that turned out to be Really Important later on.) |
04:43 | < Derakon> | Button 1: melee attack. Different directions might mean different attacks; at least you'll get a different attack when crawling and when in air. |
04:43 | < Alek> | mmm |
04:43 | < Derakon> | Button 2: jump. Press down+jump to slide/dash attack/whatever it is. |
04:43 | < Derakon> | Button 3: missile weapon. Button 4: toggle boost. |
04:44 | < Derakon> | Aaaaand...that should do it. |
04:46 | <@Vornicus> | Boost? |
04:46 | <@Vornicus> | run/high speed thing? |
04:46 | < Derakon> | Devil trigger. |
04:46 | <@Vornicus> | Aha. |
04:46 | < McMartin> | Slide and "hop down a level" should be different controls. |
04:47 | < Derakon> | Has various positive effects depending on components you've collected, including: enhanced groundspeed (with invincibility at higher speeds); increased melee power; faster jet speed; etc. |
04:47 | < Derakon> | McM: no passthrough blocks. |
04:47 | < McMartin> | Voice plz |
04:48 | | mode/#code [+o McMartin] by ChanServ |
04:48 | < Derakon> | ...that was...interesting. |
04:48 | <@McMartin> | Fuck you, Troika. |
04:48 | | * McMartin links http://www.stanford.edu/~mcmartin/qfg4intro.mid re earlier discussion |
04:50 | < Derakon> | I see what you mean about it being a captured electric guitar. |
04:50 | <@McMartin> | So, Timidity will only bend notes up to just short of a half-step |
04:50 | <@McMartin> | That makes the chords in this piece rather fundamentally fail to work. |
04:50 | < Derakon> | Yeep. |
04:51 | < Derakon> | Yeah, my only issue with this piece is that one of the instruments running the baseline sounds a bit discordant. |
04:51 | <@McMartin> | Could be a range issue, could be that QfG4 is Cthulhupunk horror in Totally Not Poland. |
04:52 | <@Vornicus> | ...okay, /now/ I know what midi can do. |
04:52 | < Derakon> | Heh. |
04:53 | | * Vornicus did not know that was possible. |
05:00 | <@McMartin> | Oh hey, shock and surprise, OS X's default synth is better than Windows's~ |
05:00 | | * McMartin copies over his collection to see what else is worth preserving |
05:01 | <@Vornicus> | I'm using Quicktime synth here, so. |
05:01 | <@McMartin> | Yeah, I'm counting that as "default"~ |
05:01 | <@Vornicus> | this is on WIndows, at that. |
05:01 | <@Vornicus> | So. |
05:02 | <@McMartin> | Aha. That's what opens if you say "open blah.mid" in OS X |
05:02 | | Syloqs-AFH [Syloq@Admin.Nightstar.Net] has quit [Connection reset by peer] |
05:05 | | * McMartin also uploads sq4intro.mid which appears to be a recording of the entire opening set of cutscenes |
05:14 | < Derakon> | McM: what is it about Super Metroid that only makes it fun on replay? |
05:15 | < Derakon> | Insufficient use of the cluebat? |
05:15 | <@McMartin> | There are a lot of nasty little gotchas that you instinctively avoid on replay. |
05:15 | < Derakon> | For example? |
05:16 | <@McMartin> | Well, there's That One Shaft, of course |
05:16 | < Derakon> | Right, we covered that. |
05:16 | <@McMartin> | More generally, there's the fact that it's not clear what areas will be profitable to explore next, and you can *enter* areas well before you can profitable explore them. |
05:16 | <@McMartin> | Zonelines don't translate well to actual barriers. |
05:16 | < Derakon> | Hmm... |
05:17 | <@McMartin> | Oh, right. |
05:17 | | mode/#code [+o Derakon] by ChanServ |
05:17 | | * Derakon pulls up the SM map. http://www.gamefaqs.com/console/snes/file/588741/29221 |
05:17 | | * McMartin has many unpleasant memories of stranding himself in Maridia via careless powerbombing pre-Gravsuit. |
05:18 | <@Derakon> | You shouldn't be able to go much of anywhere from the glass tube without the gravity suit. |
05:18 | <@Vornicus> | You can go down to a save point. |
05:18 | <@Vornicus> | You can also get back up from there though. Barely. |
05:18 | <@Derakon> | Yeah, that's basically it though. |
05:18 | <@McMartin> | Getting back under frameskip load is tricky. |
05:19 | <@Derakon> | It is in fact possible to make it all the way through to the Wrecked Ship backwards without the Gravity Suit, but that's the kind of feat ludicrously skilled and bored players undertake. |
05:19 | <@McMartin> | But doable, yes |
05:20 | <@McMartin> | Other things on my list of Why SM Was Not Enjoyable involve my first encounter with Crocomire having maybe four missiles. |
05:20 | <@Derakon> | It involves things like chain-underground-walljumping (which gains you ~2px of height per iteration so long as the shaft you're using is no more than 3 blocks wide), knocking enemies off of walls and then freezing them to use as platforms, and so on. |
05:20 | <@McMartin> | And the charge beam. |
05:20 | <@Derakon> | Crocomire's a puzzle boss. |
05:20 | <@McMartin> | Yes. |
05:20 | <@Derakon> | I think everyone dies to him the first time. |
05:20 | <@McMartin> | No, see |
05:20 | <@McMartin> | I hit steady state. |
05:20 | <@Derakon> | It doesn't really matter what your loadout is. |
05:20 | <@McMartin> | Because I had the charge beam. |
05:20 | <@McMartin> | Crocomire has the same sin as some of the Aquaria bosses. |
05:21 | <@McMartin> | They do the "You're doing damage!" animation when you aren't. |
05:21 | <@McMartin> | So I spent 30 minutes holding my ground to no particular effect. |
05:21 | <@Derakon> | Yigh. |
05:21 | <@Derakon> | In general I find puzzle bosses to be more annoying than fun. |
05:21 | <@McMartin> | As long as the machine goes PING I'm in better shape. |
05:22 | <@Derakon> | Okay, so we have the Walljump Shaft, bad underwater control stemming from an underpowered emulator/hardware combination, and a poorly-designed boss. |
05:23 | <@McMartin> | It's not the number of poorly-designed elements, it's what they do. |
05:23 | <@McMartin> | Which was "spend a lot of time doing something unfun for zero progress". |
05:23 | | * Derakon nods. |
05:24 | <@Derakon> | Generally I felt that Super Metroid did a good job of locking you into an area until you'd gotten the item that let you leave, at which point you were promptly locked into a new area. |
05:24 | <@Derakon> | This breaks a bit after you make it out of Norfair, mind. |
05:24 | <@Derakon> | Since you can go the long way back through Brinstar or the short way (which is also the new way, to powerbombs). |
05:25 | <@McMartin> | I was going to say, that basically wasn't my experience once I left Crateria. |
05:26 | <@Derakon> | Well, I see two things that can be problematic as far as exploration is concerned: dead-end paths that don't terminate quickly, and barriers on the main path that you can't figure out how to bypass. |
05:27 | <@Derakon> | So for example, on first entering Brinstar (not counting the morphball/missile section near the beginning), you head down a vertical shaft with several branches, but all but one of those terminate nearly immediately. |
05:28 | <@Derakon> | That last takes you to a large open room with...five doors not counting the one you entered from. Two are inaccessible because you lack the grapple beam, one requires super missiles to open, and another requires powerbombs to open. |
05:28 | <@Derakon> | (There's also a secret passage that immediately terminates in a save room) |
05:28 | <@Derakon> | Following the only open option takes you to Spore Spawn; kill him and you're forced to get super missiles and sent back to the room with five doors, one of which you can now open. |
05:29 | <@Derakon> | Following that takes you on a fully-linear path to the pink Brinstar shaft, which you can't go up (lacking hijump). |
05:29 | | * Vornicus ponders mapping SM according to non-sequence-breaking paths. |
05:29 | <@Derakon> | Going down requires bombing through the floor, but it should be fairly obvious that there's something there since there's also a powerbomb door encased in rock on the same screen. |
05:29 | <@Derakon> | That's basically what I'm doing, Vorn. |
05:30 | <@Vornicus> | graphically that is. |
05:30 | <@Derakon> | So you go down the pink Brinstar shaft, head right, and find the elevator to Norfair. |
05:31 | <@Vornicus> | Which... promptly fails to get you anywhere except the high jump boots. |
05:31 | <@Derakon> | And this is really the most tricky part of the main-sequence game -- there's a wall in the elevator room that you can break open, with basically no indication aside from the map showing a room a ways to the right that you can go through. |
05:31 | <@Vornicus> | But those don't get you /anything/ unless you know there's a room to the right. |
05:31 | <@Derakon> | Right. |
05:31 | <@Derakon> | This qualifies as "insufficient use of the cluebat", IMO. |
05:31 | <@McMartin> | Or "expectation that you will exploit metagame knowledge". |
05:32 | <@McMartin> | Which I'm of two minds about, but this is the kind I don't like. |
05:32 | <@McMartin> | The kind like in M&M2 fills me with a perverse sort of glee. |
05:32 | <@Derakon> | If the path from the elevator to Kraid's room was on the map, I wouldn't mind. |
05:32 | <@McMartin> | The kind where if you came up with an in-universe solution for it it would be a bug. |
05:32 | <@Derakon> | But it's not. You're just in the elevator room, and you know that a dozen rooms to the right or so, there's a 2x2 room with a skull on it. |
05:32 | <@McMartin> | (At least you have a data download thingy for SM.) |
05:33 | <@Vornicus> | McM: what does M&M2 do? |
05:33 | <@McMartin> | I was sufficiently obsessive about blasting walls that that didn't stop me. |
05:33 | <@Derakon> | (This assumes, of course, that you got the map for Brinstar, which was back at the entrance shaft, which is, at this point, inaccessible!) |
05:33 | <@McMartin> | BUt I kept getting in places I shouldn't have been yet and getting pwnt by that. |
05:33 | <@McMartin> | Vornicus: There's an item that you need to get out of a cave, but you can't take it out; the item doesn't let you leave. |
05:34 | <@Derakon> | McM: up to this point the only sequence breaking you can do is a) using walljumping/infinite bombjumping to go up the pink Brinstar shaft, or b) going through the hot zones in Norfair without the Varia suit. |
05:34 | <@McMartin> | The official solution to the puzzle is to give this item to one of your hirelings and dismiss them. |
05:34 | <@Derakon> | Or c) sneaking past the shutters in the Brinstar entrance shaft to get super missiles that you're supposed to have the speed booster to get, thereby bypassing Spore Spawn. But that's pretty minor. |
05:34 | <@McMartin> | Dismissing a hireling sends them back to the nearest savepoint with full inventory. |
05:34 | <@Vornicus> | Actually there is the spazer. |
05:34 | <@McMartin> | ISTR getting the spazer early. |
05:35 | <@McMartin> | But it's been quite a while. |
05:35 | <@Derakon> | That also requires walljumping or IBJing. |
05:35 | <@Vornicus> | But once you get the high jump you can get the spazer easily. If you know it's there, I don't know how the map is for that area. |
05:35 | <@Derakon> | Anyway, as far as "getting in trouble because you got somewhere you weren't supposed to be", the only major one is the Norfair hotspots. |
05:36 | <@Derakon> | It's clued by having a large solid block and then a single block, in the ceiling. |
05:36 | <@Derakon> | Shoot the single and it breaks. |
05:36 | <@Derakon> | Anyway, the "sequence" for Spazer is "have the hijump boots", so that's not really a sequence break. :) |
05:37 | <@McMartin> | Hm, that's not the map piece I'm thinking of. |
05:37 | | * McMartin is confusing it with something else. |
05:38 | <@Derakon> | Anyway, with the Varia, you can explore the hotspots, but all you can do there is...um, hang on, it's been ages since I went to this room without sequence-breaking it. |
05:39 | <@Derakon> | Okay, you hit the green bubble room, navigate a small morphball maze in it, head down, the around, and back to the green bubble room but in the upper-right corner, which gives access to the speed booster. |
05:39 | | * Derakon eyes that area for ways to go off-track. |
05:40 | <@Derakon> | Hmm...no, that's also pretty heavily locked-down. Never realized before, but it is. Assuming you can't walljump, you can get halfway into a few rooms, but you run into speed booster blocks, one-way shutters, orange doors, or jumps you can't make without the grapple beam. |
05:41 | <@McMartin> | Oh god. Was it the X-Ray Specs where you had to chain-grapple over a massive spike pit while surrounded by enemies you couldn't attack without also having to do this in the dark? |
05:41 | <@Derakon> | Yes. |
05:41 | <@Vornicus> | Yes, yes it was. |
05:41 | <@McMartin> | >_< |
05:42 | <@Derakon> | You could freeze the firebugs, but if you touched them when they weren't frozen, they'd die. |
05:43 | <@Derakon> | ... |
05:43 | <@Derakon> | Sorry, I just read Questionable Content. |
05:44 | | * McMartin eyes this |
05:44 | <@McMartin> | OK, now I have to replay QfG1 too. |
05:44 | <@McMartin> | You see, QfG1 understands the command "PICK NOSE." |
05:44 | <@McMartin> | It's an instadeath. |
05:44 | <@Derakon> | ...do you have a hookhand? |
05:44 | <@McMartin> | Because it reads it as "with your lockpicks". |
05:44 | <@McMartin> | So effectively yes. |
05:45 | <@McMartin> | Apparently, however, if you are awesome enough doing this successfully unlocks your nose. |
05:45 | <@Derakon> | Implying it was locked before? |
05:45 | <@McMartin> | I don't know. |
05:45 | <@McMartin> | You're just *that good*, I guess. |
05:46 | <@Derakon> | Anyway, speedbooster presumably reminds you of the room in the Norfair entrance shaft with the closing shutters that you couldn't get through earlier...route back to there, and you get the ice beam. |
05:47 | <@Vornicus> | Which then gets you, among other things, up the red shaft in Brinstar. |
05:47 | <@Derakon> | At this point, you're expected to think back to the pink Brinstar shaft which you couldn't climb earlier. This ones a bit of a stretch, IMO. |
05:47 | <@Derakon> | Since all it apparently gets you is back to where you came in from, unless you also remember that you couldn't climb the shaft before. |
05:47 | <@McMartin> | The places I kept finding myself fruitlessly revisiting on the run I actually finished were that shaft and the underwater area where you're supposed to already have the grav suit. |
05:50 | <@Derakon> | Mm...once you can open the glass tube, you also can clearly reach the Wrecked Ship, since the requirement for the former is located right by the entrance for the latter. |
05:51 | <@Derakon> | (Though it's entirely possible that you went "Oooh, powerbombs! Let's go back to Norfair and check out those doors I couldn't open!") |
05:51 | <@Derakon> | Which gets you...the map, the lava pool entrance to lower Norfair, and...that's it. |
05:51 | <@Vornicus> | heh |
05:55 | <@Derakon> | Oh yeah, and the X-ray scope. |
05:55 | <@McMartin> | >_< |
05:57 | <@Vornicus> | I think McM needs a trigger on "X-ray scope" |
05:58 | <@Vornicus> | also, why is it i always have mechanic ideas but never story ideas? |
05:59 | <@Derakon> | Because the two require entirely different skillsets. |
05:59 | <@Vornicus> | Point. |
06:06 | | Vornicus [Vornicus@Admin.Nightstar.Net] has quit [Quit: ] |
06:16 | | Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has joined #code |
06:20 | | Consul [~consul@Nightstar-12789.dsl.sfldmi.ameritech.net] has quit [Ping Timeout] |
06:45 | | Derakon is now known as Derakon[AFK] |
06:52 | | Alek [~omegaboot@Nightstar-23818.dsl.emhril.sbcglobal.net] has quit [Ping Timeout] |
06:59 | | Alek [~omegaboot@Nightstar-3659.dsl.emhril.sbcglobal.net] has joined #code |
07:09 | <@Reiver> | <McMartin> The kind like in M&M2 fills me with a perverse sort of glee. - just what is good about that sort of solution? |
07:38 | <@McMartin> | It's basically as close as you can get to "rules-lawyering the DM". |
07:38 | <@McMartin> | I'm not saying it's a good design. |
07:38 | <@McMartin> | I'm saying that encountering such a thing makes me snicker inwardly. |
07:38 | <@McMartin> | While the more ham-handed "please exploit metagame knowledge here" stuff makes me groan. |
07:39 | <@McMartin> | The Super Metroid case is a good one there, but my usual go-to example is the second half of Final Fantasy VI. |
07:39 | <@McMartin> | The last hard clue you get in-game is to go fight the final battle. For which you are woefully unprepared. Also, this will skip about 70% of the game's plot. |
07:39 | <@McMartin> | What you are *supposed* to do examine the world map for shiny things and go visit all of them, then follow up that clue. |
07:40 | <@McMartin> | People raised on FF6 are also the ones that tend to get burned by UQM, because they want to visit all 3,000 star systems "before starting the plot". |
07:43 | <@McMartin> | Which actually isn't possible since it uses triggered events, and trying will of course also net you the Bad End before you even learn why it's happening. |
07:43 | < Alek> | I wasn't raised on FF6, but I'm still on that school. >_> |
07:44 | <@McMartin> | Yeah, see, in UQM, as in QfG2, you aren't actually the center of the universe~ |
07:44 | < Alek> | pfft. |
07:45 | <@McMartin> | Likewise, Varicella, which takes this to an unbelievable extreme. |
07:45 | <@McMartin> | (In Varicella, the Nth move in every winning playthrough is the same command. Failure to issue that command at that precise time will render the game permanently unwinnable.) |
07:46 | < Alek> | ... |
07:46 | < Alek> | oy. |
07:46 | <@McMartin> | Bear in mind that the maximum length of any playthrough is something like 150 moves. |
07:46 | <@McMartin> | Which takes around 15 minutes once you've finished orienting yourself. |
07:46 | <@McMartin> | Varicella is a game about Having A Secret Master Plan. |
07:47 | <@McMartin> | And it optimizes entertainingly. That move has to be in a certain location. |
07:47 | <@McMartin> | You can plot a course around the map, solving every puzzle you find in sequence as you go, and once you reach the place the move must be entered... |
07:47 | <@McMartin> | It's turn N-1 and you don't even have to break your stride. |
08:08 | <@Reiver> | The problem with the M&M2 suggestion is that a lot of folks would get frustrated trying to find the 'legitimate' solution... |
08:10 | <@Reiver> | My biggest problem with UQM is that while the universe didn't wait for you, it was also very easy to miss a whole lot unless you knew the knack. |
08:11 | <@McMartin> | Oh, the M&M games were made entirely of distilled bullshit in the first place~ |
08:11 | <@Reiver> | I never got to the hypespace, fex >.> |
08:11 | <@McMartin> | So it's par for the course, and indeed, if you didn't have the guide, it's getting your own back~ |
08:11 | <@McMartin> | Um |
08:11 | <@McMartin> | I'm going to assume you mean QuasiSpace. |
08:11 | <@Reiver> | Probably! |
08:12 | <@Reiver> | So I flew around a bit, wondered vaugely why the lil' pink dudes weren't there when I attempted a return visit when I nipped home to cash my ores and were missing by the time I got back, and generally got a bit frustrated. |
08:18 | <@McMartin> | ... pink dudes? |
08:20 | <@Reiver> | Who be totally trippin' |
08:20 | <@Reiver> | And whose butterfly spaceships come back to life. |
08:32 | <@McMartin> | ... Those guys are beige. |
08:40 | <@Reiver> | Clearly my gamma was off then~ |
09:11 | | Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has quit [Quit: Rhamphoryncus] |
09:36 | | AnnoDomini [~farkoff@Nightstar-29356.neoplus.adsl.tpnet.pl] has joined #Code |
09:37 | | mode/#code [+o AnnoDomini] by ChanServ |
09:50 | | thalass [~thalass@Nightstar-24524.dyn.iinet.net.au] has joined #code |
09:50 | < thalass> | ahoy |
09:53 | <@AnnoDomini> | RICOLA. |
09:57 | < thalass> | I stuffed up my ubuntu. sort of. I changed the mount point in the GUI of my usb stick (in the volume tab of the properties), and now it won't mount. |
09:57 | < thalass> | and because it won't mount, I can't change it back. |
10:00 | < thalass> | where abouts is that info stored? I'm hoping there's a config file or something somewhere |
10:18 | | Consul [~consul@Nightstar-634.dsl.sfldmi.ameritech.net] has joined #code |
10:18 | | mode/#code [+o Consul] by ChanServ |
10:38 | < thalass> | noone? |
11:50 | | EvilDarkLord [~jjlehto3@Nightstar-9591.cs.hut.fi] has quit [Ping Timeout] |
11:50 | | EvilDarkLord [~jjlehto3@Nightstar-9591.cs.hut.fi] has joined #code |
11:51 | | ToxicFrog [~ToxicFrog@69.171.150.ns-11163] has quit [Operation timed out] |
12:55 | | gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has joined #Code |
12:55 | | mode/#code [+o gnolam] by ChanServ |
13:25 | | thalass is now known as Thalasleep |
13:47 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has joined #code |
13:48 | | mode/#code [+o ToxicFrog] by ChanServ |
13:58 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has quit [Ping Timeout] |
14:13 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has joined #code |
14:13 | | mode/#code [+o ToxicFrog] by ChanServ |
15:04 | | Syloq [Syloq@Admin.Nightstar.Net] has joined #code |
15:05 | | Syloq is now known as Syloqs-AFH |
15:15 | | KBot [AnnoDomini@Nightstar-29498.neoplus.adsl.tpnet.pl] has joined #Code |
15:15 | | AnnoDomini [~farkoff@Nightstar-29356.neoplus.adsl.tpnet.pl] has quit [Ping Timeout] |
15:15 | | KarmaBot [AnnoDomini@Nightstar-29356.neoplus.adsl.tpnet.pl] has quit [Ping Timeout] |
15:17 | | Derakon[AFK] is now known as Derakon |
15:18 | | KBot is now known as KarmaBot |
15:23 | | AnnoDomini [~farkoff@Nightstar-29498.neoplus.adsl.tpnet.pl] has joined #Code |
15:23 | | mode/#code [+o AnnoDomini] by ChanServ |
15:24 | | Vornicus [Vornicus@Admin.Nightstar.Net] has joined #code |
15:24 | | mode/#code [+o Vornicus] by ChanServ |
16:28 | < C_tiger> | can I get some help with bash? |
16:29 | < C_tiger> | namely, in a cronjob, how do I specify a file for STDERR? |
16:29 | < C_tiger> | so if the job errors out, it shuttles stuff to a file in my homedir |
16:30 | | Thalasleep [~thalass@Nightstar-24524.dyn.iinet.net.au] has quit [Ping Timeout] |
16:30 | <@Derakon> | Can you not do "grep 404 /var/log/httpd/error_log 2> ~/cronerr.txt" or something like that? |
16:31 | < C_tiger> | can I specify a different file for stdout? |
16:31 | < C_tiger> | (sorry, I'm crappy with bash redirection) |
16:31 | <@Derakon> | Yeah, '>' is stdout, and '2>' is stderr. |
16:31 | <@Derakon> | Cronjobs probably have their own mechanism for capturing output, though. |
16:31 | < C_tiger> | so command.pl >stdout.txt 2>stderr.txt? |
16:32 | <@Derakon> | I don't see why this wouldn't work, but there's almost certainly a right solution and this isn't it. :) |
16:32 | <@Derakon> | Yeah. |
16:33 | < C_tiger> | thanks. |
17:06 | | Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has joined #code |
17:43 | | NSGuest-910 [~nick@Nightstar-17219.tampfl.dsl-w.verizon.net] has quit [Ping Timeout] |
17:45 | | Doctor_Nick [~nick@Nightstar-17219.tampfl.dsl-w.verizon.net] has joined #code |
17:45 | | mode/#code [+o Doctor_Nick] by ChanServ |
18:03 | <@MyCatVerbs> | C_tiger: crontab's lines are passed vertabim to sh. |
18:05 | <@MyCatVerbs> | C_tiger: but really, it's better to have cron execute a shell script that executes whatever you mean to have done, and then put the redirection in that script. Otherwise you might some day run into the wrath of quirky and buggy shells and cron implementations. |
18:06 | < C_tiger> | fair enough. Thanks. |
18:07 | <@MyCatVerbs> | The usual thing for a cron daemon to do is to capture both stdout and stderr, and then email whatever gets written on them to whoever's cron job it is. I presume you already knew that. |
18:52 | <@AnnoDomini> | If I want to chuck functions into another cpp file, I still have to declare them in any file that I use them in, right? |
18:59 | <@gnolam> | Yes. Thus header files. |
19:01 | <@AnnoDomini> | So... if I'd put the function declarations in a separate .h file, and #include it in every .cpp file that uses them, and add the functions.cpp file to the g++ command line, that would work? |
19:01 | <@Vornicus> | AnnoDomini: that's how it's done. |
19:05 | <@Vornicus> | You generally only want your lib's public API in the header files; my redblack implementation in C has like 8 functions in the .h and like 30 in the .c |
19:06 | <@AnnoDomini> | Meaning that only 8 are accessible to the user, but those 8 use the other 22 internally? |
19:06 | <@Vornicus> | Indeed. |
19:15 | | Derakon is now known as Derakon[AFK] |
19:21 | <@AnnoDomini> | Where would I put a struct definition? |
19:26 | <@Vornicus> | Same place you put function declarations that use it. |
19:30 | <@AnnoDomini> | So if main() uses it, then I need to put it in the main file. |
19:38 | <@AnnoDomini> | Do I have to #include functions.h in functions.cpp? |
19:43 | <@AnnoDomini> | It seems I have to #include the SDL libraries into the functions file. But won't this cause them to be #included twice? |
19:45 | <@AnnoDomini> | BTW, how does one get rid of the console window that pops up when you run an SDL application? I remember UQM can do this. |
19:47 | <@gnolam> | 1) Depends on what's in functions.h and functions.cpp. |
19:47 | <@gnolam> | 2) Header guards. |
19:47 | <@gnolam> | 3) -Wl,--subsystem,windows |
19:47 | <@gnolam> | (Presumably) |
19:48 | <@gnolam> | (Unless SDL has some additional requirements) |
19:54 | <@AnnoDomini> | 1) functions.h contains declarations, functions.cpp contains definitions. |
19:54 | <@AnnoDomini> | 2) I won't concern myself, then. |
19:54 | <@AnnoDomini> | 3) Huh? |
20:14 | | * AnnoDomini ponders what variables he needs for this thing. |
20:18 | | Derakon[AFK] is now known as Derakon |
20:22 | <@AnnoDomini> | Hmm. Can I put the definitions of simple getters/setters in the .h file? |
20:23 | <@Derakon> | Yes, you can. |
20:23 | <@Derakon> | "int getFoo(void) {return foo;};" is, I believe, the syntax. |
20:24 | <@AnnoDomini> | Yes, I'm asking if this will fly. |
20:24 | <@Derakon> | As long as there's no actual logic in the function, stylistically there's no problem. |
20:24 | <@Derakon> | IMO of course. |
20:27 | <@AnnoDomini> | If I have a constructor with arguments, will using the arguments in the initialization list be okay? Like "Foo(int n): bar(n)"? |
20:28 | <@Derakon> | That's why the list is there. |
20:28 | <@Derakon> | Reminds me of the time I asked my professor if it was okay to use "continue" to skip the rest of the loop. Using language features the way they're intended to be used is almost never (see also: goto) bad style. |
20:35 | <@Vornicus> | Anything you feel can be inlined in other code can be placed directly in the header file. |
20:36 | <@Vornicus> | This is usually getters and setters and that's about it. |
20:43 | <@McMartin> | Note that under gcc-based compilers, stuff that you define in a .c or .cpp file will still be exported even if you don't put them in the .h |
20:43 | <@McMartin> | So that you can't have a, say, doAwesomeThings() in a.cpp and another doAwesomeThings() in b.cpp |
20:43 | <@McMartin> | In C, if you declare the function "static", it will not escape. |
20:44 | <@McMartin> | The C++ way of doing that is wrapping them in a nameless namespace. |
20:44 | <@Derakon> | I just realized that were I to program in C++ nowadays, I'd probably not have the overriding urge to add "using namespace std;" to my code. |
21:17 | <@AnnoDomini> | gameState->player.x++; // Will this properly increment x? |
21:17 | <@Derakon> | ...I believe that postincrement binds more tightly than . and ->, but this is really what parentheses are for. |
21:18 | < Tarinaky> | AnnoDomini: I believe so. |
21:23 | <@AnnoDomini> | It works. Thanks. |
21:28 | <@AnnoDomini> | A class instance within struct within a struct that's accessed via pointers. Awesome. |
21:28 | <@AnnoDomini> | +a |
21:29 | | * Derakon gently prods AnnoDomini towards http://en.wikipedia.org/wiki/Law_of_Demeter |
21:39 | <@AnnoDomini> | Mhm. |
21:43 | | * AnnoDomini ponders how to make a utility fuction that rolls dice, something like: int roll(char[] c) |
21:43 | <@Derakon> | The argument presumably being something like '4d6'? |
21:43 | <@AnnoDomini> | I already have int d(int x,int y) |
21:43 | <@AnnoDomini> | Yeah. |
21:44 | <@Derakon> | If this were a modern langage I'd say to break out the regular expressions...as it is, scan for 'd' in the string, then use atoi to convert the substrings on either side of the 'd' to ints? *shrug* |
21:44 | <@AnnoDomini> | I'll figure it out, eventually. |
21:45 | <@McMartin> | Oh God, AOSD |
21:45 | <@Derakon> | ...I've not heard of aspect-oriented software development before. |
21:45 | <@McMartin> | I like to refer to it as "the principle of maximum surprise" |
21:45 | <@Derakon> | ...nice. |
21:46 | <@McMartin> | Essentially, take the old COME FROM gag, take it seriously, and make it OO, and that's the basic concept of "advice" |
21:46 | <@Derakon> | Yike. |
21:46 | <@McMartin> | This is completely awesome for about two problems and the worst idea ever everywhere else. |
21:46 | <@McMartin> | (Those problems being "checking security credentials" and "logging") |
21:53 | | * Derakon snerks. |
21:54 | <@McMartin> | (My dissertation includes an application of the system I designed to, essentially, aspect-oriented security, were you mad enough to actually *deploy it with production code* instead of using it to search for places you need to add authentication) |
22:03 | <@jerith> | And it's rotten for logging. |
22:03 | <@jerith> | Although it might be useful for trace logs. |
22:20 | <@McMartin> | Debug logs, yes. |
22:20 | <@McMartin> | The idea being "Shit, function X is failing and I don't know why, and I need information from its caller." |
22:20 | <@McMartin> | "I could modify 8,000 files by hand and hope I don't miss any calls." |
22:20 | <@McMartin> | "Or I could write a 7-line spec and let the code weaver go to town." |
22:24 | | * AnnoDomini ponders to perhaps dust off his readLine function from the far past, which could be useful for using maps stored in files. |
22:25 | <@AnnoDomini> | Just for terrain, it would be pretty cool. Just draw the map in ASCII characters, then the program will load it up by reading the file. |
22:26 | <@Derakon> | Why is this in C++, again? |
22:26 | <@Derakon> | I generally find that file manipulation in C/C++ is pain. :\ |
22:27 | <@AnnoDomini> | I play Nethack. This should tell you all you need to know regarding my stance on the subject of pain. :P |
22:27 | <@Derakon> | Nah, because file reading in C++ isn't entertainingly painful. |
22:27 | <@Derakon> | It just sucks. |
22:28 | <@AnnoDomini> | Seriously, though, because if I find myself without sustenance, I want to write "WILL WRITE C++ FOR FOOD" rather than HTML. :P |
22:28 | <@AnnoDomini> | Okay, that might not have been too serious. |
22:28 | <@Derakon> | Ahh, building skills. |
22:29 | <@MyCatVerbs> | "That's it. Everything's going to go boom." is possibly the best utterance in the history of mad science. |
22:30 | <@MyCatVerbs> | It's the understatedness of it, the fact that it's spoken quietly, rather than screamed at the top of Gil's lungs, that makes it really scary. |
22:30 | <@AnnoDomini> | I already know Java about as much as I'm willing to go. Learning more would require subscribing to the philosophy and using an IDE rather than coding in Notepad as I usually do. |
22:30 | <@Derakon> | Heh. |
22:30 | <@Derakon> | (Use vim!) |
22:31 | <@AnnoDomini> | Somehow, I don't like vim or Emacs. |
22:33 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code |
22:33 | | mode/#code [+o Attilla] by ChanServ |
22:38 | <@McMartin> | std::istream has line-reading functions in it. |
22:38 | <@McMartin> | std::ifstream and std::istringstream and std::istrstream all inherit them. |
22:38 | <@McMartin> | I do not offhand recall what the difference is between those last two. |
22:40 | <@AnnoDomini> | How easy are they to use? I just want to readLine("path\file.txt",$line_nr); |
22:45 | <@Derakon> | No mucking with filehandles for you, huh? |
22:45 | <@AnnoDomini> | NEVAR. |
22:45 | | * Tarinaky grabs his C++ manual and looks up the function he's thinking of. |
22:46 | <@McMartin> | Easier than that, actually, because if you want to read line 999, and then line 1000, you do not grind through the entire file twice. |
22:46 | <@McMartin> | You instead read line 1000 immediately because you are Right There. |
22:47 | < Tarinaky> | AnnoDomini: istream's getline sounds like what you want. |
22:47 | <@McMartin> | So that code looks vaguely like (from memory, so grain of salt...) |
22:47 | <@McMartin> | std::ifstream f("path\\file.txt"); |
22:47 | <@McMartin> | std::string line = f.getline(); // line 1 |
22:47 | <@McMartin> | line = f.getline(); // line 2 |
22:47 | <@McMartin> | (etc) |
22:51 | < Tarinaky> | Nah. From what I'm reading in my lap you have to pass it a C-string to store the line in. |
22:52 | <@McMartin> | Aha, so it is. |
22:52 | <@McMartin> | Though you can construct a std::string from that in a side function easily enough. |
22:52 | <@AnnoDomini> | It's slightly more complicated than I'd wish, but oh, well. |
22:52 | <@McMartin> | htt[://cplusplus.com/reference/iostream/istream/getline.html |
22:52 | <@McMartin> | Er, http, even |
22:52 | <@AnnoDomini> | Yeah, I'm looking at it. |
22:53 | <@McMartin> | You really do want something that will maintain you a file handle. |
22:54 | < Tarinaky> | If you want to jump straight to a given line you need to use seekg() for random access. |
22:54 | <@AnnoDomini> | I understand this will increase work on the system's part, but I really DO want a function that will read me a goddamn line without messing with anything more than necessary. |
22:55 | < Tarinaky> | The problem is in order to find out where a given line starts you need to read every line that comes before it and count the newline characters. |
22:55 | < Tarinaky> | Unless you're in a position where you can say that every line is an exact length without exception. |
22:56 | <@Derakon> | Igh. Don't be in that position. |
22:56 | <@Derakon> | Someone mucks with your file and hello buffer overflow. |
22:57 | <@AnnoDomini> | They shouldn't have mucked, then. :P |
22:57 | <@Derakon> | No, no, see, buffer overflow exploits are bad for you. |
22:57 | <@AnnoDomini> | Me? |
22:57 | <@McMartin> | This is "hostile user mucks with the code, gets admin access on your system and turns you into a spam zombie" |
22:58 | <@McMartin> | Or "feeds it bad data". |
22:58 | < Tarinaky> | Actually... I'd have thought this'd be a buffer underflow. |
22:58 | <@McMartin> | Basically, it means that installing your program will introduce security vulnerabilities. |
22:59 | <@McMartin> | Tarianky: Depends on the edit and whether it's zero-delimited. |
22:59 | <@McMartin> | C++ strings generally aren't. |
22:59 | <@McMartin> | C strings are. |
22:59 | < Tarinaky> | If you say a file contains -exactly- X many bytes if the file contains more bytes they'd simply not be read. The only problem is if the file is less than X many bytes. |
22:59 | < Tarinaky> | I'm looking at what Anno said earlier where he wants some sort of map file. |
23:00 | <@McMartin> | The right way to do that is to load the entire file into memory as an array of strings (and since this is C++, taht should be a std::vector<std::string>, not a char**) and just index it as neeed. |
23:01 | <@McMartin> | Start with an empty vector, then push_back a string built from the result of getline until you run out of file. |
23:01 | <@AnnoDomini> | "<Derakon> I generally find that file manipulation in C/C++ is pain. :\" <- One page of conversation later, I wholeheartedly agree. |
23:01 | <@McMartin> | Unless the file's gigabytes in size, or you're running it on your wristwatch, you get random access and disk usage is optimized. |
23:02 | < Tarinaky> | AnnoDomini: I disagree... Maybe I'm odd. |
23:02 | <@ToxicFrog> | Tarinaky: what are you comparing it to? |
23:02 | <@AnnoDomini> | Tarinaky: Yes, you are, but that's unrelated. |
23:02 | < Tarinaky> | ToxicFrog: Point. I'll shut up. |
23:03 | <@McMartin> | It's worth noting that doing what I describe in python is a single line of code. |
23:03 | <@ToxicFrog> | Quite. |
23:03 | <@McMartin> | (to wit, 'vec = file("pathname").readlines()', then indexed instantly forever after with vec[linenumber-1]) |
23:03 | < Tarinaky> | Mind. Saying something is Pain doesn't require a comparison. |
23:04 | <@ToxicFrog> | (In Lua it's only slightly more: local lines = {}; for line in io.lines("file") do table.insert(lines, line) end) |
23:04 | <@ToxicFrog> | Tarinaky: it does, actually; pain is relative. |
23:04 | < Tarinaky> | Obviously I have a high tolerance to pain. |
23:04 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer] |
23:04 | <@Derakon> | Of certain types. |
23:04 | <@ToxicFrog> | If the only file IO you've ever done was in assembler, say, the C++ file API is going to be a gift from the gods. |
23:05 | <@Derakon> | I have much less of a problem with clunky interfaces than Vorn does, but he's much better at dealing with complicated geometry than I. |
23:05 | <@ToxicFrog> | Whereas coming from Python to C++ will make you want to gnaw your own leg off, and possibly other people's. |
23:05 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code |
23:05 | | mode/#code [+o Attilla] by ChanServ |
23:05 | < Tarinaky> | Actually the only type of file IO I've ever done was in C++ >.> |
23:05 | <@Derakon> | Ahh, you don't know what you're missing. |
23:05 | | * McMartin 's leg detaches for extra crushing action |
23:05 | <@AnnoDomini> | (I'm coming from mIRC scripts.) |
23:05 | <@McMartin> | Yeah, most of the scripting languages are actually optimized for file iteration. |
23:06 | <@McMartin> | If you actually want individual lines because you want to do something with each line, Perl and Python both have a construct that is basically "for each line $l in $file { stuff }" |
23:06 | | * AnnoDomini has done file IO in Java too, and found to be similarly painful to C++. |
23:06 | <@McMartin> | This should be unsurprising, as Java and C++ libraries have the same overarching philosophy to low-level stuff. |
23:07 | <@Derakon> | cat file.txt | perl -ne 'chomp; /(\d+): (.*)$/; $a = sqrt($1); print "$a => $2\n"' |
23:07 | <@ToxicFrog> | I find Java's to be even worse than C++'s, actually, because you have something like five similar but different IO classes that need to be combined in different ways and orders to do anything. |
23:07 | <@AnnoDomini> | Yes. |
23:07 | <@McMartin> | TF: C++ does that all with Template Bullshit in advance, which is awesome until you have to read an error message |
23:07 | <@McMartin> | At which point it is five screens long. |
23:07 | | Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has quit [Quit: Rhamphoryncus] |
23:08 | <@AnnoDomini> | You use class A which you put into class B which you put into class C and you use class D to actually do stuff. |
23:08 | <@ToxicFrog> | McMartin: yes. In general I prefer this, though, because if you don't make a mistake it doesn't hurt as much, whereas with Java it hurts all the time. |
23:09 | <@AnnoDomini> | Anyways. Thanks for the help. I sleep. |
23:09 | | AnnoDomini [~farkoff@Nightstar-29498.neoplus.adsl.tpnet.pl] has quit [Quit: I. AM. BEOWULF.] |
23:10 | <@McMartin> | Well |
23:10 | <@McMartin> | If you're doing string-manip. |
23:10 | <@McMartin> | Java's IO libraries are optimized for binaries. |
23:10 | <@ToxicFrog> | I do about a hundred times more string manipulation than binary manipulation~ |
23:11 | <@McMartin> | Blorple thinks it's awesome~ |
23:11 | <@ToxicFrog> | Speaking of which |
23:11 | | * ToxicFrog fiddles with Horspool substring search |
23:11 | <@McMartin> | That said, the fact that you can be modular with it makes my test cases a lot easier because I can feed it a StringReader instead of a FileReader and Just Win. |
23:12 | <@McMartin> | While in C++ either I was replicating Java's chained-construction, or the test code doesn't actually exercise the same code paths. |
23:12 | <@McMartin> | I do not, however, know why PrintWriter does not automatically wrap its constructor argument with a BufferedWriter. =P |
23:13 | <@McMartin> | That's really the only case I can think of where the chain length goes above two. |
23:13 | <@McMartin> | Well. |
23:14 | <@McMartin> | Unless you for some mad reason decide to chain InputStreamReader . BufferedInputStream . FileInputStream instead of just defining a FileReader outright. |
23:14 | <@McMartin> | The IS/Reader distinction is an artifact of characters and bytes being different things in Java, which is an easily defensible decision. |
23:15 | <@McMartin> | (Too bad its characters aren't actually arbitrary Unicode =P) |
23:51 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout] |
23:52 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code |
23:52 | | mode/#code [+o Attilla] by ChanServ |
23:55 | | Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer] |
23:55 | | Attilla_ [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code |
--- Log closed Tue Mar 24 00:00:27 2009 |