code logs -> 2012 -> Sun, 08 Apr 2012< code.20120407.log - code.20120409.log >
--- Log opened Sun Apr 08 00:00:33 2012
00:06 AnnoDomini [annodomini@Nightstar-4f367c0c.adsl.tpnet.pl] has quit [[NS] Quit: Zzz.]
00:09 Anna is now known as rms
00:42 Orthia is now known as Reiver
01:09
<&McMartin>
Oh man
01:09
<&McMartin>
I can't tell if this is the best idea ever or the worst idea ever
01:10
<@ToxicFrog>
Well don't leave us hanging
01:10
< celticminstrel>
Clearly it's both.
01:11
<&McMartin>
So, I'm writing a code generator for the 6502 chip, a CISC architecture more or less.
01:11
<&McMartin>
I've gotten it down to three-address code so far, so you've got a destination and two sources, each either an absolute or relative address.
01:11
<&McMartin>
Absolute and relative addresses, of course, have different instructions.
01:11
<&McMartin>
While I could force-emulate RISCy stuff that's pretty bulky
01:11
<&McMartin>
But I'm writing this in ML.
01:12
<&McMartin>
So I can do a switch on the three-address instruction with something like...
01:12
<&McMartin>
Mov (Absolute dest, Indexed src) -> (some indexed LDA instructions and absolute STA instructions)
01:13
<&McMartin>
Mov (Indexed dest, Indexed src) -> (indexed both, with the index register shared)
01:13
<&McMartin>
Mov (Indexed (dest, 0), Indexed (src, i)) -> (indexed both, but with the index register *not* shared because this is one case on the 6502 where they can be distinct)
01:13
<&McMartin>
As switch targets
01:14
<&McMartin>
Basically, use ML's function call pattern matcher to implement register allocation
01:26
<&McMartin>
Hm, perhaps this is actually a fairly blase technique, simply made simpler by ML's function call mechanism.
01:26
<&McMartin>
This looks extremely similar to the Maximal Munch algorithm.
01:50 gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has joined #code
01:54 * McMartin makes Print be a compiler intrinsic, feels a tiny piece of his soul die.
01:54
<&McMartin>
Kind of unavoidable when your source language is Pascal though.
01:55
<&McMartin>
Hmm. I can improve this if I break quads into classes.
01:57
<&Derakon>
Are you making your own language again?
01:59
< Reiver>
So, SQL
01:59
< Reiver>
I do so much of it now
01:59
< Reiver>
;_;
02:00
< Reiver>
Regardless: In Oracle, at least, rank() PARTITION BY (foo order by desc) is /so much faster/ than MAX it's not even funny
02:00
< Reiver>
Is there a similar stunt for doing SUM()?
02:05
< Rhamphoryncus>
if (amount < 0) {
02:05
< Rhamphoryncus>
amount = -amount;
02:05
< Rhamphoryncus>
str++;
02:05
< Rhamphoryncus>
}
02:05
< Rhamphoryncus>
It's obvious what that does.. but that's not what it does :P
02:09 Kindamoody[zZz] is now known as Kindamoody
02:13 gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has quit [[NS] Quit: Gone]
02:14
< Rhamphoryncus>
aaaugh.. and make runes a *lot* faster if I quite the program currently running in that shell first :P
02:15 * Tamber adds a few more ccs of mouse blood.
02:17
< Vornotron>
what the fuck did you just do, rham
02:17
< Rhamphoryncus>
Vornotron: switched to console window, typed make and hit enter
02:17
< Vornotron>
No, the code snippet
02:17
< Rhamphoryncus>
The program was still running from my last test, and it's not a console app, so it just sat there
02:17
< Rhamphoryncus>
ah
02:17
< Vornotron>
And what language are you in for that, so I know what str is doing here
02:17
< Rhamphoryncus>
str is a StringID in openttd
02:18
< Rhamphoryncus>
So it's an index number referencing a format string
02:18
< Vornotron>
Oh shit that's just evil
02:19
< Rhamphoryncus>
It goes one better: the *default* is negative. After incrementing it becomes positive
02:19
< Vornotron>
So the next string I imagine would give you your format string for negative value
02:19
< Vornotron>
s
02:19
< Rhamphoryncus>
Some confusion about profit vs cost. The end result is correct, but it's a tad hard to make sense of
02:20
< Vornotron>
So you have something like ["Profit: ${amount}", "Loss: ${amount}"]
02:20
< Vornotron>
or vice versa or something
02:21
< Vornotron>
And the amount I would pray is being passed in by value.
02:21
< Rhamphoryncus>
By value, yes
02:21
< Vornotron>
Evil, of course, but
02:22
< Rhamphoryncus>
Haw. Replaced the ascii - with a unicode - in the english_US.txt and the whole GUI switched to the internationalized renderer XD
02:24
< Rhamphoryncus>
Which means unantialised truetype font rather than hand-tweaked bitmap font
02:25
< Vornotron>
D:
02:25
< Vornotron>
Reiver: yay, SQL
02:26
< Rhamphoryncus>
related: if any of you feel you have software renderer skillz I invite you to help me improve performance of the 32bpp renderer, so the 8bpp can ultimately be retired
02:26
< Vornotron>
Der: McM is actually building a 6502 compiler for a subset of Pascal
02:26
< Vornotron>
I have no software rendering skillz
02:29
<&Derakon>
My software rendering skills generally consist of "hey, let's hand this off to a library."
02:29
<@ToxicFrog>
Ditto.
02:32
<&McMartin>
I wrote my own blitter in 16-bit x86 assembler back in the day, never again
02:33
<&McMartin>
That said
02:33
<&McMartin>
If the 32bpp rendererer is slow look into using MMX/SSE extensions >_>
02:34
< Rhamphoryncus>
It's not slow. It's just slower
02:34
< Rhamphoryncus>
And the whole game is pushed to the limit already
02:34
<&McMartin>
It's always going to be slower unless it's something you do in hardware
02:34
<&McMartin>
There's by definition four times the data
02:35
< Rhamphoryncus>
Sure, but I'm hoping to find ways to cheat :)
02:35
<&McMartin>
SIMD instructions are basically your only hope.
02:35
< Rhamphoryncus>
The ways of doing transparency and company colours for instance. They need not be the same
02:35
<&McMartin>
Palette swapping is always a pain in the ass
02:36
<&McMartin>
Because, well, 32bpp isn't paletted
02:36
<&Derakon>
Why not use hardware rendering, anyway?
02:36
<&McMartin>
Assuming you aren't already, cache the "palette-swapped" version in memory as a separate sprite, and reuse it.
02:37
<&McMartin>
For transparency, you're 32bpp, that means you have an alpha channel
02:37
< Rhamphoryncus>
My instinct is to have a greyscale overlay which gets the company colour applied to it
02:37
<&McMartin>
That meanas you can tell the hardware to do it -_-
02:37
< Rhamphoryncus>
Derakon: are you volunteering?
02:37
<&McMartin>
Still, you don't want to do that every frame.
02:37
<&McMartin>
Rhamphoryncus: So, what library are you using here
02:37
<&McMartin>
Because in SDL using hardware rendering means you replace SDL_SWSURFACE in SDLCreateRGBSurfaceFrom with SDL_HWSURFACE.
02:38
< Rhamphoryncus>
SDL is the main one, but I see others
02:38
< Rhamphoryncus>
SDL on macs is buggy (nobody is maintaining the mac port of openttd)
02:39
<&McMartin>
What is openttd's license?
02:39
< Rhamphoryncus>
GPL
02:39
<&McMartin>
You may then wish to take a look at UQM - also GPL - and its software scaling code.
02:40
<&McMartin>
There conceivably may be something there you can use.
02:40
<&McMartin>
The cheats it uses for removing paletting are:
02:40
< Rhamphoryncus>
Scaling already has a cache
02:40
<&McMartin>
OK, so, you should consider also letting paletting have a cache.
02:41
< Rhamphoryncus>
For building and water animation I'd like to figure out the smallest subset that changes, then produce an ordinary sequence of sprites that covers it instead
02:41
<&McMartin>
The thing is, our scaling code also makes use of machine extensions to let it do block/blit operations faster.
02:41
<&McMartin>
You might get some use out of that
02:42
< Rhamphoryncus>
Scaling is also powers of 2 always
02:42
<&McMartin>
If you're doing standard double-buffering, you do not get a lot of benefit from making your update rect smaller, as you must redraw the whole screen every frame anyway
02:42
< Rhamphoryncus>
I believe there's actually double double buffering, heh
02:43
<&McMartin>
If you aren't (UQM with its 386/DOS heritage doesn't), it can make a difference
02:43
<&McMartin>
But it's honestly not worth the headache - the solution there is "get a better graphics card that can do 1080p double-buffered, yeesh"~
02:43
< Rhamphoryncus>
The game has its own dirty rects, but some of the palette rotations wait until later (and are fullscreen)
02:44
< Rhamphoryncus>
Come to think of it the small subset thing should only apply to buildings. Water will fill the entire sprite regardless :P
02:46
< Rhamphoryncus>
But yeah, I should really figure out what's necessary to punt it to hardware
02:47
<@ToxicFrog>
Well, as you said, it's using SDL
02:50
< Rhamphoryncus>
Yeah, but don't bet on any of the sprites being in SDL ;)
02:50
<@ToxicFrog>
So (a) use SDL_HWSURFACE|SDL_DOUBLEBUF - I think - when initializing, cache all the sprites in SDL surfaces, stop faffing about with dirty rects
02:51
<&McMartin>
If you've also got SDL_ANYFORMAT in the screen - which, honestly, you probably should - you can also cache the sprites after applying SDL_DisplayFormatAlpha to them.
02:52
<@ToxicFrog>
I say "I think" because the online SDL documentation has gone to shit since last time I used it
02:52
< Rhamphoryncus>
So you figure around 100 million sprites (when zoomed out) should be fine?
02:52
<&McMartin>
That will give you impressive upspeed even if you stick with software rendering.
02:53
<&McMartin>
You should never be rendering more than about 2,073,600 sprites at once.
02:53
< Rhamphoryncus>
heh
02:53
<&McMartin>
If you *are*, you have deeper problems than your blitter.
02:53
< Rhamphoryncus>
Map is 4096x4096
02:54
<&McMartin>
So: (a) that is 16,777,216 tiles, and (b) on a 1080p monitor when zoomed out to show the whole thing you are mapping multiple tiles to a single pixel
02:54
< Rhamphoryncus>
heh
02:55
<&McMartin>
You *should not be using sprites at that point*, no~
02:55
< Rhamphoryncus>
Okay, I'm full of it. Even fully zoomed out it only hits about 500x500
02:56
< Rhamphoryncus>
Which drops it back under 2 mil
02:56
<&McMartin>
Note that *at* 2 mil you should consider building a framebuffer by hand and filling it with stuff instead of relying on blitting tiles at extreme zoom; at that point you're treating the tiles like pixels.
02:57
<@ToxicFrog>
Honestly I'm shocked OTTD isn't already using hardware SDL surfaces for everything.
02:58
<&McMartin>
TF: Well, some of the HW SDL stuff is shit
02:58
< Rhamphoryncus>
ToxicFrog: I'm assuming it's too entrenched. Also, it'd break ports.
02:58
<&McMartin>
If you aren't premapping everything to DisplayFormat it's pretty bad, for instance
02:58
<@ToxicFrog>
Rhamphoryncus: what is it ported to that doesn't have SDL?
02:58
<&McMartin>
UQM, IIRC, moved away from HW surfaces because it was cheaper overall to just pixel-convert every frame at the last step (which happens internally) and use 32-bit algorithms on SW surfaces on every step before that.
02:59
< Rhamphoryncus>
The OSX port of openttd is unmaintained and buggy when using SDL
03:00
< Rhamphoryncus>
Just did some counting. Tiles are 64x32 normally, 256x128 at max zoom, 8x4 at min zoom
03:01
< Rhamphoryncus>
Which gives 55125 on my screen at min zoom
03:01
<&McMartin>
How many kinds of tiles are there?
03:01
< Rhamphoryncus>
of sprites you mean?
03:02
<&McMartin>
Right
03:02
<&McMartin>
Because that's really what's going to influence memory usage
03:02
<&McMartin>
And, in particular, if you've got SW rendering, being able to fit the whole screen, and all the tiles, into cache at once will be an Instant Win Button
03:03
< Rhamphoryncus>
There's a ton and more can be downloaded at runtime
03:03
<&McMartin>
Not total; at any given time
03:03
< Rhamphoryncus>
I don't have a real count but I'm seeing index numbers of at least 21000
03:03
< celticminstrel>
I want object-oriented SDL. :|
03:03
<&McMartin>
Still not my question
03:03
< Rhamphoryncus>
When zoomed out? Shitloads :)
03:03
<&McMartin>
The point is
03:03
< Rhamphoryncus>
I'll try to get you a better estimate
03:04
<&McMartin>
If you're drawing the same tile 2 million times this is way the fuck faster than drawing 2 million different tiles.
03:04
<&McMartin>
Because of memory locality speedups in the hardware itself.
03:05
< Rhamphoryncus>
Many of the ground/water/tree tiles may get reused, but town building/station/vehicle tiles are going to have a lot less reuse
03:05
<&McMartin>
Hmm
03:06
<&McMartin>
OK, the only real hint I can give is "make sure that all of the SDL_Surfaces that you're using to represent sprites were all created with identical flags, and/or were all created by the DisplayFormatAlpha function"
03:06
< Rhamphoryncus>
A single tile can have 4 trees on it, which of course overlap other tiles
03:06
< Rhamphoryncus>
Yeah, don't make SDL convert formats on the fly
03:07
<&McMartin>
UQM found that the best way to handle that if you're also doing hand-processing of the sprites was to make all the sprite surfaces be software surfaces, do all our work there, then blit it to a screen-sized surface with the same flags
03:07
<&McMartin>
And then blit *that* to the un-double-buffered screen surface, which was native.
03:08 * Rhamphoryncus nods
03:08
<&McMartin>
Since you're using double buffering, I *believe* you can save that second step by simply not passing SDL_ANYFORMAT to the initial CreateVideoSurface or whatever it's called
03:08
<&McMartin>
And then the conversion happens when you call SDL_Flip()
03:09
< Rhamphoryncus>
So use hand-written 8-bit software code for sprite blitting, then pass the result to SDL to convert to native resolution?
03:09 * Derakon returns from piano practice, notes that it was not terribly difficult to switch Jetblade from using pure SDL to using SDL with OpenGL rendering, which was noticeably faster.
03:09
<&McMartin>
If the best "native" form you have is 8-bit, then yes; otherwise rely on SDL_BlitSurface
03:09
<&McMartin>
UQM deliberately moved away from 8-bit formats.
03:10
<&Derakon>
Plus you can do things like stuff chunks of the map into display lists and just render the display list instead of rendering every little thing in it.
03:10
<&McMartin>
And had to do cached-palette-swap stuff similar to scaling tricks to get acceptable performance.
03:10
< Rhamphoryncus>
I bet UQM has a more openminded community :/
03:10
<&Derakon>
UQM has a community that is very thankful that the game exists at all.
03:11
< Rhamphoryncus>
yeah
03:12
< Rhamphoryncus>
Okay, took a look at one of openttdcoop's thrasher maps and the tiles themselves are usually 2 sprites each, but due to overlap the average rendered on each is around 5
03:12
< Rhamphoryncus>
That's a city
03:12
<&Derakon>
OpenTTD uses an isomorphic perspective, right?
03:12
<&Derakon>
Like, 45? tilt/rotate?
03:13
< Rhamphoryncus>
Technically dimetric
03:13
< Rhamphoryncus>
a 64x32 diamond representing a square
03:13
<@ToxicFrog>
Rhamphoryncus: hang on, is the implication here that openttd currently uses 8-bit internally and on disk and upconverts to 32-bit when blitting to the screen?
03:14
< Rhamphoryncus>
ToxicFrog: yes
03:14
< Rhamphoryncus>
There is a 32bpp renderer, it's just significantly slower
03:15
<@ToxicFrog>
:/
03:15
< Rhamphoryncus>
There's almost no art using 32bpp, company colours are limited to the predefined ones from 8bpp, the GUI is pretty ugly even with antialiasing from 32bpp
03:17
< Rhamphoryncus>
Oh nice, the sprite alignment debugger doesn't show duplicates, so I may have underestimated the number of sprites
03:18 * ToxicFrog gets his gonk on
03:18
< Rhamphoryncus>
If you're not including recoloured buildings then the number of unique sprites is probably.. less than a thousand? Just a guess.
03:18
< Vornotron>
yaw 45 pitch -30
03:18
< Vornotron>
\is OTTD and most "isometric" games
03:18
<&Derakon>
I'm just wondering how hard it would be to replicate that perspective in actual 3D.
03:19
< Rhamphoryncus>
Derakon: well, you'd need an entirely new game
03:19
<&Derakon>
Probably pretty hard, sadly. All the art would need re-doing.
03:19
< celticminstrel>
Yeah, because suddenly it's square instead of diamond.
03:19
<@ToxicFrog>
Derakon: engine-wise? Quite easily. Art-wise? ooooh boy.
03:19
<&Derakon>
Yeah, the reason I was wondering about it was because it would make the engine simpler.
03:19
< Rhamphoryncus>
I've seen plenty of bitching about CG. Sure, you get the shape in CG, but the textures? That's *hard*
03:20
< Rhamphoryncus>
openttd? Simpler? Yah right :P
03:21
< Rhamphoryncus>
It'd allow curves and inclines that don't look like shit and tracks/roads along more alignments.
03:22
<@ToxicFrog>
That said, one of the things I like about openttd is that it will run just fine even on underpowered system with no 3d acceleration
03:22
<@ToxicFrog>
Such as my laptop
03:24
< Rhamphoryncus>
aye
03:25
< Rhamphoryncus>
Hrm.. only animation I can think of that covers the entire screen is the water.. and that could be turned off for such computers
03:29
< Vornotron>
Der: well, the perspective is sumply orthographic with a fixed angle.
03:29
< Vornotron>
I mean I can and have hacked together such an angle, specifically for OTTD, in about twenty minutes, and I know nothing about OpenGL
03:30
<&Derakon>
Right.
03:30
< Vornotron>
It would honestly be harder to make an actual perspective camera, because once your camera hits horizon you've unbounded your performance requirements
03:31
<&Derakon>
Fog!
03:32
< Rhamphoryncus>
eww fog :P
03:33 Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has quit [Ping timeout: 121 seconds]
03:35
<@ToxicFrog>
Rhamphoryncus: nothing to do with animation; I mean that if openttd used 3d rendering -at all- I would not be able to play it on my laptop.
03:36
< Rhamphoryncus>
ToxicFrog: I'm thinking of what compromises could be done with a 32bpp software renderer for such a computer
03:38 Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has joined #code
04:00 symbol [symbol@Nightstar-58fa4b17.cable.teksavvy.com] has quit [Operation timed out]
04:02 symbol [symbol@2D9871.E3DD81.3BE9E7.8E3843] has joined #code
05:34 * Derakon arghs, once again runs into the problem where the module that containers class Foo is named "foo", which creates naming problems.
05:34
<&Derakon>
E.g. I have prompt.py, which contains the Prompt class, as well as a few related enums.
05:34
<&Derakon>
So I do def foo(prompt): if prompt.displayType == prompt.YESNO...
05:34
<&Derakon>
And of course that gets me an error because the instance "prompt" has no YESNO attribute.
05:39
< Noah>
foo.foo?
05:39
< Noah>
or from foo import *?
05:40
<&Derakon>
I hate "import *"
05:40
< Noah>
me too, but would it work here?
05:40
<&Derakon>
In the sense that I'd have "if prompt.displayType == YESNO" instead, yes.
05:41
< Noah>
Hmm
05:42 symbol [symbol@2D9871.E3DD81.3BE9E7.8E3843] has quit [Ping timeout: 121 seconds]
05:42
< Noah>
I'm still thinking about how I'm going to write my python script for creating .desktop launcher in linux given arguments of a file
05:45
< Noah>
I'm not sure if I want it to search the snapshop directory automatically, and give me the option of creating a launcher for a rom file using mednafen with the snap as the icon based on what snapshots I actually have, or if I want to pass it the arguements of a rom file, and have it search for a snap, and if none, launch mednafen with the given rom and let me take one, then create the .desktop
05:56 Reaper [Z@2C3C9C.B2A300.F245DE.859909] has quit [Ping timeout: 121 seconds]
06:13 celticminstrel [celticminst@Nightstar-5d22ab1d.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
06:21 Eri [Eri@Nightstar-3e5deec3.gv.shawcable.net] has quit [Ping timeout: 121 seconds]
06:30 * Derakon does some refactoring to Pyrel, determines that his drawing code is horribly unoptimized.
06:30
<&Derakon>
Increasing the number of tiles in view slows things down fast.
06:31
<&Derakon>
Which is kinda sad since I'm just drawing ASCII tiles, but is I guess a consequence of the container system.
06:31
<&Derakon>
(I have to do a set lookup for each tile I display. This can probably be optimized)
06:55 Derakon is now known as Derakon[AFK]
06:56 himi [fow035@Nightstar-5d05bada.internode.on.net] has quit [Ping timeout: 121 seconds]
06:58 himi [fow035@Nightstar-5d05bada.internode.on.net] has joined #code
06:58 mode/#code [+o himi] by ChanServ
06:58 Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has joined #code
07:31 AnnoDomini [annodomini@Nightstar-4f367c0c.adsl.tpnet.pl] has joined #code
07:31 mode/#code [+o AnnoDomini] by ChanServ
07:43 eckse [eckse@Nightstar-4690640a.dsl.sentex.ca] has quit [Client closed the connection]
07:54 Eri [Eri@Nightstar-3e5deec3.gv.shawcable.net] has joined #code
08:09 Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
09:32 Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has joined #code
09:37 Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has quit [Ping timeout: 121 seconds]
11:23 AnnoDomini [annodomini@Nightstar-4f367c0c.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
11:28 AnnoDomini [annodomini@Nightstar-9908b807.adsl.tpnet.pl] has joined #code
11:28 mode/#code [+o AnnoDomini] by ChanServ
11:53 Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has joined #code
12:06 AnnoDomini [annodomini@Nightstar-9908b807.adsl.tpnet.pl] has quit [Operation timed out]
12:09 AnnoDomini [annodomini@Nightstar-1ea57b75.adsl.tpnet.pl] has joined #code
12:09 mode/#code [+o AnnoDomini] by ChanServ
12:29 AnnoDomini [annodomini@Nightstar-1ea57b75.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
12:37 AnnoDomini [annodomini@Nightstar-f70895d2.adsl.tpnet.pl] has joined #code
12:37 mode/#code [+o AnnoDomini] by ChanServ
13:11 Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has quit [Client exited]
14:23
<@ToxicFrog>
Ok. The MET value in the file is ignored when loading; it is recalculated as (UT - LCT) on every load.
14:24
<@ToxicFrog>
Changing LCT won't change the orbit. Making LCT > UT just causes the mission timer to count down instead of up.
14:24
<@ToxicFrog>
On the other hand, changing UT -will- affect the orbit.
14:25
<@ToxicFrog>
Ok. Looks like EPH == epoch == "timestamp at which this ship entered the orbit"
14:26
<@ToxicFrog>
So - in order for the orbital positioning to be consistent across saves - we need to store EPH as the difference between UT and EPH.
14:26
<@ToxicFrog>
...what happens if EPH is negative?
14:27
<@Tamber>
Aliens.
14:27
<@ToxicFrog>
Still works fine. Alright.
14:28
<@ToxicFrog>
So. The server stores UT=0, and foreach flight, EPH and LCT as the difference between the original values and the UT of the game they came from.
14:28
<@ToxicFrog>
(these should, in a normal game, both be negative)
14:28
<@ToxicFrog>
When merging them into a client game, EPH = UT + EPH, and likewise for LCT.
14:29
<@ToxicFrog>
MET we can ignore except as a way of resolving conflicts, since it's recalculated by the game on load anyways.
14:49
<@ToxicFrog>
Wait, shit.
14:49
<@ToxicFrog>
LCT is currently used for deduplication.
14:49
<@ToxicFrog>
I can't change LCT without breaking that.
14:50
<@ToxicFrog>
But if I don't change LCT, the MET changes, and I'm using that to resolve conflicts.
14:50
<@ToxicFrog>
Shit.
14:56 gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has joined #code
15:08 Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has joined #code
15:26 gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has quit [Ping timeout: 121 seconds]
15:32 celticminstrel [celticminst@Nightstar-5d22ab1d.cable.rogers.com] has joined #code
15:39
<@ToxicFrog>
Oh, wait. The LCT changes, but the LCT delta with respect to UT doesn't.
15:58 symbol [symbol@Nightstar-58fa4b17.cable.teksavvy.com] has joined #code
16:08 Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has quit [Ping timeout: 121 seconds]
16:09 Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has joined #code
16:11 gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has joined #code
16:12
<@ToxicFrog>
Agh damn
16:12
<@ToxicFrog>
Yes, the LCT delta with respect to UT damn well does change if the save is loaded at all
16:13 Derakon[AFK] is now known as Derakon
16:14
< celticminstrel>
I found another April Fool's.
16:16
< celticminstrel>
https://blogs.oracle.com/darcy/entry/upcoming_jep
16:17
<@ToxicFrog>
Hmm. I can put arbitrary data in the landedAt field, but it gets rewritten if the vehicle actually lands.
16:19
<@ToxicFrog>
(if the vehicle does not land, on the other hand, it is left intact)
16:20 Kindamoody is now known as Kindamoody|out
17:16
<@ToxicFrog>
Ohohohoho yes.
17:17
<@ToxicFrog>
I can store the ID in the vehicle name using nonprinting characters.
17:18
<@ToxicFrog>
If a name starts with SOH, that is immediately followed by the ID (using characters in the 0x10-0x1F range) terminated with STX.
17:20
<&Derakon>
SOHCAHTOA
17:20
< celticminstrel>
Heh.
17:22
< Reaper>
What is TF building?
17:23
< Vornotron>
I believe he's still working on his multiplayer extension to KSP
17:28
< Reaper>
Ah.
17:29
< Reaper>
How would that work? You launch a server everybody connects to, then when everybody has pressed the "ready to launch" button everybody launches simultaniously and it's a race to the mun?
17:29
<@ToxicFrog>
Reaper: asynchronous multiplayer.
17:30
<@ToxicFrog>
Stuff other people launched appears in your save file next time you run the game.
17:30
<@ToxicFrog>
Stuff you launched appears in theirs.
17:30
< Reaper>
Oh.
17:30
<&Derakon>
TF's trying to make space junk a reality in KSP, too~
17:30
< Reaper>
I guess that'd be a lot easier to implement, yeah.
17:33
<@ToxicFrog>
Yes.
17:33
<@ToxicFrog>
There's a team working on synchronous multiplayer, but that's a much thornier problem and requires using the C# modding API.
17:36
<&Derakon>
Ugh, C#.
17:36
<&Derakon>
Why do people feel the need to use these languages that require special frameworks to be installed before they can be used on OSX/Linux? :(
17:38 * Vornotron gives Der Python
17:39
<@Tamber>
s: on OSX/Linux::
17:39
<&Derakon>
Python has py2app for OSX, py2exe for Windows, and apt-get for Linux.
17:40
< Vornotron>
A lot of things you need a framework to do, even if that framework is technically called "video drivers"
17:40
<@ToxicFrog>
Derakon: in this case, because the developer is two guys in a garage using the Unity engine, which is C# based.
17:40
<&Derakon>
Unity supports other languages too!
17:41 * Vornotron considers the romantic notion that these two guys are actually developing this in a garage.
17:41
<@ToxicFrog>
If by "other languages too" you mean "C++, kinda" and given the choice between C++ and C# I blame them not at all for choosing C#.
17:42
<&Derakon>
I was looking at Unity earlier, and it has a Python dialect available.
17:42
<&Derakon>
And, uh, javascript.
17:42
<@ToxicFrog>
Specifically, it has the CLR versions of those languages available, for in-game scripting.
17:42
<@ToxicFrog>
These have the same objections C# itself does.
17:43
<&Derakon>
Yeah, but I know them already. >.>
17:43
<&Derakon>
Also, not Microsoft.
17:45
<@ToxicFrog>
Well
17:45
<@ToxicFrog>
Given the whole CLR interoperability thing, you probably could write mods for KSP in any CLR language
17:48
<@ToxicFrog>
But the whole game is written in C#, so that's an easy choice for modding
17:49
<@ToxicFrog>
Especially since "the documentation" is "the C# API information automatically made visible by the IDE"
17:55
< celticminstrel>
Unity has JavaScript too I think.
17:56
< celticminstrel>
Oh wait, that was mentioned.
17:59
<@ToxicFrog>
Hmm. Ok, so now I need to make a bunch of upgrades to the server.
18:06 Kindamoody|out is now known as Kindamoody
18:10
< Tarinaky>
Does anyone have etymology on driving a refactor tractor?
18:10
< Tarinaky>
Or did you guys just make that up?
18:11
< gnolam>
One of jerith's cow orkers, IIRC.
18:11
< Tarinaky>
Ah.
18:14
<&jerith>
It's nicely alliterative.
18:15
< gnolam>
It rhymes, but it isn't alliterative.
18:15
<&jerith>
And lends itself to a wide range of farming metaphors.
18:15
<&jerith>
Yeah, that.
18:15
<&jerith>
Alliterative is the wrong word.
18:16
<&jerith>
It has a pleasing rhythm to it.
18:16
< gnolam>
Also, makes it so you can insert East German musical references into your code.
18:16
<&jerith>
Howso?
18:18
<@ToxicFrog>
Oh god, this code is so filthy
18:18
<&jerith>
Refactor tractor with emergency irrigator!
18:19
<@ToxicFrog>
Referential opacity feels like centipedes in my brain now
18:19
< gnolam>
jerith: "Fritz, der Traktorist" in particular.
18:20
<&jerith>
Ah.
18:20 * jerith sadly lacks East German musical context.
18:20
<@ToxicFrog>
Hmm.
18:21
<@ToxicFrog>
Is there a mathmatical equivalent to the bash |?
18:21
<@ToxicFrog>
That is to say, a character | st x | f | g = g(f(x)) ?
18:22
<@ToxicFrog>
(I know about the functional composition operator, but that puts everything in the wrong order)
18:31
<@ToxicFrog>
Incidentally, the reason I want this is this:
18:32
<@ToxicFrog>
class Pipe[A](x: A) { def |>[R](f: A => R) = f(x) }; implicit def toPipe[T](x: T) = new Pipe[T](x)
18:32
<@ToxicFrog>
Which is delicious, but x |> f |> g is, in addition to being hard to type, ugly.
18:42 symbol [symbol@Nightstar-58fa4b17.cable.teksavvy.com] has quit [Operation timed out]
18:44 * Derakon makes a change to his basic Container class, somehow causes the entire map to be filled with people instead of terrain. O_o
18:45
<&Derakon>
Ah.
18:45
<@ToxicFrog>
Oops.
18:45
<&Derakon>
def __init__(self, foo = set()): ...
18:45
<@ToxicFrog>
Ooooooops.
18:45
<&jerith>
Yeah.
18:45
<&Derakon>
Means that every single instance of that class you create with default argument for foo will get the same set.
18:45
<&jerith>
Mutable default params...
18:48
<@ToxicFrog>
Augh
18:48 * ToxicFrog thrashes around violently
18:49
<@ToxicFrog>
I want to rewrite this whole thing to not be terrible
18:49
< celticminstrel>
XD
18:50
< celticminstrel>
Same effect if you use set literals?
18:50
< celticminstrel>
...wait, that's a dictionary though.
18:50
< celticminstrel>
Bah.
18:50
< celticminstrel>
No empty set literal.
18:50
<@ToxicFrog>
celticminstrel: the issue is that the default arguments are evaluated only once.
18:50
<@ToxicFrog>
Although I forget exactly when.
18:51
<&Derakon>
The proper way to do this is to make the default be None, check for that, and create a new set() if needed.
18:51
<@ToxicFrog>
So that's analogous to:
18:51
<&Derakon>
Presumably it's done the first time the function is called.
18:51
<@ToxicFrog>
default_foo = set(); def __init__(self, foo = default_foo): ...
18:51
<@ToxicFrog>
And since sets are mutable, the wheels come off as soon as init gets called more than once.
18:52
<&jerith>
They're evaluated when the function definition is executed.
18:54 * ToxicFrog fiddles around with scala.collection.immutable.ListMap
18:59
<&Derakon>
It's kinda weird, but also neat, that I get the weapons a creature is wielding by doing "self.equipment.getIntersection(gameMap.getContainer(container.ITEMS_MELEE))"
18:59
<&Derakon>
That is, get the intersection between the items in the creature's equipment and the items in the global container of melee items.
19:01
< celticminstrel>
How efficient is that?
19:02
<&Derakon>
Not hugely, but the size of the containers in question is such that it's not a big deal.
19:02
<&Derakon>
Even at its most excessive the game won't have more than a hundred melee items in existence at one time.
19:04
<@ToxicFrog>
aaaaaaaaaaaagh
19:04
<@ToxicFrog>
Working in Scala for so long has completely rewritten how I approach problems like this
19:04
<@ToxicFrog>
And now it's not working (due entirely to bad design decisions made earlier)
19:04
<@AnnoDomini>
True to the Easter spirit, my vikings are coming back from the dead if conditions improve.
19:05
<&Derakon>
Though I ended up replacing the set intersection with a filter operation, since I didn't have access to gameMap in that place.
19:13
<@AnnoDomini>
Anyone know where I could find a decent rendering of the FF victory tune? The one I found is the Most Annoying Sound On Earth.
19:13
<&jerith>
AnnoDomini: ocremixes?
19:14
<@ToxicFrog>
The FF victory fanfare is simple enough that I'm not sure anyone's remixed it.
19:14
<@AnnoDomini>
RSN? What is this strange format?
19:14
<&Derakon>
http://www.youtube.com/watch?v=5c2Vb7CqTdc
19:14
<@ToxicFrog>
AnnoDomini: each FF has a different version of it, so just check all the FF OSTs.
19:14
<&Derakon>
There's a bunch more on YouTube.
19:15
<@AnnoDomini>
I need one in something convertable to OGG.
19:15
<&Derakon>
I'm guessing you're looking for a ringtone.
19:16
<@AnnoDomini>
Nah, just a placeholder.
19:16
<@AnnoDomini>
Aha! An MP3!
19:19 Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has quit [Ping timeout: 121 seconds]
19:20
<@AnnoDomini>
This is better. Much less annoying.
19:20
<@AnnoDomini>
Thanks, Derakon.
19:21
<@Alek>
the Most Annoying Sound on Earth is the windows startup sound. XD
19:22
<@AnnoDomini>
Yeah, like that, only louder and longer.
19:22
<&Derakon>
AD: when in doubt, Google or YouTube search.
19:22
<@AnnoDomini>
I did a google search which turned up the previous piece.
19:22
<@AnnoDomini>
I did not check youtube.
19:26 Kindamoody is now known as Kindamoody[zZz]
19:29
<@ToxicFrog>
YUM
19:29
<@ToxicFrog>
Some(v("name").tail.takeWhile(_ != STX).map(_.toInt - 0x10).reduce(_ * 16 + _))
19:31
<&Derakon>
That's completely illegible.
19:31
< Vornotron>
I got it
19:31
<@ToxicFrog>
Derakon: it is kind of ugly, but it would have been much uglier in anything else I might have implemented this in, so~
19:32
< Vornotron>
He's taking the tail end of an object's name, pulling off pieces until he hits an STX, and using them as hex digits
19:33
<@ToxicFrog>
Yep.
19:33
< Vornotron>
I'm not entirely sure what Some does.
19:33
<@ToxicFrog>
Some is half of Option[T]
19:33
<@ToxicFrog>
It's equivalent to Haskell's Maybe
19:33
<&Derakon>
STX?
19:33
<@ToxicFrog>
Start of Text. ASCII 0x02.
19:33
<&Derakon>
Ah.
19:33
< Vornotron>
A record separator in A
19:33
< Vornotron>
dammitall
19:34
<@ToxicFrog>
This function returns Option[Int], meaning it either returns Some(n) or None
19:34
<@ToxicFrog>
Specifically, it extracts the hidden ID number from an object's name
19:34
<@ToxicFrog>
Which, if present, has the form SOH digit+ STX, where digit is a character in the range 0x10-0x1F (only the low four bits are used)
19:34
<&Derakon>
So, what, returning 123 when handed "foo123"?
19:35
< Vornotron>
approximately
19:36
<@ToxicFrog>
Except the ID number is at the start of the string.
19:36
< Vornotron>
But instead of 123 you have an STX and then some nonprintables
19:36
<@ToxicFrog>
You have SOH, then some nonprintables, then STX, actualy.
19:37
<@ToxicFrog>
v("name") // the vessel name
19:38
<@ToxicFrog>
.tail // drop the first character, which is SOH, indicating that there's an ID code embedded in it
19:38
< Vornotron>
I still don't know what Some is doing here, I'm very confused
19:38
<@ToxicFrog>
.takeWhile(_ != STX) // grab everything up to the first STX character
19:38
<@ToxicFrog>
.map(_.toInt - 0x10) // replace '\x12' with 2, etc
19:39
<@ToxicFrog>
.reduce(_ * 16 + _) // turn (0xF, 0x3, 0x8) into 0xF38
19:39
<@ToxicFrog>
Some just wraps it for typesafe return.
19:40
<&Derakon>
Behold, my roguelike: http://derakon.dyndns.org/~chriswei/games/pyrel/1.png
19:40
<@ToxicFrog>
For operations that can fail nonfatally, it's common to return Some(value) on success and None on failure
19:40
<@ToxicFrog>
(as opposed to, say, returning value on success and null on failure)
19:41
<&Derakon>
Two creatures, one wanders at random (but doesn't walk through walls!), the other is controllable by the player, and can pick up items, equip them, look at their inventory and equipment, and attack the wanderer, doing variable damage depending on equipment.
19:41
<&Derakon>
Also there's a scrollable message buffer and a resizable main view.
19:41
<@ToxicFrog>
The whole function is basically: if (name.head == SOH) { /* there's an ID! */ Some(...) } else { /* No ID... */ None }
19:42
<@ToxicFrog>
Vornotron: does that clarify at all?
19:42
< Vornotron>
I think, maybe?
19:43
< Vornotron>
mmmm, yeah, okay I see what's going on now
19:59
<@ToxicFrog>
Hmm.
20:00
<@ToxicFrog>
I think I need another layer of abstraction here, and possibly a heavy redesign of ksp._ to make everything referentially transparent.
20:06 * Derakon cackles madly as he implements unequipping and dropping items with ease.
20:06
<&Derakon>
The framework is working!
20:06
<@Alek>
add drop-held-on-death, -ko, -stun :P
20:07
<@ToxicFrog>
eeee
20:07
<@ToxicFrog>
Iterable has a partition operator
20:07
<@ToxicFrog>
Life is good
20:14
< celticminstrel>
What language?
20:18
<@ToxicFrog>
Scala
20:20
<@ToxicFrog>
val (updates, adds) = incoming groupBy (_.id) partition (flights contains _._1)
20:43
<&Derakon>
962 lines of code so far, of which 202 are comments and 190 are whitespace.
21:07 Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
21:10
<&jerith>
Derakon: What are you writing?
21:10
<&Derakon>
Jerith: awhile back I spent some time coming up with an object model for a roguelike, so of course I had to implement it to see how well it actually worked.
21:10
<&jerith>
Ah, cool.
21:11
<&Derakon>
So far Pyrel will make a mostly-empty map with walls, a monster, the player, and an item the player can pick up and equip and use to smack the monster around with.
21:11
<&jerith>
Shiny.
21:35 RichyB [MyCatVerbs@Nightstar-f677b3be.bb.sky.com] has joined #code
21:45 mode/#code [+o rms] by ChanServ
21:49 Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has joined #code
21:56 Reaper [Z@2C3C9C.B2A300.F245DE.859909] has joined #code
22:08 * McMartin reads backscroll
22:08
<&McMartin>
Nitpick: Mono is a default install these days on Linux so any modern distro should run CLR stuff as easily if not more so than Java
22:08
<&McMartin>
This is presently the one service GNOME does for the community =P
22:09 * AnnoDomini becomes interested in some kind of versioning system. What would recommend for a C project, McMartin?
22:09
< celticminstrel>
It's not default on Mac though. ;P
22:10
<@rms>
Or Arch
22:10
<@Tamber>
tamber@na $> grep -i mono /var/lib/portage/world | wc -l
22:10
<@Tamber>
0
22:10
<&McMartin>
Mac is now outnumbered, and since you can't interface to half the OS there *at all* without using an Objective-C variant specific to it, Mac people have no real grounds to complain =P
22:10
<&McMartin>
Tamber: From this I conclude that you don't have any recent version of GNOME installed.
22:11
<@Tamber>
Indeed I do not.
22:11
<&McMartin>
Were you to do so, you would find mono on that list
22:11
<@Tamber>
Probably. Somewhere in the /mountains/ of shite it drags in.
22:11
<&McMartin>
And you probably would not complain overmuch, anymore than you would upon finding that installing some other application all drew in libocaml.
22:12
<&McMartin>
OK, so, since my point appears to have been lost: "C# is a core implementation language for the GNOME desktop environment and has been for some time. It's actually not accurate anymore to say it's MS specific."
22:12
<@Tamber>
Last time I looked, it was only used for their time-tracker and a notes app, or something like that.
22:13
<&McMartin>
AnnoDomini: It's almost impossible to go wrong if you're versioning C; C is kind of what they were built around.
22:13
<&McMartin>
Mercurial and git are both the current state of the art, and probably the most suitable for a single end-user.
22:13 * rms seconds git
22:14
<&McMartin>
If you plan on using it to also share code across machines, the older client/server systems such as Subversion become viable options
22:14 * TheWatcher generally recommends git, but finds it laregely a matter of personal choice
22:14
<&McMartin>
I personally use git, but it is the fourth system I've used.
22:14
<&McMartin>
I'm not sure I would recommend it as a *first* system
22:14
<@TheWatcher>
(also git bare repos serve as good replacements for svn client/server setups)
22:15
<&McMartin>
Especially since it was created with "hatred for all things vaguely related to subversion" as an explicit design consideration while, uh, also having a complete git-svn compat layer.
22:15
<&McMartin>
TheWatcher: I believe Mercurial can do similar tricks?
22:15
<@Tamber>
McM: Well, you can't expect mere mortals to convert everything overnight, can you?
22:15
<&McMartin>
AnnoDomini: What OS are you running on.
22:15
<&McMartin>
Tamber: INSUFFICIENT HATRED
22:15
<@Tamber>
:)
22:15
<&McMartin>
Also, we only care about people converting from real things like Perforce right
22:16
<@Tamber>
Hehe
22:16
<@TheWatcher>
McM: Almost certainly, although I;ve never personally used mercurial for more than cloning other's code, so.
22:16
<@AnnoDomini>
I remember Subversion from Uni. It didn't go well. We resorted to sending compressed project directories by email.
22:16
<@AnnoDomini>
McMartin: Debian 6.
22:16
<&McMartin>
It has since improved a fair amount.
22:16
<&McMartin>
Though Debian probably hasn't taken the changes =P
22:16
<&McMartin>
OK, git is probably a decent choice then
22:16
<&jerith>
To be fair, svn is better than nothing.
22:17
<@TheWatcher>
(unless your last name is Torvalds~)
22:17
<&McMartin>
It's also better than cvs by about three orders of magnitude.
22:18
<&McMartin>
Git's two biggest weaknesses are "it's commands are the same as subversion's but they do different things" and "the Windows support remains incredibly terrible, basically 'install MSYS'"
22:18 * McMartin shoots the second apostrophe
22:18
< Tarinaky>
egit in eclipse is okay.
22:18
<&McMartin>
svn checkout is, more or less, git clone
22:18
<@TheWatcher>
McM: I note that a couple of my MSc students are currently using WinGit without any problems, but it could be their use is avoiding any issues.
22:19
< Tarinaky>
Although you still need MSYS for advanced features.
22:19
<&McMartin>
TheWatcher: Oh, it *works*
22:19
<&McMartin>
It's just insanely clunky compared to SVN
22:19
<&McMartin>
Because SVN/Windows integration is as good as desktop versioning integration can get, at this point.
22:19
< RichyB>
Wasn't svn written by the same people who wrote cvs originally?
22:19
<@TheWatcher>
You mena "compared to tortoisesvn"
22:19
<@TheWatcher>
*mean
22:19
<&McMartin>
Mmm, sort of
22:20 * AnnoDomini creates a free account on GitHub.
22:20
< RichyB>
Naturally, "TortoiseGit" is a thing which exists.
22:20
<&jerith>
github is <3
22:20
< RichyB>
GitHub is pretty okay.
22:20
< RichyB>
It's trendy, which helps.
22:20
<&McMartin>
RichyB: And which, last I checked, doesn't actually integrate with Windows Explorer beyond "spawn bash process in this directory and let you type commands"
22:20
<&McMartin>
Perhaps it has since improved
22:21
<&McMartin>
But it was Not There Yet in any sense when last I checked.
22:21
<&McMartin>
Also, even nonTortoise SVN installs let you put svn commands inside normal Windows batch files, which WinGit, again, the last I checked, does not.
22:21
< RichyB>
I haven't tried it, hence I'm not going to say more about it than, "exists."
22:21
<&McMartin>
A project by that name exists.
22:22
<&McMartin>
Actual integration of Git into the file explorer did not, the last time I looked at it~
22:22 * McMartin goes to check~
22:22
< Tarinaky>
I'm not sure integration with the windows file explorer is the right thing to do though >.>
22:22
<&McMartin>
Tarinaky: It's not *sufficient*
22:23
<&McMartin>
But yes, actually, you do want some way to point at something in your file viewer and say "sync this now"
22:23
<&McMartin>
Which it appears that TortoiseGit now has
22:23
<&McMartin>
This is somewhat recent; it didn't have it this time last year or so or whenever I was setting up my repos.
22:26
<&McMartin>
I would not *trust* TortoiseGit yet, based on its changelog
22:37 * AnnoDomini follows the instructions on GitHub. So far, so good. These are fairly clear.
22:50
<@AnnoDomini>
Can I add multiple files with 'git add <file>'?
22:50
<&McMartin>
Yes
22:50
<&McMartin>
Note that this also is for marking files to eventually commit
22:51
<&McMartin>
Because "commit (filenames)" would be...
22:51
<&McMartin>
... what SVN does
22:51
<&McMartin>
https://www.youtube.com/watch?v=7g9WjcGdxuM
22:53
<&McMartin>
"git commit -a" will pre-add everything that's changed and already part of the repo, though.
22:53
<&McMartin>
So normally you only need to "add" files the first time, unless you do broken-up commits.
22:54
<@AnnoDomini>
Uhuh.
22:55 * McMartin will admit that this digression was primarily an excuse to link that YouTube.
22:57
<@rms>
git add .
22:57
<@rms>
That'll add everything
22:58
< Tarinaky>
That's seldom what you want to do though.
22:58
<&McMartin>
You can also do the * stuff.
22:58 * rms uses it for note-repos
22:58
< Tarinaky>
Fair enough.
22:58
< Tarinaky>
I'm thinking in terms of needing to exclude compiled binaries and the like.
22:59
<@rms>
<McMartin> You can also do the * stuff. <-- that doesn't include hidden files though
22:59
<@rms>
You use .gitignore for that.
23:01
< Tarinaky>
Again... why would you want to add hidden files :p
23:01
<@rms>
Because I also have a repo for rc files
23:01
< Tarinaky>
Touche
23:11
<@AnnoDomini>
Okay. I think I got the hang of this: https://github.com/AbuDhabi/Viking-Trail
23:18 Eri [Eri@Nightstar-3e5deec3.gv.shawcable.net] has quit [Ping timeout: 121 seconds]
23:44
<&jerith>
AnnoDomini: Isn't there traditionally a makefile or something with these things?
23:46
<@AnnoDomini>
There's a Code::Blocks project file or two.
23:47
<&jerith>
I don't see those in the repo.
23:47
<@AnnoDomini>
Probably a good idea to include the one that has the library inclusions.
23:47
<@AnnoDomini>
Because I didn't add them.
23:47
<&jerith>
Ah.
23:48
<&jerith>
It's generally a good idea to have all the bits you need to build a thing in the repo.
23:48
<@AnnoDomini>
Just build, or run too? :P
23:48
<@AnnoDomini>
'Cause I have a few Mb of sounds and pictures.
23:49
<&jerith>
Yeah, those should probably be included.
23:51 * AnnoDomini gets to uploading.
23:55
<@AnnoDomini>
Okay, I think that's everything necessary.
--- Log closed Mon Apr 09 00:00:07 2012
code logs -> 2012 -> Sun, 08 Apr 2012< code.20120407.log - code.20120409.log >

[ Latest log file ]