#exult@irc.freenode.net logs for 7 Mar 2003 (GMT)

Archive Today Yesterday Tomorrow
Exult homepage

[00:01:23] <Dark-Star> I can't remember how many bits a double has ATM, but I think 80 or something like that. so it gets a bit more complicated (and of course it's not portable, but who wants portable code anyway? ;-)
[00:02:56] <Dark-Star> "return (*(((int*)(&value))+4)) >> 31;" maybe? I need to think about this again tomorrow....
[00:03:38] <Dark-Star> also mein kleines tigerchen, mach's gut! und pass auf dich auf. Und auf Ari natürlich auch!
[00:03:42] <Dark-Star> sorry :)
[00:03:57] <wjp> who's Ari?
[00:04:01] <Dark-Star> wrong key combo. guess it's time to go to bed :)
[00:04:01] <wjp> :-)
[00:04:09] <Dark-Star> ari is a friend of a friend of mine... :-)
[00:04:54] <Dark-Star> have fun translating that piece of text ;-)
[00:04:59] <Dark-Star> g'night
[00:05:04] <wjp> oh, that isn't too hard :-)
[00:05:29] <-- Dark-Star has left #exult ()
[00:05:32] <ShadwChsr> yeah theres that fish website :)
[00:05:50] <wjp> well, speaking german makes it easier :-)
[00:05:59] <ShadwChsr> hmmm maybe not
[00:06:00] <ShadwChsr> my small tigerchen, mach's well! and passport on you up. And on Ari naturally also!
[00:06:02] <wjp> (Germany is practically next door from the Netherlands)
[00:06:03] <ShadwChsr> lol
[00:06:17] <wjp> well, the last line was almost correct :-)
[00:06:46] <ShadwChsr> I dont know theres something about the line "my small tigerchen" that is pretty funny
[00:07:08] <wjp> something like: "So, my little tiger(?), fare well. Take care of yourself, and of Ari too, of course."
[00:07:52] * ShadwChsr nods
[00:09:18] <ShadwChsr> There aren't many north american exult people, are there? :)
[00:09:46] <wjp> not really, no
[00:09:55] <ShadwChsr> I'm hiding out in Canada ;)
[00:10:11] <wjp> Jeff is from the US, and so is matto
[00:10:21] <wjp> Darke, Colourless and Kirben are from Australia
[00:10:40] <ShadwChsr> I guess one of these days I should check in some code
[00:10:44] <wjp> Me, Fingolfin and Nadir are from Europe
[00:10:47] <ShadwChsr> that way I can be the only canadian exultian
[00:11:03] <ShadwChsr> what needs doin? :)
[00:11:17] * wjp points at forum and bug tracker :-)
[00:11:27] <wjp> oh, and how's your french? :-)
[00:11:31] <ShadwChsr> LOL
[00:11:35] <ShadwChsr> supposedly I learned it in school
[00:11:40] <ShadwChsr> I know maybe 1 or 3 words
[00:11:40] <ShadwChsr> ;)
[00:11:45] <ShadwChsr> I live in western canada, not Quebec ;)
[00:12:01] <ShadwChsr> has anyone gotten it to compile in VC?
[00:12:11] <ShadwChsr> (without pain & suffering)
[00:12:13] <wjp> you'd have to ask Colourless
[00:12:21] <wjp> I think it involves at least some pain & suffering, though :-)
[00:12:32] <ShadwChsr> :(
[00:16:42] <wjp> I should be going
[00:16:43] <wjp> g'night
[00:16:50] <ShadwChsr> nite
[00:16:53] <-- wjp has left IRC ("Zzzz...")
[02:16:51] <-- ShadwChsr has left IRC (Read error: 104 (Connection reset by peer))
[02:37:01] --> `daniel has joined #exult
[03:32:55] <-- `daniel has left IRC ("Client Exiting")
[03:34:28] <-- Fingolfin has left IRC ("night")
[04:19:18] <-- matto has left IRC (Read error: 104 (Connection reset by peer))
[04:40:07] --> `daniel has joined #exult
[04:43:00] <-- `daniel has left IRC (Client Quit)
[05:10:19] --> `daniel has joined #exult
[07:55:02] --> Kirben2 has joined #exult
[07:56:18] <-- Kirben has left IRC (Read error: 104 (Connection reset by peer))
[07:58:35] --- Kirben2 is now known as Kirben
[08:26:20] --> Matt_O has joined #exult
[08:27:12] <-- `daniel has left IRC (capek.freenode.net irc.freenode.net)
[08:27:29] --> `daniel has joined #exult
[08:28:21] <-- `daniel has left IRC (capek.freenode.net irc.freenode.net)
[08:30:36] --> `daniel has joined #exult
[09:06:01] <-- `daniel has left IRC (Read error: 104 (Connection reset by peer))
[12:36:09] --> wjp has joined #exult
[12:36:09] --- ChanServ gives channel operator status to wjp
[14:40:33] <-- Kirben has left IRC (Read error: 104 (Connection reset by peer))
[15:09:54] --> Colourless has joined #Exult
[15:09:58] --- ChanServ gives channel operator status to Colourless
[15:10:14] <Colourless> hi
[15:20:10] --> Fingolfin has joined #exult
[15:20:10] --- ChanServ gives channel operator status to Fingolfin
[16:34:47] --> artaxerxes has joined #exult
[16:34:48] --- ChanServ gives channel operator status to artaxerxes
[16:34:50] <artaxerxes> hi all
[16:34:54] <wjp> hi
[16:35:06] <artaxerxes> just wanted to share my thrill with you: 16 more files to go! :-)
[16:36:44] <artaxerxes> Hi Colourless
[16:37:26] <Colourless> hi
[16:37:38] <artaxerxes> maybe you'd like to provide your opinion about what wjp and I talked about yesterday?
[16:37:43] <artaxerxes> i18n
[16:38:05] <artaxerxes> (it's always good to have several expert's ideas!)
[16:39:40] <Colourless> you are asking a native english speaker who doesn't speak any other languages for his opinion on i18n? :-)
[16:40:23] <Colourless> my opinion, separate flex files for the different languages
[16:40:28] <artaxerxes> ;-) it's more because of your coding skills that I'm asking! :)
[16:40:55] <artaxerxes> what would you say would be the way to go, say, for lips sync ?
[16:41:10] <Colourless> hell if i know. lips aren't synced as is afaik :-)
[16:41:17] <artaxerxes> lol
[16:41:27] <Colourless> you'd specify in the config file what language flexes to use.
[16:41:47] <artaxerxes> <language_file>english.flx</language_file>
[16:41:53] <Colourless> no
[16:42:32] <Colourless> i would recommend the language flexes patch the default exult flexes, rather than be entire replacements
[16:42:33] <Colourless> it
[16:42:49] <Colourless> 's not necessary to replace all the data in them
[16:43:01] <artaxerxes> i do not understand what you mean! :(
[16:43:06] <Colourless> you'd have something like <language>french</language>
[16:43:26] <Colourless> it would then load a flex file exult_french.flx which will override what's in exult.flx
[16:43:34] <artaxerxes> ahh
[16:43:48] <artaxerxes> easy to do?
[16:43:49] <Colourless> it wouldn't entirely replace it though
[16:44:19] <Colourless> about as easy as any other method i would think
[16:45:02] <Colourless> but it would require a bit of work
[16:45:10] <artaxerxes> I also mentionned yesterday something like: [sleep_0_hours][en]="Be serious, Avatar!"; [sleep_0_hours][fr]="Sois serieux, Avatar !";
[16:45:13] <artaxerxes> what do you think ?
[16:45:47] <Colourless> used how?
[16:45:59] <artaxerxes> in a flex I guess
[16:46:19] <Colourless> that sort of statment isn't easy to parse
[16:46:40] <Colourless> you 'could' put it all into a xml styled config file
[16:47:23] <artaxerxes> I think the first thing I should do is to find out how much text is hardcoded in exult!
[16:47:31] <Colourless> with things like <sleep_0_hours><en>"Be serious, Avatar!"</en><fr>"Sois serieux, Avatar !"</fr></sleep_0_hours>
[16:47:45] <Colourless> the problem with that, which I don't like, it requires all the data to be in a single file
[16:48:00] <Colourless> which isn't really in the spirit of i18n
[16:48:51] <wjp> time for me to go home; bbl
[16:48:54] <-- wjp has left IRC ("gtg")
[16:49:12] <artaxerxes> true
[16:49:45] <artaxerxes> so you'd suggest something similar to the patch mechanism, but with a flex holding the hardcoded text?
[16:49:55] <artaxerxes> sounds alright to me.
[16:50:27] <Colourless> that isn't convienient though for the person doing the text, but since text is in some shapes, it's a logical solution
[16:51:29] <Colourless> exults patching system though wasn't really ever expanded to properly support flexes. it works with vga files, because they are handled different to generic flexes
[16:51:44] <artaxerxes> damned!
[16:52:14] <Colourless> so, what to do...
[16:52:19] <artaxerxes> and with the multi-map support idea I suggested to Jeff, I guess no flexes in the patch system will be a major barrier!
[16:53:17] <Colourless> could have 2 different flexes. one for things that contain text/shapes that need to be regionalized, and another with region free data
[16:53:44] <Colourless> that method would by far be the easiest to implement
[16:54:22] <artaxerxes> tell me more!
[16:55:33] <Colourless> not really much to say
[16:55:50] <Colourless> you'd have something like a
[16:55:52] <Colourless> exult_all.flx
[16:56:22] <Colourless> exult_english.flx
[16:56:31] <Colourless> exult_french.flx
[16:56:33] <Colourless> and so on
[16:57:13] <artaxerxes> and an entry in the config file to pick the language flex?
[16:57:18] <Colourless> yes
[16:57:43] <Colourless> now, one problem though is any updates to exult_english.flx will invalidate the language flexes
[16:57:48] <artaxerxes> which could even be a run-time option (with a button for instance)! :)
[16:57:58] <Colourless> s/language/other language/
[16:58:17] <artaxerxes> I guess that's why there are maintainers!
[16:58:36] <Colourless> strict versioning will need to be implemented in the language flexes
[16:58:41] <artaxerxes> Does region-1 flex change a lot?
[16:59:02] <Colourless> with a fallback to english/default langauge
[16:59:15] <Colourless> i doubt it would change much once everything is in place
[16:59:31] <artaxerxes> how about: is something is not in exult_french.flx although it should then it uses exult_english.flx ?
[16:59:45] <artaxerxes> .... same idea... you typed faster!
[17:00:18] <Colourless> well, we could always load the english flex, with our checksum system, so we can verify it's correct
[17:00:39] <artaxerxes> I'd hate the checksum for the region-set flexes! really!
[17:00:51] <Colourless> yes it wont work with them
[17:01:54] <Colourless> then various other language flexes would be loaded with some checking system to make sure the contents is what is kind of expected. how exactly this would be done i'm not entirely sure
[17:02:34] <Colourless> you need to be sure the data is obviously of the correct type, and is actually what is wanted
[17:03:04] <artaxerxes> maybe an xml file would be good there.
[17:03:24] <Colourless> yes perhaps.
[17:04:20] <artaxerxes> load_default_flex() then load_region_flex(). Whatever is present in region overrides the default.
[17:04:33] <Colourless> that possible
[17:04:54] <Colourless> also that could all be put in some special class to handle i18n stuff
[17:05:09] <artaxerxes> wjp said something silimar IIRC
[17:05:24] <artaxerxes> s/silimar/similar
[17:05:26] <Colourless> so we could do ExultI18N->GetText(TextStringID);
[17:05:51] <Colourless> or ExultI18N->GetShape(I18NShapeID);
[17:05:55] <artaxerxes> sounds perfect!
[17:05:57] --> wjp has joined #exult
[17:05:57] --- ChanServ gives channel operator status to wjp
[17:06:17] <Colourless> the getshape stuff could actually be put into the normal GetShape() handling as is
[17:06:27] <artaxerxes> wb wjp
[17:06:30] <wjp> thx
[17:06:41] <Colourless> the GetString stuff would need to go somewhere else though
[17:06:44] <artaxerxes> we've progressed on our discussion about i18n!
[17:07:24] <wjp> great!
[17:07:27] * wjp reads logs
[17:07:40] <Colourless> haven't progress 'that' much :-)
[17:07:54] <artaxerxes> we've got a clue on how to do it now! :)
[17:08:05] <Fingolfin> re wjp
[17:09:37] <wjp> hi Max
[17:10:01] <wjp> ah, you fixed the 1Mb mem leak in that bundle sound thingie in scummvm I see :-)
[17:10:12] <wjp> there was also some mixup of free/delete in that function, btw
[17:10:33] <wjp> (IIRC)
[17:10:49] <wjp> I mentioned it in #scummvm last night but I think nobody was paying attention :-)
[17:12:27] <Colourless> what you'd want to do is to expand the ShapeManager to support the i18n stuff. then you'd want a TextManager that does a similar sort of thing
[17:12:28] <Fingolfin> wjp: didn't see you talking at all :-) but I changed a few delete to free(), yeah
[17:12:51] <Colourless> ideally the text.flx from the original games would also end up getting handled through the TextManager too
[17:13:14] <wjp> Fingolfin: k :-)
[17:13:34] <Colourless> but i'm getting ahead of myself here... just beacuse i'm coming up with these ideas doesn't mean i'm actually planning on doing anything about them
[17:13:38] <artaxerxes> Colourless: that'd be awesome... same for fonts.vga and usecode! :)
[17:17:28] <artaxerxes> if only I mastered C++
[17:18:02] <Fingolfin> Colourless: cool, you are adding I18N support to Exult? That's nice
[17:19:24] <Colourless> Fingolfin: not anytime soon....
[17:32:16] <artaxerxes> 15 files
[17:32:40] <artaxerxes> it gets really long now....
[17:33:24] <wjp> I've spent part of this afternoon analyzing a problem with our math department's helpdesk system ("Request Tracker")
[17:33:42] <wjp> with a beta of the new version it took over 5 minutes before the "create new ticket" button produced any results :-)
[17:33:56] <wjp> we traced it down to a _HUGE_ SQL query
[17:34:21] <wjp> (linking 7 tables together, with a WHERE statement you wouldn't believe...)
[17:34:40] <wjp> and what does it do... it determines which users have the right to be the owner of the new ticket
[17:34:43] <wjp> unbelievable...
[17:35:12] <Fingolfin> lol
[17:35:49] <artaxerxes> :)
[17:36:07] <wjp> we added some more indices to some of the tables and that got the time down to 2:45, but that's still unacceptable
[17:36:20] <artaxerxes> just for the fun of it, how did you trace it to this pb?
[17:36:44] <wjp> straced postgres and picket the query out of a recv system call :-)
[17:36:48] <wjp> s/picket/picked/
[17:36:57] <Fingolfin> I had some issues with the fink package DB... access was never faster, but recently it took 15 minutes to update the DB, where it used to be < 30 secs... so after some picking I found that the package "name" column was not an index, but basically everything was acccessing via it... so I made it an index, and not only did the DB re-generation times drop to a few secs again, the end user access was way faster, too. at least this one wasn't my
[17:38:08] <wjp> :-)
[17:38:24] <wjp> (line too long? It ended after "at least this one wasn't my")
[17:38:38] <Fingolfin> I still wonder why it wasn't made an index in the first place... I didn't even consider the possibility that it was not an index, I only found it chance
[17:38:51] <Fingolfin> "... wasn't my faul"
[17:40:03] <wjp> I think this monster-query was produced by a perl module called 'SearchBuilder'
[17:40:18] <wjp> so that complicates fixing it
[17:40:31] <Fingolfin> uh
[17:40:35] <Fingolfin> pretty evil
[17:40:56] <wjp> I haven't actually looked at how exactly it was formed, though. (Had to go home)
[17:41:04] <Fingolfin> why is it so complicated to determine this information?
[17:41:27] <wjp> no idea...
[17:42:12] <wjp> either the security model is overdesigned or something is really going wrong with the creation of the query, I guess
[17:42:28] <wjp> want me to email you the query? :-)
[17:45:18] <artaxerxes> you'd get quicked for flooding if you posted it here !?!
[17:45:20] <artaxerxes> ;)
[17:45:23] <wjp> yes :-)
[17:45:31] <artaxerxes> s/quicked/kicked/
[17:47:56] <Fingolfin> wjp: yeah, please, I am curious... I probably can't help, though :-)
[17:48:00] <wjp> hehe... found the spot in the code that produces the query: "# TODO XXX This really wants some refactoring"
[17:48:29] <artaxerxes> can't say it better I guess! :)
[17:49:03] <artaxerxes> are you employed at the univ as a admin or somwthing?
[17:49:22] <wjp> helpdesk officially. I'm kind of slowly migrating to admin, though :-)
[17:49:37] <wjp> (e.g., I've got full root access :-) )
[17:51:52] <artaxerxes> neato!
[17:54:20] <Fingolfin> this is evil query vodoo =)
[17:54:30] <Fingolfin> <shudder>
[17:56:09] * artaxerxes is really curious now
[17:58:11] <Fingolfin> well you can simplify the query a lot though
[17:58:18] <Fingolfin> e.g. it doesn't really select on 7 tables
[17:58:26] <Fingolfin> it has three aliases for Principals
[17:58:33] <wjp> yeah, but how do you tell this piece of code that :-)
[17:58:35] <Fingolfin> and two for CachedGroupMembers
[17:58:46] <Fingolfin> I'd probably not use such crappy code =)
[17:59:18] <Fingolfin> it should be possible to run a "query simplified" over the expression, I believe such tools are available
[17:59:26] <Fingolfin> e.g. this is a redundant check:
[17:59:26] <Fingolfin> AND
[17:59:26] <Fingolfin> ((Principals_1.PrincipalType = 'User'))
[17:59:27] <Fingolfin> AND
[17:59:27] <Fingolfin> ((Principals_4.PrincipalType = 'User'))
[17:59:32] <Colourless> i'm off now
[17:59:33] <Colourless> cya
[17:59:35] <-- Colourless has left IRC ("casts invisibility")
[17:59:58] <wjp> yeah
[18:00:11] <Fingolfin> I don't understand why it introduces the Aliases in the first place
[18:00:39] <wjp> limitation of the SearchBuilder API maybe
[18:01:20] <wjp> $self->Join( ALIAS1 => $users, FIELD1 => 'id', ALIAS2 => $userprinc, FIELD2 => 'id' );
[18:01:24] <wjp> is a typical line in there
[18:01:46] <wjp> (after that two more joins, and then a bunch of conditions)
[18:01:54] <wjp> dinner's ready; bbl
[18:02:15] <wjp> it's not too hard to clean it up by hand, but I can't immediately see the way to do it in this framework :-(
[18:02:24] <wjp> ah well, I'll take another look after dinner :-)
[18:03:10] * Fingolfin wonders what CachedGroupMembers is, it looks suspiciously like more unneccessary duplication
[18:03:17] <Fingolfin> have a nice meal :-)
[18:04:36] <artaxerxes> bon appetit! :)
[18:06:11] --> Curryous has joined #exult
[18:06:27] <Curryous> finally... thanks for the help WJP
[18:06:57] <Curryous> It may be time to change the "About Us" page
[18:12:11] <Curryous> to direct to the proper IRC server
[18:15:57] <wjp> ah, oops, yes... :-)
[18:16:00] <wjp> fixed now
[18:16:03] <wjp> hi
[18:17:36] <Curryous> heya
[18:21:42] <Curryous> I've been looking at the liqueur conversation I fixed up awhile back an I'm not quite happy how the conv. tree works so I'm trying to fix it up
[18:23:14] <wjp> Fingolfin: wow... just removing the Principals_1/Principals_4 duplications cuts the time to under 20 seconds
[18:23:31] <Fingolfin> cool :-)
[18:23:40] <wjp> however, this is by manually hacking up the query
[18:23:46] <Fingolfin> now just get rid of 3-5 duplicate checks
[18:23:50] <wjp> now I just need to kick SearchBuilder enough to make it work
[18:23:50] <Fingolfin> well
[18:23:59] <Fingolfin> the code should be rewritten to not do this aliasing stuff, I guess
[18:24:17] <Fingolfin> don't see what's so hard about doing it properly, assuming the code is sane... but it probably isn't <g>
[18:24:34] <wjp> judging by the end-result the code probably isn't sane, no :-)
[18:24:39] <wjp> Curryous: cool :-)
[18:26:38] <Fingolfin> wjp: is that this SearchBuilder: http://search.cpan.org/author/JESSE/DBIx-SearchBuilder-0.79/SearchBuilder.pm
[18:26:44] <wjp> I think so, yes
[18:26:45] <Fingolfin> and if so, at the latest version?
[18:27:04] <wjp> we have 0.79 installed
[18:28:22] <wjp> hm... if the index searches are done in the right order, it should be a very cheap query
[18:28:39] <wjp> Principals_1 is uniquely determined by main
[18:28:52] <wjp> CachedGroupMembers_7 is uniquely determined by Principals_1
[18:29:08] <wjp> Principals_5 is uniquely determined by CachedGroupMembers_7
[18:29:28] <Fingolfin> the package was last updated in 2001, BTW
[18:30:27] <Fingolfin> oh there is a newer version
[18:40:13] <Fingolfin> hrm no, can't find it
[18:40:57] <Fingolfin> anyway, I don't understand why it uses table aliases anyway, that's useless. Aliases used to avoid writing "foo.bar" over again, so you can assign an alias to it... but why alias a table (and that three times) ?
[18:41:20] <wjp> they don't alias things
[18:41:53] <Fingolfin> well the query you sent me does
[18:42:27] <wjp> no, it doesn't. It's selecting multiple rows from some tables
[18:43:03] <wjp> e.g., it's selecting rows Principals_1, Principals_4 and Principals_5 from the table Principals
[18:45:22] <wjp> hm, I should learn to read postgres' explain output
[18:45:43] <Fingolfin> hum? then I remember the SELECT syntax wrong
[18:45:50] * Fingolfin looks it up to refresh his memory
[18:46:27] <Fingolfin> this is postgresql ?
[18:46:58] <wjp> yes
[18:47:13] <wjp> although this isn't using any postgresql-specific things, AFAICT
[18:47:51] <Fingolfin> right
[18:48:47] <-- Curryous has left IRC ()
[18:49:33] <wjp> interesting... the main slowdown when I remove the duplicate Principals_1/4 seems to be the big OR in the middle
[18:49:46] <wjp> either half of the or is instant, but combining it somehow takes far longer
[18:50:43] <Fingolfin> SELECT foo bar WHERE ... -> this declares bar as an alias for foo. According to the MySQL docs at least
[18:51:43] <Fingolfin> err insert a FROM before the "foo bar" :-)
[18:52:57] <wjp> ah, ok, that's called an alias :-)
[18:53:19] <wjp> kind of confusing since you can have several aliases of the same table, then, which don't have to be the same row
[18:53:37] <wjp> "An alias is used for brevity or to eliminate ambiguity for self-joins (where the same table is scanned multiple times)."
[18:53:38] <Fingolfin> yeah
[18:54:02] <Fingolfin> in this case though no self join is intended, is it?
[18:54:18] <Fingolfin> hence removing the aliases and the access to them cause a tremendous speedup
[18:54:19] <wjp> well, not technically a self-join I guess, but the same table is scanned multiple times
[18:54:25] <Fingolfin> it's like going from n^3 to n :-)
[18:54:47] <wjp> principals_1 = the principal of the 'main' user; principals_5 = the principal of a group 'main' belongs too, from what I can tell
[18:55:14] <Fingolfin> hm
[18:55:35] <Fingolfin> yeah, principal 1/4 have type user, 5 is group
[18:55:49] <wjp> not sure about principal 4.. it has the same id as principal 1, anyway
[18:56:10] <Fingolfin> yupo yup
[18:56:11] <wjp> (and less other restrictions, so it's useless, I guess)
[19:11:36] <wjp> argh... it takes only milliseconds when I split up the big OR manually
[19:11:46] <wjp> why can't it do that itself...
[19:48:54] <Fingolfin> that would be to easy
[19:49:03] <Fingolfin> I mean, why would they need you if it just worked???
[21:03:36] <-- Fingolfin has left IRC ("bbl")
[21:32:33] --> Fingolfin has joined #exult
[21:32:33] --- ChanServ gives channel operator status to Fingolfin
[21:33:07] <Fingolfin> re
[23:03:16] <wjp> wb
[23:03:38] <wjp> wow, I was only 90 minutes late :-)
[23:03:44] --> armav has joined #exult
[23:03:46] <armav> hi
[23:04:17] <wjp> hi
[23:05:13] <Fingolfin> wjp: 90 minutes? Hah, that's nothing compared to Ryan's and my record
[23:05:27] * wjp points at the 'only' :-)
[23:05:35] <Fingolfin> yeah
[23:05:52] <Fingolfin> though both of us pale in comparision to Harakiet who managed to answer to a question of mine after something like 11 hours
[23:06:03] <wjp> wow
[23:06:55] <wjp> his record for me is only 52 minutes
[23:15:32] <armav> what tools did you guys use to reverse-engineer ultima 7?
[23:16:18] <wjp> which part?
[23:16:39] <armav> is there a difference?
[23:16:46] <armav> i thought the engines were very similar
[23:16:56] <wjp> ah, no, not that kind of part :-)
[23:17:08] <wjp> which part of the engine?
[23:17:15] <armav> the usecode interpreter
[23:17:19] <wjp> ah, we didn't :-)
[23:17:37] <wjp> I did RE U8's usecode, though. I used a simple hex editor for that
[23:17:58] <armav> you mean, you looked at the opcodes and figured out how it works?
[23:18:11] <wjp> even worse, you don't know which bytes are opcodes at first :-)
[23:18:21] <wjp> but that's the basic idea, yes
[23:18:25] <armav> it always suprises me when i hear about people who can do that
[23:18:36] <wjp> it involves a lot of staring :-)
[23:18:59] <wjp> well, usecode isn't obfuscated or anything, so you can just see offset, strings, numbers, ...
[23:19:04] <armav> but you don't write programs with a hex editor, right? :)
[23:19:12] <wjp> luckily, no :-)
[23:19:45] <wjp> after I got enough of the basic structure, we (Colourless and Darke joined in then) wrote a basic disassembler to give more insight in the structure of the language
[23:20:09] <armav> but you didn't actually run u7 throught a disassembler or debugger?
[23:20:13] <wjp> no
[23:20:27] <wjp> I don't know how 'they' RE U7's usecode
[23:20:40] <wjp> (can't remember the names of the people who did that, but we should have it in our credits)
[23:20:45] <armav> who are "they"?
[23:21:02] <wjp> oh ok, I'll look it up :-)
[23:21:12] <armav> no, you don't have to :)
[23:21:20] <armav> it's not that important
[23:21:28] --> Kirben has joined #exult
[23:21:28] --- ChanServ gives channel operator status to Kirben
[23:21:33] <wjp> hi Travis
[23:22:25] <Kirben> Hi
[23:25:47] --> `daniel has joined #exult
[23:25:53] <wjp> hi
[23:27:06] <`daniel> Hello wjp
[23:27:37] <`daniel> its about 10:34am whats it like there?
[23:27:48] <wjp> 0:26
[23:27:56] <armav> same here :)
[23:31:05] <-- armav has left IRC ()
[23:41:43] <-- Kirben has left IRC (Read error: 54 (Connection reset by peer))
[23:44:41] --> Kirben has joined #exult
[23:44:41] --- ChanServ gives channel operator status to Kirben