#exult@irc.freenode.net logs for 20 Jul 2003 (GMT)

Archive Today Yesterday Tomorrow
Exult homepage

[00:33:33] --> [phaedra`] has joined #exult
[00:42:05] <-- Yenen-D3 has left IRC (Read error: 60 (Operation timed out))
[00:42:21] --> Yenen-D3 has joined #exult
[01:00:38] <-- [phaedra`] has left IRC (Read error: 110 (Connection timed out))
[01:00:50] --> [phaedra`] has joined #exult
[01:11:55] <-- Yenen-D3 has left IRC (Read error: 110 (Connection timed out))
[01:12:09] --> Yenen-D3 has joined #exult
[01:31:02] <-- [phaedra`] has left IRC (Read error: 110 (Connection timed out))
[01:31:24] --> [phaedra`] has joined #exult
[01:37:46] <-- Yenen-D3 has left IRC (Read error: 110 (Connection timed out))
[01:43:00] --> Yenen-D3 has joined #exult
[01:45:15] --> Kirben has joined #exult
[01:45:15] --- ChanServ gives channel operator status to Kirben
[02:01:58] <-- [phaedra`] has left IRC (Read error: 110 (Connection timed out))
[02:02:16] --> [phaedra`] has joined #exult
[02:14:17] <-- Yenen-D3 has left IRC (Connection timed out)
[02:18:58] --> ShadwChsr has joined #exult
[02:39:18] <-- SB-X has left IRC (Read error: 104 (Connection reset by peer))
[02:53:15] --> Yenen-D3 has joined #exult
[03:07:18] --> SB-X has joined #exult
[03:08:24] <-- SB-X has left IRC (Client Quit)
[03:11:48] <-- [phaedra`] has left IRC (Read error: 110 (Connection timed out))
[03:12:00] --> [phaedra`] has joined #exult
[03:23:11] <-- Yenen-D3 has left IRC (Read error: 110 (Connection timed out))
[03:23:26] --> Yenen-D3 has joined #exult
[03:42:12] <-- [phaedra`] has left IRC (Read error: 110 (Connection timed out))
[03:52:45] <-- Yenen-D3 has left IRC (Read error: 110 (Connection timed out))
[03:54:06] <-- ShadwChsr has left IRC ()
[04:28:20] <Darke> (STL) Specific algorythms are not specified, but specific O speed notations are. Provided you get that speed or better, then it's ok.
[06:08:34] --> olivieryk has joined #exult
[06:15:19] --> matto1 has joined #exult
[06:16:36] <-- matto has left IRC (Read error: 54 (Connection reset by peer))
[06:56:03] --> ShadwChsr has joined #exult
[07:44:05] <-- ShadwChsr has left IRC ()
[09:51:06] --> Fingolfin has joined #exult
[09:51:06] --- ChanServ gives channel operator status to Fingolfin
[11:03:21] --> wjp has joined #exult
[11:03:21] --- ChanServ gives channel operator status to wjp
[11:21:47] <-- matto1 has left IRC (vinge.freenode.net irc.freenode.net)
[11:22:04] --> matto1 has joined #exult
[11:57:00] --> Colourless has joined #Exult
[11:57:00] --- ChanServ gives channel operator status to Colourless
[11:57:24] <Colourless> hi
[12:18:32] <-- matto1 has left IRC (vinge.freenode.net irc.freenode.net)
[12:18:48] --> matto1 has joined #exult
[12:35:11] <-- olivieryk has left IRC (Read error: 104 (Connection reset by peer))
[12:35:18] --> olivieryk2 has joined #exult
[12:41:20] --> Cless has joined #Exult
[12:41:46] <-- Colourless has left IRC (Killed (NickServ (ghosted: Cless!Cless@ppp625.adelaide.on.net.au)))
[12:41:48] --- Cless is now known as Colourless
[12:41:50] --- ChanServ gives channel operator status to Colourless
[13:42:35] <-- Colourless has left IRC ("brb")
[13:47:10] --> Colourless has joined #Exult
[13:47:10] --- ChanServ gives channel operator status to Colourless
[13:57:31] --- Darke is now known as DarkeZzz
[14:11:35] <-- matto1 has left IRC (vinge.freenode.net irc.freenode.net)
[14:11:45] --> matto1 has joined #exult
[14:58:22] --> artaxerxes has joined #exult
[14:58:22] --- ChanServ gives channel operator status to artaxerxes
[14:58:34] <wjp> hi
[14:58:35] <artaxerxes> hi all! nice to see you there!
[14:58:42] <wjp> see us where? :-)
[14:58:55] <artaxerxes> in the forum on a sunday morning!
[14:59:02] <artaxerxes> s/forum/room
[14:59:23] <wjp> I think you'll find that's afternoon or night for most of us :-)
[14:59:30] <Colourless> tis monday here
[14:59:32] <artaxerxes> wjp: you are especially the one I was looking for!
[14:59:39] * wjp runs and hides
[14:59:40] <artaxerxes> brb
[15:00:06] <Colourless> you don't normally come looking for someone, then go disappear yourself artaxerxes
[15:00:20] <artaxerxes> back
[15:00:28] <artaxerxes> sorry. my wife was talking to me
[15:00:28] <wjp> depends on what he's looking for me for :-)
[15:00:41] <artaxerxes> I have a programming question that really stumps me
[15:01:28] <artaxerxes> I'm writing a plugin for smooth, one that use the function round(). So I included <math.h> but it still complains about "implicit declaration for: round"
[15:01:55] <artaxerxes> the exact words are: warning: implicit declaration of function `round'
[15:02:18] <wjp> how are you calling round?
[15:02:30] <wjp> (with which parameter types)
[15:02:50] <Colourless> cause there is no round in math.h?
[15:03:20] <artaxerxes> it ends up being a flat
[15:03:20] <artaxerxes> float
[15:03:31] <wjp> use roundf()
[15:03:35] <-- Fingolfin has left IRC ("42")
[15:03:35] <artaxerxes> Colourless: the man page says to include <math.h>
[15:03:45] <wjp> the manpage also says round takes a double :-)
[15:03:49] <Colourless> is is ANSI?
[15:03:52] <artaxerxes> but I want a int as a result!
[15:04:05] <wjp> round produces the same type you put in it
[15:04:12] <wjp> double round(double x);
[15:04:13] <Colourless> (int) (floatvalue +0.5f)
[15:04:31] <olivieryk2> Colourless: damn that's what i was bout to write lol
[15:04:48] <artaxerxes> why +0.5f ?
[15:05:01] <wjp> to make it 'round' instead of floor
[15:05:09] <Colourless> to make it round off
[15:05:12] <olivieryk2> cause the int cast will not round
[15:05:43] <artaxerxes> you guys are the best!
[15:06:23] <artaxerxes> is the 'f' in 0.5f required?
[15:06:57] <artaxerxes> no, it's not
[15:07:05] <wjp> note that this won't do what you expect for negative numbers
[15:07:06] <artaxerxes> (since I got no warnings)
[15:07:13] <Colourless> question: why aren't we using limits.h for our [u/s]int[8/16/32] stuff?
[15:07:20] <artaxerxes> It's all good and working! thx all!
[15:07:50] <artaxerxes> wjp: I shouldn't have any negative number
[15:15:59] <olivieryk2> guys are you into the amiga emulation?
[15:16:17] <Colourless> i 'was' a long time ago
[15:16:46] <olivieryk2> do you remember that soft which comes as a preconfigured environment with winuae,picasso96 etc...
[15:16:54] <artaxerxes> well, gotta go. See you tomorrow!
[15:17:01] <wjp> bye
[15:17:04] <olivieryk2> later artaxerxes
[15:17:04] <artaxerxes> and thx for the help!
[15:17:11] <-- artaxerxes has left IRC ("using sirc version 2.211+KSIRC/1.2.4")
[15:17:22] <wjp> olivieryk2: no, never did anything with amiga emulation
[15:17:43] <Colourless> um no
[15:18:01] <olivieryk2> ok
[15:18:46] <Colourless> i can't remember much about what i did. I had winuae obviously.
[15:20:21] <Colourless> i can't even remeber how winuae is used :-)
[15:21:12] <olivieryk2> well this is not very hard to make it run
[15:21:49] <Colourless> i remember it wasn't. took no time at all to create a hard drive image
[15:22:07] <olivieryk2> hehe, well you should try again now
[15:42:44] <Colourless> ha. my 'old' version of winuae is 0.6.9 Release 12 :-)
[15:46:31] <Colourless> dated from 12th July 1997 :-)
[15:49:00] <-- Colourless has left IRC ("bbl")
[17:40:27] <-- Kirben has left IRC (Read error: 54 (Connection reset by peer))
[18:26:31] <-- matto1 has left IRC (vinge.freenode.net irc.freenode.net)
[18:26:31] <-- Eclair has left IRC (vinge.freenode.net irc.freenode.net)
[18:26:46] --> Eclair has joined #exult
[18:27:52] --> matto1 has joined #exult
[18:33:25] <-- Eclair has left IRC (vinge.freenode.net irc.freenode.net)
[18:33:25] <-- matto1 has left IRC (vinge.freenode.net irc.freenode.net)
[18:33:39] --> Eclair has joined #exult
[18:34:03] --> matto1 has joined #exult
[19:42:49] <-- olivieryk2 has left IRC ()
[21:00:40] --> ShadwChsr has joined #exult
[21:00:47] <ShadwChsr> hey
[21:25:54] --> Colourless has joined #Exult
[21:25:56] --- ChanServ gives channel operator status to Colourless
[21:30:01] <Colourless> ShadwChsr want to know more about the pentagram and exult tree based object sorting and how it relates to rendering?
[21:32:21] <ShadwChsr> Yeah, that'd be great :)
[21:32:59] <ShadwChsr> I just 'finished' the first prototype of my system, I have a base class (IRenderable) which is inherited by entities and terraincells (ground tiles)
[21:32:59] <Colourless> ok. first the reason it's done that way.
[21:33:23] <ShadwChsr> Exposes a bounding box used for sorting and is put in a std::list
[21:33:42] <Colourless> the reason we do it that way is because we are attempting to sort objects that vary in size and can overlap in a variety of complex method
[21:34:07] * ShadwChsr nods
[21:34:11] <Colourless> as such, simply doing a qsort wont give correct results
[21:34:43] <Colourless> the reason for that is, for objects that don't overlap on the screen, you can't actually tell which one should be rendered first
[21:35:43] <ShadwChsr> What's the specific case where it breaks down?
[21:36:03] <Colourless> just a sec, i've got some example screenshots
[21:36:14] <ShadwChsr> Right now I have an overloaded < operator which does the comparason using bounding boxes... the only case you dont really know which one to draw first is when they overlap
[21:36:27] <ShadwChsr> and you can make pretty good guesses in those cases.. but maybe i missed something :)
[21:36:29] <Colourless> http://www.users.on.net/triforce/error1.png http://www.users.on.net/triforce/error2.png http://www.users.on.net/triforce/error3.png
[21:36:37] <Colourless> view them in 'order'
[21:38:44] <Colourless> if you also note in those shots, you can very easy become recursive when sorting
[21:38:48] <ShadwChsr> hmmmm
[21:39:16] <Colourless> now, the reason we use a tree is so you only need to sort the objects that are actually overlapping.
[21:39:27] <Colourless> each object keeps a vector of the objects that are behind it
[21:39:37] <ShadwChsr> which axis in those screenshots is X?
[21:39:41] <Colourless> each object also has a flag to say if it's been rendered
[21:39:54] <Colourless> x is top right to bottom left
[21:40:08] <ShadwChsr> ahh thats y in my game, hehe
[21:40:22] <Colourless> no wait...
[21:40:32] <Colourless> thats y for us too :-)
[21:40:33] <ShadwChsr> top right is X, right?
[21:40:39] <ShadwChsr> k that makes sense
[21:40:40] <ShadwChsr> just a sec
[21:41:13] <Colourless> rendering objects is sort of like this
[21:41:19] <Colourless> void render_display_list()
[21:41:20] <Colourless> {
[21:41:24] <ShadwChsr> Well, when you draw tiles (non-overlapping), you draw Y< to Y>, then for each index of Y, you draw X< to X>
[21:41:46] <ShadwChsr> since the bed has a greater "Y" than the wall Y+YSize, it gets rendered after
[21:41:49] <ShadwChsr> at least, thats how my algorithm works
[21:42:48] <Colourless> for (obj=first; obj; obj=obj->nest) if (!obj->rendered) obj->render()
[21:42:49] <Colourless> }
[21:42:59] <Colourless> void obj_render()
[21:43:00] <Colourless> {
[21:43:29] <ShadwChsr> You give one of the axis' (in this case, Y) precedence over the other - thats how you determine which one is drawn first.. or maybe i missed somethin major :)
[21:44:05] <ShadwChsr> nest really means "next", right?
[21:44:05] <Colourless> for (dep = depends; dep; dep = next_depends) if (!dep->rendered) dep->render();
[21:44:17] <Colourless> rendered = true;
[21:44:25] <Colourless> screen->draw(this);
[21:44:27] <Colourless> }
[21:44:33] <Colourless> yeah, next should be next
[21:44:42] <Colourless> uh. nest should be next
[21:45:03] <Colourless> the problem if you give one of the axis precedence over the other, you might get issues in the other axis
[21:48:02] <Colourless> in the screenshots i linked, i had given x precidence for sorting over y. (since y is tr to bl and x is tl to br)
[21:48:35] <Colourless> the bed and first block drawn get sorted in y
[21:48:52] <Colourless> the block is in front of the bed in y. overlapping in x, and overlapping in z
[21:49:04] <Colourless> the second block when sorted with the first block gives this
[21:49:16] <Colourless> behind in y, infront in x, overlapping in z
[21:50:00] <ShadwChsr> *thinks
[21:50:06] <Colourless> the second block against the bed would give, behind in y, overlapping (partially infront) in x, overlapping in z
[21:51:16] <ShadwChsr> hmmmmmm
[21:52:18] <ShadwChsr> im gonna get a headache thinking about this hehe
[21:52:43] <ShadwChsr> -// if object is completely above another object (Z) render after
[21:52:45] <Colourless> :-)
[21:52:51] <ShadwChsr> -// if object is completely below another object (Z) render before
[21:53:02] <ShadwChsr> those are the easiest and are checked first
[21:53:06] <Colourless> yes, that one is actually pretty obvious
[21:53:17] <ShadwChsr> if ((compareBoundary.GetMax().GetY() <= m_BoundaryPosition.GetMin().GetY()) || (compareBoundary.GetMax().GetX() <= m_BoundaryPosition.GetMin().GetX()))
[21:53:20] <Colourless> sorting in 2 directions = easy
[21:53:21] <ShadwChsr> -// render before
[21:53:25] <Colourless> sorting in 3 = headache :-)
[21:53:36] <ShadwChsr> -// that one checks to see if an object is "completely behind another object" on the XY plane
[21:53:40] <ShadwChsr> equal precedence
[21:53:50] <ShadwChsr> --/// Check if other object is in front of (X/Y) this object on the isometric plane
[21:53:56] <ShadwChsr> if ((compareBoundary.GetMin().GetY() >= m_BoundaryPosition.GetMax().GetY()) || (compareBoundary.GetMin().GetX() >= m_BoundaryPosition.GetMax().GetX()))
[21:53:58] <ShadwChsr> -// (render after
[21:54:46] <ShadwChsr> I don't like that || though, especially after what you said ;)
[21:55:58] <Colourless> ah well, you can try it all out yourself
[21:55:59] <ShadwChsr> in your case, the X value of that block is < the bed, so it gets rendered before... but the bed is also < than the block in the X plane so it gets rendered before
[21:56:00] <ShadwChsr> ACK
[21:56:08] <ShadwChsr> my code sucks :)
[21:56:34] <ShadwChsr> both cases are true, but it depends on the order its sent to the sorting routing :)
[21:56:37] <ShadwChsr> routine
[21:56:45] <Colourless> if things go badly, which they might (going badly not only includes things being drawn in the wrong order, but the sort algorithm breaking and causing crashes)
[21:56:57] <Colourless> then you might need to do something different
[21:57:12] <ShadwChsr> I believe you, I just want to cover all the bases before i start ripping up code left & right :)
[21:58:45] <Colourless> in exult the tree is part of the chunk object lists. Whenever an object is moved/added to a chunk all the dependencies for that object are recalculated
[21:59:01] <Colourless> and if the objects is behind anything else, it's added to the othe objects dependencies
[21:59:22] <wjp> hi ShadwChsr
[21:59:39] * ShadwChsr nods
[21:59:43] <ShadwChsr> how does it calculate the dependencies?
[21:59:46] <ShadwChsr> hi wjp
[22:00:04] <Colourless> in pentagram the tree is regenerated every rendering frame, since i made pentagram use interpolation, and the dependencies can change every rendering frame
[22:00:17] <Colourless> the dependencies is simple
[22:00:36] <Colourless> if (overlaps(other))
[22:00:38] <Colourless> {
[22:00:54] * ShadwChsr nods...
[22:01:03] <Colourless> if (*this < other) other->addDepenency(this)
[22:01:14] <Colourless> else addDepenency(other);
[22:01:15] <Colourless> }
[22:01:29] <Colourless> ignoring the 'obvious' errors
[22:02:15] <ShadwChsr> I'm starting to get over my head with this game <grin>
[22:02:36] <ShadwChsr> does pentagram/u8 dynamically stretch tiles, or does it have pre-defined graphics for hills, cliffs, etc?
[22:02:49] <wjp> predefined
[22:03:05] <wjp> the only operation done on graphics is flipping them horizontally
[22:03:33] <Colourless> which just exchanges the x and y coords of the bounding box as far as sorting is concerned
[22:03:46] <ShadwChsr> Ahhh
[22:04:06] <ShadwChsr> I'm dynamically stretching them, which has become an adventure itself, but I think I figured it all out now :)
[22:04:07] <wjp> there aren't really any slopes, btw
[22:04:09] <Colourless> in pentagram the overlap check, does a check to see if the object bounding boxes overlap in screenspace
[22:04:14] <ShadwChsr> The stretching algorithm is alot easier than I thought
[22:04:29] <wjp> just stair-like things
[22:05:10] <Colourless> in exult, i 'think' the overlap check is against the bounding box of the onscreen graphic
[22:05:24] <Colourless> but i honestly can't remember
[22:08:00] <ShadwChsr> I don't think I would have ever gotten this far if it wasn't for you two helping me ;)
[22:08:19] <Colourless> if you like to see, all the code to do object sorting for pentagram is in world/ItemSorter.cpp
[22:08:46] <ShadwChsr> I'll take a look pretty soon
[22:09:09] <Colourless> even contains some nice ascii art :-)
[22:09:37] <ShadwChsr> :)
[22:10:16] <ShadwChsr> It sure takes alot longer to program my engine because I need to develop all the maps & file formats & tools as well :)
[22:10:23] <wjp> oh, right, that cube :-)
[22:10:23] <ShadwChsr> Dont have nice maps to test with <grin>
[22:10:23] <Colourless> assumption of course is that the bounding boxes are always axis aligned. You start rotating, then you are going to make things 'hard'
[22:10:37] <wjp> _*HARD*_ :-)
[22:10:46] <ShadwChsr> I dont ever plan on rotating.... noooo thanks :)
[22:11:01] <ShadwChsr> Not until everything is 3D :-)
[22:11:23] <Colourless> once you go 3d, who cares about object sorting, just use a z buffer and hardware
[22:11:46] <ShadwChsr> At one point I had a second camera matrix in my app, I aligned it to the axis' used to draw the isometric art, and I could integrate 3d and 2d graphics :)
[22:11:55] <Colourless> tracing mouse clicks in 3d? just do it the brute force way :-)
[22:12:17] <ShadwChsr> I ditched it.. for now.. though. Later what I'd like to do is have building objects defined as 3D, ala the sims
[22:12:41] <ShadwChsr> that way I can just "paint" any texture/wallpaper/design I want to a wall segment, instead of drawing thousands of isometric wall tiles by hand
[22:13:29] <ShadwChsr> I wrote it so I could extend parts of it to 3D later.. a few decades from now I guess, once I finish the 2D engine, lol
[22:14:19] <Colourless> if things are designed well enough, converting a 2d isometric engine into 'real' 3d can be fairly trivial
[22:14:26] <Colourless> note i said 'can be'
[22:14:35] <ShadwChsr> I originally started this project because I needed a way to express myself creatively, and I wanted to do that via an interactive world
[22:14:48] <ShadwChsr> unfortinately, all of the tools at my disposal sucked, so.. started programming one :)
[22:15:08] <Colourless> tool programming.... can take more time than the game engine itself
[22:15:34] <ShadwChsr> Well, by tool I mean the whole package, game engine, map editor, etc.. what I need to build a world or game, etc :)
[22:16:03] <ShadwChsr> I held back most of my tool programming until recently - Visual Studio .NET 2003 makes it alot easier, C++ form designer :)
[22:16:17] <Colourless> once you've done it all once, you'll find it's a lot easier a second time
[22:16:24] <ShadwChsr> granted, means that the tools wont be cross platform, but building crossplatform UI's is a pain anyways, and it sure beats MFC.. :)
[22:16:40] <ShadwChsr> I think this is my 5th "rebuild" :)
[22:16:49] <wjp> gtk? wxwindows?
[22:16:53] <Colourless> what you should be using GTK.... oh wait, why am i saying that, i really really dislike gtk
[22:17:11] <ShadwChsr> plus I wanted something that didn't like like dog... waste in windows <g>
[22:17:15] <wjp> qt? *shudder*
[22:17:28] <wjp> java?
[22:17:35] <Colourless> Pentagram Gumps? :_)
[22:17:37] <ShadwChsr> Ewww even worse
[22:17:45] <ShadwChsr> I thought about gumps, actually :)
[22:17:51] <Colourless> oh wait, no keyboard input in penagram gumps yet :-)
[22:17:56] <ShadwChsr> I still might do that for some quick & dirty in-game editing
[22:17:58] <wjp> Colourless: details details :-)
[22:17:58] <Colourless> s/penagram/pentagram/
[22:18:09] <ShadwChsr> same reason I didn't program one, I'd need to do all the input code first, hehe
[22:18:13] <wjp> I'm guessing that'll only take a few hours to implement
[22:18:23] <ShadwChsr> My first engine was in delphi, and I tried to brute force the renderer, had no boundaries, no collision detection... failed miserably
[22:18:42] <Colourless> you know wjp, i was actually considering making a resource file dialog box gump for pentagram
[22:19:01] <wjp> "resource file dialog box gump"? nice phrase :-)
[22:19:04] <Colourless> checkbox.... button.... radio button...
[22:19:10] <ShadwChsr> Second was also in delphi, reprogrammed it to dynamically "slice" tiles into pieces ala UO so I wouldn't need to worry about overlapping & fancy sorting
[22:19:14] <Colourless> text field...
[22:19:22] <ShadwChsr> problem was, that makes rendering characters nasty ;-)
[22:19:23] <Colourless> then i decided, such things can wait
[22:20:03] <ShadwChsr> 3rd of the delphi one was pretty nice, I had a world I could walk around in, collision detection, multiple floors, disappearing ceilings, alpha blending...
[22:20:42] <ShadwChsr> But I wanted to learn C++ so I ditched it and started learning. Engine #4 was in C++ but there was a few nasty nonc++ish things I did, so I burned it down and started #5
[22:21:17] <ShadwChsr> used a few awesome tips in some game programming gems books too.... added things like templates, singletons, autolists, an object-composition framework with interfaces
[22:21:38] <ShadwChsr> Most of the core systems are abstracted which will make it easy to port without zillions of #ifdefs :)
[22:21:55] <ShadwChsr> Not rebuilding again after this though :P
[22:22:12] <ShadwChsr> I would just like a good little graphical client
[22:22:39] <ShadwChsr> ;)
[22:23:04] <ShadwChsr> Right now it just renders "blue grid world" hehehe
[22:25:00] <ShadwChsr> Ah well, at least it's a hobby even if the current release date is scheduled in 2054 ;)
[22:25:16] <ShadwChsr> Almost done the core renderer... any tips on how to handle AI?
[22:25:24] <ShadwChsr> not specifically the AI logic, but not to queue instructions
[22:25:29] <wjp> ugh... AI...
[22:25:36] <ShadwChsr> Do you just build a stack for every character, including the player?
[22:25:46] <ShadwChsr> every time the player moves you clear the stack and add the new instruction?
[22:25:57] <ShadwChsr> And for character actions you add to the bottom of the stack?
[22:26:04] <ShadwChsr> Or am I just crazy and its done completely different? :)
[22:26:13] <ShadwChsr> I cant find any resources on how game "actions" are processed
[22:26:28] <wjp> why a stack?
[22:27:24] <ShadwChsr> Say you're playing a non-interactive sequence where the player isn't controllable and has to walk down the stairs and into the prison followed by the guard
[22:27:24] <Colourless> so once an action is finished it can return to the previous on i guess
[22:27:43] <ShadwChsr> You have a list of actions, some of them calculated by pathfinding
[22:27:55] <ShadwChsr> oops, sorry not a stack
[22:27:56] <ShadwChsr> a list
[22:27:56] <ShadwChsr> :)
[22:28:19] <ShadwChsr> FIFO
[22:28:32] <wjp> hm, U7 and 8 handle that with usecode
[22:28:53] <ShadwChsr> as you process the list, once the top actions is "done" you delete it and move onto the next
[22:29:30] <ShadwChsr> the usecode is kind of like the AI, but how does it store each character's list of actions internally?
[22:29:34] <ShadwChsr> thats the part im unsure about :)
[22:29:34] <Colourless> your engine at least is probably further along than my 'current' personal attempt: http://www.users.on.net/triforce/feedit.png is pretty much all there is... a barely started editor written in mfc and d3d :-)
[22:29:54] <Colourless> each character can only do 1 thing at a time
[22:30:23] <Colourless> generally if they need to do multiple things, a huge function will be executed
[22:30:24] <wjp> usecode waits until the action is done, and then starts the next one
[22:30:31] <ShadwChsr> Yeah, but may have a list of things they want to do after
[22:30:37] <ShadwChsr> Ahhhh hmmmm
[22:30:46] <ShadwChsr> I guess I'll worry about this later :)
[22:31:01] <wjp> the first question would be how flexible you want it to be
[22:31:15] <Colourless> and how much of a debugging headache you want :-)
[22:31:18] <ShadwChsr> ;)
[22:31:56] <Colourless> you starting making an npc do mutiple things in an order.... you might get odd things happening where 2 unrelated things want to make an npc do completely different things
[22:32:45] <ShadwChsr> Thats what I was afraid of
[22:32:55] <ShadwChsr> I was thinking of maybe doing lists of sublists
[22:33:00] <ShadwChsr> kind of like transactions
[22:33:32] <ShadwChsr> something like "walk to X location" would be a "transaction" (item in the main list), and it would have seperate instructions, for example, 10 instructions for each pathfinding move
[22:33:57] <Colourless> in u8 and u7, a lot of the time, paths (waypoints really) are used
[22:34:03] <ShadwChsr> <nods>
[22:34:11] <Colourless> basically it works like this: go to path number 'x'
[22:34:20] <Colourless> then once the npc is at path
[22:34:39] <ShadwChsr> Thats probably what I'll do too, but I'll still need some pathfinding. I might give tiles pathfinding values to, so they walk along roads and such, instead of over the flower garden :)
[22:34:51] <Colourless> number 'x' usecode will be executed/continued and the next part of the action can take place
[22:35:31] <ShadwChsr>
[22:35:43] <ShadwChsr> thats what my current map editor looks like.. it "hosts" the actual game engine
[22:36:07] <ShadwChsr> the missing tiles are because they're elevated and I haven't programmed the tile stretcher library yet
[22:36:31] <ShadwChsr> the weird red & cyan thing at the top left is a special graphic I use for testing rendering, will use that with the tile stretcher to make sure it works right
[22:37:11] <ShadwChsr> oops, heres a better one..
[22:37:43] <Colourless> also in u8 and u7, npcs have their 'normal' schedules. Basically, once the npc finishes doing a action called by a usecode function (due to player interaction or whatever), the usecode will then make the npc restart it's scheduled activity
[22:37:48] --> Fingolfin has joined #exult
[22:37:48] --- ChanServ gives channel operator status to Fingolfin
[22:38:05] <wjp> hi Max
[22:38:23] <Colourless> the schedules are time based so they can change and make it look like the npc actually has a life :-)
[22:38:31] <ShadwChsr> :)
[22:38:40] <ShadwChsr> I wish online games had that
[22:38:43] <wjp> (which he stops having the second he leaves the screen ;-) )
[22:38:56] <ShadwChsr> To me it always seems the AI says "walk 1 step. stop. turn. Walk 1 step. stop. turn" over and over and over
[22:38:56] <ShadwChsr> ;)
[22:39:26] <wjp> you forgot the "bark repetitive comment" :-)
[22:39:38] <Colourless> Boy this weapon gets heavy...
[22:39:46] <wjp> Curse these tight boots...
[22:39:47] <Colourless> Watch out for undead!
[22:40:08] <wjp> of course with the "boy this weapon gets heavy" he actually takes his halbert of his shoulder
[22:40:15] <ShadwChsr> :)
[22:40:26] <ShadwChsr> Have you ever read the "bad game designer, no twinkie!" series?
[22:40:38] <wjp> was one of the first NPC-related things that worked in pentagram, btw :-)
[22:40:39] <Colourless> and, to make things really real
[22:40:54] <wjp> no, haven't read that
[22:40:58] <Colourless> have scripted guards harrass scripted peasents, which are lying about what they were doing
[22:41:18] <ShadwChsr> It's really good... explains everything that's wrong with games... things designers could do that don't take time but make the game more immersive
[22:41:50] <ShadwChsr> for example, you're fighting "huge evil demon of death" with a +50 sword of asskicking
[22:42:20] <ShadwChsr> you kill it, and voila, sword vanishes, and all you get is a measly 46 gold and a bran muffin
[22:42:27] <ShadwChsr> ;)
[22:42:32] <Colourless> :-)
[22:42:41] <ShadwChsr> Or you kill a rat and you get 56 gold and a slingshot (??)
[22:42:41] <ShadwChsr> ;)
[22:43:20] <ShadwChsr> Or there is a door in a building that you can't open because some evil npc just painted a wall to *look* like a door ;-)
[22:43:42] <wjp> ah, but that's just because they planned an expansion behind that door ;-)
[22:44:11] <ShadwChsr> Yeah but why can't they at least have the door make a clicking/locked sound to make it seem like a door, and have the NPC near it say "I lost the key years ago.."
[22:44:12] <ShadwChsr> ;)
[22:44:59] <Colourless> cause that would make the player think they can pick the lock
[22:45:11] <ShadwChsr> I know, but still ;-)
[22:45:13] <ShadwChsr> http://www.designersnotebook.com/index.htm
[22:45:15] <ShadwChsr> thats the site
[22:45:26] <wjp> "yeah, it's this magically locked door with an unbreakable spell, but I forgot the password years ago..." ? :-)
[22:45:37] <ShadwChsr> click on "The designer's notebook"
[22:45:41] <wjp> I found it in about 20 places on google :-)
[22:45:47] <ShadwChsr> :)
[22:45:58] <wjp> no, make that 942 places
[22:46:17] <ShadwChsr> Not surprised, heck, those articles are actually being taught in some universities now, LOL
[22:46:20] <ShadwChsr> go figure
[22:47:05] <ShadwChsr> "So here I am, playing the demo of Indiana Jones and the Infernal Machine, and I can't get out of the very first room. I haven't played a lot of these kinds of games, because they're generally too twitchy for me, but I figure I can trust LucasArts not to demand too much hand-eye coordination. I try everything I can think of, with no luck. Can't even get out of the first room… boy, am I a loser! Eventually I break down and go find a walkthro
[22:47:09] <ShadwChsr> "Oh, here's the answer! There's a cube of stone, about five feet on a side, that I'm supposed to drag someplace… WHAT?
[22:47:11] <ShadwChsr> hehehehehe
[22:47:12] <ShadwChsr> so true
[22:47:22] <ShadwChsr> reminds me of zelda
[22:47:37] <Fingolfin> hiya willem (a bit late, I know ;-)
[22:47:39] <ShadwChsr> Drag the blocks to random locations before the magical chest which isn't magical appears out of nowhere in top of a column
[22:47:53] <ShadwChsr> who the heck put it there anyways, and why did they magically seal a few arrows anyways? :)
[22:47:57] <Colourless> adventure games... abandon all logic
[22:48:00] * Fingolfin knows that he still is a far cry away of the records set by Colourless and himself, though :-)
[22:48:20] <wjp> Fingolfin: late? it's only 0:50 am :-)
[22:48:30] <Fingolfin> I meant later to reply
[22:48:33] <ShadwChsr> hehehehehe this one is my favorite: "Conquer the world!" "The fate of humanity is at stake!" "Save the galaxy!" scream the boxes on the shelves down at the game software store. "No!" I'm tempted to scream back. "I don't want to! The galaxy can go stuff itself!"
[22:48:39] <wjp> Fingolfin: oh really? ;-P
[22:48:41] <Fingolfin> I think I've stayed on IRC till, uhm, 6 AM or so before...
[22:48:56] <Fingolfin> well, 11 minutes is actually a pretty good response time, now that I think about it =)
[22:49:10] * wjp has to get up in 6 1/2 hours
[22:49:12] * wjp hmms
[22:49:18] <Fingolfin> oh no problem
[22:49:20] <wjp> ah well, I'll just read these twinkie articles first :-)
[22:49:21] <Fingolfin> see, just don't go to bed
[22:49:27] <Fingolfin> that way you don't have to get up. problem solved
[22:49:32] <wjp> ah, brilliant
[22:49:39] <Fingolfin> yeah it's me, you know :-)
[22:50:05] <Fingolfin> what else do you expect from a theoretical mathematician? brillliant theoretical solutions that don't work in real life
[22:58:09] <Colourless> ah yes, i've read these all before
[23:00:07] <wjp> I hadn't
[23:00:10] <wjp> now I have, though :-)
[23:00:30] <Colourless> Bad Game Designer, No Twinkie! IV is on Gamasutra btw (since it's not on the www.designersnotebook.com site)
[23:00:32] <wjp> kind of weird that on article from 2002 has a copyright footer that says 2000-2001, but ah well :-)
[23:00:38] <Colourless> http://www.gamasutra.com/features/20030523/adams_01.shtml
[23:01:01] <wjp> oh, great, another one of those javascript-triggered login pages
[23:01:13] <Colourless> :-)
[23:01:14] <ShadwChsr> :)
[23:01:27] <Colourless> you defeated it once before :-)
[23:01:33] <Colourless> or, you could just create an account
[23:01:45] <Fingolfin> he
[23:01:47] <wjp> hm, no, this one's different
[23:02:07] <wjp> because you gave me the login url directly :-)
[23:02:30] <wjp> an account? where's the fun in that? :-)
[23:04:04] <Colourless> hey, because of my account i was sent an 'invitation' to the game developer conference once :-)
[23:04:24] <ShadwChsr> Question, does anyone know why demons in Ultima are called "daemons"?
[23:04:26] <Colourless> seriously, i would have gone too, if i could have afforded it :-)
[23:04:33] <ShadwChsr> Last I checked thats the name for a unix service, not a creature ;)
[23:04:41] <Fingolfin> demons are not the same as daemons, AFAIK
[23:04:47] <Colourless> is the welsh spelling or something
[23:04:54] <ShadwChsr> ahhh
[23:04:59] <Fingolfin> no
[23:04:59] <Colourless> or old english
[23:05:05] <Fingolfin> AFAIK they are actually two slightly different things
[23:05:06] <Colourless> i don't care
[23:05:27] <Fingolfin> a daemon is a special case of a demon
[23:05:30] <wjp> dictionary says: (typing slowly)
[23:05:44] <Fingolfin> demon can denote more generically a evil spirlt, or a devil
[23:05:44] <wjp> daemon = supernatural being that is half god, half man
[23:05:49] <Fingolfin> (or a demon)
[23:05:59] <Colourless> i should be going
[23:06:01] <Colourless> cya
[23:06:02] <-- Colourless has left IRC ("casts invisibility")
[23:06:04] <wjp> or 2) spirit that inspires sb to action or creativity
[23:06:26] <wjp> demon = wicked or cruel spirit
[23:07:00] <ShadwChsr> ahh
[23:07:14] <Fingolfin> from the OALD (Oxford Advanced Learners Dictionary): daemon - a spirit that inspires sb to do or create things, "one's creative daemon". compare demon
[23:07:15] <ShadwChsr> I had always assumed it was a misspelling all these years ;)
[23:07:32] <wjp> daemon is from Greek mythology apparently
[23:09:06] <ShadwChsr> second question.. is stones an actual medieval song, or just something Origin game up with?
[23:09:31] <ShadwChsr> ie/ greensleves
[23:09:32] <Fingolfin> demon - 1) a wicked or cruel spirit: "medieval carvings of demons". 2) (infml) (a) a person thought to be wicked, MISCHIEVOUS, etc.: "Your son's a little demon!", (b) ~(for sth) an energetic or aggressive person: "She's a demon for work" (ie she works very hard)
[23:09:53] <Fingolfin> and AFAICT, demonstrable is not derived from demon =)
[23:10:38] <wjp> I seem to remember that Stones was composed by the role-model for Iolo...
[23:10:43] <wjp> I could be wrong, though
[23:11:01] <ShadwChsr> Ahhh :)
[23:11:37] <wjp> details should be available online
[23:11:42] <wjp> try the ultima newsgroups
[23:11:49] <ShadwChsr> The ophidians were human, right? :)
[23:12:03] <wjp> yes
[23:12:07] <wjp> AFAIK
[23:12:34] <ShadwChsr> I think so too, except all throughout serpent isle they call them 'red demons'
[23:12:40] <ShadwChsr> (or daemons, cant remember which)
[23:13:08] <wjp> they never saw an ophidian
[23:13:31] <wjp> sure they weren't referring to gargoyles, btw?
[23:13:34] <ShadwChsr> In UO the ophidians are snakes but I figure thats just an EAism
[23:14:14] <ShadwChsr> no, they were talkin about ophidians but that doesnt mean much
[23:14:32] <wjp> SI's ophidians worshipped snakes
[23:15:04] <wjp> ophidia is a snake or serpent I think
[23:15:56] <wjp> Ophidia - The order of reptiles which includes the serpents.
[23:17:13] <wjp> I think I should be going now...
[23:17:19] <ShadwChsr> me too.. tyl
[23:17:23] <wjp> night
[23:17:26] <-- wjp has left IRC ("Zzzz...")
[23:27:07] <-- ShadwChsr has left IRC (Read error: 104 (Connection reset by peer))