10 Nov, 2008, Avaeryn wrote in the 1st comment:
Votes: 0
Retnur: 'Hrm, people are waiting til the last minute. :P'
Avaeryn: 'that's normal, but i have the log started already :)'
Avaeryn: 'any ideas on an agenda? i thought asking you and quix how things are going would be a good place to start'
Retnur: 'I spent most of the week redesigning the lists ram uses.'
Retnur: 'To accomplish 2 things. Remove the opportunity for simple errors, make list creation much faster on the development side'
Avaeryn: 'you and quix have been very busy, haven't you?'
Retnur: 'A few other reasons for the redesign of the list system is to make it more conforming with our C++ version of the game, fire.'
Retnur: 'There's more conformity between the two, even though it's all in C.'
Retnur: 'And it brings a lot more standard features to all lists without having to implement those features every time (or use macros)'
Avaeryn: 'i think the changes that have been made thus far are amazing. will do a lot for the code'
Avaeryn: 'or should i say base'
Retnur: 'I know throughout my time working with C, especially when I was a noob coder, making new lists in C was always a chore.'
Retnur: 'And it was even more prone to errors from a single typo.'
Retnur: 'The kind that crash you or worse.'
Retnur: 'I think quix has been working exclusively on the bug list.'
Retnur: 'While I was switching over char_data lists into our new system I found 2 very serious bugs that were unknown up until that point.'
Retnur: 'Both of which could cause random crashes and memory corruption from simply using a variable called "next" instead of "next_in_room"'
Avaeryn: 'wow, that's amazing.'
Avaeryn: 'have you posted about that bug somewhere?'
Retnur: 'Which is why I think the system was so easy to mess up with. Even when people are posting examples on the forum they get those two variables mixed up'
Retnur: 'I mentioned it on a thread where we were talking about how easy the bugs were to make.'
Retnur: 'One of the bugs were in mob_hit and I can't remember where the other one was on the top of my head.'
Avaeryn: 'i've read over most of the posts on the ram forum'
Quixadhal has entered the game.
Quixadhal: 'Boo!'
Avaeryn: 'you're too scary!'
You chuckle politely.
Avaeryn: 'look, a keg of beer'
Retnur: 'Roar'
Quixadhal: 'It's snowing outside….'
Retnur: 'Well, 3 of us showed up ;)'
Avaeryn: 'no way? where???'
Quixadhal: 'Kalamazoo…. southwest Michigan, USA.'
Quixadhal: 'Yes, it is the one from the Glenn Miller song….'
Avaeryn: 'Retnur has been filling me in on some of the changes going on'
Retnur: 'God Bless the USA? I don't reme,ber Kalamazoo in that one. :)'
Quixadhal: 'last time we threatened to call the start of the meeting, a few more people showed up… so we should threaten to call the meeting and hide in wait. :)'
Avaeryn: 'ok, so if no one shows up…hrm…next 30 seconds, we start, right?'
Quixadhal nods.
Avaeryn: 'i think i should make a ram for our board room :P'
Quixadhal: 'I've got a gal in Kalamazoo, in case you want to listen to it on youtube or something.'
Retnur: 'I'll pass.'
Retnur: 'I'll stick to modern music.'
Quixadhal: 'it's not bad, just a little corny. :)'
Avaeryn: 'Ok, let's start the meeting.'
Quixadhal: 'But then I like jazz'
Avaeryn: 'hear ye, hear ye, and all that stuff.'
[Quixadhal]: looks around the corner for the folks running for the door.
Retnur: 'Whatever happened to all the people who were pledging to work on this project anyways? :P'
Quixadhal and refuses to adapt to this mud not using : for emote. :)
Avaeryn: 'well i'm not sure really. this is typical of any project i think.'
Avaeryn: 'i think davion is being held up by work obligations'
Quixadhal nods.
Avaeryn: 'ummm maybe i should take the fifth on the rest :P'
Quixadhal: 'Yeah, we should code a proper meeting room that logs what's said so people can browse back to see what they missed.'
Quixadhal: 'essentially, have a "minutes" command :)'
Avaeryn: 'At any rate! It's like voting, if you don't vote don't bitch. You didn't bother to go to the polls, yada yada. So therefore, those who are here really do have a controlling voice in what happens.'
Quixadhal smiles happily.
Retnur: 'It might be nice for Avaeryn to have it automatically produce a log file that doesn't have to be tampered with.'
Retnur: 'And maybe automatically produces forum color codes for her too.'
Quixadhal: 'timestamps are nice… I actually have a copy of tinyfugue that adds timestamps to logs'
Avaeryn: 'You guys are talking now :)'
Quixadhal: 'but having a minutes command that will show aything said in the room with timestamps would probably be handy'
Retnur: 'Yeah, I have that on my mud.'
Retnur: 'I don't call it minutes'
Retnur: 'I call it show <channel>'
Avaeryn: 'because within the next week i will be netless. but if there is a log file i could get from the server i could upload it to mudbytes from work or school'
Retnur: 'You moving?'
Avaeryn shakes her head.
Avaeryn: 'just tired of comcast'
Quixadhal: 'Giving comcast the boot.'
Retnur: 'Hrm'
Avaeryn: 'we had that conversation quite some time ago :)'
Avaeryn: 'i hope to move soon though, but not sure when that might be'
Retnur: 'I'm usually quick to forget and oblivious.'
Retnur: 'And all of htat.'
Quixadhal: 'Can't say I blame you, it's just too bad there aren't any other alternatives handy.'
Avaeryn nods sagely.
Davion has entered the game.
Avaeryn: 'dish network, but that's going to be down the road a bit. very expensive'
Avaeryn: 'davion :)'
Quixadhal: 'Although you could try to leech off someone else's wireless. :)'
Quixadhal grins evilly.
You chuckle politely.
Quixadhal: 'Hi Davion!'
Quixadhal brushes snow off his coat and draws a pint.
Retnur hates Davion.
Avaeryn: 'awww, no hate'
Davion grins evilly.
Davion: 'I made it!'
Davion: 'I'm so tired :S'
Retnur: 'Davion has been a thorn in my side for years.'
Avaeryn: 'so, since there are four peoples here, should we go forward?'
Avaeryn: 'yay davion!'
Davion nods at Retnur.
Avaeryn thinks Davion does not resemble a thorn, but will take Retnur's word for it.
Quixadhal: 'Sure, I think we're up one from last week's start… keep this up and we'll need a bigger meeting room (eventually). :)'
Retnur: 'I already talked about my work for the last week.'
Quixadhal: 'Future meeting room will also supporess weather messages. :)'
Retnur: 'Even though nobody was here.'
Davion: 'Shouldn't get them anymore ;)'
Davion flagged the room indoors
Retnur: 'Although before we merge the code'
Quixadhal chuckles politely.
Retnur: 'I want to finish putting all of the lists in.'
Quixadhal can't rain on Davion's parade anymore…
Retnur: 'I finished the most time consuming one (which was no less than 4 hours)'
Davion: 'I'm a little behind… catch me up here. There's two RaM's now?'
Retnur: 'Putting all of the char_data into lists.'
Quixadhal: 'Well, there's two branches… so we could both work on stuff independantly'
Davion: 'Ahh'
Davion: 'How do I get these two copies?'
Retnur: 'We decided not to base RaM off of rom. We're basing it off of circle now.'
Retnur: 'Someone came last week and convinced us.'
Quixadhal: 'if you have a checkout from the top level, just do an update.'
Avaeryn: 'and all your base are belong to us'
Quixadhal: 'You should end up with a few directories…. Ice is the production "C" version.'
Quixadhal: 'Fire is the non-existent (so far) C++ version.'
Quixadhal: 'and then a branches subdir for anyone to plug away at stuff'
Quixadhal: 'There's a big fat welcome file that explains all that too.'
Retnur: 'I like our setup so far.'
Quixadhal: 'First room description I've done in a while, so if it sucks, let me know. :)'
Quixadhal: 'That way I can delegate someone to fix it *grin*'
Davion: 'Why's the fire branch empty?'
Davion: 'Oh'
Quixadhal: 'We haven't done anything yet… no real point to splitting it off until we're done bugfixing and such.'
Davion: 'Ok'
Davion: 'I should just read what you said.'
Davion nods.
Quixadhal: 'Yeah, I get a nickle every time someone reads something I write… boy am I poor. :)'
Retnur: 'Dimes don't add up very fast.'
Quixadhal: 'Here's the URL to my current bugfix list.'
Quixadhal: 'http://www.shadowlord.org:8088/~quixadha...'
Quixadhal: 'The green ones are fixed or don't apply… the others still need some love.'
Retnur: 'The change I worked on last week was converting all of the C style intrusive lists over to a new high level design. (Even though still in C)'
Retnur: 'Higher level design I should say.'
Retnur: 'Although it's not an efficiency play–It's just a rapid development and bugfix play.'
Davion nods.
Retnur: 'The place it is different from most C generic list libraries is'
Retnur: 'I designed it with iterators in mind.'
Quixadhal: 'Our thinking there was that it will be a bit more secure, and feel a bit like the C++ std::list class, making the transition a bit easier.'
Davion: 'Ah'
Davion nods.
Retnur: 'And it preserves your list correctly even if you free the node you are in.'
Retnur: 'No need for holder variables, no need to worry about list corruption.'
Quixadhal: 'and for those not wanting to transition, it makes our life a little easier since the code looks similar.'
Retnur: 'And for that matter, no need to worry about accidently dereferencing a pointer that is no longer valid. (Like multi-hit notoriously did)'
Davion: 'Wow'
Davion: 'That's terrifying :)'
Retnur: 'Since if it dereferences an invalid value it becomes an empty type of that data.'
Retnur: 'Of course some people won't like the transition.'
Retnur: 'But a lot of people like the old C way best.'
Quixadhal: 'Although they never show up to meetings.'
Quixadhal: 'For my part, I went through and tried to make sure every variable in the codebase is initialized to some value.'
Retnur: 'I don't think we should really cader to the worst case scenario when it comes to who is using our codebase. We should cader to bright people trying to learn the proper way to do things.'
Quixadhal: 'From past experience, it makes debugging somewhat easier. :)'
Quixadhal: 'I broke off the random number stuff, and the string handling stuff into seperate files.'
Quixadhal: 'I merged all the recycle stuff in to wherever it was recycling…. so that way all the ban-related code is in ban.c, for example.'
Quixadhal: 'and I've been walking down that bug list :)'
Davion: 'Well, I think it'll depend on how easy it is to use, and add too'
Quixadhal: 'I also have a few things in my TODO file that might be worth perusing.'
Quixadhal: 'There are quite a few special-case hacks that scared me.'
Retnur: 'Haha.'
Retnur: 'Like the one for the pet shop in new thalos.'
Quixadhal: 'yeah, that's just wrong.'
Retnur: 'A special vnum hard coded when looking for a petshop.'
Retnur: 'Personally I think we should just hardcode in all of the area files.'
Avaeryn: 'yeah i saw that.'
Retnur: 'Then we won't need an OLC.'
Avaeryn: 'and what about the trolls in gangland?'
Retnur: 'They can just change the values in code!'
Retnur: 'Compiling is more efficient than reading stinking area files.'
Quixadhal smiles happily.
Retnur: 'Personally I think the special procedure code…'
Retnur: 'Is like a cheap hack.'
Quixadhal: 'Aside from bugs, and from it not being as complete as we'd like… do we like Ivan's OLC well enough?'
Retnur: 'I do.'
Quixadhal: 'I'm thinking it is probably time to start adding a few of the "essential" features.'
Quixadhal: 'OLC and color seem to be at the top of most people's lists, with mudprog scripting not too far behind.'
Quixadhal: 'after those, the magic 8 ball gets a bit less clear. ;)'
Retnur: 'Even though it's trivial to add'
Retnur: 'Most people want a copyover already in.'
Retnur: 'It's basically just a full reboot using execl()'
Quixadhal: 'yep, not a big deal unless you're silly enough to hook it into a seggy handler.'
Retnur: 'Naw, I remember when I did that when I was like in my first few months of coding'
Quixadhal: 'then you deserve the suffering you'll enjoy. :)'
Retnur: 'I ended up getting corrupted data.'
Retnur: 'I had it like'
Retnur: 'Autocopyovering and autosaving on crash'
Quixadhal: 'You learned the valuable lesson entitled "Backups".'
Retnur: 'Which was not a good thing.'
Quixadhal: 'Also, how attatched are you guys to the stock ROM areas?'
Retnur: 'Regardless of what we do we should release a version with no areas as well as one with some.'
Quixadhal: 'I had an idea…. *rubs his hands together*'
Avaeryn: 'that's a scary thought'
Retnur: 'Avaeryn offered to build us a custom world from scratch.'
Avaeryn: 'did i see some mention of key features being added? '
Retnur: '25,000 original rooms.'
Retnur: '5 line, 80 character descriptions'
Quixadhal: 'Well, I was thinking there are bound to be people interested in the project who aren't coders.'
Avaeryn: 'yes, i think so too at some point'
Quixadhal: 'Soooo, how about a contest to design a new newbie starter area? We vote on them and pick the most popular for release?'
Avaeryn: 'i am not attached to stock rom areas, to answer your question from above'
Retnur: 'It would be nice if we shipped a decent world instead of the rag-tag world rom ships with'
Avaeryn: 'that's doable'
Retnur: 'Is it rom that has the smurf area in it?'
Avaeryn: 'i can always build from college when i have time :P until, of course, we get the internet issue addressed'
Retnur: 'Or is that another codebase?'
Avaeryn: 'rom'
Retnur pukes.
Avaeryn: 'not sure if it's in some of the others or not'
Quixadhal: 'I think my aversion to "mud school" comes from learning to play on a mud that had no such thing – but also because it felt so forced and unnatural.'
Retnur: 'I have to wonder what someone was thinking when they made the default world like that'
Quixadhal: 'I think smurf came from merc'
Retnur: 'I think they were thinking'
Quixadhal: 'maybe even envy…..'
Davion: 'Why not release one with all areas and just make it stupidly simple to remove them?'
Quixadhal: 'I always liked the other way around Davion… release with only a couple and make it easy to add back the junk. :)'
Davion: 'Well either way'
Quixadhal: 'even if all we do is just only put the couple of new ones in the area list. :)'
Davion: 'You should be able to go both ways.'
Avaeryn: 'as i tried to say earlier, not sure if you saw it, a starting area that is designed correctly could be very helpful'
Quixadhal: 'and leave the other files sitting there, waiting for some poor fool to use.'
Quixadhal grins evilly.
Avaeryn: 'i've always thought that a world should get more difficult as it goes outward, farther from the epicenter.'
Quixadhal: 'Yes. I also like having high level things (quests, dungeons, etc) in or near the starting areas so they have a reason to come back and help the younglings.'
You nod.
Quixadhal: 'especially when the population is low on a new game.'
Avaeryn: 'a correctly designed prog can keep out new players'
Quixadhal: 'My old mud didn't need much in the way of help or directions back when we had 40+ people on all the time.'
Quixadhal: 'But now…. go ahead and try it. It will be challenging, to say the least.'
Quixadhal: 'Not a good design for new players.'
Davion: 'Aren't we marching into 'gameplay' territory here?'
Avaeryn: 'internet is in and out for some reason. so if you lose me, i'll be back'
Quixadhal: 'Well, a little. Step 1 will be getting any and all hard-coded things into files that get read and boot time.'
Retnur: 'Even if we want to avoid changing gameplay, a lot of the additions we are going to make need to be showcased for builders. Some of these additions are simple OLC changes related to building options.'
Quixadhal: 'You can't just remove all areas now, the game will crash trying to assign specials, and trying to find default rooms.'
Davion nods.
Quixadhal: 'But, even if we don't do a new player mud school… we really should have one for immortals.'
Davion: 'Well that's not gameplay'
Avaeryn: 'i thought that an area designed to help teach the nuances of the olc could be put in as well'
Avaeryn: 'similar to what tbamud has in place'
Avaeryn: 'not only that, i think they teach basic immortal commands as well'
Quixadhal: 'Personally, I think some form of good player starting area would be handy, because we WILL ship with basic combat included.'
Quixadhal: 'we may trim the spell list, but the general gameplay mechanics probably wont' change from what they are now.'
Retnur: 'I purpose'
Retnur: 'We only include newbie areas. A main town. Some of the help areas.'
Retnur: 'And not a complete skill or spell list.'
Davion: 'Why? That's taking away from RoM'
Davion: 'That's not our objective here.'
Retnur: 'Our objective is to ship with something someone can start up and not have to be obligated to actually change?'
Retnur: 'And run as a complete mud?'
Retnur: 'Without changing gameplay, no less?'
Davion: 'To my understanding, we are presenting a stable, feature rich enviornment for newbs to start a game with.'
Retnur: 'I think that's noble and all'
Retnur: 'But the reason the mudding world is full of rubbish these days'
Retnur: 'Is because of that.'
Davion: 'We aren't here to fix the mudding world…'
Davion: 'I don't think we -can- fix the mudding world with just one project'
Davion: 'I think we should just make it easier to change things rather than changing them ourselves'
Retnur: 'That isn't changing them ourselves.'
Retnur: 'That's giving them the proper paint brush to do the work.'
Davion: 'Trimming areas down and axing skills/spells throws off the entire balance of the game'
Quixadhal: 'The only reason I'd suggest trimming the spell list is the same reason I'd trim the area list. It's the first things I'd rip out and change for making a new game.'
Retnur: 'An empty canvas.'
Avaeryn: 'before you think about ripping out skills and spells though'
Davion: 'Why give them an empty canvas when we can give them a full one, that's totally mutable.'
Avaeryn: 'could we address something that i know we mentioned once before?'
Retnur: 'Spells and skills should be there as an example only.'
Retnur: 'Not a game ready to be played.'
Avaeryn: 'any ideas on how you will approach the spell and skill editor?'
Davion: 'But that's what ROM is'
Retnur: 'And this is a better rom.'
Retnur: 'This isn't rom.'
Davion: 'a better rom that isn't rom?'
Davion boggles at the concept.
Retnur: 'The same argument can be made'
Retnur: 'For not removing a single area.'
Retnur: 'Because that's rom.'
Retnur: 'We can't remove something that's in rom.'
Davion: 'I agree with not removing areas either'
Quixadhal: 'I would suggest skills and spells be stored in external files. We may want to use dlsym to link the functions by name.'
Retnur: 'Well I don't.'
Davion: 'I think instead, we should make it easy to remove them'
Avaeryn: 'i have no problem removing the areas, but i do think a basic starter area and immortal area should be in place'
Retnur: 'The areas in rom are rubbish.'
Quixadhal: 'At any point in the area files, you shouldn't be storing "skill #37", you should store the name of the skill.'
Avaeryn: 'by starter area, i mean maybe a place for players to find food, drink, and just bop around in. nothing that will influence the world or game'
Retnur: 'If that's the example we want to set for the quality of the rest of this project'
Retnur: 'We can just hang up our coding boots and go to the house.'
Davion: 'If we want the building to reflect the coding, shouldn't we be improving the areas instead of ripping them out?'
Quixadhal: 'I think it's the only reasonable way to have any kind of OLC for skills/spells, otherwise adding a new skill requires hard-coding anyways.'
Retnur: 'I don't know why you want to leave all of those areas in anyways.'
Davion: 'Because they're ROM'
Retnur: 'Smurfs? Give me a break.'
Avaeryn: 'you could leave the old areas in, but not have them connected to anything'
Quixadhal: 'The problem with ROM areas is that there is no overall theme, and no smooth transition from one to the next.'
Davion: 'The areas are synomomous to the codebase.'
Avaeryn: 'the decision to use them could be up to the admin who downloads the base'
Davion: 'synonymous*'
Retnur: 'We want to have everything easy to remove, or we say we do'
Retnur: 'But we want to leave in tons of spells and skills code that won't be easy to remove'
Retnur: 'Just to have a fully functional game'
Retnur: 'That isn't worth playing.'
Retnur: 'That anyone who wants to actually use it will have to remove.'
Avaeryn: 'would it be easier to rewrite the skills and spells using the new system you guys have in mind'
Retnur: 'Who here has played stock rom and enjoyed it?'
Avaeryn: 'but leave them in place, just better than before?'
Davion: 'I did…'
Avaeryn: 'i did when i first played it :)'
Retnur: 'Then you're a lot tolerate of shitty games than I am.'
Davion: 'Well, it wasn't stock, but it was stock rom with improved areas and -more- skills and spells'
Retnur: 'more*'
Avaeryn: 'yeah same, davion.'
Davion: 'At anyrate, it was still rom'
Retnur: 'Well, you guys can do whatever you want.'
Quixadhal: 'The game I played on reworked all skills and spells to follow the 2nd edition AD&D rules as closely as possible.'
Retnur: 'I'll release a spinoff of whatever the final product is without the areas or a majority of the spells or skills after we're done.'
Avaeryn: 'could i restate my question from before'
Retnur: 'So it doesn't really matter to me what we do here.'
Avaeryn: 'and see how you guys feel about it please'
Quixadhal: 'go ahead Avaeryn'
Avaeryn: 'instead of ripping out the skills and spells that exist, rewrite them using the new system you have in mind. that should make removing them as easy as typing a command'
Avaeryn: 'correct?'
Davion nods.
Avaeryn: 'ok then, would that make it easier for you all to digest and accept? Retnur?'
Avaeryn: 'Same with the areas. Revamp the OLC so it is feature rich.'
Davion: 'That's what I'm going for here. Instead of giving them nothing. Give them as much as possible and allow them to easily remove whatever they don't want'
Avaeryn: 'Make removing an area as simple as typing a command'
Quixadhal: 'Yes, by hooking dlsym in with OLC, adding or removeing them would be fairly simple. However, removing one will require also removing any objects or special procs that access them.'
Retnur: 'I presume you're talking about an OLC for skills.'
Avaeryn: 'i've built on a mud or two with an olc delete command. it was fabulous.'
Avaeryn: 'however you want to address the skill and spell editor, Retnur. '
Quixadhal: 'If you have a wand of fireball, and remove fireball, the wand will become non-functional, or be removed as well.'
Avaeryn: 'if it's an olc or some completely different system'
Quixadhal: 'The spells already all follow the pattern of spell_foo(), so using dlsym on them is easy.'
Avaeryn: 'Have the system give smart warnings that would say "Spell Fireball is linked to X wands/staves/scrolls. These items will also be deleted. Continue?'
Retnur: 'Honestly most of the spells and skills in rom are so similar that I don't see why it doesn't use a form system for the bulk of them'
Quixadhal: 'I want to merge the gsn skill junk into the spell system so it works the same way.'
Retnur: 'They mostly all follow a formula that computes damage, prints some uniform message for the damage dealt, and has a modifier to damage based on level or something else.'
Avaeryn: 'those are ideas that are valid, i think.'
Avaeryn: 'but again, this is from a player/builder/noncoder'
Retnur: 'Hrm'
Avaeryn: 'i actually don't see a problem if you want to release another version down the road with everything stripped'
Avaeryn: 'so the person who downloads it has a functional base that they can add things to as they would like'
Retnur: 'I think I like the idea of having most of the definitions done completely in a table (either dynamic for OLC or just compiled)'
Quixadhal: 'the basic principle is damage formula of damage type + one or more effects applied.'
Retnur: 'We can use an option function type in the table to do additional things beyond some damage.'
Quixadhal: 'you might want to peek over the Smaug people's shoulders.. I think they do somethign along those lines.'
Avaeryn: 'i hate comcast :('
Retnur: 'I don't want to have a preceived notion of how it would work.'
Avaeryn: 'did my last message go through? '
Retnur: 'And I certainly don't want to use their code'
Avaeryn: 'i understand that, Retnur, but could that not be saved for later versions?'
Avaeryn: 'just to have the one version that is solid, stable and full of features but retains the similarities of the old rom'
Avaeryn: 'some people are really into that'
Davion: 'Believe it or not, some people enjoy playing a RoM MUD :)'
Retnur: 'Then I think before we merge any of my changes so far we should get that version out'
Retnur: 'Because a lot of my changes aren't rom-style.'
Avaeryn: 'i, for one, see many versions being released. don't you guys?'
Retnur: 'People who hate C++ aren't going to like the list and iteration system I put in there.'
Retnur: 'Even though it is all C.'
Quixadhal smiles happily.
Quixadhal: 'The key is to get the underpinnings solid.'
Avaeryn: 'that's a decision that you guys should discuss and come to a decision on. since you all are the ones who are doing the coding.'
Quixadhal: 'Once you start layering on top of that, it gets harder to change.'
Avaeryn: 'solid foundation'
Davion: 'It'd be interesting to change this into something more of an API with modules, so one could configure it like some of the more popular webapps'
Davion: 'Pretty hard though when everything is so intertwined.'
Retnur: 'Hrm'
Quixadhal: 'In *theory*, dlsym can allow that, but in practice it's very hard to pull off.'
Quixadhal: 'I remember an old game called xtank that loaded the AI modules on the fly.'
Retnur: 'We couldn't do the whole thing modularly but with some key changes we could make options for all of the underlying systems to be interchanged.'
Retnur: 'Strings, allocator, sockets, etc.'
Quixadhal: 'but ROM (and Diku) wasn't designed with that in mind.'
Retnur: 'No'
Davion: 'Ya'
Retnur: 'That would be a complete rewrite.'
Davion: 'And why would we need optional socket modules?'
Retnur: 'You wouldn't if you used a proper C++ library.'
Retnur: ':)'
Quixadhal: 'I think he was referring to the idea of actually making it a web-enabled app.'
Quixadhal: 'where you'd want sessions instead of socket connections.'
Quixadhal shivers uncomfortably.
Retnur: 'Not really important.'
Retnur: 'But there's some nice C++ libraries out there that let you do every socket configuration option in one class.'
Retnur: 'Not just telnet.'
Retnur: 'And it's all abstracted from the user.'
Retnur: 'Including different protocols.'
Retnur: 'Or using the server as a client to connect to somewhere else.'
Davion: 'I hate to say this, but I gotta crash'
Retnur: '(Text based web browser from inside of the mud for example)'
Quixadhal nods.
Davion: 'Linx and MUDs unite! :D'
Avaeryn: 'night davion'
Quixadhal: 'Thanks for showing up Davion, hope we're giving you enough to read!'
Avaeryn: 'quix has entirely too much energy :P'
Davion: 'lol'
Davion: 'I have an unlimited scroll buffer (probably shouldn't tell people this) so I'll read everything else'
Davion: 'If it's not posted to MB'
Avaeryn: 'it will be posted, davion'
Retnur: 'Mwhahaha'
Avaeryn: 'though i'm a bit slow at times :)'
Retnur: 'Time to start the spam'
Quixadhal: 'Ok, so when I log off I'll set a loop for the spam song! :)'
Quixadhal tickles Davion.
Davion groans loudly.
Davion: 'Stop posting on MudBytes… 116 posts today'
Retnur: 'Is that a lot?'
Quixadhal throws back his head and cackles with insane glee!
Quixadhal: 'It's not ALL my fault!'
Retnur: 'I think it's mostly because I pick a lot of fights on there.'
Davion: 'Well lately we've been hovering around 70'
Davion: 'But since oct 1st, that's a record'
Davion: 'Oct 8 we had 100'
Quixadhal: 'Hmmm, how many are in the RaM compound?'
Davion: 'Hear Ye! Was the first'
Retnur: 'That's as much or more than a lot of main forums on there. :P'
Davion: 'So since oct 2'
Retnur: 'Dikumud in total only has 1,965'
Avaeryn: 'i think it's sad that those who said they would contribute mostly have fallen by the way side'
Retnur: 'So we have well over 1/4th of the total posts on taht entire forum.'
Davion: 'Man, we have almost 15 000 posts, and I've read every single one.'
Quixadhal pats Davion on his head.
Quixadhal: 'No wonder you have a headache…. *grin*'
Retnur: 'More people will probably get on board after it gets going.'
Avaeryn: 'i hope so'
Retnur: 'Nobody wants to be locked into something that isn't going anywhere.'
Quixadhal: 'Yeah, we still look like we're not even QuickMUD yet.'
Retnur: 'And a lot of these projects lack people who actually stick with it.'
Quixadhal: 'I mean, nobody cares about all the under-the-hood stuff… they want chrome. :)'
Retnur: 'I think focusing on builder and admin options and not just coder stuff is important.'
Retnur: 'I started off years ago as a builder.'
Retnur: 'I never had any intention of coding.'
Retnur: 'Until my head coder jumped ship, and I was left holding the bag.'
Davion: 'Oh… Taka'
Quixadhal waves happily.
Davion: 'Right. Sleep'
Retnur: 'I heard from her like once since then but never again.'
Davion sits down and rests.
Retnur waves happily.
Quixadhal: 'I started coding long before bulding was even an option.'
Avaeryn: 'i've always wanted to code but haven't really gotten to understand it like i think i need to'
Quixadhal: 'So, that's why I tend to pooh-pooh away changing area formats and such… I've written so many conversion routines to go from one to another….'
Retnur: 'It took me a few years of outrageous bugs and crashing and slowly learning how to do things.'
Quixadhal: 'I even have a half-finished Diku to lpc converter. :)'
Quixadhal: 'I think the next thing on my plate though, is figuring out how the hell that gsn stuff works.'
Quixadhal: 'Having seperate variables for every skill is just silly.'
Retnur: '*shrug* I can explain it although it's not very good.'
Retnur: 'You define variables in a C file somewhere.'
Retnur: 'Like gsn_kick'
Retnur: 'Then you define a pointer to that variable in the skill table.'
Retnur: '&gsn_kick'
Retnur: 'Somewhere in the code'
Retnur: 'It initializes all of those'
Retnur: 'One time'
Retnur: 'To the array location'
Davion: 'gsn's are easy. You just store the address of the gsn variable, then on bootup it cycles through the table and assigns the int iterator value to the address stored via skill_table'
Retnur: 'So basically instead of having to do some type of lookup'
Retnur: 'You have a variable to use.'
Quixadhal: 'Why not just store the skill number and routine pointer in the table itself?'
Retnur: 'They're completely not needed and mostly only used because of the skill system being segregated.'
Retnur: 'Because the skill system uses command functions.'
Retnur: 'Which is arguably not a good thing.'
Retnur: 'And the spell system uses spell_functions which is proper.'
Davion: 'Well, the command functions use the skill styem, I'd say.'
Retnur: 'In my old rom mud I converted them all over into spell_skill_functions'
Quixadhal: 'Ok, but why pass &gsn_foo instead of &skill_table.skill'
Davion: 'The skill table is mearly an index of values that you can minipulated. Lots of skills don't even have a do_fun'
Davion: 'Like second attack, etc'
Retnur: 'The gsns aren't needed for spells anyways.'
Retnur: 'They intentionally didn't want a gsn for everything.'
Retnur: 'I don't think the gsn system is needed at all.'
Retnur: 'In fact, I scrapped it without any dire consequences.'
Quixadhal: 'It's just strange to me, since my game (Diku Gamma based) has both skills and spells without any such complexity.'
Retnur: 'It's basically a hack'
Retnur: 'Because in the spell functions the gsn is automatically passed'
Avaeryn: 'i think the ideas surrounding the development of muds have gotten a bit more forward thinking'
Retnur: 'In the command functions they aren't.'
Retnur: 'So to check the skill level of a skill it was a hack to make it easier'
Retnur: 'like if (get_skill(ch, gsn_backstab))'
Retnur: 'Whereas in a spell you can do'
Retnur: 'if (get_skill(ch, passed_value))'
Quixadhal: 'hmmmmm'
Retnur: 'It's really a primitive system for making command functions into skill functions.'
Retnur: 'And it has a lot of overhead for someone trying to make new skills.'
Retnur: 'And even understand what the hell is going on.'
Retnur: 'I remember when I first started with rom I had trouble trying to find where the gsns were being initialized.'
Retnur: 'Beecause there's nowhere you can grep to find it'
Retnur: 'It refers to the skill table when it initializes the variables.'
Retnur: 'If you didn't know that'
Retnur: 'It seems like they go uninitialized.'
Retnur: 'Becuase there's pointers on the skill table to those gsn.'
Quixadhal: 'It seems like it would be much simpler to just have all the do_ functions, spell_ functions, and skills share a common API with a flag in the table to say which they are.'
Asylumius has entered the game.
Asylumius gallantly tips his hat.
Quixadhal pokes Asylumius in the ribs.
Retnur: 'I don't see why they even need a gsn as it is.'
Retnur: 'If it's a dynamic system like the spell system'
Retnur: 'It automatically passes the dynamic location.'
Quixadhal: 'so when you try to cast a spell, it skims the table for every entry of type SPELL… the interpreter looks at DO….'
Retnur: 'To whatever function needs it to operate.'
Quixadhal: 'and all those can be read from a disk file at boot time'
Retnur: 'I don't agree with one big table for all of those.'
Quixadhal: 'using dlsym to assign function pointers.'
Quixadhal: 'you can split it up, but then if you come up with a new kind of thing, you need a whole new table and all the support structure.'
Retnur: 'It's already there.'
Retnur: 'There's no reinventing the wheel because it's already in place.'
Retnur: 'We should just merge the hack skill functions into the spell/skill table functions.'
Retnur: 'And remove them from interp.c all together.'
Davion: 'Spells are accessed through 'cast' where skills are just typed though'
Quixadhal: 'presumably you still need some flag to tell that things are skills or spells, right?'
Retnur: 'That doesn't matter'
Quixadhal: 'for exactly that reason.'
Retnur: 'You can add another function at the end of the interp() to do the same thing do_cast does'
Retnur: 'But just for skills.'
Quixadhal: 'right, but I'm saying you need a flag to distinguish what's a spell and what's a skill'
Retnur: 'Considering there is a difference between spells and skills (the difference being spells have a mana cost) you wouldn't need anything like that.'
Retnur: 'That's all details anyways'
Davion: 'Ok, but what about all the skills that simply don't require functions? gsn_*'s are used for those'
Quixadhal: 'skilsl can hava mana costs….'
Retnur: 'What skills don't require functions?'
Retnur: 'Not in rom they can't.'
Davion: 'second attack'
Retnur: 'We adding that gameplay feature?'
Davion: 'third attack…'
Retnur: 'Then you don't include a skill funciton'
Davion: 'dodge'
Retnur: 'NULL'
Davion: 'parry'
Retnur: 'If it's NULL and on the skill table'
Retnur: 'Then it's one of those things'
Quixadhal: 'If I write a skullbash skill for a fighter, it WILL have a mana cost and it will NOT require me to use "cast".'
Quixadhal smiles happily.
Retnur: 'There's not a single one'
Retnur: 'In rom'
Davion: 'Yes, but your objects seems to be to remove the need for the gsn_* hack, but you're only solving half the problem'
Retnur: 'With a mana cost'
Retnur: 'Or support for a mana cost on skills'
Retnur: 'But regardless'
Retnur: 'I'm not solving half the problem'
Retnur: 'You're raising questions that are non-issues'
Retnur: 'I have this implemented perfect in feltain'
Retnur: 'There's no issues with it'
Retnur: 'The main change is do_kick becomes skill_kick and it passes more arguements.'
Quixadhal: 'my point is, spells, skills, and commands functions all work the same way. They're all dispatched function calls.'
Retnur: 'That doesn't mean they should all be part of one table.'
Retnur: 'And no, they aren't all the same.'
Retnur: 'They are similar.'
Retnur: 'If you want to get technical about it you should use polymorphism to change the parameters based on what it is specifically.'
Retnur: 'But lumping htem into one big table is goofy.'
Quixadhal: 'Only in what arguments are passed, in particular, only in that do_functions pass ch and argument, where spells pass ch and other things.'
Retnur: 'It doesn't have to be just what arguments are passed'
Quixadhal: 'they're all void.'
Retnur: 'That's a preconception of how the admin wants the gameplay to be.'
Retnur: 'I think skills and spells should have multiple skill algorithm functions'
Retnur: 'And a command function wouldn't.'
Quixadhal: 'That's fine… but how are they dispatched differently?'
Retnur: 'They're dispatched differently because a skill and a spell could be completely independant from a command.'
Retnur: 'It doesn't even have to be dispatched.'
Retnur: 'A skill doesn't even have to be a command.'
Quixadhal: 'the only reason we HAVE a table is for dispatching.'
Retnur: 'They're apples and oranges.'
Quixadhal: 'if you want to call spell_fireball, you just call it.'
Retnur: 'There's plenty of things on the skill table that isn't dispatched.'
Retnur: 'In fact, all of the skills are on that table'
Retnur: 'And there's no dispatching from there.'
Quixadhal: 'Then why are they there?'
Quixadhal: 'What ever uses their table entry?'
Retnur: 'Because it's a table that defines skills and spells'
Retnur: 'Not input commands'
Retnur: 'I don't know why someone would want to parse an even longer table with arbitrary data every time someone type "north" anyways'
Retnur: 'Some of these muds get 300 spells and skills and a few hundred actual commands. Wouldn't that be fun to look through for as they spam "kick"'
Quixadhal: 'wouldn't it be pretty trivial to code a btree or hash lookup for the skill/spell/command name? I'm surprised it doesn't already.'
Retnur: 'THat's not trivial'
Retnur: 'THat's a major change.'
Quixadhal: 'nope, not at all.'
Retnur: 'Yes, it is.'
Retnur: 'Plus it's just not a good idea anyways'
Quixadhal: 'You build the tree at boot time after the table is assigned.'
Retnur: 'Why do you want every time you mess with a spell ahving to recompile everything?'
Retnur: 'Since you'd be messing with interp'
Retnur: 'Which is used everyhwere'
Retnur: 'There's a reason it's all segregated. Because spells aren't commands.'
Retnur: 'And commands aren't spells.'
Quixadhal: 'in stock ROM, you can't change ANYTHING without recompiling.'
Retnur: 'Yeah you can.'
Quixadhal: 'how do you add a new gsn variable without recompiling… or a new spell_function, or a new do_function?'
Retnur: 'If you set up all of the dependancies in your makefile you can't.'
Retnur: 'You don't have to recompile everything to add a new spell.'
Retnur: 'You do to add a new do_function'
Retnur: 'Not to mention, they juts aren't the same thing.'
Quixadhal: 'You're just nitpicking now…. compiling takes what… 2 minutes? Unless you're on a 386 still?'
Retnur: 'Arguably they should have a different routine for even parsing the string before dispatching anything'
Retnur: '2 minutes instead of 10 seconds when I am noob coder trying to get a spell to work'
Retnur: 'Adds up'
Quixadhal: 'get up and get some coffee…. your future varacose veins will thank you.'
Retnur: 'Plus I don't even think they should have functions to dispatch.'
Quixadhal: 'Anyways, using dlsym you don't have to recompile interp at all.'
Retnur: 'I think it's funny that instead of actually moving away from the ridiculous coding practice of putting skills in the interp table'
Retnur: 'We're talking about putting EVERYTHING in it'
Retnur: 'We going to put all of the OLC in there too?'
Retnur: 'Right now they're all in their own tables.'
Quixadhal: 'I think it's funny that you'd prefer to maintain seperate automatically generated entries that all do the same thing.'
Retnur: 'Debatably those should be in there more than skills and spells which may not even have a function.'
Retnur: 'They don't do the same thing'
Retnur: 'Maybe in your game they do'
Retnur: 'In stock rom they don't, in mayn muds out there they don't'
Retnur: 'I don't see why we have to limit it to the concept that they should do the same thing.'
Retnur: 'When clearly they are different things.'
Quixadhal: 'I type kill, it scans for do_kill, it scans for skill_kill, it scans for emote_kill… it could scan for spell_kill, but I didn't use cast.'
Quixadhal: 'in any case, it will end up calling a function pointer with arguments, or telling me there's no such thing.'
Retnur: 'It doesn't even have to be something with a function pointer'
Retnur: 'And the idea that everything should be a uniform function pointer'
Retnur: 'Is sloppy'
Retnur: 'Let's just make a massive table'
Retnur: 'And anytime we decide we want to add a field to skills'
Retnur: 'Let's have to go and update it for 500 entries'
Quixadhal: 'you'd rather have lots of custom API's to learn?'
Retnur: 'Godo thing everyone knows perl'
Retnur: 'Or every time we want to add a class to the game, we have to go in and set 500 fields to NULL in the table for the new class which didn't matter for OLC commands.'
Retnur: 'And instead of writing command functions that only have the arguments they use'
Retnur: 'Let's pass a lot of useless fields.'
Asylumius nods at Retnur.
Quixadhal: 'So you'd rather embrace chaos and have 500 interpreter passes for every possible permutation of dispatched function that might be called.'
Asylumius: 'I haven't been paying attention, but all that sounds like no fun :P'
Retnur: 'It's called direction.'
Quixadhal: 'Hmmm, check_skill(foo) failed, let's try check_noargument_skill(foo)… how about check_nofunction_skill(foo)?'
Retnur: 'If you're in an editor you get directed to the correct, small table'
Retnur: 'There's not 500 interpreter passes'
Retnur: 'That's what we're talking about doing with your system, and checking flags for every one.'
Quixadhal: 'anyways… why are we talking about hand-editing tables? Did I not mention dysym about 500 times?'
Retnur: 'Yeah, let's just get even sloppier.'
Retnur: 'I don't even see why we're bothering with tables.'
Quixadhal: 'All the NON-function pointer crap can be loaded from files and stuffed into the table along with the function pointer from dlsym.'
Retnur: 'Let's just make something autogenerate it based on functions we have defined.'
Retnur: 'If it finds that reg ex'
Retnur: 'It just makes us a table in binary.'
Retnur: 'We can run that script every time we run the makefile'
Quixadhal: 'I'm going to just keep repeating dlsym.'
Quixadhal: 'or are you that dead set against having all skill functions start with skill_?'
Quixadhal: 'since currently, all interpreter ones start with do_, and all spells start with spell_….'
Retnur: 'I'm dead against'
Retnur: 'Having all of this uniform'
Retnur: 'Because this is already limiting my ideas with what I would do with the codebase on a mud of my own.'
Quixadhal: 'how?'
Retnur: 'Because I don't even want these functions'
Retnur: 'I want an algorithm function, and I want an optional function.'
Retnur: 'Which has nothing to do with even dispatching'
Retnur: 'It's all generically generated.'
Darva has entered the game.
Quixadhal: 'so… your user types "barf"… how does it figure out what to do with it?'
Retnur: 'And I frankly hate the idea of throwing the kitchen sink at anything that is bound to a string.'
Retnur: 'Okay, so I guess we shoudl put anything that we check against a string into a single table'
Retnur: 'Any type of lookup'
Retnur: 'Even if it isn't dispatching to a function'
Retnur: 'Because that's what you are saying'
Quixadhal tickles Darva.
Darva bows deeply.
Quixadhal: 'I'm asking… if you don't build a dispatch table of SOME kind, how do you get from user input of "barf" to something happening?'
Retnur: 'Like I've said a million times'
Retnur: 'Direction'
Retnur: 'You have direction based on a state.'
Retnur: 'You don't just throw it into one table'
Retnur: 'Are we going to put all of our player creation into this table too?'
Retnur: 'Just have one massive table to parse'
Retnur: 'All full of duplicate fields'
Retnur: 'That aren't used for most of the things in it'
Retnur: 'The clearest cut case of this not being acceptable is the idea that even spells should be plugged into this table.'
Retnur: 'When they are part of the command "cast"'
Quixadhal: 'Are you assuming every interpreter call will walk down the entire table in linear order or something?'
Retnur: 'Regardless of how you do it, it would have been done more efficiently broken up'
Retnur: 'IT doesn't matter how you do it'
Retnur: 'ANd managing it becomes even harder as you add more things.'
Retnur: 'yes, you can make the argument that you can redesign it to make it acceptably efficient to span the table.'
Quixadhal: 'again…. what's to maintain. it's in files that are managed by OLC.'
Retnur: 'But you can't really maket hat argument when you're spanning the able for something the table isn't sorted by'
Retnur: 'Which a lot of the fields may be null on'
Retnur: 'Again with the other ideas I find to be ridiculous, go ahead and do it if that's what you really want.'
Retnur: 'When we get stuff released I'll release my own version concurrent.'
Quixadhal: 'so, you have broken up tables… which are automatically generated from files and dlsym lookups instead of a single table.'
Retnur: 'No, I would probably put character creation, normal commands, and OLC commands all in one table.'
Retnur: 'Then I'd have spells and skills in another bridged with possibly dynamically created spells/skills from generic templates'
Retnur: 'I don't share in the idea you need a spell function for every spell'
Retnur: 'I think if you have 10 spells doing the same thing with different modifiers you only need 1 function.'
Quixadhal: 'I think it's a waste to have code doing that when you could just have stub functions call a common base with different parameters, if they really share the same implementation.'
Retnur: 'Okay, we'll I'm not going to waste my breath anymore pointing out that they don't share the same implemenation.'
Quixadhal: 'so spell_fireball and spell_firepopcorn both call spell_damage(type_fire, custom_message).'
Retnur: 'My plan of attack would be first a generic spell function that returns a pointer to a list of attributes.'
Retnur: 'Then an algorithm function that accepts that list.'
Retnur: 'Then matching up any spell function with any algorithm funciton.'
Retnur: 'But that's all beside the point.'
Darva: 'You sound more like you plan on writing an entirely different code base, instead of improving on rom.'
Retnur: 'Naw, the spells and skills would still do all of the default things that rom does'
Retnur: 'Just it would let the code add more fast.'
Retnur: 'No writing functions needed.'
Retnur: 'If the code already exists.'
Quixadhal: 'regardless, you still need something to translate "cast 'fireball'" into calling your functions with the right modifiers.'
Retnur: 'But aside from all of that, the skills and spells and other future systems, wouldn't have to have even syntax'
Retnur: 'second attack'
Quixadhal: 'my point is, spell_fireball() can do that just fine.'
Retnur: 'does not accept input'
Retnur: 'third attack'
Retnur: 'does not accept input'
Retnur: 'they are not the same things'
Quixadhal: 'It can… it can just throw it away.'
Retnur: 'they are means of defining spells and skills'
Retnur: 'Yeah'
Quixadhal: 'it doesn't USE input…. do_quit doesn't take parameters either.'
Retnur: 'And you could put AFF_BLIND on your interp table'
Retnur: 'and throw away the parts that don't say its a flag'
Retnur: 'let's just use that table for EVERYTHING'
Retnur: 'cause that's what you're saying.'
Retnur: 'Any lookup we have in the game from a string'
Retnur: 'Let's put it on 1 single table'
Quixadhal: 'You just don't like the idea, so you're trying to go over the top to make your point.'
Retnur: 'I don't think that's over the top.'
Retnur: 'If you were suggesting we separate accepting input'
Retnur: 'From skills/spells attributes'
Retnur: 'I would be more inclined to agree'
Retnur: 'But you're not'
Retnur: 'I don't like the idea of having to deal with every type of input at large with working on differing systems.'
Retnur: 'That's a pretty big incentive for me as a developer just not to worry about it and leave things as they are.'
Retnur: 'Or bust up the tables'
Retnur: 'Guess that comes full circle.'
Quixadhal: 'I don't see why two tables, one for spells/skills, and one for do functions, is any easier to maintain when they both get build by code.'
Retnur: 'I just said that my spell/skill function might not get built by code in the first place.'
Retnur: 'With the setup I was talking about you'd have the same algorithm functions and attributes functions working on multiple table entries in different combinations.'
Quixadhal: 'you're chaffing at having to put an extra API layer between your implementation and the dispatcher?'
Retnur: 'That's part of it, but secondly, it wouldnt be possible to autogenerate that.'
Quixadhal: 'It would, but you'd have to know the parameters that "fireball" would use… the generic spell_fireball() wouldn't use your routines to their full potential perhaps.'
Retnur: 'I don't intend to have a spell_fireball'
Retnur: 'At all'
Retnur: 'It would be spell_damage, and spell_algorithm_fire, or something similar'
Retnur: 'But both of those two functions may be reused down the line'
Quixadhal: 'yes, so you said. And 95% of the people we're writing the game for would write spell_fireball() to call spell_damage with the right parameters to do that.'
Retnur: 'I'm not sure that would even be possible.'
Quixadhal: 'There's nothing stopping you from having your own spell system that does MORE than a limited API allows'
Retnur: 'The system I'm talking about doesn't work like that.'
Quixadhal: 'Only because you won't consider that it could. Regardless, that's game mechanics.'
Retnur: 'There's no way of doing a spell function for specific spell. You write the algorithm and generic purpose function and the code all takes care of the rest.'
Retnur: 'That's not game mechanics.'
Quixadhal: 'Oh yes it is.'
Retnur: 'Every spell I define would match rom spells'
Retnur: 'The only difference is it wouldn't take 100 spell funcitons to make 100 spells'
Retnur: 'IT would take about 10'
Quixadhal: 'and what does that buy you? for ROM, not for your own game?'
Retnur: 'It buys the ability for people to make new spells and skills at a rapid pace, or tweak old ones at a rapid pace'
Retnur: 'Or just change the entire system'
Retnur: 'Again at a rapid pace'
Retnur: 'This is a codebase, that's what we're supposed to keep in mind'
Darva: 'It sounds like it would lower the available complexity of spells though.'
Quixadhal: 'IF they understand and want to use your system… rapid for you, not so rapid for the guy trying to figure out why "fireball" doesn't map to any spell_fireball function.'
Retnur: 'It's not a gameplay issue because the gameplay stays exactly the same. The only difference is how the coder goes about crafting additional spells.'
Retnur: 'Well, that may be true Darva but to overcome that you could basically do whatever you wanted with your spell_type and algorithm combo'
Retnur: 'So basically if you had a spell that truely was unique'
Quixadhal: 'If I want to make an "iceball" spell, I'll go hunting for what happens when I do cast 'fireball'. Right now, that's easy… it finds spell_fireball() and away we go.'
Retnur: 'You could still custom make those two functions to do it'
Retnur: 'Yeah, and copy and paste the whole thing'
Quixadhal: 'If I want to add a spell to turn lead into gold, how would I figure out how to do it?'
Retnur: 'Go add definitions'
Retnur: 'That might be easy enough to add spells at a moderate, not fast pace, but it certainly isn't good for people wanting to redo the entire system.'
Quixadhal: 'How about monsum one, there's a classic that isn't included in ROM.'
Darva: 'Or create a spell that temporarily places your vision in another room? It shounds like you're only taking damage spells into account.'
Retnur: 'This has turned into an argument of "good enough" vs "better"'
Retnur: 'No, that's why it uses an algorithm and a type function'
Retnur: 'You can make the type do whatever you want'
Darva: 'so they type is just another word for "spell function" ?'
Retnur: 'It's a spell template function'
Retnur: 'If you want to get technical'
Retnur: 'It takes the template from the algorithm that can change.'
Retnur: 'The most common way would be a spell that is a damage spell.'
Retnur: 'Then the difference between this damage spell and another is your algorithm you use to produce the attributes'
Retnur: 'Right now you can't reuse spell_fireball'
Retnur: 'That's one function for one spell'
Retnur: 'This system lets you reuse both algorithms and spell templates.'
Retnur: 'And if you don't already have one or the other, you can easily make a new one in a few lines of code.'
Retnur: 'If you decide you need a spell that does something you don't already have, then just add a new spell template'
Quixadhal: 'one parameter is the type of spell (area affect damage, single target, translocate, etc), the other is the particulars (ice, fire, teleport)… but it would not be obvious how to manage that if you want something that isn't already given as an example.'
Retnur: 'I don't see why it wouldn't be obvious.'
Darva nods.
Quixadhal: 'I like the idea, but I've been programming for 20 years… most of the folks using our code probably won't have that advantage.'
Retnur: 'A spell_template.c file and a spell_algorithm.c file.'
Retnur: 'Add to the templates for totally new spells'
Retnur: 'Add to the algorithms to make new spells that do the same things. Like damage, poison, buf effects'
Darva: 'I like the idea, once i understood it, but I'm a bit afraid it'll lead to generic spells.'
Darva: 'Like when you log into a mud and every class has a santuary spell, but it's called something different.'
Retnur: 'Yeah, because how it stands rom is totally unique when it comes from their spell to spell.'
Retnur: 'Fireball and magic missile are really differnet on the inside.'
Darva falls down laughing.
Quixadhal: 'Actually, they are if you follow the D&D rules. :)'
Darva snickers softly.
Retnur: 'Okay, then write a new template'
Quixadhal: 'but few muds do… party damage annoys most players.'
Retnur: 'It works with people who want totally unique spells too'
Retnur: 'It works with people who want a dynamic spell creation system.'
Retnur: 'It works with people who want their players to design balanced spells.'
Quixadhal: 'It's just that there are quite a few spells that the second componant will be generic for.'
Asylumius: 'I hope someone is logging :('
Quixadhal: 'If I want a polymorph spell, I'm not sure what I'd put in the algorithm side.'
Retnur: 'The polymorph would be the template'
Retnur: 'The algorithm returns a list of attributes'
Retnur: 'So it depends on what you want different.'
Retnur: 'An attribute may be'
Retnur: 'What you polymorph the targe tinto'
Retnur: 'You might want a sheep for this spell'
Retnur: 'And a turtle for another'
Quixadhal: 'Typically, I'd want a random choice from a list (or level range, or similar)'
Retnur: 'Well then use the algorithm that does that'
Retnur: 'It wouldn't be hard to define one'
Retnur: 'But regardless, I'm not really pushing to have this system put into place. I can tell there's some opposition to it.'
Retnur: 'It's not tested and I've never used it. It's just something I'm thinking up on the fly.'
Quixadhal: 'With regards to the parser, I think you'd still be able to have a spell_fireball(), it just would call your code with the appropriate area-affect template and fire-damage algorithm.'
Retnur: 'That defeats the purpose of my code'
Retnur: 'I don't *want* to have to make a new spell for every template and algorithm combination'
Retnur: 'I want to add 1 entry to the table and be done'
Quixadhal: 'No it doesn't… it keeps the ease of functionality.'
Retnur: 'No'
Retnur: 'It keeps your system from breaking'
Retnur: 'Which obviously has some loopholes if it can't do that without having a different function for every element on the table.'
Quixadhal: 'well, if you can't see how those work together, I'll repeat my earlier question…. I'm standing in a room on your game and type "cast 'fireball'", how do you determine what (if anything) happens?'
Quixadhal: 'You may replace "fireball" with any spell name you like, of course.'
Retnur: 'I find cast on the command table. I dispatch "fireball" to my spell handler. My spell handler figures out with template and algorithm to put together to make fireball work.'
Retnur: 'Or it figures out if fireball can't work, without dispatching anything.'
Quixadhal: 'Ok, so you are just moving the parsing down a level… you have a second interpreter layer.'
Retnur: 'I'm done with this conversation.'
Retnur: 'This is talking in circles.'
Retnur: 'That's n ot moving it down to a second layer.'
Retnur: 'That's what you call asking me a question and expecting a certain answer to make a point.'
Retnur: 'The truth is I'm not parsing that string at ALL like I do a command'
Retnur: 'In fact, I'm going to parse it backwards'
Retnur: 'Why?'
Retnur: 'Becuase I don't want you to have to type'
Retnur: 'cast "something something" something'
Retnur: 'I want you to be able to cast'
Retnur: 'cast mass protection from cold retnur'
Retnur: 'c m p f c r'
Retnur: 'c mass prot r'
Retnur: 'Or any other combination'
Quixadhal: 'Sure sounds like one to me. Your spell handler is parsing "fireball" and calling code to do something, or returning an error.'
Retnur: 'That's not the same as the parser used on the main command function.'
Retnur: 'Like I said, I'm done with the conversation. I've been coding for long enough to know what my needs are without someone else telling me.'
Quixadhal: 'Well, you aren't coding just for YOUR needs…. hence the reason this is a cooperative project.'
Retnur: 'What a ridiculous thing to say.'
Retnur: 'Maybe someone out there has similar needs.'
Retnur: 'So instead of coding for YOUR needs'
Retnur: 'Maybe you should think about that.'
Quixadhal chuckles politely.
Retnur: 'My system doesn't limit any possibilities. Your entire argument started out that yours doesn't either.'
Retnur: 'Now it's boiled down to "Your needs are selfish"'
Retnur: 'Forgive me for wanting to do something different.'
Quixadhal: 'You're talking about changing the fundamental way spells work, I was simply trying to merge data structures. Forgive me for trying to keep a little ROM in the code. *shrug*'
Avaeryn: 'i can feel the love, can you?'
Quixadhal grins evilly.
Retnur: 'Even if we don't do my spell system, which was never the point'
Retnur: 'THe point was maybe someone wants to do something different than rom does'
Quixadhal: 'At last neither of us has started screaming obscenities… my old boss used to do that.'
Retnur: 'And merger doesn't allow that type of flexibility without additional things to make it work. Like defining a spell_fireball wrapper'
Retnur: 'I hope people realize I'm not getting that mad when I have a heated debate.'
Quixadhal claps at Retnur's performance.
Quixadhal: 'I wish I had my grandfather's skills at arguing though…'
Quixadhal: 'Many's the time I'd walk out on him and my father arguing, and come back an hour later to find them still arguing the same topic, but they'd switched sides.'
Retnur: 'heh'
Quixadhal: 'I'm not quite sure if either of them realized it too.'
Retnur: 'My parents were not religious, not political, and generally never argued or held a strong opinion on anything in their life.'
Retnur: 'Needless to say, I never really adored that about them.'
Retnur: 'What other wacky ideas do you have that I need to debate? ;)'
Quixadhal: 'well, I think it's safe to say that gsn's are going to merge with spells, once I figure out how to do it without breaking anything. THEN spells/skills can be mutated into an OLC friendly system.'
Retnur: 'I seriously don't think we need gsns at all.'
Retnur: 'Even if we didn't make a big change'
Quixadhal: 'I only really care that the area files eventually store them by name, rather than number.'
Retnur: 'They're really just a hack to store the array position'
Asylumius: 'What will people use to keep track of various affects, timers, etc if GSNs are gone? (Assuming the affect isnt from a spell)'
Retnur: 'Which if you wanted to you could get by another means anyways (not that you even need to)'
Quixadhal: 'That way you don't have to be paranoid about mucking up your objects by changing skills'
Retnur: 'Well, the gsn is just a number representing the array location.'
Retnur: 'They should probably be using a string or something more solid'
Retnur: 'If the array shifts that gets broken anyways.'
Retnur: '(From area files)'
Quixadhal: 'yep, Diku did fine without them.'
Asylumius: 'It would be nice if the code could do affects without having to have an entry in skill_table'
Retnur: 'But even if you wanted to produce a gsn you could without having the variables ou tthere'
Quixadhal: 'really, gsn's are the same spell numbers the spells use, they just don't have #defines'
Retnur: 'You could'
Retnur: 'You could do affects by name'
Asylumius: 'so I could just say you have broken leg, broken arm, cancer, etc. dynamically'
Retnur: 'right, you could do that actually'
Asylumius: 'the way it works in ROM is okay.. but its sloppy and breaks easily and stuff.'
Retnur: 'Gsns are just a hack really.'
Retnur: 'Mostly because they put the spells as actual command functions'
Retnur: 'And had no way to pass the parameters they neeed'
Retnur: 'Spells automatically pass that parameter.'
Retnur: 'Skills could too.'
Quixadhal: 'Diku Gamma had seperate cast_foo and spell_foo componants.'
Asylumius: 'did you guys decide what do to about that? (I've been MUDding and cant scroll up)'
Quixadhal: 'I believe cast_foo parsed arguments and verified that it could be cast… then spell_foo did the actual work.'
Asylumius: 'would be nice if RaM did a better job of handling mob casting, obj casting, etc.'
Quixadhal: 'and I'm pretty sure all the skills just worked like spells, but were listed as skills for the interpreter so it knew which ones worked with cast.'
Retnur: 'How rom does it is they have a single function to cast any spell, it determines if it has the right arguments and such'
Retnur: 'Then it passes the arguments to the spell funciton.'
Quixadhal nods.
Avaeryn: 'hello to all i missed coming in'
Retnur: 'And it just does the same thing with obj casting spells…just clones the entire function'
Retnur: 'ANd mob spells *shutters*'
Retnur: 'It uses like flags and some autonomous system for that'
Quixadhal: 'So it sounds like just tweaking the skills so they get all the info spells get, and thus can use it would solve the gsn stuff.'
Retnur: 'That has to be expanded on'
Retnur: 'It would'
Quixadhal: 'I think passing a couple more arguments might be useful… there's this "tar_object" hack in magic.c that annoys me.'
Retnur: 'Except for one problem'
Retnur: 'For some skills'
Retnur: 'Like second_attack'
Retnur: 'Currently the gsn is used in arbitrary places'
Retnur: 'That could be fixed though'
Retnur: 'if (get_skill(ch, "second attack")) instead of the gsn'
Retnur: 'Or get_skill_by_name in C'
Retnur: 'Since we can't overload it'
Quixadhal: 'Right… if worse comes to worse, dummy functions can always
16 Nov, 2008, Sharmair wrote in the 2nd comment:
Votes: 0
Quote
Quixadhal: 'Right… if worse comes to worse, dummy functions can always

