code logs -> 2006 -> Thu, 30 Nov 2006< code.20061129.log - code.20061201.log >
--- Log opened Thu Nov 30 00:00:11 2006
--- Day changed Thu Nov 30 2006
00:00
<@McMartin>
MCO, you do realize this is a turn-based game, right?
00:00
<@ToxicFrog>
In a frantic, four-player game where everyone answers their stuff as fast as they can, we're still talking probably less than 1KBps each way.
00:00
<@ToxicFrog>
And, yeah, it's a turn-based game. Responsiveness? The bottleneck there is the other players.
00:00
< MyCatOwnz>
Responsiveness, not throughput. If everyone's on half-second dialup connections, the game will feel unresponsive as crap.
00:00
<@ToxicFrog>
TURN. BASED.
00:01
< MyCatOwnz>
USERS. WILL. HATE. IT.
00:01
<@McMartin>
Once you commit, it generally takes at least 30 seconds to get a reply
00:01
<@McMartin>
Are they going to notice an extra half second?
00:01
< MyCatOwnz>
Responsiveness is a UI design principle.
00:01
<@ToxicFrog>
The amount of time it takes for a 400 byte packet to squeeze its way through a dialup connection is /nothing/ compared to the time it takes for all the players to actually click "submit gestures"
00:01
< MyCatOwnz>
McMartin: yes.
00:01
<@ToxicFrog>
..
00:01
<@McMartin>
how?
00:01
<@ToxicFrog>
MCO, bear in mind that I have already released two versions of this.
00:01
<@ToxicFrog>
They played find.
00:01
<@ToxicFrog>
*fine.
00:02
<@McMartin>
How can they distinguish between 30 second opponent response and 0.1 second server response and 29 second player response and 1 second server response?
00:02
<@McMartin>
Oh yeah
00:02
<@McMartin>
And one other reason the client has to wait to select spells until all players move:
00:02
<@McMartin>
Opponents can dictate your moves.
00:02
<@McMartin>
This changes the questions you are asked.
00:02
< MyCatOwnz>
I'm not talking about their opponent's response, I'm talking about clicking the "cast spell" button and having to wait 800 milliseconds for the "select target" panel to appear.
00:03
<@McMartin>
Dude.
00:03
<@McMartin>
They're going to be waiting 30 seconds for the "select target" panel to appear.
00:03
<@ToxicFrog>
Dude. The select target panel cannot appear until all players have entered their gestures for the turn.
00:03
<@ToxicFrog>
That is how the rules of the game work.
00:03
< MyCatOwnz>
ToxicFrog: so why didn't you just point that out in the first place?
00:03
<@McMartin>
This is because if TF wants to cast Magic Missile, I can make him cast something else instead by casting Paralysis on him.
00:03
<@ToxicFrog>
Indeed, you don't even know if the select target panel /can/ appear, because if someone's cast, say, Charm Person on you, they might permute your gestures into something that is no longer a valid spell.
00:04
<@ToxicFrog>
I TRIED!
00:04
<@McMartin>
Oh, I thought of a language thing
00:05
< MyCatOwnz>
Hang on. How can a person target another for, say, Charm Person, before the target selection dialogue has come up?
00:05
<@McMartin>
We need a much better message for "Who do you want to cast Summon Ogre on?"
00:05
<@ToxicFrog>
MCO: they cast it the previous turn.
00:05
<@McMartin>
But they don't select the gesture until the turn following.
00:05
<@ToxicFrog>
Then, the next turn, after all players have chosen gestures but before targeting: "Which gesture do you want <player> to make?"
00:05
< MyCatOwnz>
Makes sense.
00:06
<@ToxicFrog>
McMartin: yeah.
00:06 ChalcyGone [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
00:06
<@ToxicFrog>
Which means it can't use the generic PLAYER_CAST_SPELL lc entry.
00:06
<@ToxicFrog>
Or rather, it can, but the entry will have to be smart about whether it's a summoning spell.
00:06 ChalcyGone is now known as Chalcedon
00:06
<@McMartin>
Yeah, I was about to say
00:06
< MyCatOwnz>
McMartin: "Who do you want to trow a summoned Ogre at?"
00:06
< MyCatOwnz>
*throw
00:06
<@McMartin>
MyCatOwnz: No, "Who shall control this summoned Ogre"
00:07
<@ToxicFrog>
MCO: it's actually "who do you want to control the summoned creature"
00:07
<@ToxicFrog>
So if you cast it on your enemy, they get complete, unquestioned control over what you just summoned.
00:07
< MyCatOwnz>
So put that in instead. Problem solved! =D
00:07
<@ToxicFrog>
ANYWAYS. None of this is germane to the original question.
00:07 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
00:07
<@McMartin>
Which I wasn't even here for.
00:07
<@ToxicFrog>
I already have the whole producer/consumer thing going.
00:07
<@ToxicFrog>
The server is getting events (which underneath mostly come from the network and sometimes come from other events pushing new events onto the event stack).
00:08
< MyCatOwnz>
Unless the game rules are *really* arcane, how can giving a summoned mercenary away be advantageous? Or are they just that wierd?
00:08
<@ToxicFrog>
But there's a few ways I could structure the server.
00:08
<@ToxicFrog>
For example, the way Plotkin did, as a master loop that calls each phase of the turn in sequence and exits when someone wins.
00:09
<@ToxicFrog>
Or as an explicit state machine. In either case, the handling and validity of events depends on the current state.
00:09
< MyCatOwnz>
Generate a "someone won" event?
00:09
<@ToxicFrog>
Do event handlers exist in the events and check the current state? Or do they exist in the state, if it's an explicit state machine?
00:09 Chalcedon is now known as ChalcyNap
00:10
< MyCatOwnz>
(generated by the make_person_die() function, called when injure_person() notices that someone's health has just hit zero, which is called when some event causes damage to some player.)
00:10
<@ToxicFrog>
(wrong track entirely and totally irrelevant to the current discussion in any case)
00:10
<@McMartin>
TF: Many state machines only accept a fraction of the alphabet at each state.
00:11
<@ToxicFrog>
Yes.
00:11
<@McMartin>
So I'd actually say it's secretly multiple dispatch on a (state, event) pair.
00:11
<@McMartin>
So you can do it either way because both are relevant.
00:11
<@ToxicFrog>
TALK is accepted pretty much anytime, but, say, GESTURES is only allowed during the gesture-entry phase, ANSWER only during question-and-answer...
00:11
<@McMartin>
I'd put it in the state.
00:12
<@McMartin>
Hmm.
00:12
<@McMartin>
Actually, no, I'd do a state-check on a generic handler
00:12
<@McMartin>
Because you don't re-use events, right?
00:12
<@ToxicFrog>
Err. Re-use?
00:12
<@McMartin>
I mean, it's not like GESTURES means one thing in one state and another thing in other states
00:12
<@ToxicFrog>
Aah. No.
00:12
<@ToxicFrog>
I am trying to avoid this.
00:12
<@ToxicFrog>
(this was not always the case in the C version)
00:13
<@ToxicFrog>
So, yes, theoretically, in any state in which a given event is valid, it should be handled identically.
00:13
<@McMartin>
So your state check is really only "Is this legal? No? Return a BAD_EVENT message to that client. Otherwise, do your thing"
00:13
<@McMartin>
Two lines at the top of each handler.
00:15
<@ToxicFrog>
Right.
00:15
<@ToxicFrog>
(or, as it may be, in GetEvent(), which silently rejects bad events without involving the upper layers)
00:16
<@McMartin>
Right.
00:17
<@ToxicFrog>
And this works nicely with the tail-callified state-machine approach, which can then just set the appropriate vars when it enters the state.
00:19
<@ToxicFrog>
Mmm, tail calls.
00:20
<@McMartin>
Does Lua actually have tail calls?
00:20
<@ToxicFrog>
Yep!
00:20
<@ToxicFrog>
A call of the form return functioncall is called a tail call. Lua implements proper tail calls (or proper tail recursion): in a tail call, the called function reuses the stack entry of the calling function. Therefore, there is no limit on the number of nested tail calls that a program can execute. However, a tail call erases any debug information about the calling function.
00:29 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Quit: Jouets de Dieu, jouets de jouets, et les jouets de me, fait naître Clairvoire.]
00:30
<@McMartin>
There's a fairly horrific trick you can do with enormous quantities of #defines that turn into nested switch()es and goto()s in C to get a reasonably efficient state machine.
00:32
<@ToxicFrog>
Yeah, I did that in Compilers last year.
00:32
<@ToxicFrog>
I'd rather not do it again, and since I have proper tail recursion I don't need to.
00:34
<@ToxicFrog>
Each state is an object with an :Execute() method or similar. To change states, just return next_state:Execute()
00:37
< MyCatOwnz>
Eck? That sounds vaguely less straightforward than the lame method, do { switch(state) { /*stuff*/ } } while (state!=gameover)
00:37
<@ToxicFrog>
Only because you aren't used to thinking tail-recursively, and it's much easier to read.
00:38
<@ToxicFrog>
And modify.
00:38
<@ToxicFrog>
McM, I turn the task of lauding the benefits of tail-recursion over to you, I'm off to eat.
00:39
< MyCatOwnz>
I called the method lame for a reason. Yes, I know what tail recursion is. Bon appetit.
00:42
<@McMartin>
The C version's code quality depends on how well your C compiler encodes switch.
00:42
<@McMartin>
The tail-recursive version is literally a computed goto
00:43
<@McMartin>
But some C compilers translate switches into an if/else if/else if/else if sequence instead of a jump table, and this carries a sizable performance penalty.
00:46
< MyCatOwnz>
McMartin: oh well.
00:48
< MyCatOwnz>
void foo(void); void bar(void); /* ... */ void baz(void); void (*statefunctions[NUMBER_OF_STATES])(void); statefunctions[0] = &foo; statefunctions[1] = &bar; /* ... */ statefunctions[n] = &baz;
00:48
< MyCatOwnz>
do { statefunctions[current_state](); } while (current_state != someone_won)
00:49
< MyCatOwnz>
Function pointers to the rescue! Tada, the inefficient switch() statement dilemma solved.
00:49
< MyCatOwnz>
Please insert pizza.
00:49
<@McMartin>
Except those aren't tail calls, so they're consuming stack space.
00:49
<@McMartin>
When I said "literally a computed goto" I meant literally.
00:50
<@McMartin>
As in, CALL does not appear; it's just JMP.
00:50
< MyCatOwnz>
A do { } while() loop is also a JMP.
00:50
<@McMartin>
With a JSR inside of it.
00:51
< MyCatOwnz>
Offhand, what's the JSR mnemonic short for?
00:51
< MyCatOwnz>
statefunctions[current_state]; will consume stack space, but will immediately give it back when it returns. It's an ordinary function call.
00:52
<@McMartin>
Er.
00:52
<@McMartin>
CALL
00:52
<@McMartin>
Sorry, used the 6502 mnemonic
00:52
<@McMartin>
(Jump Sub-Routine)
00:52
< MyCatOwnz>
k, thanks.
00:52
<@McMartin>
JSR, RTS.
00:52
<@McMartin>
All 6502 mnemonics are 3 characters long
00:53
<@McMartin>
They also tend to dictate registers and thus be uglier than z80 equivalents
00:53
<@McMartin>
On the other hand, it also means you can assemble it with sed~
00:53
<@McMartin>
(no MOV, for instance; there's LDA, LDX, LDY, and s/LD/ST/ for the other direction.)
00:53 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code
00:54
< MyCatOwnz>
While loops do not consume stack space. Tail recursion optimization is nothing more than turning a "func(stuff) { do_stuff(stuff); if (!stuff) return func(different_stuff); }" into: "func(stuff) { while (stuff) { do_stuff(stuff); } }"
00:54
< MyCatOwnz>
The two are equivalent, except that the former consumes stack space and is easier to debug.
00:54
<@ToxicFrog>
....no.
00:55
< MyCatOwnz>
ToxicFrog: yes.
00:55
<@ToxicFrog>
No, it isn't. Those two code blocks are not semantically equivalent.
00:55
<@McMartin>
The first is a do-while
00:55
<@McMartin>
Also, you're ignoring local variables
00:56
<@McMartin>
But that just complicates the transform.
00:56
< MyCatOwnz>
McMartin: because they're trivially handled in the transform.
00:57
<@ToxicFrog>
You're also completely ignoring the fact that while using tail calls for iteration is sometimes less readable, using tail calls instead of switch() for state machines is nearly always more readable.
00:57
<@ToxicFrog>
Much more.
00:57
<@ToxicFrog>
And easier to debug.
00:58
<@ToxicFrog>
Furthermore, using tail calls for the latter does not mean you are forced to use tail calls for the former, either, unless your language lacks those constructs.
00:59
< MyCatOwnz>
Example, please?
00:59
<@ToxicFrog>
Lisp.
00:59 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
00:59 mode/#code [+o Chalcy] by ChanServ
00:59
<@ToxicFrog>
Or did you mean of more readable state machines?
00:59
< MyCatOwnz>
That's the one, please.
00:59
<@ToxicFrog>
Ok, here's one:
01:00
<@ToxicFrog>
switch(state) {
01:00
<@ToxicFrog>
case STATE_FIRST:
01:00
<@ToxicFrog>
/* 200 lines of state execution code go here */
01:00
<@ToxicFrog>
break;
01:00
<@ToxicFrog>
case STATE_SECOND:
01:00
<@ToxicFrog>
/* 200 more lines of state execution code go here */
01:00
<@ToxicFrog>
...
01:00
<@ToxicFrog>
}
01:00
<@ToxicFrog>
Or:
01:00
<@ToxicFrog>
function StateFirst:Execute()
01:00 ChalcyNap [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
01:00
<@ToxicFrog>
-- 200 lines of state execution code
01:01
<@ToxicFrog>
return nextState:Execute()
01:01
<@ToxicFrog>
end
01:01
<@ToxicFrog>
function StateSecond:Execute()
01:01
<@ToxicFrog>
-- you get the idea
01:01
< MyCatOwnz>
Elegant.
01:02
<@ToxicFrog>
It also makes it easier to modify the state diagram, because you just need to look at the state function you want to modify + any new states you're adding rather than, say, editing an increasingly large an unwieldly switch statement.
01:02
<@ToxicFrog>
And now, I must attend to the stove.
01:02
<@ToxicFrog>
Back in ~15.
01:05
<@McMartin>
If I were actually coding a state machine in C, I wouldn't use macros, but instead use a code generator.
01:22
<@ToxicFrog>
Quite.
01:45
< Janus>
Since when has 'fopen()' become deprecated..?
01:46
< MyCatOwnz>
Janus: if you're using C++, they'll probably want you to use iostreams instead.
01:46
<@McMartin>
iostreams are made of spiders.
01:46
< MyCatOwnz>
Janus: fuck them.
01:46
< MyCatOwnz>
McMartin: precisely!
01:47
< MyCatOwnz>
man 2 open; man 2 read
01:47
<@McMartin>
Uh, no, those are POSIX syscalls.
01:47
<@McMartin>
fopen() works even on non-POSIX systems, IIRC.
01:47
< MyCatOwnz>
Precisely. You can take away my syscalls when you pry them from my cold, lifeless terminal.
01:47 * McMartin ports MCO to the PalmPilot
01:48 * MyCatOwnz ports McMartin to PalmLinux.
01:48
< Janus>
Aye, I'll see about shoving their deprecation in a place it would be more valid.
01:48
< MyCatOwnz>
-Wno-depreciated
01:48
<@McMartin>
Janus: Though if you're doing heavy string processing on files
01:48
<@McMartin>
You should be using Python or PErl
01:49
< Janus>
Yes, but I'd hate to lug those two things around, as I'm going to give this program to someone else. (first commission!)
01:52
< Janus>
Of course, I'm assuming you must take the entire IDE of those two things around with you to run them, which may be incorrect.
01:53
< MyCatOwnz>
Completely.
01:54
< MyCatOwnz>
All you need to lug about is the interpreter - a handful of megabytes. Like a duckfart compared to pretty much any other source of HDD space burnup.
01:57
< MyCatOwnz>
ToxicFrog: http://pastebin.com/835854 <--- lazy compiler dun't have to do jack schitt.
02:02
<@ToxicFrog>
McMartin: hell, even Lua has vastly superior string processing.
02:02
<@ToxicFrog>
And we have ourselves written handy programs which allow you to distribute your Lua code as a binary!
02:02
<@ToxicFrog>
With the overhead of the interpreter, of course, which is a whole 200 kilobytes.
02:03 * MyCatOwnz pokes ToxicFrog with http://pastebin.com/835854
02:03
< MyCatOwnz>
Any excuse to use a function pointer. ^_^
02:04 * Janus will have to see what this Lua business is sometime.
02:05
<@ToxicFrog>
MCO: That is because you are a warped individual~
02:06
<@ToxicFrog>
Of course, I can't tell how warped, because pastebin is taking forever to respond.
02:06
< MyCatOwnz>
Ah, k.
02:07
<@ToxicFrog>
Janus: it's an interpreted, garbage-collected language designed for embedding. Includes useful features such as hash tables, function closures, first-class everything and some reflectivity.
02:08
<@ToxicFrog>
Noteworthy for being very small, and (for a scripting language) very fast.
02:08
<@ToxicFrog>
And very useful.
02:08
<@ToxicFrog>
Although I use it (and advocate it) for stand-alone programming, it was originally designed to be embedded into larger C or C++ programs to give them scripting capability.
02:08
< Janus>
Small things are nice, as well as fast things. I'll be sure to download some of that then.
02:08
<@ToxicFrog>
Many games use it in this way.
02:09
< MyCatOwnz>
ToxicFrog: http://www.cs.bris.ac.uk/home/rb6822/
02:09
<@ToxicFrog>
Including, among other things, Homeworld 2, Spellforce, Dawn of War, and many others I'm forgetting.
02:11
<@ToxicFrog>
Yeah, that's pretty sick.
02:12
< Janus>
The only real turn off for interpretted languages was their speed penalty, though, all things considered, speed isn't important for everything.
02:12
<@ToxicFrog>
Janus: actually, you might find it useful in your game.
02:12
<@ToxicFrog>
http://www.lua.org/manual/5.1/
02:12 * ToxicFrog nods
02:12
<@ToxicFrog>
I find that a lot of games use them for stuff that only runs once, too.
02:12
<@ToxicFrog>
Eg, Homeworld 2, where it's used for all the ship and weapon information.
02:12
<@ToxicFrog>
Spellforce uses it for a lot more, including the in-game developer console.
02:14
<@ToxicFrog>
I can, however, tell you from experience that it is not performant enough to write a usable software 3d renderer in.
02:15
< Janus>
Alright. *bookmarks* I'll probably have to use something much more flexible than C++ for the non-engine aspects of the game.
02:16 * Janus dreads the time he has to create a way for it to save it's state.
02:17
<@McMartin>
Please don't use raw structure dumps, kthxdie
02:18
< Janus>
I was planning on dumping it all in a huge .bin file that would cause God to kill the kittens, but that's probably not a good idea.
02:19
<@ToxicFrog>
If you do, McM and I will be honor bound to eat your liver.
02:19
<@McMartin>
In particular, such a .bin won't transport between my laptop and my desktop.
02:20 * McMartin likes the IFF metaformat for giant binary blobs.
02:20 * ToxicFrog just dumps lua_Tables
02:22
< Janus>
Though, a .bin would be alright for writing things to disk that aren't in use at the time for memory conservation, right?
02:24
<@McMartin>
That depends. Are you targeting MS-DOS?
02:24
<@McMartin>
Otherwise, paging stuff out is what an operating system is for.
02:25
<@McMartin>
So load stuff, and if you don't need it for awhile, free/delete it when you're done and reload it later.
02:26
<@McMartin>
You may need a more involved resource manager if you're being careful about which textures are loaded into the graphics card at the same time or whatnot, but ISTR you're being all 2D.
02:30
< Janus>
Alright then. (I pity the folks that use 3D, with all their matrices, UVs, clipping planes, and ectera. Poor souls.)
02:31
<@McMartin>
(The general principle here is "never write out to disk anything that hasn't changed"
02:34 MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has quit [Quit: Sleeping]
02:35
< Janus>
(I know, but what I meant was such things like, for instance, NPC avatar objects, as there would be times when they wouldn't be on screen for it to matter, but you'd still want the state of the object laying around for future use.)
02:35
<@McMartin>
Yeah. Keep that in memory, basically.
02:35
<@McMartin>
The OS will swap it out if and only if it runs out of physical memory.
02:36
<@McMartin>
If it doesn't, failing to go out to disk speeds you up by a factor of 10,000 or so.
02:36
< Janus>
I always forget how cheap memory is sometimes.
02:37
< Janus>
That is, of course, until it isn't.
02:38
<@McMartin>
This is more "virtual memory management is one of the core tasks of a Real OS"
02:38 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Quit: blakdfja]
02:49 Chalcy is now known as Chalcedon
03:03
<@ToxicFrog>
Hmm. As far as I can tell, Sandopolis Zone 2 is not actually completable as Knuckles.
03:33 Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code
03:55 Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Quit: Leaving]
03:55 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
03:55 mode/#code [+o Chalcy] by ChanServ
03:56 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
04:22 ChalcyGone [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
04:23 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
04:25 Vornicus-Latens is now known as Vornicus
04:27
<@McMartin>
I'm sure I've won as Knuckles before.
04:28
<@McMartin>
It ends at Sky Sanc.
04:34 Raif [~corvusign@Nightstar-7918.hsd1.mn.comcast.net] has quit [Quit: A trebuchet is not a marital aid. Many bothans died to bring us this information.]
04:34 ReivWork is now known as Reiver
05:27 Vornicus [~vorn@Admin.Nightstar.Net] has quit [Ping Timeout]
05:28 Vornicus [~vorn@67.50.40.ns-3674] has joined #code
05:29 Vornicus is now known as NSGuest-382
05:31 NSGuest-382 is now known as Vornicus
06:08
<@McMartin>
Hmm. Fire Cross is pretty cool.
06:13
< Reiver>
?
06:15
<@McMartin>
http://www.ocremix.org/remix/OCR01515/
06:19 * McMartin also eyes Raif's quit message
06:19
<@McMartin>
I am reminded of the Dead Bothan Count, a measure of the importance of military intelligence.
06:23
< Reiver>
You would also be reminded, had I been in FLEET at the time, of my old quit message: "A Trebuchet is not a skirmishing weapon." It became something of a meme of the "A trebuchet is not a *" variety, which was then butchered further.
06:23
< Reiver>
Raifs quit message is thusly something of a ressurection of a frankenmeme~
06:40 AnnoDomini [~fark.off@Nightstar-29607.neoplus.adsl.tpnet.pl] has joined #Code
06:41 ChalcyGone is now known as Chalcedon
06:44
< Chalcedon>
who said that orginally Reiver?
06:45
< Chalcedon>
wasn't it Prophet?
06:46
< Chalcedon>
In other news I am considering taking first year programming
06:47
< Chalcedon>
unfortunately this requires spending several hours a week trapped in a room full of 18 year old male geeks.
06:47 * Chalcedon is slightly concerned by this point
06:48
< Reiver>
Prophet, aye.
06:49
< Reiver>
Chalcedon: You'll be fine. If nothing else, they'll be too intimidated by your presence to do anything.
06:49 Chalcedon is now known as Silence
06:49 Silence is now known as Chalcedon
06:49
< Chalcedon>
that doesn't mean I can't worry about it!
06:50
< Chalcedon>
actually, going back to first year scares the crap out of me too
06:57 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
06:57 mode/#code [+o Chalcy] by ChanServ
06:58 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
07:09
< Reiver>
It's not as bad as all that, I found
07:32 * Vornicus nromminates Turkey
07:52 Vornicus is now known as Vornicus-Latens
08:13
< Reiver>
So, I was wondering.
08:14
< Reiver>
If one was, through a strange feat of insanity, able to get hold of two seperate internet connections
08:14
< Reiver>
Is it possible to link these up to routers or computer-based-gateway such that both connections handle traffic, in duplex or otherwise?
08:56 * McMartin commits a bunch of UQM stuff
08:58
<@McMartin>
Yay refactoring.
08:58 * McMartin cuts 20 lines from the source code to add a feature one of the other devs requested
09:05
< Reiver>
L
09:05
< Reiver>
?
09:14 Ev3 [~-@87.72.36.ns-26407] has quit [Killed (NickServ (GHOST command used by ZLOK2))]
09:14 Ev3 [~Shemhazai@Nightstar-8901.ds1-ba.adsl.cybercity.dk] has joined #Code
09:14 Ev3 is now known as Fish
09:19 Thaqui [~Thaqui@203.100.215.ns-22453] has quit [Ping Timeout]
09:21 Fish [~Shemhazai@Nightstar-8901.ds1-ba.adsl.cybercity.dk] has quit [Quit: Don't try to read the quit message, that is impossible. Instead only realize the thruth; "there is no quit message" and you will see it is not you who read the quit message but the quit message who reads you.]
09:21 Ev3 [~-@87.72.36.ns-26407] has joined #Code
09:22 Thaqui [~Thaqui@203.100.215.ns-22453] has joined #code
09:24 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Quit: ]
09:41
<@McMartin>
k!
09:47 Ev3 [~-@87.72.36.ns-26407] has quit [Connection reset by peer]
09:48 Ev3 [~-@87.72.36.ns-26407] has joined #Code
09:53 You're now known as TheWatcher[wr0k]
10:03 Ev3 [~-@87.72.36.ns-26407] has quit [Connection reset by peer]
10:04 Ev3 [~-@87.72.36.ns-26407] has joined #Code
10:08 Reiver is now known as ReivZzz
10:13 Thaqui [~Thaqui@203.100.215.ns-22453] has quit [Ping Timeout]
10:15 Thaqui [~Thaqui@203.100.215.ns-22453] has joined #code
11:07 ReivZzz [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
11:42 Thaqui [~Thaqui@203.100.215.ns-22453] has quit [Quit: Leaving]
11:57 AnnoDomini [~fark.off@Nightstar-29607.neoplus.adsl.tpnet.pl] has quit [Ping Timeout]
12:03 AnnoDomini [~fark.off@Nightstar-29148.neoplus.adsl.tpnet.pl] has joined #Code
12:36 MyCatOwnz [~rb6822@Nightstar-5328.cs.bris.ac.uk] has joined #code
13:05 ReivZzz [~reaverta@IRCop.Nightstar.Net] has joined #Code
13:05 mode/#code [+o ReivZzz] by ChanServ
14:39
<@ToxicFrog>
ReivZzz: yes, it is, but I don't know the details.
15:16 MyCatOwnz [~rb6822@Nightstar-5328.cs.bris.ac.uk] has quit [Quit: Running away to hand my shi-er, work in.]
17:22 You're now known as TheWatcher[afk]
17:30
<@ToxicFrog>
It occurs to me that the other main use of goto (pre-return cleanup) can also be effectively handled by tail calls, in conjunction with local functions.
17:33 ReivZzz is now known as Reiver
17:41 Reiver is now known as ReivWork
18:11
<@ToxicFrog>
Hmm. I don't think I can implement call/cc in Lua.
18:38 You're now known as TheWatcher
19:02 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
19:02 mode/#code [+o Chalcedon] by ChanServ
19:49 EvilDarkLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has quit [Ping Timeout]
20:01 EvilDarkLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has joined #code
20:03
<@ToxicFrog>
Nope, I can't, I can only throw up/forward, not backwards.
20:20 * Chalcedon throws TF a cookie
20:21
<@ToxicFrog>
Mmmcookie.
20:21 * ToxicFrog nibbles
20:29 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code
20:31
< Janus>
May I ask a question..?
20:31
< EvilDarkLord>
This seems to be allowed in general.
20:32
< Janus>
How does one normally go about releasing a C++ program to others?
20:33
< EvilDarkLord>
My utterly ignorant answer is "executable file". Now I flee.
20:34
< Janus>
I tested that, and the deploy was a dud.
20:34
< EvilDarkLord>
Damn. What are you trying to distribute, if I may ask?
20:35
< Janus>
It's a simple console that takes a look at a few .txt files with survey results in it, and does math-ish things to it. Nothing complex or fun.
20:36
< EvilDarkLord>
What system are you building it on?
20:36
< Janus>
Windows XP!
20:38
< Janus>
It's not the best OS around, but it /is/ the best OS I've ever seen.
20:39 * Janus doesn't get out often.
20:39
< EvilDarkLord>
Eh, I wasn't about to start bashing it :)
20:39
< EvilDarkLord>
And the deployment machine is the same?
20:40
<@ToxicFrog>
Janus: for windows, one generally releases it as either an installer, or a .zip or .rar (or self-extracting version of same) containing the .exe and any additional data it needs.
20:40
< Janus>
Anyway, yes, the computer I tested it on ran the same OS. I do believe the reason for it's failure was some random .DLL.
20:40
<@ToxicFrog>
If it requires registry wackiness or the like, an installer is almost required.
20:40
<@ToxicFrog>
What DLL?
20:41
< Janus>
I dunno, didn't write it down. It was something VS-ish though, seeing as it had 'VS' surrounded by myraid numbers and characters.
20:42
< Janus>
It seems too small a program to require an installer though...
20:44
< EvilDarkLord>
Does Visual Studio require some arcane DLLs by default then?
20:45
<@ToxicFrog>
MSVCRT, I think, and possibly some other stuff too.
20:45
< Janus>
The .exe that I copied was also the one it uses to debug the program (there's no 'release' .exe so far as I know), so that may explain the strange .dll situation.
20:45
<@ToxicFrog>
Janus: you'd be surprised. And why didn't you write it down?
20:46
<@ToxicFrog>
EvilDarkLord: generally, it requires the windows equivalents of libc/libc++ at minimum.
20:46
< Janus>
It was so long, and I assumed there would be enough missing that one wouldn't make any impact.
20:46
<@ToxicFrog>
Which are not always installed.
20:46
<@ToxicFrog>
.........................
20:46
< Janus>
... I'm going to here the pun, aren't I?
20:47 * ToxicFrog tosses Janus into the pit full of pelvis-eating deathwatch beetles
20:47 * EvilDarkLord eyes from cover.
20:48 * Janus acts surprised, feels pain.
20:49
< Janus>
Don't IDEs have a button for exporting these things, or at least saying which .dll files are needed where?
20:49 * Janus looks for the button.
20:50
< EvilDarkLord>
Hmm. RTFM might be the way to go.
20:50
<@ToxicFrog>
You'd think so, but this is msdev.
20:50
<@ToxicFrog>
Even if it does it's probably not correct.
20:50
<@ToxicFrog>
And there's generally an assumption that, as the developer, you know what libraries you're using.
20:50 * EvilDarkLord gets this feeling that he should leave Windows C++ well enough alone.
20:51
< EvilDarkLord>
(Or at least MS's tools for that)
20:51
< Janus>
It's okay when they assume... that's a double standard.
20:52
<@ToxicFrog>
EDL: I find that I have no problem generating releasable programs with g++~
20:53
<@ToxicFrog>
(I mean, apart from the bizarre incantations required to get a program to link successfully on windows, but once I have those right it just works)
20:54
< EvilDarkLord>
Cool.
21:24
<@ToxicFrog>
AhahahahahaHAHAHAHAHAHAHAHAHAHAHA luasocket bows before my will!
21:27 * Janus golfer claps.
21:35 Thaqui [~Thaqui@Nightstar-26916.jetstream.xtra.co.nz] has joined #code
21:40 Thaqui [~Thaqui@Nightstar-26916.jetstream.xtra.co.nz] has quit [Ping Timeout]
21:59 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
22:01 Thaqui [~Thaqui@Nightstar-18234.jetstream.xtra.co.nz] has joined #code
22:03 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Quit: Jouets de Dieu, jouets de jouets, et les jouets de me, fait naître Clairvoire.]
22:51 You're now known as TheWatcher[T-2]
22:54 You're now known as TheWatcher[zZzZ]
23:14
<@ToxicFrog>
Hmm.
23:14
<@ToxicFrog>
"Chemical Plant" from S2 needs an appropriately r0xx0r remix.
23:22
<@McMartin>
Chemical Reaction isn't bad, but.
23:22
<@ToxicFrog>
It's not bad, but it's definitely not r0xx0r either.
23:23
<@ToxicFrog>
Speaking of. Sonic. Guitar Hero controller. ?
23:23
<@McMartin>
Failure.
23:23
<@ToxicFrog>
;.;
23:23
<@McMartin>
The GH controller indicates that it is a GH controller by redlining axis 0 at minimum.
23:24
<@McMartin>
Which is to say, it holds left all the time.
23:24
<@ToxicFrog>
Aah.
23:24
<@ToxicFrog>
So it's not even remotely playable, since the level extends to the right.
23:25
<@ToxicFrog>
I wonder if some kind of hardware hackery could be done to turn it into an actual usable controller~
23:25
<@McMartin>
I believe it's doing this on the digital pad, though
23:26
<@McMartin>
I've seen DMC3 played with it.
23:27
<@ToxicFrog>
Aah. Sweet.
23:27 * ToxicFrog eyes the Guitar Hero wikipedia page.
23:27
<@ToxicFrog>
"icecream hero was 2003's top seller, this is the follow up title. you may use the previously released bombpop controller, however the jaguar compatable triple scoop cone is not supported by this version."
23:27
<@ToxicFrog>
Someone's been having too much fun with the edit command.
23:28 * Stephenie blinks
23:28 AnnoDomini [~fark.off@Nightstar-29148.neoplus.adsl.tpnet.pl] has quit [Quit: Some people find sanity a little confining.]
23:28 * Stephenie scoops Ben up like icecream and carrie him off
23:29 * ToxicFrog eeps
23:32
<@McMartin>
Hmm. I need to replay Sonic 2.
23:34
<@ToxicFrog>
I've been working on Sonic 2 slowly. It's spidery.
23:34
<@ToxicFrog>
Also, you're right, Sandopolis is in fact completable as Knuckles.
23:34
<@ToxicFrog>
It just needs one of (1) inhumanly precise skills, (2) savescumming or (3) Super/Hyper Knuckles
23:35
<@ToxicFrog>
Regrettably, Lava Reef appears to be made of ;.; as Knuckles.
23:36
<@McMartin>
IIRC the game starts seriously diverging at or just after Lava Reef.
23:36
<@ToxicFrog>
Level-wise, story-wise or fun-wise?
23:37
<@McMartin>
Level-wise.
23:37
<@McMartin>
IIRC, the Knuckles game is supposed to be "cleaning up the mess Sonic and Eggman made"
23:37 * ToxicFrog nods
23:38
<@ToxicFrog>
Mostly I'm wondering if I really want to continue without massive cheatery, because after Lava Reef, we have Crystal Caves, which was bad enough as Sonic.
23:38
<@McMartin>
Um
23:38
<@McMartin>
Oh, you mean Lava Reef B
23:38
<@McMartin>
I think you'll approve of Knuckles' version of Hidden Palace.
23:39
<@McMartin>
And then after that is Sky Sanctuary, in which you will notice Some Differences.
23:39
<@ToxicFrog>
There's no lava, .'. it's not a lava reef~
23:39
<@ToxicFrog>
Interestingly, the track it uses is marked in the dump as "24_HiddenPalace"
23:40
<@McMartin>
The one they finally used for Hidden Palace is better.
23:47
<@McMartin>
Hmm. Oil Spill is better than I remember, but it doesn't sound like the Oil Ocean theme to me.
23:50 EvilDarkLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has quit [Ping Timeout]
23:50 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code
23:58 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
23:58 mode/#code [+o Chalcedon] by ChanServ
--- Log closed Fri Dec 01 00:00:22 2006
code logs -> 2006 -> Thu, 30 Nov 2006< code.20061129.log - code.20061201.log >