--- Log opened Wed Oct 10 00:00:00 2012 |
00:00 | <&McMartin> | 05:37 < gnolam> After all - if you put up a wiki, useful and correct information magically appears, right? |
00:00 | <&McMartin> | That's why they call it "Wiki magic"! |
00:38 | | Derakon[AFK] is now known as Derakon |
00:39 | | mode/#code [+ao Derakon Derakon] by ChanServ |
01:01 | | You're now known as TheWatcher[T-2] |
01:02 | | himi [fow035@D741F1.243F35.CADC30.81D435] has joined #code |
01:02 | | mode/#code [+o himi] by ChanServ |
01:04 | | You're now known as TheWatcher[zZzZ] |
01:18 | <&Derakon> | So, Pyrel has a problem. |
01:18 | <&Derakon> | Its flexible, generic structure does not handle the creation of massive numbers of objects at all quickly. |
01:18 | <&Derakon> | As in, it takes ~3s to create a 360x120 map, just because you're creating ~43k granite walls. |
01:19 | <&Derakon> | (Most of this cost goes into hashing the new walls for addition into set() objects) |
01:19 | <&Derakon> | This is obviously unacceptable for an oldschool game. |
01:20 | <&Derakon> | The only solution I've thought of so far that seems all that workable is to have a special data structure for holding "highly redundant" objects -- it maps a single instance of the object to all the tiles that it occupies. |
01:20 | <&Derakon> | This means hacking up all of the code dealing with "what's actually in this tile" though. |
01:21 | <&Derakon> | As well as keeping these aliased objects from knowing their position, since a single object would actually have 43k positions simultaneously. |
01:21 | <&Derakon> | All in all this sounds painful. |
01:21 | <&Derakon> | Any better ideas? |
01:23 | <@himi> | Can you extend the Pyrel classes to support the redundant object features? |
01:23 | <&Derakon> | Mm, I should provide more detail. |
01:23 | <&Derakon> | The GameMap is basically a big database of all of the objects in the game. |
01:23 | <&Derakon> | It has a large number of buckets (Python set() objects) that objects ("Things") get put into. |
01:24 | <&Derakon> | For example, a sword goes into the ITEM and WIELDABLE buckets. |
01:24 | <&Derakon> | It also goes into the bucket for a specific tile on the map, if it's not being carried by some other Thing. |
01:24 | <&Derakon> | So when we create a granite wall, it gets added to the TERRAIN, OBSTRUCTOR, and tile-position buckets. |
01:25 | <&Derakon> | This setup makes it very easy to say "I want to find all of the X that meet Y condition" -- it's great flexibility for most objects. |
01:25 | <&Derakon> | But it breaks down badly when we need to handle large numbers of objects. |
01:25 | <@himi> | Yeah, a separate data structure seems like the best option |
01:27 | <&Derakon> | Here's the profiling breakdown for generating a 360x120 map: http://derakon.dyndns.org/~chriswei/temp2/profiling.txt |
01:31 | <&Derakon> | I can gain a second if I don't keep track of what containers a Thing is in, but then I lose the ability to do fancy lookups. |
01:32 | < rms> | Derakon: Walls are the default object on a map right (assuming it's not an open space)? |
01:32 | <&Derakon> | Yeah. |
01:33 | < rms> | If so, I suggest not doing anything instead |
01:33 | < rms> | Thus if a location isn't meant to be walkable, render it as a wall. |
01:33 | < rms> | Then render secret doors as walls until they're opened. |
01:33 | <&Derakon> | The problem there is what happens when a modder wants to represent an ocean or a field of grass or any other large amount of the same terrain type? |
01:34 | < rms> | Make it so they can change the default tile renderer on a per-map basis |
01:34 | < rms> | If they want a mixed map though, then yes, do your idea. |
01:45 | <&Derakon> | ...hm, simply aliasing the wall to multiple tiles actually works a lot better than I'd expected it would. |
01:45 | <&Derakon> | No need for a separate data structure; the game engine just needs to be able to tell the difference between an alias of a Thing and the Thing itself when it comes to removing it from the game. |
01:48 | <&Derakon> | So there's a good 2s of generation time removed. |
01:49 | <&Derakon> | Unfortunately it turns out generation is still slow; I was running my profiler too deeply and didn't capture the entire runtime for map generation. |
01:49 | <&Derakon> | Currently at 4.2s...including 518k calls to GameMap.getContainer. Hm. |
02:35 | | Attilla [Obsolete@Nightstar-6d0dced8.as43234.net] has quit [Ping timeout: 121 seconds] |
02:52 | | Orthia [orthianz@ServerAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds] |
03:06 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has joined #code |
03:17 | <&McMartin> | oh god >_< |
03:17 | | * McMartin just discovered they've been running a 3-year-out-of-date version of libcurl with a bunch of patches on it, some of which made it into later versions, some of which made it into later versions in different places |
03:17 | | * McMartin is now in the process of upgrading it. |
03:17 | <&McMartin> | This is gonna be a long night. |
03:17 | <&McMartin> | (Especially since I can't, apparently just say "go back to pristine" since some of these patches still address outstanding bugs) |
03:18 | <&McMartin> | On the other hand, I did not hit this problem: |
03:18 | <&McMartin> | [inform] zarf says, "one guess what's going wrong with this code:" |
03:18 | <&McMartin> | [inform] zarf | routine_starts_line = ErrorReport.line_number + 0x10000*ErrorReport.file_number; |
03:18 | <&McMartin> | [inform] DavidW says, "No idea, but I'll randomly gamble on missing spaces around the *." |
03:18 | <&McMartin> | [inform] zarf says, "the correct answer is: Hadean Lands is up to 86007 lines" |
03:21 | | Orthia [orthianz@3CF3A5.E1CD01.C6689C.33956A] has joined #code |
03:23 | | * Vornicus would have caught that one! |
03:39 | <&McMartin> | Yeah, but that's a line inside the compiler~ |
03:42 | <&ToxicFrog> | ...why is it storing the line number like that? o.O |
03:54 | <&McMartin> | Because it was originally written for the Acorn Archimedes by a non-computer scientist~ |
03:54 | <&McMartin> | (Inform 6's internals are infamously horrible) |
04:03 | < Reiv> | Which is the good one? |
04:03 | <&McMartin> | Inform 6 is the C-like language that saw heavy use before Inform 7. Inform 7 is the language that looks like a text adventure is used to parse it, and it's an Inform 6 emitter. |
04:05 | <&Derakon> | That sounds like the original implementation of C++, which IIRC was implemented via preprocessor directives. |
04:32 | <&McMartin> | Emitters are considered a cut above that. |
04:32 | <&McMartin> | You can't get from I7 to I6 with preprocessing. |
04:44 | | * ToxicFrog once again fiddles around with n-way synchronization |
04:49 | | * Derakon gets level generation down under a second, at the cost of completely breaking the drawing logic. |
04:49 | <&Derakon> | More importantly, I can't figure out why the drawing logic is broken. |
04:49 | <&Derakon> | Bah... |
04:51 | | * Vornicus is vindicated. |
04:51 | <~Vornicus> | I say "guys, army of robots" and they're like "oh right, we have those" |
04:54 | <&ToxicFrog> | Why is everything terrible @.@ |
04:56 | < Reiv> | Vornicus: They had those? |
04:56 | <~Vornicus> | Because it's still amazing that this stuff works at all, TF |
04:56 | <~Vornicus> | Reiv: it's called a computer |
04:57 | | * Vornicus is pretty sure McM introduced the term to us. |
05:02 | < Reiv> | Vornicus: Hahaha |
05:02 | < Reiv> | I thought you meant "oh yeah, we had a script written already" or something. |
05:03 | <&ToxicFrog> | Vornicus: the thing that floors me is that Dropbox is basically exactly what I want except for the whole "you can't run your own server" thing |
05:03 | <&ToxicFrog> | And everything else, commercial or free, proprietary or open source, is unrelentingly, shockingly awful |
05:08 | <~Vornicus> | aha |
06:13 | | Derakon is now known as Derakon[AFK] |
06:36 | | himi [fow035@D741F1.243F35.CADC30.81D435] has quit [Operation timed out] |
07:00 | | Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has quit [[NS] Quit: ] |
07:10 | | PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds] |
07:24 | | gnolam_ [lenin@Nightstar-ccbf4b44.cust.bredbandsbolaget.se] has joined #code |
07:24 | | gnolam is now known as NSGuest41635 |
07:25 | | gnolam_ is now known as gnolam |
07:28 | | NSGuest41635 [lenin@Nightstar-ccbf4b44.cust.bredbandsbolaget.se] has quit [Ping timeout: 121 seconds] |
07:34 | | Vash [Vash@Nightstar-3ba4108e.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!] |
07:39 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
08:21 | | RichyB [richardb@7D8456.14C5E0.08BE20.B646E9] has joined #code |
08:43 | | * McMartin seethes |
08:43 | <&McMartin> | Builds on my system, but not on buildbot |
08:44 | <&McMartin> | Fuck it, it's one in the fucking morning, I have had entirely too much fucking shit to deal with today |
08:44 | <&McMartin> | Yesterday |
08:44 | <&McMartin> | What the fuck ever |
08:48 | <&McMartin> | WARGHLE WHAT THE SHIT |
08:48 | | * McMartin stabs everything in a 50-foot radius |
08:50 | | RichyB [richardb@7D8456.14C5E0.08BE20.B646E9] has quit [Ping timeout: 121 seconds] |
08:54 | | * jerith gives McMartin a small pile of sleepy kittens and a delicious warm beverage. |
08:57 | | * McMartin keeps his distance from the kittens, as there is a noticably danger he might punt them. |
08:58 | <&jerith> | :-( |
08:59 | | * jerith offers some punching bags instead? |
09:00 | <&McMartin> | oh hey I could judge some shitty ifcomp entries |
09:00 | <&jerith> | Ooh, good plan. |
09:12 | | himi [fow035@Nightstar-5d05bada.internode.on.net] has joined #code |
09:12 | | mode/#code [+o himi] by ChanServ |
09:33 | | You're now known as TheWatcher |
12:21 | | Attilla [Obsolete@Nightstar-6d0dced8.as43234.net] has joined #code |
13:01 | | RichyB [richardb@7D8456.14C5E0.08BE20.B646E9] has joined #code |
13:19 | | Attilla_ [Obsolete@Nightstar-c0d703de.as43234.net] has joined #code |
13:19 | | Attilla [Obsolete@Nightstar-6d0dced8.as43234.net] has quit [Ping timeout: 121 seconds] |
13:24 | | Attilla [Obsolete@Nightstar-95f91359.as43234.net] has joined #code |
13:25 | | Attilla_ [Obsolete@Nightstar-c0d703de.as43234.net] has quit [Ping timeout: 121 seconds] |
14:44 | | RichyB [richardb@7D8456.14C5E0.08BE20.B646E9] has left #code ["Leaving"] |
15:07 | | Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code |
15:18 | | Reiv [NSwebIRC@D4E70A.D52DB0.820B13.98C775] has quit [Ping timeout: 121 seconds] |
15:36 | | Attilla [Obsolete@Nightstar-95f91359.as43234.net] has quit [Ping timeout: 121 seconds] |
15:43 | | Attilla [Obsolete@Nightstar-31dc2af6.as43234.net] has joined #code |
19:30 | | Vash [Vash@Nightstar-3ba4108e.wlfrct.sbcglobal.net] has joined #code |
19:30 | | mode/#code [+o Vash] by ChanServ |
23:16 | | * iospace squees |
23:16 | < iospace> | I GET TO WORK ON CODE AGAIN :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD |
23:19 | <~Vornicus> | :D |
23:24 | | himi [fow035@Nightstar-5d05bada.internode.on.net] has quit [Operation timed out] |
23:39 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has joined #code |
23:51 | <&jerith> | iospace: \o/ |
--- Log closed Thu Oct 11 00:00:15 2012 |