Did the meeting really end in mid sentence, or did you hit some kind of text size limit and
there is more you have not posted?
16 Nov, 2008, quixadhal wrote in the 3rd comment:
Votes: 0
My guess would be one of the many disconnects Avaeryn's been having with her beloved ex-ISP, Comcast. I know we talked a bit more about the idea of utilizing the effect system more heavily. One idea I rather liked was using affects to handle ALL combat damage. So, instead of just deducting hit points from a max value, you'd actually stack affects that were negative hit point buffs. Thus, when you heal an injury, you'd remove one of those affects. It would make for a much more interesting combat system, since clerics wouldn't just have "cure light wounds", they'd have "cure bleeding", "cure trauma", "cure burns", etc….

I know we ended up futzing around with SVN's merge feature, which still needs a bit of investigating. I actually meant to do that this week, but got slightly busy with real-life (it's snowing already… I still have to put up a couple of window seals and dig out the snowblower from the bowels of the garage).
16 Nov, 2008, Avaeryn wrote in the 4th comment:
Votes: 0
Sharmair said:
Quote
Quixadhal: 'Right… if worse comes to worse, dummy functions can always

Did the meeting really end in mid sentence, or did you hit some kind of text size limit and
there is more you have not posted?


Thanks for bringing that up. There was more. No idea what happened.

<start rant>
And there are bits and pieces of the meeting that are missing due to Comcast's inability to maintain a stable connection. One reason I have said Buenos Dias to the company and their shoddy service.
<end rant>

Here ya go, the rest of the meeting log. And my apologies for not realizing it was missing from the first post.



Quixadhal: 'Right… if worse comes to worse, dummy functions can always be used (skill_second_attack() which just called multi-hit, or whatever).'
Retnur: 'Inside of get_skill it can do a full lookup to find the position on the table'
Retnur: 'However'
Retnur: 'It can store common lookups in memory inside of that function'
Retnur: 'So things that are actually called really often, like second attack'
Retnur: 'could already have the value on hand'
Asylumius: 'random thought'
Asylumius: 'Can we improve the way it handles flags and affects?'
Retnur: 'I'm almost certain we are.'
Asylumius: 'so like.. say I'm a race with a flag'
Retnur: 'First requirement in my mind is that flags not have some predestined number before the coder runs out of them. Like 32.'
Asylumius: 'rom doesnt handle things having flags and smartly removing them'
Asylumius: 'so things with inherent flags can be "dispelled" and whatnot'
Retnur nods at Asylumius.
Quixadhal: 'Oh, you mean save the state so when you remove an affect it doesn't nuke too much?'
Retnur: 'That's a major problem in rom.'
Asylumius: 'kinda'
Asylumius: 'Same with stats'
Retnur: 'Well'
Asylumius: 'rom is easy to break with the whole mod_stat and whatnot'
Retnur: 'Here's the thing, we can make some easy changes the the affects list code which holds flags'
Retnur: 'To define if things are indeed racial'
Retnur: 'Or perm'
Retnur: 'Etc'
Quixadhal: 'yes, a stack based affect set might work… a bit of work though.'
Asylumius: 'er. going afkish again. gotta RP some with dude'
Retnur: 'Affects in rom are in a linked list that can modify stats or flags.'
Retnur: 'So it's as easy as just giving a new type of affect node that isn't subject to any type of dispelling'
Quixadhal: 'although when you dispel one in the middle of the list, you should recalculate the subsequent entries.'
Retnur: 'Why is that?'
Quixadhal: 'Oh, I'm just thinking aloud.'
Asylumius: 'might also be fun to attach function pointers to affects for events like tick, when it wears off, when its dispelled, etc'
Quixadhal: 'I was thinking of storing previous states with the effect data.'
Retnur: 'That would be easy to do.'
Asylumius: 'so I can have my affect do damage every tick without having to hard code something in update'
Retnur: 'Right now it does things when it wears off but it bases it off of the skill table'
Retnur: 'Like a const string message for when it wears off'
Asylumius nods.
Quixadhal: 'we could probably add somthing to chain affects… so when one wears off it could apply another'
Asylumius: 'yeah, i'd like to just have it call like.. timebomb_end that blows you up when the tick timer reaches 0'
Asylumius: 'that'd be neat too'
Darva: 'One thing i added once and liked was smaller time scale affects. Ones that tick on the combat_pulse instead of the general tick.'
Asylumius: 'just get rid of the need to hard-code stuff in places like update.c'
Quixadhal: 'so one that does 10hp damage a tick and then 50hp damage on termination would actually be split up into several affects that chain each other.'
Retnur: 'I thikn it may be easier just to have a affect_function slot on the table for when the affect ends, on combat update, on tick update, etc'
Retnur: 'particularly if you wanted a singular node to do a variety of things.'
Asylumius: 'might also be good to have a function initialize the affect'
Retnur: 'You might want it to cause whoever dispels it major damage, have a chance of blinding your enemy every round, and every tick deal a little damage to you for having it on'
Asylumius: 'so all this new stuff isnt NULL'
Asylumius nods at Retnur.
Asylumius: 'Those all sound like the kinds of things I was imagining'
Quixadhal: 'Am I right in thinking that gsn's use the same skill numbering that spells do, but that they assign them by looping somewhere above MAX_SKILL at runtime?'
Retnur: 'Yes, they do.'
Retnur: 'They are all assigned based on the pointers in the skill list'
Retnur: 'It runs through the list and if a node is pointing to an int in the gsn slot'
Retnur: 'It sets that int to the position in the elemnt'
Quixadhal: 'So, as long as we reference them by name in the area files (and player save files), the numbers only matter in that they're distinct.'
Retnur: 'If it's a NULL pointer it ignores it'
Retnur: 'Precisel.'
Quixadhal nods.
Retnur: 'You just have to have a way to convert string to actual data.'
Asylumius: 'allowing for name overrides in affects might be nice too'
Retnur: 'Which isn't hard.'
Asylumius: 'so an affect doesnt have to be in skill_table (for its name)'
Retnur: 'It would probably be really easy to make a dynamic flag system'
Retnur: 'That lets you set a flag by string'
Retnur: 'If it isn't a defined flag, make it one for the time being'
Quixadhal: 'That's actually what were talked about waaaaay back in the beginning, but with regards to your bit system. :)'
Retnur: 'Yeah'
Quixadhal: 'a name to bit number lookup… a name to affect lookup, same idea.'
Asylumius: 'brb. need Arbys'
Quixadhal: 'mmmmm, beef and cheddar….'
Retnur: 'I think we need a major revision of the affects system. Some of it is good, some of it is un-needed.'
Retnur: 'An example of one of the silly things is'
Retnur: 'You can set an effect based on gsn or flag'
Retnur: 'So it's possible to have them affected by any spell/skill you can lookup'
Retnur: 'OR any flag from the table.'
Retnur: 'A lot of people used that to the advantage'
Retnur: 'Because they would use a skill/spell slot on the table to make people affected by things'
Retnur: 'Like "spell_haste" instead of "AFF_HASTE"'
Retnur: 'Obviously, you'd think spell_haste would set the AFF_HASTE flag if you designed it like that'
Retnur: 'But many times it would just set the gsn of spell_haste'
Quixadhal: 'ahhh, and you'd have to then check both.'
Quixadhal: 'ugh.'
Retnur: 'And the code worked in parellel with the ch->act'
Retnur: 'So you had to look through the affect list to see if it had one of those set'
Retnur: 'And then you had to look in the affects variable'
Retnur: 'Hell, they might have both set.'
Quixadhal: 'hmmmmm'
Retnur: 'I rather like the affects list'
Retnur: 'Because it lets you do a lot with it.'
Retnur: 'Right now it uses the same thing for affects on objects too'
Quixadhal: 'I'm wondering if affects would do the entire job of bits, assuming you had ones that were permenant'
Retnur: 'As on characters.'
Retnur: 'They would'
Retnur: 'The reason they aren't used like that'
Retnur: 'Is the considerable CPU requirement of spanning the affects list everytime you want to know if an affect is set.'
Retnur: '(Although I don't know for a fact that it would be that much more)'
Quixadhal: 'right, and it would have made the area files even uglier.'
Quixadhal: 'remembering that they were all hand-edited until OLC. :)'
Retnur: 'However'
Retnur: 'This is something to remember'
Retnur: 'You can have multiple bits set in a single affects node'
Retnur: 'So we wouldn't need to have 20 affects nodes to represet them having 20 affects set'
Retnur: 'Normally they are used to tie does affects to a single source'
Retnur: 'Like'
Retnur: 'If you had 10 racial flags'
Retnur: 'One node could contain them all'
Retnur: 'If you had 5 affects from different spells'
Retnur: 'Generally all of those affects would be in different nodes.'
Retnur: 'Then if some how you managed to dispel their racial flags, which shouldn't be possible'
Retnur: 'You would remove all 10 flags.'
Quixadhal: 'right, we'd need a couple of new affect flags, as it were.'
Retnur: 'The affects nodes are used for more than just flags though. They are used for stat bufs, all kinds of stuff like that.'
Quixadhal: 'ones that can't be dispelled, but are still timed… and ones that are inherant.'
Retnur: 'I don't see why we couldn't just expand on that system and add anything we needed to associate there.'
Retnur: 'Like functions to call on tick, functions to call on destroy, on create, on combat round, etc'
Retnur: 'It could even be tied into an event handler really easly, defaulting to now.'
Retnur: 'If you wanted to actually have a timed process that is.'
Retnur: 'Example: This buf causes you to drain mana equal to the amount of damage divided by 10 that you have taken, every 15 seconds of combat'
Retnur: 'Far more interesting things than stock rom, anyways.'
Quixadhal nods.
Retnur: 'But as far as holding the flags variable on the chardata itself and inside of the affects list'
Retnur: 'I don't see it needed.'
Retnur: 'I think the lookups are fast enough'
Retnur: 'Especially if we condensed the affects.'
Quixadhal: 'It would probably be boiled down to function_on_apply, function_on_tick, function_on_exit.'
Retnur: 'Or we could control the data better at least.'
Retnur: 'Instead of the raw flag'
Retnur: 'We could just associate it with the affects_list'
Retnur: 'Have that list keep up with what is set inside of it.'
Retnur: 'So instead of spanning the list there is a variable it keeps up with automatically that you can check against which basically is the same as "What is set inside of this container"'
Retnur: 'It's the same thing but we don't want people having raw access to that variable since it can be changed improperly (and is) in stock rom'
Retnur: 'Like the racial flags.'
Retnur: 'I don't think it even gives the character an affect.'
Retnur: 'Which the system was designed for'
Retnur: 'It just sets the raw flag'
Retnur: 'So instead of going into the list and seeing if they have a racial affect node you have to check against he race table to see if the flags they have set are racial or not…every time you want to remove a flag.'
Quixadhal: 'yep, I remember the old code that used to have to unequip and remove all your gear to figure out your base stats.'
Retnur: 'Yeah, I cnat remember of rom is like that or not.'
Retnur: 'But it could be designed a different way.'
Quixadhal: 'because the stat variables only reflect the current state.'
Retnur: 'Yeah, which can cause problems pretty easily.'
Retnur: 'It makes it easy to accidently not take away stats in all cases.'
Retnur: 'Or give stats for that matter in all cases.'
Quixadhal: 'Anything that can be modified should probably have an original and modified variable, just to avoid those kinds of bugs.'
Retnur: 'I think the answer would b e putting them into the affects nodes.'
Retnur: '+10 hp could be an affect.'
Quixadhal: 'You can then recalculate the modified one if you change affects.'
Retnur: 'Where did the affect come from? a single piece of eq'
Quixadhal: 'sounds worth some research…. if affects can replace the bit system without killing performance, I'd think it a pretty good boost to flexibility.'
Retnur: 'Yes.'
Retnur: 'Instead of affects being a linked list'
Retnur: 'It could certainly be a balanced binary tree.'
Retnur: 'Which could help a lot when looking for a single spell affect.'
Retnur: 'But I don't know'
Retnur: 'That may not be worth while'
Retnur: 'Since it seems those affects nodes get set and removed quite often'
Quixadhal: 'or a priority queue, with buckets ordered by expiration time.'
Retnur: 'That's also easy to do in C++ fortunately. :P'
Retnur: 'Remember that idea that I talked about where different damage could be recorded?'
Retnur: 'So it would know if you took fire damage or ice damage'
Quixadhal nods.
Retnur: 'Then you could have a spell that heals on a certain type'
Retnur: 'That affects node system could be expanded to do that really easily.'
Quixadhal: 'Yep, which would just remove the negative HP affect of the matching type'
Retnur: 'Also in a way it could be used to generate a complete recount of the damage you took up til death.'
Quixadhal: 'I'd get to have my festering wounds that leave scars if you don't have them cured by a cleric. *grin*'
Retnur: 'I think a lot of these new mud developers who have ideas'
Retnur: 'Are children of the new MMO ages'
Retnur: 'And like a lot of the ideas they find on WoW'
Retnur: 'And warhammer'
Retnur: 'but then implementing those ideas inside of a mud doesn't really seem possible for a newbie coder.'
Retnur: 'Like something as simple as implementing a proper damage over time.'
Retnur: 'Which is my main motivation for wanting reform in the affect system.'
Quixadhal: 'yes… DOT's are a staple of newer games, yet most non-lp muds seldom have them because of the update loop mess.'
Asylumius: 'Question: Did you guys cover progs/scripting yet?'
Retnur: 'No, I kinda think maybe we should shoot for just putting in mprogs and adding more features to it'
Quixadhal: 'only by mentioning them as being right under OLC and color as "core" features. :)'
Retnur: 'it's something rom people seem to widely know.'
Asylumius: 'My only gripe with ROMs progs is you have to add bits of code every time you add something to a struct like char_data or every time you want it to do something new.'
Quixadhal: 'If mprogs can be fixed so it isn't flaky, it's a reasonable system'
Asylumius: 'it would be nice if certain data was exposed to the scripting engine automatically.'
Quixadhal: 'as long as it can be hooked into objects/rooms and such.'
Retnur: 'Yeah. you have to tokenize the variables yourself.'
Avaeryn has been waiting for that discussion
Retnur: 'Well you can't expose that in mprogs.'
Retnur: 'It's just not a real scripting language.'
Quixadhal: 'unfortunately, that would require something more like embedding lua/ruby/python/etc.'
Asylumius: 'Thats where I thought python seemed nice. but I dunno about embedding python for progs.'
Quixadhal: 'which is a good idea, but probably not in the short term.'
Retnur: 'It would be possible in C++ if you used wrapper templates for variables'
Retnur: 'example'
Retnur: 'exposed_int<int> hp/'
Retnur: 'exposed_int<int> hp;'
Retnur: ':P'
Retnur: 'actualyl just'
Quixadhal: 'Nick Gammon did a Lua version for Smaug (I think), but there are some security issues.'
Retnur: 'I don't know. There are ways to make mprogs exposed.'
Retnur: 'But not without additional code.'
Retnur: 'It's not something it can just do automatically.'
Quixadhal: 'You have to export the whole game world state read-only, but still allow write access to the bits the program *should* be able to change.'
Retnur: 'My idea with the C version would be'
Retnur: 'To just have a table of commonly accessed data and their types'
Retnur: 'And make it as easy as adding a variable to the table to make a new one for progs'
Retnur: 'Btw, you shouldn't want everything exposed to mprogs anyways.'
Retnur: 'I mean, as it stands'
Quixadhal nods.
Retnur: 'Mprogs can't even edit the data'
Retnur: 'they can only receive it'
Asylumius nods.
Retnur: 'Like "say $n, you are in trouble this time!!!"'
Asylumius: 'mobprogs just seemed so restricted and easy to break'
Retnur: 'You know, i think that is in part because the commands that mprogs use are based on the interpret table.'
Retnur: 'To do a script you have to look through the eyes of the mob instead of through the eyes of a 3rd party.'
Retnur: 'Which really limits how the script works.'
Retnur: 'I don't see why a single script, without much fanfare, couldn't order 2 mobs to have a conversation with each other AND a player.'
Quixadhal: 'That's partly why I find room programs useful… they can do things from an overhead view, as it were.'
Asylumius: 'being able to script room, objs, mobs is standard.'
Retnur: 'But, I must say, some talented people are able to make progs do some pretty advanced things.'
Asylumius: 'added support for areas and exits might be nice'
Retnur: 'It's just not very efficient or intuitive.'
Quixadhal: 'I was surprised that ROM (probably ENVY actually) removed the area and room sounds Diku had.'
Retnur: 'I would say the first change to mprogs that would be nice'
Retnur: 'Is a way to call scripts inside of scripts'
Retnur: 'Functions'
Retnur: 'Even if they all took the same exact arguemnts.'
Retnur: 'Also it might be worth while to make a proper line by line parser to determine if the script if flawed.'
Retnur: 'Before it starts causing problems.'
Asylumius: 'a debugger would be great'
Asylumius: 'a really basic one, even'
Quixadhal: 'yes, parsing the script before it's allowed to run is important.'
Retnur: 'Or one of you can just use lua and we can do our scripting in that :P'
Retnur: 'Or ruby for that matter.'
Retnur: 'And yeah, I'm sure there is amazing security problems with giving every day builders access to those scripts :p'
Retnur: 'Of course, some would argue that mprogs open some security holes up too'
Retnur: 'Like you said Quix, you'd be amazed at what some people would do to cheat.'
Quixadhal: 'The only big thing is that you could write a lua script to check your opponant's inventory and equipment list.'
Retnur: 'Hrm?'
Quixadhal: 'that kind of thing.'
Retnur: 'Are you talking about access to the language for the players?'
Retnur: 'Anyone ever played final fantasy 12?'
Asylumius: 'I dont think security is a huge problem'
Quixadhal: 'Well, if you embedded lua, any builder could write a script that did that.'
Asylumius: 'Find imms you can trust or do it yourself :P'
Quixadhal grins evilly.
Retnur nods at Asylumius.
Retnur: 'I always went to the "do it yourself" route.'
Quixadhal: 'the lazy builder who codes a wand of eval, which calls interpret(args)'
Retnur: 'In Final fantasy 12 they had scripts you could write for your party members as a player.'
Asylumius: 'I did too, mostly, but when I did get someone to help me write areas (or do any imm stuff) I just figured no matter what they had enough access, commands, etcto do damage if they wanted to'
Retnur: 'I always thought that was fun.'
Quixadhal: 'I wanted to make a MUD where nobody ever logged off….. they'd disconnect and an AI script would take over for them.'
Retnur: 'botters be praised.'
Quixadhal: 'They'd get to set a personality… sleep, explore, kill, etc… :)'
Quixadhal: 'and it would *try* to do that.'
Asylumius: 'I think Fable should give me their game logic / AI'
Asylumius: 'and ill use that'
Retnur: 'Personally I liked Oblivions'
Quixadhal: 'of course, if they chose "sleep", they'd sit in their inn room and hope they paid for enough guards so nobody took their stuff.'
Asylumius: 'Mobs that behave differently based on ethos, moral, criminal record, etc would be neat'
Asylumius: 'but I dont have the patience to write those kinds of scripts, and neither does anyone else I've met :P'
Quixadhal: 'It helps a lot when you're being paid to do so, I expect. :)'
Retnur: 'Yeah'
Retnur: 'I'm going to apply for a job on medthievia'
Retnur: 'I mean medievia.'
Retnur: 'Fruedian slip'
Asylumius chuckles politely.
Quixadhal: 'make sure you have a backup of mudbytes on DVD for the interview…..'
Retnur: 'What does that mean ? :P'
Quixadhal: 'it helps if you can show regexp experience for s/copyright/public domain/g'
Retnur: 'haha'
Asylumius: 'heh'
Retnur: 'My main selling point is I have ignored licensing agreements my ENTIRE LIFE!'
Retnur: 'You're hired.'
Asylumius: 'where did we leave off on the topic of database support?'
Retnur: 'I looked through the medievia codebase at one time…'
Retnur: 'years ago'
Retnur: 'When it was made public by someone'
Retnur: 'And it was total rubbish'
Retnur: 'It was like the worst code I've ever seen. And it amazed me that they had so many players.'
Quixadhal: 'The big problem with database support is simply what database API to support, and at what level.'
Asylumius: 'you'd have to just pick one, i imagine'
Asylumius: 'mysql or sqlite, probably.'
Retnur: 'oracle'
Quixadhal: 'ODBC is a major pain to use in C… I've tried a couple times to make a reasonable one.'
Asylumius: 'sqlite makes the most sense, but it makes web integration a tiny bit harder'
Quixadhal: 'and supporting more than one isn't practical.'
Asylumius: 'and thats the major selling point of a db'
Retnur: 'I'm going with Door number 3, a M$ access database.'
Quixadhal: 'I use PostgreSQL myself.'
Retnur: 'or axcess or whatever they call it'
Asylumius: 'I've never used postgre'
Quixadhal: 'with stored procedures written in perl, so there!'
Asylumius: 'ugh. dog wants out.'
Retnur: 'I wrote my own simple database at one time. Talking about reinventing the wheel.'
Retnur: 'I never used it for anything but laughs though.'
Retnur: 'I probably, if I were going to actually use a database, would go with some flavor of SQL.'
Retnur: 'I know a lot of people using mySQL but for some reason everyone these days seems to have something bad about it.'
Asylumius: 'I like it. It's easy, popular, and its available on almost any system.'
Retnur: 'So we need to decide what we're going to be doing this week'
Retnur: 'I'm going to finish up the list system and get it polished.'
Retnur: 'For a minimum for the following types: void*, int, CHAR_DATA *, OBJ_DATA*, ROOM_INDEX_DATA*'
Retnur: 'And if anyone else can think of a widely used type that is putinto lists I'll include that'
Retnur: 'Soon we will have those bugs worked out.'
Retnur: 'That's a monkey I'll be glad to have off our back'
Quixadhal: 'MySQL is a fast database, but not a safe one or a versitle one'
Quixadhal: 'transactions are kindof bolted on, and AFAIK it still lacks foreign key support'
Quixadhal: 'which if you aren't an SQL guy means nothing to you, but if you are you should be screaming and running for the hills by now. :)'
Quixadhal: 'the simplest way to explain how foreign keys are great is to say if I had an object table with a type field that pointed to a type table. I could delete "weapon" from the type table and cascade delete every weapon from the object table AND every player'
Quixadhal: 'or mob inventory, or reset… in one command.'
Quixadhal: 'equally useful, but less flashy, is that with a proper FK constraint, you can't insert bad data… if type didn't match an entry in the type table, the insert or update would fail.'
Retnur: 'Hrm'
Retnur: 'Since we have a C++ project and a C project can we change the C++ more dramatically than the C since the C still is keeping the core C concepts?'
Avaeryn: 'so the only three still here are you guys, correct?'
Retnur: 'I suppose.'
Avaeryn: 'just checking'
Quixadhal chuckles politely.
Retnur: 'Because I would like to do some OO design in the C++ port.'
Quixadhal screams loudly!
Quixadhal: 'Yeah, it starts with OO, then polymorphism and templates… soon you'll be knee deep in streams!'
Asylumius: 'part of the purpose of a C++ version is specifically to make improvements that only C++ can'
Quixadhal: 'Can we make the canned emotes allow you to put text after them? Like old DikuMUD?'
Asylumius: 'might as well do it up nice'
Retnur: 'Well, we don't have to go the full monty but just seems that some of it should be object oriented at least.'
Quixadhal: 'My game allows "scream like a little girl" assuming there's no character named "like" in the room. :)'
Retnur: 'Like ch->printf("%s", "ROAR");'
Asylumius: 'Part of the C version is "sticking to" the way merc/ROM did things.'
Asylumius: 'the C++ doesnt really have to do that, per se.'
Quixadhal nods.
Retnur: 'I don't like the C++ way of input and output using streams.'
Retnur: 'So that's not really something I'd ever support.'
Quixadhal: 'yeah, I'd be perfectly happy to see things like ch->save() or area->save().'
Retnur: 'Although it does have *some* uses if you want to print something without knowing exactly what type it is'
Quixadhal: 'I don't even mind streams, if they don't go overboard….'
Retnur: 'The std::string class lets you input into it using streams.'
Quixadhal: 'but I find printf to be more useful most of the time.'
Retnur: 'Which sometimes can be useful.'
Quixadhal: 'even if there is a format option…..'
Retnur: 'I don't really like accepting keyboard input from streams.'
Retnur: 'But that's just a personal preferance I gues.'
Quixadhal: 'It might be fun to use a socket class that overloads sstream support. ;)'
Retnur: 'I've had teachers that go crazy when a student tries to use anything C-style.'
Retnur: 'Even marked off for C comments.'
Quixadhal: 'I'd yell at the department chair if any of my teachers did that to me.'
Retnur: 'My friend class I had was a C class back when they still taught C often before C++'
Quixadhal: '"C" features are part of the C++ language… not using them is not learning C++ properly.'
Retnur: 'And that C teacher didn't know the differences in C++ and C'
Retnur: 'He had us compiling with a C++ compiler'
Retnur: 'And I'm assuming he didn't know that the stuff he was teaching (some of it) was actually C++'
Quixadhal: 'of course, I'd also be a smart ass and embed __asm__ to do simple things like increment a loop counter, just to get even.'
Retnur: 'Like overloading functions, etc'
Retnur: 'I remember the most classic line from that class: "You can't set a pointer equal to a pointer. It causes a crash."'
Retnur: 'I actually had to raise my hand and dispute that one.'
Quixadhal: 'That's ok… my teacher didn't understand the self-modifying basic code I turned in.'
Retnur: 'Funny part was the guy about half way through the semester'
Retnur: 'Stopped me before I left class'
Retnur: 'And asked me to stop coming to class.'
Retnur: 'And said he'd give me an A.'
Retnur: '(Which I didn't do. I was actually trying to learn something.)'
Quixadhal grins evilly.
Retnur: 'I have a problem with a lot of those programming classes these days because'
Retnur: 'They teach a lot of stuff they shouldn't.'
Quixadhal: 'I'm sorry Sir, I'd stop coming to class if I could, but I haven't finished my report for the review board yet.'
Retnur: 'Go over stuff people should already know'
Retnur: 'After that class I had an actual C++ class.'
Retnur: 'They spent the first half of the semester teaching C.'
Retnur: 'So needless to say I was pretty mad that they made me take a C class before I could take that class.'
Retnur: 'Well, they didn't make me'
Retnur: 'The other option was basic.'
Retnur: 'Basic or C.'
Retnur: 'Then C++ or Java.'
Asylumius: 'Bed. Night folks.'
Asylumius has left the game.
Retnur: 'Anyways, before we merge my changes with your bug fixes'
Retnur: 'or hrm'
Retnur: 'Maybe I can merge just mine?'
Retnur: 'Without editing the main source'
Retnur: 'Would that work'
Retnur: 'Then I can merge mine into the main at a later time once we have the first bugfix release out'
Quixadhal: 'In theory…. if you merge yours first it would make it easier to merge back the other way.'
Quixadhal: 'I did some shuffling around though, so it might be ugly. :)'
Retnur: 'Okay, well, just tell me what I need to do to do that.'
Quixadhal: 'Not a HUGE amount, but some.'
Retnur: 'Cause I have no idea how it works'
Quixadhal: 'In theory, I can do that.. .I've never done a merge with svn, but I'm sure it's pretty similar to cvs.'
Quixadhal: 'I believe you'd want to be in your working copy'
Quixadhal: 'then if you were in branches/runter, you could try something like…'
Retnur: 'Let's turn ram into a fallout themed mud.'
Quixadhal: 'svn merge ../../Ice@53 .@53'
Quixadhal: 'where 53 is whatever the current revision number is…'
Quixadhal: 'you can try other revisions, but probalby not useful at this point. :)'
Retnur: 'Strange.'
Retnur: 'So it should merge the difference between the two?'
Retnur: 'Then I just have to make it compile?'
Quixadhal: 'yes, however when it finds a conflict it will do *something*'
Retnur: 'If you changed the names of files and such is that going ot be a problem?'
Quixadhal: 'I'm not sure what the something is yet… in cvs, it would toss you into an editor that showed you the parts that wouldn't merge so you could fix it.'
Retnur: 'Hrm..'
Retnur: 'So should I back this up or something?!'
Quixadhal: 'well, worst case scenario is that it mucks up the working copy and you have to revert, or do a full checkout again.'
Retnur: 'I just commited my last changes'
Quixadhal: 'absolute worst case is that it auto-commits something, then we have to checkout the previous revision and check it back in again. :)'
Retnur: 'Here goes nothing.'
Quixadhal crosses his fingers.
Retnur: 'Hrm'
Retnur: 'This takes a while'
Retnur: 'I'm getting a few "Skipped missing target: 'blah'"'
Quixadhal: 'probalby one of the files I removed, or one that your copy doesn't have.'
Quixadhal: 'IE: random.c, or recycle.c, or somthing.'
Retnur: 'No…'
Retnur: 'It skipped a lot'
Retnur: 'But now it's going back and adding stuff'
Retnur: 'I dunno'
Quixadhal: 'hopefully it will generate reject files like patch does when it can't resolve something.'
Retnur: 'It said "skipped ittest/src"'
Retnur: 'Now it's going and doing things like "A ittest/src/blah.c"'
Retnur: 'Maybe it doesn't try to mess with the actual directory files?'
Retnur: 'I'll just wait til it is actually finished to comment on if it worked'
Retnur: 'I'm just not sure what A means'
Retnur: 'I was thinking that means Add'
Quixadhal: 'Interesting.'
Quixadhal: 'I wonder if you're up a level too high or something. I assume you want the two sides to be directly comparable.'
Retnur: 'I'm in runter dir'
Quixadhal: 'so perhaps it should be you IN ittest and then ../../../Ice?'
Retnur: 'let's see…it's done'
Retnur: 'I got some strange stuff'
Quixadhal: 'I have no idea how clever it is about that.'
Retnur: 'Hrm'
Retnur: 'Some of my files say'
Retnur: 'generic_list.c'
Retnur: 'then I have'
Retnur: 'generic_list.c.merg-left.r0'
Retnur: 'then I have generic_list.c.merge-right.r53'
Retnur: 'Then I have generic_list.c.working'
Quixadhal nods.
Retnur: 'It seems like the only files it did that with are the files I added.'
Quixadhal: 'so the working one is your original copy'
Retnur: 'Like generic_list and lists.c'
Quixadhal: 'the left version is what would have been in Ice at revision 0 (empty)'
Retnur: 'Why don't I have the other files like that though?'
Quixadhal: 'the right would have been the merged result at revision 53'
Quixadhal: 'not sure.'
Quixadhal: 'although you may want to give it another try anyways, since after your last commit you want rev 54.'
Retnur: 'Anything I can go lookat to see if I got your updated work?'
Quixadhal: 'Yeah, do you have a random.c?'
Retnur: 'I'm merging again'
Retnur: 'After that I'll look'
Retnur: 'Actually I can look now'
Retnur: 'No, I don't see a random.c'
Quixadhal: 'heh, ok… it must have gotten confused over the directory then.'
Retnur: 'It's going to each file and doing "A ittest/src/file.blah"'
Retnur: 'Except on my files'
Retnur: 'Then it's doing "C ittest/src/file.blah"'
Retnur: 'Maybet his is merging my stuff in with the main repository?'
Quixadhal: 'svn help merge says it's source@rev dest@rev'
Retnur: 'I don't know then'
Retnur: 'FIX IT'
Retnur: '…'
Retnur: 'Yeah hrm'
Quixadhal: 'nothing's broken on my end. :)'
Retnur: 'This migt be bad'
Retnur: 'It overwrote a lot of my files with'
Retnur: 'Old files'
Quixadhal: 'you may have to remove and do a fresh checkout though.'
Quixadhal: 'as long as you don't commit, you should be fine. :)'
Retnur: 'How do I do that?'
Avaeryn: 'you guys still taking ram huh?'
Quixadhal: 'you can probably just rm -rf ittest and then svn update… worst case is you nuke the whole repository and do a full checkout again.'
Quixadhal: 'Rutnur is testing out the svn merge command. :)'
Quixadhal: 'He's having fun….'
Avaeryn: 'think it's ok to end the log here then?'
Quixadhal: 'yeah, I'd think so.'
Avaeryn: 'cause i'm gonna have a booger of a time making this one pretty :P'
16 Nov, 2008, David Haley wrote in the 5th comment:
Votes: 0
Wherever you went to school sounds kind of terrifying Runter. :stare: (can't set pointers equal to pointers, indeed…)
17 Nov, 2008, tphegley wrote in the 6th comment:
Votes: 0
I am currently doing a DoT/HoT system on a mud I'm coding on and basically (was the easy way out) what I did was put in a new update that checked every 3 seconds to see if a DoT or HoT was applied and then would damage accordingly. Yes, this added more CPU but it works pretty well for what I intended it for. One thing I am still working on that I never fully figured out was if a DoT killed the mob, instead of the person getting the last hit in, then it wouldn't give that person or group exp.

The easy way I did it (i'm still a newb coder who just taught himself from trial and error) was just to put the affect on the person and then every 3 seconds if he had that affect on him then he would get damaged for whatever the spell was worth.

If anyone has other suggestions to how to do this then maybe it could help the RAM team as well.
17 Nov, 2008, David Haley wrote in the 7th comment:
Votes: 0
A fairly simple event system would solve the check-every-x-seconds part and make the CPU usage drop to almost the bare minimum. Nick Gammon provides a full framework for this in C++ which is pretty nice, actually. You'd have to check for things like a character dying when there are events pending, though.
0.0/7