From mtx93 at informatik.uni-bremen.de Wed Nov 1 00:37:15 2000 From: mtx93 at informatik.uni-bremen.de (Michael Toennies) Date: Thu Jan 13 17:59:02 2005 Subject: [CF-Devel] The Art of ... Cf In-Reply-To: <39FF79D8.83D07D58@scruznet.com> Message-ID: > -----Original Message----- > From: crossfire-devel-admin@lists.real-time.com > [mailto:crossfire-devel-admin@lists.real-time.com]On Behalf Of Mark > Wedel > Sent: Wednesday, November 01, 2000 3:03 AM > To: Crossfire-Devel > Subject: Re: [CF-Devel] The Art of ... Cf > > > Michael Toennies wrote: > > > > Hi > > > > This is a controversial mail. I will make same suggestions of > changing the > > arts in > > size and color depth. It will effect the way, cf handles the > the pictures > > and communicate > > with the client. Also, there a changings to the sound interface. > > > > Also this is a little faq in pngs and gfx handling because here are many > > people > > who don't know it. So don't be affraid if you read things you know. > > > > My suggestions are: > > > > a.) goint to png pictures as default for the next client/server version > > b.) using 24 bit color depth as default > > c.) using of palette tables (see below) > > d.) increase the pictures size of a tile to from 32x32 to 38x38 > > e.) include a real sfx interface > > I'm just going to respond to the points quickly and not go into long > discussions: > > A) png default for client: > the X11 and gtk client support png just fine. All the user has > to do is run > with -png. I am going to do some work to make it easier to make > png the defautl > client (basically have a value in config.h for default image > type, and if set to > png, it does the right thing with respect to image sizes and the > like. It may > be reasonable the if the client compiled in with png support > (found the png > library) use png as the default. The point is, that the move from xpm to png must a action of the whole dev team. At this time, xpm are the default grafik and png are only a unfinished extension. But waiting for a finished png set and a change then will never work. Then we have the xpms also in 2 years. Also, to support all these grafik sets and files waste time and power. There is no real argument to support the xbms. Thats nonsense. They should be dropped at first. > B,C) 24 bit depth & palette tables: the png images are the > format they are in > right now because that is basically how they got converted. If > another png > format is better, that is fine. Yes, they are perfect because we can handle with it 256 index palettes with 24bit RGB values and all kind of true color pictures and low costs. And this will fit the grafik support for a long time. Also making a xxx 32bit true color client in the year 200x will work fine with these pngs, so we should have no problem then. Also fancy thing like alpha channels etc. are included in this pngs, if we want use them, we must nothing rewrite. > Paletted images is a nice idea. I would imagine that for > simplicity, you would > have to have some general color schemes (different shades of > blue, grey, green, > etc) or a base rgb value. It would take some bandwith for map > updates - right > now, all that is sent there is the image number, so any palette > information adds > a little bit of space, but I agree, probably not too bad. Also, > a palette field > would need to be added to the objects so you know what palette > each object has. Think more general about the palettes. The server defines a sets of xx 256 standard palettes which have (only for example) 128 draw colors and 128 color space colors. so, the first 12 palettes are used for buildings. So the first 128 colors of them should have a set of brown and grey for stones. the color space for example has a set of red & green for the first one. the 2nd palette has orange and blue in it and so on. Now a artist make a draws a building with the first palette. grey stones, green windows and a red top. this is then the default palette for this picture. It is included in the picture, so the client always get a palette to every picture. With the transparent color trick i describe, you can save in the palette the information which palette number is it. Now the client reads the picture in the normal way, stores the palette and draw the picture. In a different town, the server drops in the map commando the face nr. of the building and set the last bit of the face, showing that the next value is a palette number. The client read it in, and draws the picture with the new palette, for example the 2nd. Now the building has in the other town blue windows and a orange roof. In fact, the more on bandwith should be very small. Of course you need a command for retrive a palette you just don't now, but you really do it only 1 time you ever get connect to the server. The great thing is that you can mark with this the "special monsters". For the scorn quests for example you must kill the kobold and orc chief. You can't identify them by looking on the map - they look like the others. And getting the name of the suckers is not so easy when you fight and move. With palettes pictures, you simply set him to a different palette, where his armor is red instead of blue or something. For the user, its like you has a different drawn picture. Like i say, allmost all actuell 2D games, from diablo, UO, age of empires and so on use this technique. > D) Picture size bigger: More personal preferance for improvement is to > increase the size of the game window from 13x13 tiles to > something like 17x17 or > 19x19. For 32 pixel sized images, that is a change of 416 to 608 > if we presume > 19x19. That doesn't exclude making images bigger, but I haven't > seen that be a > major issue. And one problem with bigger icons is inventory > lists - the bigger > the icon, the less inventory that can be listed. > > However, a lot of the current png images are just blown up 24x24 > xpm's, so a > lot of image cleanup can be done. Well, making the the map bigger, kills the 38 pngs. then you should use 15x15 in 32x32 or 13x13 in 34x34. The point is, that around pixel of 35x35 is a critical area. If you have a smaller tile, your pixels and with it your details go fast down. Beyond it, you got much more pixel for much more details. Thats because one pixel in y and x more or not is not strictly linear. 70x70 pixels are not 2 times more then 35x35 of course. Its the factor 4. I work some times as professional game writer and i had thsi dis- cussion with some artist who telling me just this facts. Also if you render, tiles beyond 35x35 has a big lose in details every pixel you go down. Thats of course if you use 800x600 or more as resolution. You got then this "real" effect. Thats why diablo for example has big tiles and figures. They need them the "real" effect. > E) Sound effects: The sound effects has been around for a long > time as it is > now, and really needs to be redone. The objects themselves > really need to have > sound effect information (right now, all sound effects are > basically hard coded > into the source). That works OK for some, but having it in > objects would be > better. > > It also makes it more complicated, because some objects would > have different > sounds depending on their state. But you won't get any argument > from me that > sound affects are out of date and a bit primative. > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From mtx93 at informatik.uni-bremen.de Wed Nov 1 00:47:15 2000 From: mtx93 at informatik.uni-bremen.de (Michael Toennies) Date: Thu Jan 13 17:59:02 2005 Subject: [CF-Devel] CF DX Snapshot In-Reply-To: <39FF862E.C295199F@scruznet.com> Message-ID: > -----Original Message----- > From: master@scruz.net [mailto:master@scruz.net]On Behalf Of Mark Wedel > Sent: Wednesday, November 01, 2000 3:56 AM > To: Michael Toennies > Subject: Re: [CF-Devel] CF DX Snapshot > > > > > > > i will use direct input as keyboard interface, this will give a nice > > access to the keyboard. > > the problem for the unix client isn't as much the direct > keyboard access, but > rather that the keysym/keycode for say the 6 on the numeric > keypad can differ. > so for usability, all those possible combinations need to get put > into a default > file. Since you only really have to aim for the pc which all > have standard > keyboard definitions, life is much easier. Ah, yes i see. Thats the nice part of apis like dinput, they do all the stuff for you, and is there one exotic, it connect through his driver to directx, so the coder don't worry about it and has no changes. > > Eh, no you misunderstod me. I use of course the tiles from the server, > > getting the pngs. > > > > The background pngs are the one of the dx client. Remember that he is a > > "real" > > dx game, means there are no windows style elements drawn by windows. > > So, i must draw every slider or box by myself. > > Ah - ok. I understand now. > > > > > I think his point is a ring of strength +2 has the same face as > > > a ring pro > > > fire/vuln cold, as well as most any other ring, and you probably > > > want a quick > > > way to know what ring is what. > > > > Well, i show the face/animation of the items and the name of > the selected > > item > > below. So you can quick search the inventory. Also i will > include the mouse > > to > > fast klick on the item and show what is exactly is. > > > > There is no other possible way, because showing all names of > all items at > > the same > > time will not work. Also, to much text is not usefull. The only > way is, to > > difference > > the items more by faces, like most potions in the xpms. > > Yeah - I've played many games like that. Probably a lot of it > is just what > people are used to for the other clients - they are used to > seeing the names and > so on. the nice thing about showing items like you do is that > potentially more > are available at the same time. > > I wonder if it may be worth having something like virtual > backpacks and people > can determine what backpack(s) items are displayed in. So for > example, you may > have your 'cold' backup where you put all items that relate to > monsters that use > cold, so you don't need to worry as much about what the item > actually looks > like, you just quickly switch to your cold backup and equip stuff > as fast as > possible. By the many of damage types and protection types we have in cf, you will run in the same trap... having 10 containers of items, you all must check and control... I think about 2-4 "hot keys". You wear an wield a set of your items and press the 1. The program safe which items you wear. Then you wear a cold protection set and mark them as 2. Now you must simply press 2 and you auto unwear set number 1 and ready set 2. MichToen From echter at informatik.uni-rostock.de Wed Nov 1 04:50:18 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:02 2005 Subject: [CF-Devel] The Art of ... Cf In-Reply-To: ; from mtx93@informatik.uni-bremen.de on Wed, Nov 01, 2000 at 07:37:15AM +0100 References: <39FF79D8.83D07D58@scruznet.com> Message-ID: <20001101115018.A12278@hokkaido.informatik.uni-rostock.de> On Wed, Nov 01, 2000 at 07:37:15AM +0100, Michael Toennies wrote: > There is no real argument to support the xbms. Thats nonsense. I'm using xbms with caching turned off because this seems to be the fastest setting when playing on a remote server over a slow link. -- Jan From echter at informatik.uni-rostock.de Wed Nov 1 04:56:05 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] Arrow, thrown object and generic attack fixes In-Reply-To: ; from mtx93@informatik.uni-bremen.de on Tue, Oct 31, 2000 at 10:44:35PM +0100 References: <20001031223659.A7906@hokkaido.informatik.uni-rostock.de> Message-ID: <20001101115605.B12278@hokkaido.informatik.uni-rostock.de> On Tue, Oct 31, 2000 at 10:44:35PM +0100, Michael Toennies wrote: > When i understand, you can't now step on stairs, move up, fire some > fireballs/bombs/ > arrows and step down, waiting for the damage? No, the attacker is the fireball which is on the same map as the victim. The player is the owner of the fireball and doesn't really attack, he only gets the experience when the victim is killed. -- Jan From echter at informatik.uni-rostock.de Wed Nov 1 05:06:07 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] Arrow, thrown object and generic attack fixes In-Reply-To: <200010312216.OAA14594@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Tue, Oct 31, 2000 at 02:16:05PM -0800 References: <20001031223659.A7906@hokkaido.informatik.uni-rostock.de> <200010312216.OAA14594@tesla.EECS.Berkeley.EDU> Message-ID: <20001101120607.C12278@hokkaido.informatik.uni-rostock.de> On Tue, Oct 31, 2000 at 02:16:05PM -0800, Peter Mardahl wrote: > Speaking of runes, THEY can attack a player in a map while they're in an > inventory, i.e., removed. Would your patch break this? It should be possible that the attacker is in the victim's inventory. This is a "simple attack" (simple_attack == 1 in attack_ob() and hit_player()) and it should prevent all things that don't make sense in this situation, e.g. calculating if the victim can see the attacker, or triggering runes in the victim (I think I'll test if a door that is not immune to poison can be poisoned -- the poison shouldn't trigger runes in that door anymore). However, I haven't tested yet if this also works for runes. I'm wondering if runes in chests that a player has picked up still work properly, as they're not directly in the players inventory (rune->env != player, but rune->env->env == player). > Should we fix it by inserting the trap in the map with the thing > it is attacking? Shouldn't be difficult to do that. Inserting the rune into the victim's inventory (if it was in a container in the victim's inventory before) should also work. -- Jan From andi.vogl at gmx.net Wed Nov 1 06:29:00 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The Art of ... Cf In-Reply-To: Message-ID: <000101c043ff$56ebf680$54a1e23e@kyle> On Mi 1.11.00, Micheal Toennies wrote: > My suggestions are: > > a.) goint to png pictures as default for the next client/server version > b.) using 24 bit color depth as default > c.) using of palette tables (see below) > d.) increase the pictures size of a tile to from 32x32 to 38x38 > e.) include a real sfx interface a.) Yes, I think we should push development in direction of the pngs. Furthermore, I also feel an urge to kick the xbms out! If I want to create a completely new item I have to draw THREE pictures (aargh). Besides, people have stopped supporting xbms anyways - have you noticed that? A lot of new xpms/pngs don?t have an xbm counterpart (e.g. bookshelves, braziers, etc etc). We should take this as indication that it?s time to get rid of them IMHO... c.) Color-palettes would really be an advantage. Being able to draw monsters in different colour-shades... *starts dreaming*... green dragons, black demons, big-wizards in all elemental colours, *haaah*... =) b. & d.) Increase size and default-depth of pngs: No objections, since 95% of the pngs need to be (re-)done anyways. There?s only one problem remaining: WE NEED AN ARTIST! Please, anyone who got time, search the web for artist-mailing lists, ask friends, if neccessary sell your grandmother for an image-set... whatever. =) e.) make real sfx: Do I have to mention how cool this would be? Anyone willing to work on that - go for it! Andreas V. From seer11 at hotmail.com Wed Nov 1 07:17:53 2000 From: seer11 at hotmail.com (the seer) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] map bug Message-ID: MWedel wrote: >This is actually true for many items. I'll look into a more general >fix >than the old double floor fix that you originally see (that fix >was that >if there were two floors, you would see both of them to make >things look >better). > But the more general long term approach is to have a stacking value >that >the client can set. Way back when, crossfire only used bitmasks >with no >masking, so it only made sense to draw one image per space. >Then Xpm came >around with masking, so it made sense to draw 2 items >per space. But that >got into the case you see - character standing >on a building that is on >top of something else which doesn't look >very good, so double floor patch >came about. Why bother with a stacking value? If you just tell the server or client to use a 4 layered system, all of the images that need to be placed on the screen can easily be handled. Treat the floors as the bottom layer (0), building components next (1), then items (2), and finaly animated creatures (3), you should be able to solve the problem without any significant increase in processing. > I briefly tried drawing all items on a space. Aside from consuming >a >lot of cpu time (but back then that was on a 20 mhz 68020 - >sun3/60, 3 >mips), at some point it just didn't look very good because >everything sort >of got muddled together and it just looked like a >blob. > the cpu performance should not be as much of an issue - especially >if we >make some linked lists to more quickly identify the items to >draw. But >determining what items to draw may get difficult (for >example, if standing >on the store, you want the store to be drawn and >the ground beneath the >store, but you don't want the store to bubble >up on top of swords and >other things dropped there (we'll ignore the >fact that this happens >anyways right now when maps are saved due to >the way multi part objects are handled). > but if you then need to look through a space each time an item is >inserted/deleted and update a stack of visibility for all those >spaces, >that can get expensive cpu wise. Think of the effects of a >large fireball >case in a room full of monsters that have treasure or >other items beneath >them (or that they drop as they die). > Another thing on the long TODO list is to just update how the >server >deals with map updates. Right now, whenever anything is >inserted/removed >from any space on any map, the server determines how >that space now looks. > What I really want to do is only determine >what the spaces that the >player sees looks like - who cares what >something 20 spaces off the map >may look like. This would entail >adding a bitmask to the map structures >which shows which spaces are >up to date (as they are/were in the players >view, got updated, and >haven't changed yet), and which are stale. Before >we send the map to >the player, we update all these stale spaces. > When something is inserted/removed, we just mark the space stale >and >leave it at that until it goes within view. >_______________________________________________ >crossfire-devel mailing list >crossfire-devel@lists.real-time.com >https://mailman.real-time.com/mailman/listinfo/crossfire-devel _________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. Share information about yourself, create your own public profile at http://profiles.msn.com. From andi.vogl at gmx.net Wed Nov 1 07:43:40 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] throw away xmbs? (yes please) In-Reply-To: <20001101115018.A12278@hokkaido.informatik.uni-rostock.de> Message-ID: <000401c04409$c0f43c40$54a1e23e@kyle> On Mi, 1.11.00, Jan E. wrote: > > There is no real argument to support the xbms. Thats nonsense. > > I'm using xbms with caching turned off because this seems to be the > fastest setting when playing on a remote server over a slow link. I assume that you play only for code-testing, therefor this argument doesn?t seem fair to me. =) On using xbms a player would miss a great part of the fun. I?ve played on voldsbooks for ages, without ever meeting someone using xbms. Even more, there are some real in-game disadvantages too, arising from the fact that you can only see one pic per square (e.g. a hidden exit under a chair is a major pain with xbms). And don?t forget the huge sensless amount of extra work for map-makers: If I want to create a new item I have to draw THREE pics! Please think about that before saying: "let?s just keep xbms that won?t hurt anybody..." - It does hurt innovative map-makers a lot! I think the xbms just give a bad impression of the game. They make it look old and dusty. Keeping them for convenience produces lots of extra work that people are less and less willing to take. Ah yes, btw - we are still looking for someone to draw the xbms for the new race/class images... Who wants to do it? Jan E. perhaps? Now where are all the xbm-lovers? Step forward please :-)) For the mentioned reasons I strongly recommend to remove the xbms. Andreas V. From mtx93 at informatik.uni-bremen.de Wed Nov 1 09:55:04 2000 From: mtx93 at informatik.uni-bremen.de (Michael Toennies) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] map bug In-Reply-To: Message-ID: Hi Hm, the layers is a great idea. I think, when i read both mails, we need some work in this part of the interface. The problem i see, also with my changes, is that we must work on all 3 parts of crossfire at once: server, client and editor. This looks like a big task. But when we do it yet, with some other changes in mind, we can give cf a good step. I think there are more problems like this one, lets make a list and find some solutions. The server crew is fine and work hard. I will make the dx client and if needed i can do some changes to the linux client too. So we need one who rewrite the editor. That a theme on the list some weeks ago. We need it. The old editor is also outdated and the interface is not the best. Better editor will give us better and more maps, thats a always true rule. Who will make it? MichToen > MWedel wrote: > > >This is actually true for many items. I'll look into a more > general >fix > >than the old double floor fix that you originally see (that fix > >was that > >if there were two floors, you would see both of them to make > >things look > >better). > > > But the more general long term approach is to have a stacking > value >that > >the client can set. Way back when, crossfire only used bitmasks > >with no > >masking, so it only made sense to draw one image per space. > >Then Xpm came > >around with masking, so it made sense to draw 2 items >per > space. But that > >got into the case you see - character standing >on a building that is on > >top of something else which doesn't look >very good, so double > floor patch > >came about. > > Why bother with a stacking value? If you just tell the server or > client to > use a 4 layered system, all of the images that need to be placed on the > screen can easily be handled. Treat the floors as the bottom layer (0), > building components next (1), then items (2), and finaly animated > creatures > (3), you should be able to solve the problem without any significant > increase in processing. > > > I briefly tried drawing all items on a space. Aside from consuming >a > >lot of cpu time (but back then that was on a 20 mhz 68020 - >sun3/60, 3 > >mips), at some point it just didn't look very good because > >everything sort > >of got muddled together and it just looked like a >blob. > > > the cpu performance should not be as much of an issue - > especially >if we > >make some linked lists to more quickly identify the items to >draw. But > >determining what items to draw may get difficult (for >example, > if standing > >on the store, you want the store to be drawn and >the ground beneath the > >store, but you don't want the store to bubble >up on top of swords and > >other things dropped there (we'll ignore the >fact that this happens > >anyways right now when maps are saved due to > >the way multi part objects are handled). > > > but if you then need to look through a space each time an item is > >inserted/deleted and update a stack of visibility for all those >spaces, > >that can get expensive cpu wise. Think of the effects of a > >large fireball > >case in a room full of monsters that have treasure or >other > items beneath > >them (or that they drop as they die). > > > Another thing on the long TODO list is to just update how the >server > >deals with map updates. Right now, whenever anything is > >inserted/removed > >from any space on any map, the server determines how >that space > now looks. > > What I really want to do is only determine >what the spaces that the > >player sees looks like - who cares what >something 20 spaces off the map > >may look like. This would entail >adding a bitmask to the map > structures > >which shows which spaces are >up to date (as they are/were in > the players > >view, got updated, and >haven't changed yet), and which are > stale. Before > >we send the map to >the player, we update all these stale spaces. > > > When something is inserted/removed, we just mark the space stale >and > >leave it at that until it goes within view. > >_______________________________________________ > >crossfire-devel mailing list > >crossfire-devel@lists.real-time.com > >https://mailman.real-time.com/mailman/listinfo/crossfire-devel > > _________________________________________________________________________ > Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. > > Share information about yourself, create your own public profile at > http://profiles.msn.com. > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From echter at informatik.uni-rostock.de Wed Nov 1 10:13:34 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] throw away xmbs? (yes please) In-Reply-To: <000401c04409$c0f43c40$54a1e23e@kyle>; from andi.vogl@gmx.net on Wed, Nov 01, 2000 at 02:43:40PM +0100 References: <20001101115018.A12278@hokkaido.informatik.uni-rostock.de> <000401c04409$c0f43c40$54a1e23e@kyle> Message-ID: <20001101171323.A21021@hokkaido.informatik.uni-rostock.de> On Wed, Nov 01, 2000 at 02:43:40PM +0100, Andreas Vogl wrote: > On Mi, 1.11.00, Jan E. wrote: > > I'm using xbms with caching turned off because this seems to be the > > fastest setting when playing on a remote server over a slow link. > > I assume that you play only for code-testing, therefor this argument > doesn?t seem fair to me. =) I don't test code on remote servers. > On using xbms a player would miss a great part of the fun. I?ve played Faster response from the server is more important to me than nice graphics, but continueing the xbm support is not the right answer to this problem. The X11 client does a (superfluous) access() call and a file open and read per face command. This means that the first time you see a Greater Daemon after the client was started, the client will do 42 disk accesses. Meeting a Greater Daemon is not exactly the right time for some additional lag. This does not happen when caching of images is turned off, and a xbm image is not much larger than a face command. Furthermore, you don't ever get these '?' images without caching. These problems could be avoided if the client would request all face number -> face name mappings from the server when it is started. It could then load the faces from its local cache before playing begins. -- Jan From mtx93 at informatik.uni-bremen.de Wed Nov 1 10:18:55 2000 From: mtx93 at informatik.uni-bremen.de (Michael Toennies) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The Art of ... Cf In-Reply-To: <20001101115018.A12278@hokkaido.informatik.uni-rostock.de> Message-ID: > On Wed, Nov 01, 2000 at 07:37:15AM +0100, Michael Toennies wrote: > > There is no real argument to support the xbms. Thats nonsense. > > I'm using xbms with caching turned off because this seems to be the > fastest setting when playing on a remote server over a slow link. > Well, i get the point, but the question is: is there really a need for it, will it give cf a advantage or the players? Fact is, that every minute more faster line connect to the internet. I also played xbms, in the early 90s as there was no xpms. That you can do it on a remote server is clear, but is there no other way for you to play it? We can also input a interface for a ZX81 and we will find one who use it, but it is NEEDED? When i look at the world i try to see a kind of "standard hardware & technique point". That means the hardware, software etc. which most people have and use. Its always hard to drop ideas and features but it is in software development a major task. CF need some liftings there. Lost some get many - thats what i want. Also, the server crew give kick, because they make a great job and the folks wanna see the so good as they can... :) MichToen From mtx93 at informatik.uni-bremen.de Wed Nov 1 10:34:40 2000 From: mtx93 at informatik.uni-bremen.de (Michael Toennies) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] throw away xmbs? (yes please) In-Reply-To: <20001101171323.A21021@hokkaido.informatik.uni-rostock.de> Message-ID: > On Wed, Nov 01, 2000 at 02:43:40PM +0100, Andreas Vogl wrote: > > On Mi, 1.11.00, Jan E. wrote: > > > I'm using xbms with caching turned off because this seems to be the > > > fastest setting when playing on a remote server over a slow link. > > > > I assume that you play only for code-testing, therefor this argument > > doesn?t seem fair to me. =) > > I don't test code on remote servers. > > > On using xbms a player would miss a great part of the fun. I?ve played > > Faster response from the server is more important to me than nice > graphics, but continueing the xbm support is not the right answer to > this problem. The X11 client does a (superfluous) access() call and a > file open and read per face command. This means that the first time > you see a Greater Daemon after the client was started, the client will > do 42 disk accesses. Meeting a Greater Daemon is not exactly the right > time for some additional lag. This does not happen when caching of > images is turned off, and a xbm image is not much larger than a face > command. Furthermore, you don't ever get these '?' images without > caching. > > These problems could be avoided if the client would request all face > number -> face name mappings from the server when it is started. It > could then load the faces from its local cache before playing begins. > This is really what we need: a MAPFACES and GETFACES cmd. The server simply do a list of the face of a map you enter the first time, removes all face the player has got before and send them as a long data string. MAPFACES len This should work very fancy, because you dont get the problem Jan described, because you must load a picture in the same moment your socket got hot and the server drop out hundreds of fighting datas. Also, you do with one cmd was you do with many. One bigger hit, but you save a many small bastards. MichToen From peterm at tesla.EECS.Berkeley.EDU Wed Nov 1 14:16:14 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The CVS server must move.... Eventually. How about sourceforge? Message-ID: <200011012016.MAA17334@tesla.EECS.Berkeley.EDU> Hello, Sometime within the next 6-8 months, the crossfire development server, boltzmann.eecs.berkeley.edu, will pass out of my... legitimate... control. I've looked at sourceforge.net, and it seems they provide a nearly identical service to what I have been providing. 1) SSH access to a cvs repository 2) web/ftp access to snapshots if desired 3) generous limits to space usage They also provide these services which I do NOT provide: 4) Web-based new account creation and project admin 5) shell access for misc. tasks 6) anonymous pserver access 7) full-time admins to maintain the machine 8) Other misc. stuff which I don't know about yet Their service is free, and we may use it, provided: a) Our code bears an open license b) we are not hozers I have created a crossfire RPG project on there already, and I think we should move crossfire development on there now rather than later, when we are forced to move. Would some other developers than me please head over to sourceforge.net and register, and let me know your username? I will add you to the crossfire project and together we can further assess whether moving there would be good or not. Regards, PeterM From jbontje at suespammers.org Wed Nov 1 15:57:37 2000 From: jbontje at suespammers.org (Joris Bontje) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The CVS server must move.... Eventually. How about sourceforge? In-Reply-To: <200011012016.MAA17334@tesla.EECS.Berkeley.EDU> Message-ID: <3A009FE1.14102.2760BB4@localhost> On 1 Nov 2000, at 12:16, Peter Mardahl wrote: > [moving to sourceforge?] I think one of the biggest pros of moving to sourceforge is the technical support. You don't have to bother about upgrading servers. It is true that sourceforge is sometimes slow, but they are getting better and have great resources. VA Linux wont disappear very soon, sourceforge is here to stay. > I have created a crossfire RPG project on there already, > and I think we should move crossfire development on there > now rather than later, when we are forced to move. I have a little experience with other sourceforge projects. The setup of the environment isn't done in one day. Keeping 2 CVS'es next to each other isn't possible. Please give your opinion, GO / NO GO? Joris Bontje "MiDS" --- The suespammers.org mail server is located in California; do not send unsolicited bulk e-mail or unsolicited commercial e-mail to my suespammers.org address From mwedel at scruznet.com Wed Nov 1 18:44:29 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] map bug References: Message-ID: <3A00B8EC.5DC4176D@scruznet.com> the seer wrote: > > Why bother with a stacking value? If you just tell the server or client to > use a 4 layered system, all of the images that need to be placed on the > screen can easily be handled. Treat the floors as the bottom layer (0), > building components next (1), then items (2), and finaly animated creatures > (3), you should be able to solve the problem without any significant > increase in processing. That basically means you have 4 hard coded layers, which may not be just fine. But also see the previous mail about xbm and performance - the more layers, the more bandwidth needed. Also, you still get the case that suppose and item is inserted into that space or a monster moves off. Once again, you need to recalculate all the layers on that space Also, at current time, the definition of building components is vague. For example, a dragon transport is not really considered a building component, which is why you get the effect described above. This could probably get fixed up by adding a 'layer xxx' value to all objects. But you still get into cases like: A fireball explodes in a room with monsters and treasures. The fire is on top, so that will be seen and considered an animiated creature, so you then see the treasure, building components, and floors. I would argue that in this case, you really want to see what monsters are still standing and not what objects are there. So what you really want is something like: Draw top X images (which would be spell effects, monsters, items, ...) Draw bottom X images (floors and buildings). I think there is some problem with the dragon transport in that that image is used as both a monster and a building type object. So it is difficult to handle that dual identity unless you create another image class, or move visibility and stacking of objects away from the images and back into the object. From mwedel at scruznet.com Wed Nov 1 18:54:10 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] throw away xmbs? (yes please) References: Message-ID: <3A00BB32.24042DAE@scruznet.com> Michael Toennies wrote: > This is really what we need: a MAPFACES and GETFACES cmd. > > The server simply do a list of the face of a map you enter the first time, > removes all face the player has got before and send them as a long data > string. > > MAPFACES len Yes - I had originally tried doing some work on it. This implied caching, so it loaded any local images it has. There was also an option for it to request any missing images from the server so it could start with a complete set. The one complication to this fact is that the amount of bytes to transmit all that information is fairly large (more than 64k), so at the time of the my initial attempt (before the server did buffering), it became much more complicated. You would still need to send several such commands, simply to stay within the internal buffer sizes that the server->client communication supports, but that isn't a big deal. But the client also has to be a little clever in requesting images it does not have - if it requests all 2000 for example, the server will go and process all those requests at once, and that will go beyond even the buffering that the server implements, so it has to request them in reasonable sized batches (the complete png file is about 1.2 MB, the bitmap one is about 420k). From mwedel at scruznet.com Wed Nov 1 19:14:49 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The Art of ... Cf References: Message-ID: <3A00C009.93ED5026@scruznet.com> Michael Toennies wrote: > > The point is, that the move from xpm to png must a action of the whole > dev team. At this time, xpm are the default grafik and png are only > a unfinished extension. But waiting for a finished png set and a change > then will never work. Then we have the xpms also in 2 years. > > Also, to support all these grafik sets and files waste time and power. > There is no real argument to support the xbms. Thats nonsense. > They should be dropped at first. If anything, I would drop xpm before xbm's. As mentioned, xbm's are small, so they don't take much space on the server, and are bandwidth efficient. Also, as of at least a year ago, some people still played on black and white xterms and the like, and xbm's are very friendly on black and white displays. The usefulness of xpm's have decreased with png. I disagree with your assessment of moving to png. In my view, the problem with png has nothing to do with code, it has to do with getting them updated/cleaned up so they look better. And this has 100% to do with somebody deciding to do it, and not the fact that xpm's are still around. If xpm's and xbm's went away tomorrow, I don't think the png are going to get much better looking much quicker - it really takes someone to decide to do that. And by and large, very few to no people working on crossfire are artists, so you get the effect of 'well, that png doesn't look really good, but I can't make it look any better'. I don't see any one out there spending time making xpm's or xbm's look better, so I don't think you can really argue that that is reducing the effort on png's. > > Think more general about the palettes. The server defines a sets of xx > 256 standard palettes which have (only for example) 128 draw colors and > 128 color space colors. > > so, the first 12 palettes are used for buildings. So the first 128 colors of > them should have a set > of brown and grey for stones. the color space for example has a set of red & > green for the first one. > the 2nd palette has orange and blue in it and so on. My impression on this is that it isn't going to be trivial for a non artist to create these palletes so they look good. But just to make sure that I understand this 100% correct. Is the alternate pallete information stored in the image, or is this yet something else the server keeps track of? And how to you deal with the generation of these new palettes when say someone adds a new set of images? It sounds like a neat idea, but unless creation of these alternate palettes (so that buildings look good with alternate palettes and not like scrambled colors because the person isn't sure what they are doing), and the requirement that for example you need a pallete informaiton bit added or all objects, this requires a lot of work which can probably be better put elsewhere. > Well, making the the map bigger, kills the 38 pngs. then you should use > 15x15 in 32x32 or 13x13 > in 34x34. The point is, that around pixel of 35x35 is a critical area. If > you have a smaller tile, > your pixels and with it your details go fast down. Beyond it, you got much > more pixel for much more > details. > > Thats because one pixel in y and x more or not is not strictly linear. 70x70 > pixels are not 2 times more > then 35x35 of course. Its the factor 4. I work some times as professional > game writer and i had thsi dis- > cussion with some artist who telling me just this facts. Yes, I know the amount of pixels in an image is the multiplication of the x & y. But realistically, given the fact that we just recently went to png and had decided to go with 32x32, changing it yet again seems unlikely. As display resolution increases, there will always be a call for bigger images. I can see going to 35x35, and then a year from now someone say 'well, 40x40 would really be a lot better'. But perhaps I'm a bit biased. To me, gameplay and quality of maps and other such things are more interesting than the graphics looking slightly more spiffy. There will always be something out there that looks better than crossfire. From mwedel at scruznet.com Wed Nov 1 19:20:19 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The CVS server must move.... Eventually. How about sourceforge? References: <3A009FE1.14102.2760BB4@localhost> Message-ID: <3A00C153.E7A95735@scruznet.com> Joris Bontje wrote: > I have a little experience with other sourceforge projects. The setup > of the environment isn't done in one day. Keeping 2 CVS'es next to > each other isn't possible. Presumably, when we do decide to move, Peter can shut down access to the current server off boltzmann and everyone wait a few days for the one on sourceforg to get all set up. Of bigger importance to me is be able to import all the cvs log and tags and other cvs database information that has been generated on boltzmann. From peterm at tesla.EECS.Berkeley.EDU Wed Nov 1 22:38:11 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:03 2005 Subject: [CF-Devel] The CVS server must move.... Eventually. How about sourceforge? In-Reply-To: Your message of "Wed, 01 Nov 2000 20:20:19 EST." <3A00C153.E7A95735@scruznet.com> Message-ID: <200011020438.UAA17611@tesla.EECS.Berkeley.EDU> > Presumably, when we do decide to move, Peter can shut down access to the > current server off boltzmann and everyone wait a few days for the one on > sourceforg to get all set up. Most likely a few hours, not a few days. > Of bigger importance to me is be able to import all the cvs log and tags and > other cvs database information that has been generated on boltzmann. The FAQ on source forge says that we can simply tar up our existing CVSROOT and give it to them and it will work. Moving to source forge seems both easy and beneficial in many ways. The only downsides I have been able to see so far are that their servers are slow (boltzmann has very little load), and we would have to have all the developers re-register at sourceforge. I noticed a few more "up" sides to the site: a) message forums b) survey forms (i.e., we could actually vote on directions to take in cf) c) automated mailing list addition/maintenance d) bug tracking e) task tracking PeterM From peterm at tesla.EECS.Berkeley.EDU Thu Nov 2 01:07:09 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] My opinion on tossing xbm/xpm in favor of png: In-Reply-To: Your message of "Wed, 01 Nov 2000 17:34:40 +0100." Message-ID: <200011020707.XAA26227@tesla.EECS.Berkeley.EDU> I far prefer the xpms to the png images. I think they look a lot better. I think forcing the use of pngs by default would do more harm at this point than good. Sure, the developers might be a bit more motivated to fix all the ugly ones (of which there are still many): then again, the people who DO use the pngs don't seem to have been fixing very many. But in the meantime, while they're being fixed, the general populace will have these repulsive, ugly pngs, which may put them off the game completely. And these people are the people who will succeed us as the developers one day: *if* we get them hooked. :) I would rather see the pngs wait until someone has fixed them up to an acceptable standard before making them the default (and, in practice, forcing them on everyone.) As to increasing the images size yet further, to 38x38 or whatever. I shudder. I have tried MANY times just to get an artist to draw me a few 2x1 or 2x2 images of demons. There aren't enough middle size/strength demons. I've begged on the list. I've begged some people I met. It's been years. No demons. The 38x38 project, like the png project, will never get done unless one or two people are willing to see the project through to completion. More productive, I think, would be more of a move of image from server to client side. I know this is difficult, but it would allow someone to, say, create his own client which uses ASCII characters for everything, or uses his own custom 128x128 uberimages. We could send the archetype name+ an int to ask for an image? How much additional bandwidth/CPU would this require? Could we send the archetype name once and assign an int for second requests of that image during a single session? This would require a large bitmap (NumImages bits) for each client. PM > > On Wed, Nov 01, 2000 at 02:43:40PM +0100, Andreas Vogl wrote: > > > On Mi, 1.11.00, Jan E. wrote: > > > > I'm using xbms with caching turned off because this seems to be the > > > > fastest setting when playing on a remote server over a slow link. > > > > > > I assume that you play only for code-testing, therefor this argument > > > doesnīt seem fair to me. =) > > > > I don't test code on remote servers. > > > > > On using xbms a player would miss a great part of the fun. Iīve played > > > > Faster response from the server is more important to me than nice > > graphics, but continueing the xbm support is not the right answer to > > this problem. The X11 client does a (superfluous) access() call and a > > file open and read per face command. This means that the first time > > you see a Greater Daemon after the client was started, the client will > > do 42 disk accesses. Meeting a Greater Daemon is not exactly the right > > time for some additional lag. This does not happen when caching of > > images is turned off, and a xbm image is not much larger than a face > > command. Furthermore, you don't ever get these '?' images without > > caching. > > > > These problems could be avoided if the client would request all face > > number -> face name mappings from the server when it is started. It > > could then load the faces from its local cache before playing begins. > > > > This is really what we need: a MAPFACES and GETFACES cmd. > > The server simply do a list of the face of a map you enter the first time, > removes all face the player has got before and send them as a long data > string. > > MAPFACES len > > This should work very fancy, because you dont get the problem Jan described, > because you must > load a picture in the same moment your socket got hot and the server drop > out hundreds of > fighting datas. > > Also, you do with one cmd was you do with many. One bigger hit, but you save > a many small bastards. > > MichToen > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mwedel at scruznet.com Wed Nov 1 22:29:10 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] My opinion on tossing xbm/xpm in favor of png: References: <200011020707.XAA26227@tesla.EECS.Berkeley.EDU> Message-ID: <3A00ED96.BEE81188@scruznet.com> Peter Mardahl wrote: > > I far prefer the xpms to the png images. I think they look > a lot better. I think forcing the use of pngs by default > would do more harm at this point than good. Its a mix. The current png images are based on the 32x32 xpm's that david sundqvist did a while back. For those that were actually done for 32x32, they look better, for those not, they look worse. In reality, for many images, it probably would have made more sense to just transer the 24x24 without expansion - for things like items, this would work fine. For things like background, that obviously was not an option. > More productive, I think, would be more of a move of image from > server to client side. I know this is difficult, but it would > allow someone to, say, create his own client which uses ASCII > characters for everything, or uses his own custom 128x128 uberimages. > > We could send the archetype name+ an int to ask for an image? How much > additional bandwidth/CPU would this require? Could we send the > archetype name once and assign an int for second requests of that image > during a single session? This would require a large bitmap > (NumImages bits) for each client. This can already be done - if you choose the image caching option, the server says 'image 50 is orc.111' for example. So a client could certainly have a complete set of images it uses of whatever size and format it finds convenient. The problem with that is that as new images are added to the server, the client has to be updated or the client still needs to be able to deal with whatever image format and size the server has. Or for a text only client, it would obviously have to have some idea what the different names mean (if you go nethack like, most of the monsters could just be represented by the first letter, but things like money and gems would require some more intelligent handling. From dnh at hawthorn.csse.monash.edu.au Thu Nov 2 03:08:22 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] Re: My opinion on tossing xbm/xpm in favor of png: In-Reply-To: <200011020707.XAA26227@tesla.EECS.Berkeley.EDU> Message-ID: On Wed, 1 Nov 2000, Peter Mardahl wrote: > > I far prefer the xpms to the png images. I think they look > a lot better. I think forcing the use of pngs by default > would do more harm at this point than good. Agreed, pngs are a better format, but what is the point in switching to a better format.. if the pictures are worse. > Sure, the developers might be a bit more motivated to fix all > the ugly ones (of which there are still many): then again, the > people who DO use the pngs don't seem to have been fixing very many. Again agreed, tis one thing to argue the toss, tis another to go out and do it. I make a habit of not putting major suggestions unless I, at least in part, are willing to contribute to that. Now it is fine to ask about it, but unless you can do it.. what is the point? > But in the meantime, while they're being fixed, the general populace > will have these repulsive, ugly pngs, which may put them off the game > completely. And these people are the people who will succeed us > as the developers one day: *if* we get them hooked. :) Yup, I dislike the pngs images greatly.. I much prefer the tile based representation of monsters/chars. If anyone like the pngs.. sure.. but don't force it on me please. > I would rather see the pngs wait until someone has fixed them up > to an acceptable standard before making them the default (and, in > practice, forcing them on everyone.) Yup, well i thought about having graphics sets, but that is work.. and I don't want to waste my time on something which is just gonna be ignored... nor I think would anyone else. I don't know if you realise how long it takes to create one character, or one monster, but each one takes me at least 1 day.. and even then they aren't to my liking usually. A really nice character (like paladin) takes me around 2 days of fixing.. leaving it, coming back to it and changing something. That process will be made even longer with these new changes. > As to increasing the images size yet further, to 38x38 or whatever. > I shudder. Ditto. > I have tried MANY times just to get an artist to draw me > a few 2x1 or 2x2 images of demons. There aren't enough middle > size/strength demons. I've begged on the list. I've begged > some people I met. It's been years. No demons. The 38x38 project, > like the png project, will never get done unless one or two people > are willing to see the project through to completion. Well I am currently making to new dragons, but drawing pngs and xpms is taking a long long time. Tis a pain ;). none the less, I prefer making graphics in xpm just to get the basic shape because there isn't much fuss with an xpm =) > More productive, I think, would be more of a move of image from > server to client side. I know this is difficult, but it would > allow someone to, say, create his own client which uses ASCII > characters for everything, or uses his own custom 128x128 uberimages. Yup, then we could create various clients for speciality groups (low bandwidth, low colour, super colour, mega ultra ginormeous bandiwdth ;) > We could send the archetype name+ an int to ask for an image? How much > additional bandwidth/CPU would this require? Could we send the > archetype name once and assign an int for second requests of that image > during a single session? This would require a large bitmap > (NumImages bits) for each client. no comment. dnh (Darth_bob) ps. I am not against change, but I don't wanna see people rush into an idea then get bored halfway. Tis a worst case, but it is a possiblity. pps. My brother has a really neat way of handleing tiles for GTK. Will probably start mucking around soon hopefully get a much faster frame rate plus flexibility through it =) > PM > > > > > > On Wed, Nov 01, 2000 at 02:43:40PM +0100, Andreas Vogl wrote: > > > > On Mi, 1.11.00, Jan E. wrote: > > > > > I'm using xbms with caching turned off because this seems to be the > > > > > fastest setting when playing on a remote server over a slow link. > > > > > > > > I assume that you play only for code-testing, therefor this argument > > > > doesnīt seem fair to me. =) > > > > > > I don't test code on remote servers. > > > > > > > On using xbms a player would miss a great part of the fun. Iīve played > > > > > > Faster response from the server is more important to me than nice > > > graphics, but continueing the xbm support is not the right answer to > > > this problem. The X11 client does a (superfluous) access() call and a > > > file open and read per face command. This means that the first time > > > you see a Greater Daemon after the client was started, the client will > > > do 42 disk accesses. Meeting a Greater Daemon is not exactly the right > > > time for some additional lag. This does not happen when caching of > > > images is turned off, and a xbm image is not much larger than a face > > > command. Furthermore, you don't ever get these '?' images without > > > caching. > > > > > > These problems could be avoided if the client would request all face > > > number -> face name mappings from the server when it is started. It > > > could then load the faces from its local cache before playing begins. > > > > > > > This is really what we need: a MAPFACES and GETFACES cmd. > > > > The server simply do a list of the face of a map you enter the first time, > > removes all face the player has got before and send them as a long data > > string. > > > > MAPFACES len > > > > This should work very fancy, because you dont get the problem Jan described, > > because you must > > load a picture in the same moment your socket got hot and the server drop > > out hundreds of > > fighting datas. > > > > Also, you do with one cmd was you do with many. One bigger hit, but you save > > a many small bastards. > > > > MichToen > > > > _______________________________________________ > > crossfire-devel mailing list > > crossfire-devel@lists.real-time.com > > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From echter at informatik.uni-rostock.de Thu Nov 2 07:42:51 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] Re: Arrow, thrown object and generic attack fixes In-Reply-To: <20001031223659.A7906@hokkaido.informatik.uni-rostock.de>; from echter@informatik.uni-rostock.de on Tue, Oct 31, 2000 at 10:36:59PM +0100 References: <20001031223659.A7906@hokkaido.informatik.uni-rostock.de> Message-ID: <20001102144251.A8359@hokkaido.informatik.uni-rostock.de> New version of the patch. Fixes a bug in stop_item() (you couldn't light torches in your inventory with flint and stell) and includes a complete rewrite of decrease_ob_nr() which had two bugs and now handles removed objects better. I've also written a detailed change log for the patch. -- Jan -------------- next part -------------- Summary of this patch: Provide new stop_item() function for properly handling "moving" items on a map (flying arrows, thrown objects, active cones); obsoletes the workarounds. Fix some attack bugs (with possible server crashes) - many attackers attacked while being removed, even though much code could only handle the attacker being on the same map as the victim (not even the attacker being in the victim's inventory, e.g. poison). common/object.c: get_split_ob(): Completed support for splitting removed objects. common/object.c: decrease_ob_nr(): Rewrote this function: Added support for removed objects. Removing an object completely didn't always update the environment's weight properly. Removing an amount of 0 from an object with nrof == 0 destroyed the object. Improved performance a bit (don't need to update the player's weight if an object below the player is modified). server/apply.c: move_apply(): THROWN_OBJ and ARROW: Use new hit_with_arrow() function. server/attack.c: save_throw_object(): Use new stop_item() function before trying to modify an object. Added originator to all insert_ob_in_map() calls. server/attack.c: hit_map(): Added log message if the hitter is not on a map. Added was_destroyed() check after calling save_throw_object(). server/attack.c: get_attack_mode() and abort_attack(): New functions to determine the type of attack (simple or full attack). server/attack.c: attack_ob(): Now only attack_ob_simple() with default damage and weapon class values. server/attack.c: attack_ob_simple(): Contains most of old attack_ob(), but takes damage and weapon class as parameters, needed for hit_with_arrow(). Uses get_attack_mode() and abort_attack() to support new "simple" attack mode. server/attack.c: stick_arrow() and hit_with_arrow(): Moved those parts of old stop_arrow() and move_arrow() that dealt with attacking a victim over here. server/attack.c: hit_player(): Uses get_attack_mode() and abort_attack() to support new "simple" attack mode. server/attack.c: paralyze_player(): Use insert_ob_in_map_simple() instead of insert_ob_in_map() because the callers are not prepared for this function triggering any complex machinery, and insert_ob_in_map_simple() should be enough for plain visual effects. server/attack.c: thrown_item_effect(): Don't need to deal with thrown objects, hit_with_arrow() already does everything necessary. server/attack.c: adj_attackroll(): Added log message if hitter and victim are not on the same map. server/c_object.c: pick_up_object(): Removed can_pick() check because pick_up() already checks this. Added support for picking up removed objects because the stop_item() in pick_up() can now call us with removed objects. Moved FLAG_STARTEQUIP check to pick_up(). Fixed weight limit lookup for monsters that have strength > MAX_STAT. server/c_object.c: pick_up(): Use new stop_item() function. server/player.c: fire_bow() and server/skills.c: do_throw(): Removed FLAG_NO_PICK workaround for flying objects. stop_item() now handles this correctly. server/spell_effect.c: move_cancellation(): Don't call hit_map() with a removed attacker. server/spell_util.c: cast_cone(): Only print warning message about cones that don't have FLAG_FLY/WALK_ON if the cone does any damage. server/spell_util.c: move_cone(): Removed workaround for cones in ice cubes. stop_item() now handles this correctly. server/spell_util.c: explode_object(): Rewrote this function: New interface - exploding object must not be removed when the function is called, it must have an other_arch (i.e. it must be able to explode), and it will be gone for sure when the function terminates. Removed some code with no effect. Don't call any attack functions with removed attackers. server/spell_util.c: check_fired_arch(): Rewrote this function. server/spell_util.c: move_fired_arch(): Rewrote most of this function: Don't attack with removed attackers. Call check_fired_arch() instead of duplicating its code. server/spell_util.c: move_ball_lightning(): Don't attack with removed attackers. Rewrote the movement algorithm to simplify this task. server/time.c: stop_item() and fix_stopped_item: New functions. server/time.c: fix_stopped_arrow(): Contains most of the old stop_arrow() function. Unlike stop_arrow(), it takes an arrow that is not removed. Removed FLACK_NO_PICK workaround. server/time.c: stop_arrow(): Stops arrows and thrown objects and puts them on the map. Sticking objects into targets is no longer handled by stop_arrow(), but by hit_with_arrow(). server/time.c: move_arrow(): Don't attack with removed attackers. socket/item.c: esrv_move_object(): Removed misleading comment. -------------- next part -------------- A non-text attachment was scrubbed... Name: patch37c.gz Type: application/x-gunzip Size: 15791 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001102/26723844/patch37c.bin From mtx93 at tzi.de Thu Nov 2 11:05:21 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] My opinion on tossing xbm/xpm in favor of png: In-Reply-To: <200011020707.XAA26227@tesla.EECS.Berkeley.EDU> Message-ID: Hi Hm, you all here speak about the problem to get some good artist, but you all don't see the problem why you dont get one... They will not come. Why should they do? - crossfire has a the moment a fuzzy grafik interface - 24x24 tiles - 16 colors - and when they will do it at the moment they must draw 3 (!!) sets - one black/white, one 24x4 pixels 16 colors, one as png in 32x32 pixels YOU REALLY THINK THERE IS ONLY ONE GOOD ARTIST OUT THERE DOING THIS? Sorry, now i must piss you all on. I do it, because you should feel like an artist who come in contact with crossfire, asked by you to work for it. Why you don't also ask them, to drawing naked SM pictures of here mothers too? Perhaps he will say ok, but after you tell them to do it in 16 colors, they will kick your ass. Sorry for it, thats not personal :)) But i really must laugh when i think about what an artist today think when you show them crossfire at the moment - show them all the shiny nice 16 colors, with this crappy 264x264 pixels window ... For the xpms it had worked, because they are good as they come out for linux, they are some kind of "up to date". But know we have a different millennium and all the fency artist have a pentium xxx for a few hundreds bucks in his home with a copy of all of the render programs you can imagine. Or why do you think have also the smallest warez site half of all ever selled renderers in his lib? There is a shareware version of ULTIMA III out there for the Mac with more colors and bigger map then corssfire. So its correct when i say that the grafiks of crossfire is outdated since about 6-12 years. ... and then you must tell them to draw it also in black/white "and for the feature do it as png in 32x32 but better do it in 16 colors too, because we don't show more colors yet, so if you draw then as fantastic true color render, it will look like shit through the bad color conversion". Come on guys, tell me one argument why a artist draw for crossfire who is not one of us fanatics? NO ONE. Never. You will not find one. Ok, you can say to him: "draw it now in true color, if we have enough, we will show." You really think it will work? No, it will not. Its the same, people come to you , asking you to drop internet and cf to write a fency new shareware programm for the C64. Artists are eye people. Believe me, i worked with them for money. They want see what they do, they MUST see it. There are only a few guys out there, which can really work with dummys, they are all high payed professionels. So, let me say it again, why we will get no artist for crossfire yet and in the future for 3 grafik sets and for 24x24x16 xpms: - its boring for them! They will laugh about you! All the way, good artist today use all the fency grafik programm. Even 2D programms now use fency rendered pictures. As pngs with true color/high color or even 256 palettes you can do it, but never in 16 colors. - Thats, why if you know to use a renderer and have the modells (there are out tons of it), its much easier to render a dragon animation for example then to draw it! There are many artist out there who render, also much who draw them on paper scan them in and redraw them yet. But the "pixel" guys are like dinosaurs, they vanish more and more. - The time they need to draw 3 sets will upset even the hardest chair ass. In hours, there is no difference in making a black/white, xpm or rendered png. Its hard work, to make a 24x24x16 xpm which should looks nice. Ok, i can talk hours more about why the things go wrong here on grafik side. What we all want is a good grafik, easy interface, a good working community for cf. What we need is an open interface, a way to make it possible to bring in even high quality grafik, who are shown the artist "on demand" in the game. Thes are what we need, and how it should go: - we need more colors. 256 are senseless, so simple use 24bit because they can easily dropped down to 256 colors or HighColor. Its the native format this days for pictures. Remember that even if you save pngs as 16 colors, the palette information is 24bit. Use pngs = use 24bit automatically. - palette manipulations are state of art, i will finish today the palette animation interface for the dx client and will give out a beta where you can change the palette "per hand" to some monsters. Is really simple. - You need a way to include new pictures as set or single "at runtime" on client side. In the dx client i have a folder told "ext". When image cmd comes from the server, the client looks first in the ext folder for it. its there, he use it. If not, he will search the cache folder, is it there not too, he will catch it from server and put in in cache folder. - Now, you easily can put in pictures in the client, copy it with the same name in the ext folder. - A hotkey will force the client to reload the pictures in the ext folder at runtime, so they can be shown. - We need so many pixels in a tile we can get, so the map looks good in 800x600 and 1024x768 (that will be standard for the next years). For 11x11 the 32x32 looks too small in 800x600, so add for example 13x13 in 34x34 or so. Just make a big map like possible with many details, the artists need it - and for them the coder do it, not for others!!! - the dx client will shown only pngs. At what format, we will see, in extreme, i will get the pngs from server, scale them up at runtime and save them in new size, thats no real problem with the png lib. In the ext folder, they will be in native then. - we need to make the pngs in the linux client as default. - drop xbms and xpms. That not mean to cut them of now of cf, just don't make no new one except for dummys for new grafiks which comes now and build all new features around the pngs. So you can still play with the xpms or xbm if you give the -xbm at commandline - the change to png must be in the mind of the developer, only then it will work. - when we have a client with bigger map and highColor/True color we can go to ask a artist, "show this, the pngs now look ugly, try to draw some better" - ONLY them. - and he must be feeling the cummunity wants his work. He must get the return next day after he draws a new fancy pic - "thats good, thats look cool, etc." - So, we need a ftp, where artist can store the pngs, and where the guys can download them. Thats the only way, we can bind artist to cf. Don't tell me, there is an other, like many here wrote, they find no way in the past, so we need new ideas for the future. BTW, there is an other way to come to artist, one other is - paying them :) I hope you see, that i want bring cf in front, not spreading fency ideas without brain. Michael > I far prefer the xpms to the png images. I think they look > a lot better. I think forcing the use of pngs by default > would do more harm at this point than good. > > Sure, the developers might be a bit more motivated to fix all > the ugly ones (of which there are still many): then again, the > people who DO use the pngs don't seem to have been fixing very many. > > But in the meantime, while they're being fixed, the general populace > will have these repulsive, ugly pngs, which may put them off the game > completely. And these people are the people who will succeed us > as the developers one day: *if* we get them hooked. :) > > I would rather see the pngs wait until someone has fixed them up > to an acceptable standard before making them the default (and, in > practice, forcing them on everyone.) > > As to increasing the images size yet further, to 38x38 or whatever. > I shudder. > > I have tried MANY times just to get an artist to draw me > a few 2x1 or 2x2 images of demons. There aren't enough middle > size/strength demons. I've begged on the list. I've begged > some people I met. It's been years. No demons. The 38x38 project, > like the png project, will never get done unless one or two people > are willing to see the project through to completion. > > More productive, I think, would be more of a move of image from > server to client side. I know this is difficult, but it would > allow someone to, say, create his own client which uses ASCII > characters for everything, or uses his own custom 128x128 uberimages. > > We could send the archetype name+ an int to ask for an image? How much > additional bandwidth/CPU would this require? Could we send the > archetype name once and assign an int for second requests of that image > during a single session? This would require a large bitmap > (NumImages bits) for each client. > > PM From mtx93 at tzi.de Thu Nov 2 11:21:27 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] Re: My opinion on tossing xbm/xpm in favor of png: In-Reply-To: Message-ID: > > > On Wed, 1 Nov 2000, Peter Mardahl wrote: > > > > > I far prefer the xpms to the png images. I think they look > > a lot better. I think forcing the use of pngs by default > > would do more harm at this point than good. > > Agreed, pngs are a better format, but what is the point in switching to a > better format.. if the pictures are worse. > > > Sure, the developers might be a bit more motivated to fix all > > the ugly ones (of which there are still many): then again, the > > people who DO use the pngs don't seem to have been fixing very many. > > Again agreed, tis one thing to argue the toss, tis another to go out and > do it. I make a habit of not putting major suggestions unless I, at least > in part, are willing to contribute to that. Now it is fine to ask about > it, but unless you can do it.. what is the point? > > > But in the meantime, while they're being fixed, the general populace > > will have these repulsive, ugly pngs, which may put them off the game > > completely. And these people are the people who will succeed us > > as the developers one day: *if* we get them hooked. :) > > Yup, I dislike the pngs images greatly.. I much prefer the tile based > representation of monsters/chars. If anyone like the pngs.. sure.. but > don't force it on me please. What you mean with tile based reprensentation? There is no difference in the png set to the xbm, except they are bigger in size and have more colors. They are tile based too!? > > I would rather see the pngs wait until someone has fixed them up > > to an acceptable standard before making them the default (and, in > > practice, forcing them on everyone.) Well ,thats real for the bad iso style pngs. But when we simply convert the xpms to png, there should not difference. Many of the monsters, items dont must be rescaled. Iam sure, that if we sort, copy and scale the xpms all to pngs, and drop the badest pngs, we get a usefull set. Then we have basis. > Yup, well i thought about having graphics sets, but that is work.. and I > don't want to waste my time on something which is just gonna be ignored... > nor I think would anyone else. I don't know if you realise how long it > takes to create one character, or one monster, but each one takes me at > least 1 day.. and even then they aren't to my liking usually. A really > nice character (like paladin) takes me around 2 days of fixing.. leaving > it, coming back to it and changing something. That process will be made > even longer with these new changes. > > > As to increasing the images size yet further, to 38x38 or whatever. > > I shudder. You will not tell me, thats its easier for you to draw a 24x24x16 picture which looks good, instead of a 38x38 in >=256 colors? Thats not true - if you can draw bigger object with more details proberly. Its a question of skill. A good drawer draws 38x38x256 faster and better than 24x24x16 because he can do more tricks and is free in his action. I will not blame you, but if you worked you in, you will not get back after some time. I know it, i work for 4 years with artist who do it. I have around 1.5 Gigabytes of game grafiks for some project here on my harddisk. Of course, they are all copyright and i can't give them out, but i know where iam talking about. > Ditto. > > > I have tried MANY times just to get an artist to draw me > > a few 2x1 or 2x2 images of demons. There aren't enough middle > > size/strength demons. I've begged on the list. I've begged > > some people I met. It's been years. No demons. The 38x38 project, > > like the png project, will never get done unless one or two people > > are willing to see the project through to completion. > > Well I am currently making to new dragons, but drawing pngs and xpms is > taking a long long time. Tis a pain ;). none the less, I prefer making > graphics in xpm just to get the basic shape because there isn't much fuss > with an xpm =) > > > More productive, I think, would be more of a move of image from > > server to client side. I know this is difficult, but it would > > allow someone to, say, create his own client which uses ASCII > > characters for everything, or uses his own custom 128x128 uberimages. > > Yup, then we could create various clients for speciality groups (low > bandwidth, low colour, super colour, mega ultra ginormeous bandiwdth ;) > > > We could send the archetype name+ an int to ask for an image? How much > > additional bandwidth/CPU would this require? Could we send the > > archetype name once and assign an int for second requests of that image > > during a single session? This would require a large bitmap > > (NumImages bits) for each client. > > no comment. > > dnh (Darth_bob) > > ps. I am not against change, but I don't wanna see people rush into an > idea then get bored halfway. Tis a worst case, but it is a possiblity. > > pps. My brother has a really neat way of handleing tiles for GTK. Will > probably start mucking around soon hopefully get a much faster frame rate > plus flexibility through it =) > > > PM > > > > > > > > > > On Wed, Nov 01, 2000 at 02:43:40PM +0100, Andreas Vogl wrote: > > > > > On Mi, 1.11.00, Jan E. wrote: > > > > > > I'm using xbms with caching turned off because this > seems to be the > > > > > > fastest setting when playing on a remote server over a > slow link. > > > > > > > > > > I assume that you play only for code-testing, therefor > this argument > > > > > doesn?t seem fair to me. =) > > > > > > > > I don't test code on remote servers. > > > > > > > > > On using xbms a player would miss a great part of the > fun. I?ve played > > > > > > > > Faster response from the server is more important to me than nice > > > > graphics, but continueing the xbm support is not the right answer to > > > > this problem. The X11 client does a (superfluous) access() > call and a > > > > file open and read per face command. This means that the first time > > > > you see a Greater Daemon after the client was started, the > client will > > > > do 42 disk accesses. Meeting a Greater Daemon is not > exactly the right > > > > time for some additional lag. This does not happen when caching of > > > > images is turned off, and a xbm image is not much larger than a face > > > > command. Furthermore, you don't ever get these '?' images without > > > > caching. > > > > > > > > These problems could be avoided if the client would request all face > > > > number -> face name mappings from the server when it is started. It > > > > could then load the faces from its local cache before > playing begins. > > > > > > > > > > This is really what we need: a MAPFACES and GETFACES cmd. > > > > > > The server simply do a list of the face of a map you enter > the first time, > > > removes all face the player has got before and send them as a > long data > > > string. > > > > > > MAPFACES len > > > > > > This should work very fancy, because you dont get the problem > Jan described, > > > because you must > > > load a picture in the same moment your socket got hot and the > server drop > > > out hundreds of > > > fighting datas. > > > > > > Also, you do with one cmd was you do with many. One bigger > hit, but you save > > > a many small bastards. > > > > > > MichToen > > > > > > _______________________________________________ > > > crossfire-devel mailing list > > > crossfire-devel@lists.real-time.com > > > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > > > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From peterm at tesla.EECS.Berkeley.EDU Thu Nov 2 14:40:11 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] Stat-wrapping bug get killed enough and your stats go to 30! Message-ID: <200011022040.MAA18381@tesla.EECS.Berkeley.EDU> I've a report that depletion on death code can wrap your stats all the way from 18, to 1, to -126, to 127. Build a perfect char, just kill him a LOT. We really ought to fix this.... PM From echter at informatik.uni-rostock.de Thu Nov 2 14:56:54 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:04 2005 Subject: [CF-Devel] Re: Arrow, thrown object and generic attack fixes In-Reply-To: <20001102144251.A8359@hokkaido.informatik.uni-rostock.de>; from echter@informatik.uni-rostock.de on Thu, Nov 02, 2000 at 02:42:51PM +0100 References: <20001031223659.A7906@hokkaido.informatik.uni-rostock.de> <20001102144251.A8359@hokkaido.informatik.uni-rostock.de> Message-ID: <20001102215654.A18509@hokkaido.informatik.uni-rostock.de> On Thu, Nov 02, 2000 at 02:42:51PM +0100, Jan Echternach wrote: > New version of the patch. Fixes a bug in stop_item() (you couldn't > light torches in your inventory with flint and stell) and includes a > complete rewrite of decrease_ob_nr() which had two bugs and now handles > removed objects better. I've also written a detailed change log for > the patch. This should be the final version. Even though I've already tested all modifications to a reasonable extent, it could be tested more in normal situations (completing some quests etc.) since I have changed even more basic parts of crossfire (esp. insert_ob_in_map()). What has changed since patch37c that doesn't appear in the attached comments: Fixed a small bug in explode_object() introduced in patch37c. Allowed hitter and target to be in any inventory in get_attack_mode(), not only in each other's inventory, because this is needed for runes in doors (the rune that strikes back when a door is attacked is in the door's inventory, not in the hitter's inventory). Difference between patch37c.comments and patch37d.comments: +common/object.c: insert_ob_in_map(): Call check_walk_on() after +update_object() because the latter needs to update some very +important flags used by a lot of code before this code is called +by check_walk_on(). + +server/apply.c: move_apply(): Added recursion limit. + +server/apply.c: move_apply(): FBULLET and BULLET: Call +check_fired_arch() only when the victim blocks the square (FLAG_NO_PASS +or FLAG_ALIVE). + +server/c_object.c: Fixed two typos in "can't pick up xxx" messages. + +server/rune.c: spring_trap(): Fix unlimited trap recursion. Since +traps are triggered by move_apply(), the result of triggering a trap +may trigger the trap again before it is deactivated. + +server/rune.c: spring_trap(): Runes that don't cast spells can only be +triggered by living objects. -- Jan -------------- next part -------------- Summary of this patch: Provide new stop_item() function for properly handling "moving" items on a map (flying arrows, thrown objects, active cones); obsoletes the workarounds. Fix some attack bugs (with possible server crashes) - many attackers attacked while being removed, even though much code could only handle the attacker being on the same map as the victim (not even the attacker being in the victim's inventory, e.g. poison). common/object.c: insert_ob_in_map(): Call check_walk_on() after update_object() because the latter needs to update some very important flags used by a lot of code before this code is called by check_walk_on(). common/object.c: get_split_ob(): Completed support for splitting removed objects. common/object.c: decrease_ob_nr(): Rewrote this function: Added support for removed objects. Removing an object completely didn't always update the environment's weight properly. Removing an amount of 0 from an object with nrof == 0 destroyed the object. Improved performance a bit (don't need to update the player's weight if an object below the player is modified). server/apply.c: move_apply(): Added recursion limit. server/apply.c: move_apply(): THROWN_OBJ and ARROW: Use new hit_with_arrow() function. server/apply.c: move_apply(): FBULLET and BULLET: Call check_fired_arch() only when the victim blocks the square (FLAG_NO_PASS or FLAG_ALIVE). server/attack.c: save_throw_object(): Use new stop_item() function before trying to modify an object. Added originator to all insert_ob_in_map() calls. server/attack.c: hit_map(): Added log message if the hitter is not on a map. Added was_destroyed() check after calling save_throw_object(). server/attack.c: get_attack_mode() and abort_attack(): New functions to determine the type of attack (simple or full attack). server/attack.c: attack_ob(): Now only attack_ob_simple() with default damage and weapon class values. server/attack.c: attack_ob_simple(): Contains most of old attack_ob(), but takes damage and weapon class as parameters, needed for hit_with_arrow(). Uses get_attack_mode() and abort_attack() to support new "simple" attack mode. server/attack.c: stick_arrow() and hit_with_arrow(): Moved those parts of old stop_arrow() and move_arrow() that dealt with attacking a victim over here. server/attack.c: hit_player(): Uses get_attack_mode() and abort_attack() to support new "simple" attack mode. server/attack.c: paralyze_player(): Use insert_ob_in_map_simple() instead of insert_ob_in_map() because the callers are not prepared for this function triggering any complex machinery, and insert_ob_in_map_simple() should be enough for plain visual effects. server/attack.c: thrown_item_effect(): Don't need to deal with thrown objects, hit_with_arrow() already does everything necessary. server/attack.c: adj_attackroll(): Added log message if hitter and victim are not on the same map. server/c_object.c: Fixed two typos in "can't pick up xxx" messages. server/c_object.c: pick_up_object(): Removed can_pick() check because pick_up() already checks this. Added support for picking up removed objects because the stop_item() in pick_up() can now call us with removed objects. Moved FLAG_STARTEQUIP check to pick_up(). Fixed weight limit lookup for monsters that have strength > MAX_STAT. server/c_object.c: pick_up(): Use new stop_item() function. server/player.c: fire_bow() and server/skills.c: do_throw(): Removed FLAG_NO_PICK workaround for flying objects. stop_item() now handles this correctly. server/rune.c: spring_trap(): Fix unlimited trap recursion. Since traps are triggered by move_apply(), the result of triggering a trap may trigger the trap again before it is deactivated. server/rune.c: spring_trap(): Runes that don't cast spells can only be triggered by living objects. server/spell_effect.c: move_cancellation(): Don't call hit_map() with a removed attacker. server/spell_util.c: cast_cone(): Only print warning message about cones that don't have FLAG_FLY/WALK_ON if the cone does any damage. server/spell_util.c: move_cone(): Removed workaround for cones in ice cubes. stop_item() now handles this correctly. server/spell_util.c: explode_object(): Rewrote this function: New interface - exploding object must not be removed when the function is called, it must have an other_arch (i.e. it must be able to explode), and it will be gone for sure when the function terminates. Removed some code with no effect. Don't call any attack functions with removed attackers. server/spell_util.c: check_fired_arch(): Rewrote this function. server/spell_util.c: move_fired_arch(): Rewrote most of this function: Don't attack with removed attackers. Call check_fired_arch() instead of duplicating its code. server/spell_util.c: move_ball_lightning(): Don't attack with removed attackers. Rewrote the movement algorithm to simplify this task. server/time.c: stop_item() and fix_stopped_item: New functions. server/time.c: fix_stopped_arrow(): Contains most of the old stop_arrow() function. Unlike stop_arrow(), it takes an arrow that is not removed. Removed FLACK_NO_PICK workaround. server/time.c: stop_arrow(): Stops arrows and thrown objects and puts them on the map. Sticking objects into targets is no longer handled by stop_arrow(), but by hit_with_arrow(). server/time.c: move_arrow(): Don't attack with removed attackers. socket/item.c: esrv_move_object(): Removed misleading comment. -------------- next part -------------- A non-text attachment was scrubbed... Name: patch37d.gz Type: application/x-gunzip Size: 18439 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001102/4c9532a6/patch37d.bin From mtx93 at tzi.de Thu Nov 2 17:08:52 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] Re: Arrow, thrown object and generic attack fixes In-Reply-To: <20001102215654.A18509@hokkaido.informatik.uni-rostock.de> Message-ID: Jan There is one bug out, still in crossfire since a long time and kill the server. If you go for the mopoons quest in lake city, you get teleported when you say the password "Kashu". For some reason, if you play this quest with 2 players, and both are now in the first level of the wiz tower with "Kashu" and one recall to scorn and enter mopoons quest again with saying "Kashu", the server often crashes badly. This also happens on other points in cf where the teleport mashine of mopoons is used. I never can see why, it happens some time and some times not. Also, is it possible to do a autosafe if you leave your appartment? Its a easy way to dupe items, simply drop them a few seconds before a reset in your appartment and then leaving it. Michael > -----Original Message----- > From: crossfire-devel-admin@lists.real-time.com > [mailto:crossfire-devel-admin@lists.real-time.com]On Behalf Of Jan > Echternach > Sent: Thursday, November 02, 2000 9:57 PM > To: crossfire-devel@lists.real-time.com > Subject: Re: [CF-Devel] Re: Arrow, thrown object and generic attack > fixes > > > On Thu, Nov 02, 2000 at 02:42:51PM +0100, Jan Echternach wrote: > > New version of the patch. Fixes a bug in stop_item() (you couldn't > > light torches in your inventory with flint and stell) and includes a > > complete rewrite of decrease_ob_nr() which had two bugs and now handles > > removed objects better. I've also written a detailed change log for > > the patch. > > This should be the final version. Even though I've already tested all > modifications to a reasonable extent, it could be tested more in normal > situations (completing some quests etc.) since I have changed even more > basic parts of crossfire (esp. insert_ob_in_map()). > > What has changed since patch37c that doesn't appear in the attached > comments: Fixed a small bug in explode_object() introduced in > patch37c. Allowed hitter and target to be in any inventory in > get_attack_mode(), not only in each other's inventory, because this is > needed for runes in doors (the rune that strikes back when a door is > attacked is in the door's inventory, not in the hitter's inventory). > > Difference between patch37c.comments and patch37d.comments: > > +common/object.c: insert_ob_in_map(): Call check_walk_on() after > +update_object() because the latter needs to update some very > +important flags used by a lot of code before this code is called > +by check_walk_on(). > + > +server/apply.c: move_apply(): Added recursion limit. > + > +server/apply.c: move_apply(): FBULLET and BULLET: Call > +check_fired_arch() only when the victim blocks the square (FLAG_NO_PASS > +or FLAG_ALIVE). > + > +server/c_object.c: Fixed two typos in "can't pick up xxx" messages. > + > +server/rune.c: spring_trap(): Fix unlimited trap recursion. Since > +traps are triggered by move_apply(), the result of triggering a trap > +may trigger the trap again before it is deactivated. > + > +server/rune.c: spring_trap(): Runes that don't cast spells can only be > +triggered by living objects. > > -- > Jan > From mtx93 at tzi.de Thu Nov 2 17:31:55 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] DirectX and other APIs Message-ID: Hi There is a interesting thing in DX8 which comes out in the next month. It has no 2D interface!! That means no Blts, no Direct Draw! You have use DX7 for it. Of course you can do all the things - using a D3D. That means that in one year, most games runes only if you have a 3D card, including the "normal" ones. Also, every simple tetris then will use the 3D card functions for the blt. Well, i have already written my 3D engine for 2D blts. So, i will update the dx client when needed. The real cool thing is, that with a 3D engine for blts, you can use all the great things like real alpha, mutiple bitmap (oops, i mean texture :) blending or light sources. Its also good for older computers - with a 3D card of course. Because the 3D card will make more blts in the hardware since a older 2D card. But for older computer without 3D card - hey, who needs terminals? I think its a good think, because the grafik card companys have never include a good 2D blitter in the last years. Many 2D games can run MUCH faster when they get really hardware acclereated. Sniff, only my RLE blitting routines, which can clip and runtime decoding will be outdated too... On a normal card, they are faster then most system to video blts even if the card use a blitter. Well, but agp and 3D texture managment will kick them. Also, the are useless then. Sigh. Michael Toennies PS: You ask why not always all use 3D in the past if it is faster? Because the easy 2D way was in DX and no company wants that the user say: look this product is running but this not on my computer. Now, if no 2D in DX all are forced to do it, and thats ok and will satisface all in the future... Hm, that remember me to png.. :)= From andi.vogl at gmx.net Thu Nov 2 18:47:29 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] teleport/connection bug In-Reply-To: Message-ID: <000101c0452f$a777ce40$911f993e@kyle> On Fri 3.11.00, Jan E. wrote: > There is one bug out, still in crossfire since a long time and kill the > server. > > If you go for the mopoons quest in lake city, you get teleported > when you say the password "Kashu". > > [...] when saying "Kashu", the server often crashes badly. > > This also happens on other points in cf where the teleport mashine > of mopoons is used. > > I never can see why, it happens some time and some times not. Yes this bug is appearing on many places. I think I have some more precis information about it: This bug seems to appear whenever a player is standing on a teleporter while activating it (via magic_ear/button/lever) thus being beaming to a different spot. When this happens, sometimes the system crashes. Once this happened on MiDS' server so we noticed that there was an errormessage before crash: "Internal error in push_button((null))". My theory about what happens is the following: The events get processed in the wrong order somehow. The player gets beamed away before the the process of activating button/lever/magic_ear and teleporter are fully finished. Then the push_button() function gets a null-pointer instead of the player object that it should get. Maybe some CF-guru like Jan E. could fix this bug? =) It would really be a blessing because crashing bugs suck SO much! Andreas V. From mtx93 at tzi.de Thu Nov 2 19:58:30 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] Pngs Message-ID: Hi I count out the PNGs in CF and they are 3488 file of 1,071mb . There is also a double file: cobbleston1.111.png is in arch/floor and in arch/river. The one in arch/river looks be broken. When i look at them they are not at all so ugly. The bad point is, that there are 4 sets: the resized xpms, some native 32x32 in 16 colors, the strange iso tiles we all don't like and a handful others. I think to bring the set in form is not the so a big work, because there are many big animations in it, like the demons who looks not good, but they are useble. To redraw all needs time, to make them playble not a century. Michael From mwedel at scruznet.com Fri Nov 3 01:15:28 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] teleport/connection bug References: <000101c0452f$a777ce40$911f993e@kyle> Message-ID: <3A026610.E8C72F82@scruznet.com> Andreas Vogl wrote: > My theory about what happens is the following: > The events get processed in the wrong order somehow. The player gets > beamed away before the the process of activating button/lever/magic_ear > and teleporter are fully finished. Then the push_button() function gets > a null-pointer instead of the player object that it should get. Do any of these areas have multiple magic ears or other activation triggers? If that was the case, I would guess that the first matches, moves the player to somewhere, and the processing continues and finds another, but we don't have a good pointer to the player anymore. If someone can isolate this and make a small test map that reproduces the problem, it makes tracking and fixing such a bug much easier. From mwedel at scruznet.com Fri Nov 3 01:29:18 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] Pngs References: Message-ID: <3A02694E.8EE7A6FB@scruznet.com> Michael Toennies wrote: > > When i look at them they are not at all so ugly. The bad point is, that > there > are 4 sets: the resized xpms, some native 32x32 in 16 > colors, the strange iso tiles we all don't like and a handful > others. 4 styles might be a better term I would think. > > I think to bring the set in form is not the so a big work, because there > are many big animations in it, like the demons who looks not good, but they > are useble. I would say all are usuable, but how nice they look is obviously the bigger question. I have seen much discussion about how it wouldn't be much work, how an artist would like bigger tiles with more colors, and this and yet. yet NO ONE has yet to step forward and start this process. This to me says that it isn't a simple matter. If someone steps forward or recruits someone else and they decide they want to do the images at 48x48 lets say, and does 100 images at that size as a good faith start, and person was fairly convincing they would continue, I think it would be much easier to convince the developers and others that maybe that size/format should be used. Also, in terms of having 3 formats to deal with (png, xpm, and bitmap), in reality, the artist only needs to deal with one (png). I think it is fair to say that in the long run, png will probably be the image as we move forward. It is generally easy to convert one image format to another. So if you got say really high quality png of some size, they can be shrunk and color reduced for png images, and same for the black & white bitmaps. But this complete ignores the fact that this is only relevant for new images. If the issue is cleanup/improvement of the current png images, any artist does not need to do anything with xpm's or xbm's, because those images already exist and acceptable quality levels - the artist only needs to worry about cleaning up/improving the current set of png's. From mwedel at scruznet.com Fri Nov 3 02:12:43 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] Secret door images. Message-ID: <3A02737B.F574F5E5@scruznet.com> If anyone has played using the png images as we currently ship and wonder around the starting town, you will notice the 'secret' weak wall to the north of the prison sticks out like an apple in a bunch of oranges. This is because while most of the cwall images were redone to have textured stone looking walls, the weak walls was not. For the xpm set, it appears slightly different if you look closely, a few pixels are different compared to the other walls. In this particular case, you can chalk it up to not having update png image yet. But since the client is responsible for drawing the images, a client can always have more obvious images for things like weak walls. So to me, there are two possible fixes for this: 1) When the wall is yet to be damaged, it uses the same image (name & number) of an undamaged normal wall, so is completely indistinguishable from the normal walls. For this to properly work, other clues about the existance of such weak walls is needed (For example, magic mouths which say 'you feel a draft' or 'Some of the walls around here appear pretty weak'. Also, clues on npc's or scrolls would work. 2) If the walls are supposed to be noticable from only visible inspection, then this should be something more obvious than just a couple pixels being out of place - for example, there should be cracks in the wall or other more apparant damage that the wall could be destroyed than needing to pay really close attention to walls and making sure there is not any changes. Otherwise, you will probably get a greater proliferation of clients that use their own images for weak walls simply so the player can notice them. Thoughts/preferances? From echter at informatik.uni-rostock.de Fri Nov 3 03:12:02 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] teleport/connection bug In-Reply-To: <3A026610.E8C72F82@scruznet.com>; from mwedel@scruznet.com on Fri, Nov 03, 2000 at 02:15:28AM -0500 References: <000101c0452f$a777ce40$911f993e@kyle> <3A026610.E8C72F82@scruznet.com> Message-ID: <20001103101202.A19750@hokkaido.informatik.uni-rostock.de> On Fri, Nov 03, 2000 at 02:15:28AM -0500, Mark Wedel wrote: > Do any of these areas have multiple magic ears or other activation triggers? Mopoon's weapon shop is a quite interesting map. It has two teleporters triggering on the magic word. The first teleporter is next to Mopoon which also triggers on this word, it teleports the player to the edge of the map, next to another teleporter that has FLAG_WALK_ON, and even though its destination is on the same map, it has the map path set which means that enter_exit() will be used, which also has some effects on pet monsters. The other teleporter, which triggers on the same magic word and teleports to the Wizard Tower, is not very special however. > If someone can isolate this and make a small test map that reproduces the > problem, it makes tracking and fixing such a bug much easier. I'm wondering if pet monsters were involved, because this opens a lot more possibilities. -- Jan From andi.vogl at gmx.net Fri Nov 3 11:17:04 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] weak wall images. In-Reply-To: <3A02737B.F574F5E5@scruznet.com> Message-ID: <000001c045b9$e89c5640$5318993e@kyle> Mark Wedel wrote: > 1) When the wall is yet to be damaged, it uses the same image (name & number) > of an undamaged normal wall, so is completely indistinguishable from the normal > walls. For this to properly work, other clues about the existance of such weak > walls is needed (For example, magic mouths which say 'you feel a draft' or 'Some > of the walls around here appear pretty weak'. Also, clues on npc's or scrolls > would work. > > 2) If the walls are supposed to be noticable from only visible inspection, then > this should be something more obvious than just a couple pixels being out of > place - for example, there should be cracks in the wall or other more apparant > damage that the wall could be destroyed than needing to pay really close > attention to walls and making sure there is not any changes. Otherwise, you > will probably get a greater proliferation of clients that use their own images > for weak walls simply so the player can notice them. > > Thoughts/preferances? I recommend using version 2). The weak walls should be slightly more noticeable. If a mapmaker feels like creating an indistinguishable weak wall he can still do it by using the standart wall pic instead of the default weak wall pic. (Many maps already use "illusionary walls" that look exactly like normal walls but are passable.) In general I dislike maps that consist of "searching for the weak wall"-puzzles. I believe that we?d do the players a great favour by modifying the default weak wall pics. Andreas V. From mtx93 at tzi.de Fri Nov 3 15:40:58 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] text colors drawinfo say & tell Message-ID: Hi The textcolor id of drawinfo for the say and the tell command are the same (1). We should give tell a different color, like green or blue what catchs the player eyes?! mfg Michael Toennies From seer11 at hotmail.com Fri Nov 3 17:30:33 2000 From: seer11 at hotmail.com (the seer) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] map bug Message-ID: MWedel wrote: >>Why bother with a stacking value? If you just tell the server or >>client >>to use a 4 layered system, all of the images that need to be >>placed on >>the screen can easily be handled. Treat the floors as >>the bottom layer >>(0), building components next (1), then items (2), >>and finaly animated >>creatures (3), you should be able to solve the >>problem without any >>significant increase in processing. > > That basically means you have 4 hard coded layers, which may not be >just >fine. But also see the previous mail about xbm and performance - >the more >layers, the more bandwidth needed. > > Also, you still get the case that suppose and item is inserted into >that >space or a monster moves off. Once again, you need to >recalculate all the >layers on that space > > Also, at current time, the definition of building components is >vague. >For example, a dragon transport is not really considered a >building >component, which is why you get the effect described above. > > This could probably get fixed up by adding a 'layer xxx' value to >all >objects. But you still get into cases like: > > A fireball explodes in a room with monsters and treasures. The >fire is >on top, so that will be seen and considered an animiated >creature, so you >then see the treasure, building components, and >floors. I would argue >that in this case, you really want to see what >monsters are still standing >and not what objects are there. > > So what you really want is something like: > > Draw top X images (which would be spell effects, monsters, items, >...) > Draw bottom X images (floors and buildings). > > I think there is some problem with the dragon transport in that >that >image is used as both a monster and a building type object. So >it is >difficult to handle that dual identity unless you create >another image >class, or move visibility and stacking of objects away >from the images and >back into the object. Actually I was suggesting that we just have the client treat certain archetypes as if they are on layers. Then rather than having to calculate every single image on the stack, you just use the map images for the bottom images, as suggested by the architecture ( i thought that was what the archetypes were for), and then code other objects on top as needed. The code is all client side, so no more bandwith is needed. The images can tell it all it needs to know. If this won't work, then I guess I just don't know enough about the project. -The Seer _________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. Share information about yourself, create your own public profile at http://profiles.msn.com. From mtx93 at tzi.de Fri Nov 3 22:01:22 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] client cpl.ob.face at the start Message-ID: Hi With the new races, i notice that the windows client for example don't show the right face of the player char in front of his name? For my Client, i got the right png, but the sprite looks in the direction the player char looks at the start on the map and this is not changed if he moves. It should be the face of the char looking south. How is the linux client handle it? Michael From mwedel at scruznet.com Fri Nov 3 22:17:13 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] map bug References: Message-ID: <3A038DC9.EDFF142A@scruznet.com> the seer wrote: > > > Actually I was suggesting that we just have the client treat certain > archetypes as if they are on layers. Then rather than having to calculate > every single image on the stack, you just use the map images for the bottom > images, as suggested by the architecture ( i thought that was what the > archetypes were for), and then code other objects on top as needed. The > code is all client side, so no more bandwith is needed. The images can tell > it all it needs to know. If this won't work, then I guess I just don't know > enough about the project. archetypes are just a fancy name for the master objects that all objects used in play are based off of. The client itself has no idea of archetypes. In the actual map display (where the monsters are), the only information the client gets is the image numbers to draw. The server does all calculation of what can and can not be seen, as well as what appears on each space. Now the look and inventory windows are different, in that the client gets more information. But I don't remember seeing any issues with those. But back to the map. There are really two issues: 1) Cost of computing multiple/all layers on a space to spend in terms of server cpu usage. 2) Cost in bandwidth to send say 4 (or whatever) number of images per space. Not that when I say images, I only mean image numbers (which are a little less than two bytes), and not the actual image information. #1 can probably get deal with by being smarter on the server on how we update what things look like (calculate as needed), but unless you are going to send all the images, you need to somehow decide what images you are going to send. Because you get the case of say ground, dragon tranport, a sword, a shield, and then a monster on top. You always want the ground, as without it things start to look really bad (unless something else on top has no transparancy). And you want the top object (monster in this case). But those intermediate objects get trickier. Without some extra clues, how do you determine if you should send the dragon transport instead of the shield for example. But choosing the two bottom images + the top two doesn't work. Substitute a bow for the dragon transport - in that case, you really want the monster, shield, sword, and then the ground (presuming we are doing 4 stacking layers here). This gets trickier because some object, like monsters and fireballs, should pretty much always be on top, yet other objects like stores and dragon transports should always be on the bottom. Right now, there is a visibility flag, but that determines where things show up in terms of stacking (so high visibility goes on top, so it is usually drawn, but this is not really the right behaviour for floors). the right thing would probably be add a 'layer' field, which is used for actual stacking of objects - if the editor is redone, this could also be useful to see various layers - so for example, things like magic ears and other hidden objects would have a layer below the floor, and in the map editor you could select that layer and see all that stuff easily. Visibility then becomes something that is used solely to determine what is actually seen. Floors would be a special case, and always sent, but beyond that, visibility would probably roughly correspond to the size of an object, so if you say had plate armor (high vis.) and a dagger (lower vis.) on the same space, from afar you would see the plate armor, even if the dagger is currently above it. But that could get confusing, and would also require a lot of tweaking on the visibility to get it correct. For now, I'll look at the simple 3 layer approach which is mostly in place - If we have two floors, they will be the bottom two object drawn, and the top object on the space will be the third one. If we have one floor, we will draw that, plus the top object, plus the object below that (if not the floor). This should fix the dragon transport issue, and otherwise make things look better. Unfortunately, this consumes more bandwidth (extra image to send down the line), and in same cases may be completely useless because the object on top completely obscurs the object beneath it (like say a dragon on top of a dagger). But there is no feasible way to handle that, other than not send those intermediate objects at all (there is no one to know for example, that the dragon completely obscures the dagger while an orc does not) From mwedel at scruznet.com Fri Nov 3 22:26:43 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] client cpl.ob.face at the start References: Message-ID: <3A039003.6196BF5B@scruznet.com> The X11 client doesn't actually draw an image of the player anyplace other than the game map, so I think that was an addition in the windows client. However, as I move around in the game map, the figure does change his facing to be north, east, west, etc. Now best of what I recall, the server does not explicitly tell the client what facing the character has - the space in the center of the map that the character is drawn on is drawn just like all the other spaces. One way you could try and get this information is always take the center image of the map (check the image number), and use that for your icon near the stats I guess. Do some checking like it is within 10 of the the first one you got so that you don't draw a fireball instead of the player image (this logic is still not perfect, because for example I would guess that the fireborn might be close enough to fireball to get within that 10 bracket). If you are using image caching, you can be a bit more sure by checking that the basename (ie, everything before the 111 or 151 or other suffix) is the same. The protocol could also be extended to include this information - would probably make the most sense to put it in the 'stats' command, as that is already smart enough to only be sent if information is changed. I'm not sure how important a feature this however. From mtx93 at tzi.de Fri Nov 3 23:49:19 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] client cpl.ob.face at the start In-Reply-To: <3A039003.6196BF5B@scruznet.com> Message-ID: Hi Ohm, its much more simple: in the struct who describe the player is a field cpl.ob.face what is the face of the player char (because all objects in cf use the same struct). I blt it before the player name in the data windows of the client. Its more cosmetical than useful. Fact is, that the field is not right set by the server any more, with the old windows client and without the race patch, all works fine. I want use it for some other functions, perhaps to show face and name in the window or so. Michael > -----Original Message----- > From: crossfire-devel-admin@lists.real-time.com > [mailto:crossfire-devel-admin@lists.real-time.com]On Behalf Of Mark > Wedel > Sent: Saturday, November 04, 2000 5:27 AM > To: Michael Toennies > Cc: Crossfire-Devel > Subject: Re: [CF-Devel] client cpl.ob.face at the start > > > > The X11 client doesn't actually draw an image of the player > anyplace other than > the game map, so I think that was an addition in the windows client. > > However, as I move around in the game map, the figure does > change his facing to > be north, east, west, etc. > > Now best of what I recall, the server does not explicitly tell > the client what > facing the character has - the space in the center of the map > that the character > is drawn on is drawn just like all the other spaces. > > One way you could try and get this information is always take > the center image > of the map (check the image number), and use that for your icon > near the stats I > guess. Do some checking like it is within 10 of the the first > one you got so > that you don't draw a fireball instead of the player image (this > logic is still > not perfect, because for example I would guess that the fireborn > might be close > enough to fireball to get within that 10 bracket). > > If you are using image caching, you can be a bit more sure by > checking that the > basename (ie, everything before the 111 or 151 or other suffix) > is the same. > > The protocol could also be extended to include this information - would > probably make the most sense to put it in the 'stats' command, as that is > already smart enough to only be sent if information is changed. > I'm not sure > how important a feature this however. > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From mtx93 at tzi.de Sat Nov 4 00:18:58 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] send experience types to the server Message-ID: Hi What i find very uannyoing in the current clients is the fact that the skill cmd is the only way to access the value of the experience values. i really wanna see all the experience levels in the client plus the level experience. The skill experience are too important im game, to show them only on demand. I prefer to extend the cmd who sends the normal experience. Simply send also the skill experience level who changed too. That should do a byte +int. BTW: as general, when i remember right, not allways when you send more bytes, it effects the bandwitch. Because the information in the internet is send as packages. So, there must be many space in the always very short commands in cf, to send more information with the same speed. Only new cmds of often send cmds will effect the bandwitch really. So we should examine the server cmd for very short packages and look who we can extend them useful. Michael From mwedel at scruznet.com Sat Nov 4 00:40:27 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] client cpl.ob.face at the start References: Message-ID: <3A03AF5B.BEF399C7@scruznet.com> Michael Toennies wrote: > > Hi > > Ohm, its much more simple: in the struct who describe the > player is a field cpl.ob.face what is the face of the > player char (because all objects in cf use the same struct). > Actually, there server had the right version. IT just never sent that to the client. I just checked this in the cvs repository, which should fix the bug: server/time.c: Add call to esrv_update_item to update the face for the client after the player chooses a class. MSW 11/3/2000 From mwedel at scruznet.com Sat Nov 4 00:53:22 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:05 2005 Subject: [CF-Devel] send experience types to the server References: Message-ID: <3A03B262.53DA017D@scruznet.com> Michael Toennies wrote: > > Hi > > What i find very uannyoing in the current clients is the fact > that the skill cmd is the only way to access the value of the experience > values. Different playing styles I suppose. I only periodically look at the experience values (both the total and the individual classes) to get some idea how soon until I gain a level in that class. And binding the skills command to a single key (like S), makes that pretty painless. > I prefer to extend the cmd who sends the normal experience. Simply send also > the skill experience level who changed too. That should do a byte +int. Well, 6 bytes for each skill (4 for experience, 1 for the level, 1 byte to describe what we are sending). Still, not a big deal, since the stats command is smart enough to only send stuff that changes - while some of these categories may change often, others are pretty static simply because you can't use the skills very often. > > BTW: as general, when i remember right, not allways when you send more > bytes, > it effects the bandwitch. Because the information in the internet is send as > packages. So, there must be many space in the always very short commands in > cf, > to send more information with the same speed. I really don't want to code with this is in. A few notes: TCP/IP does have a fair number of bytes in overhead, so if sending only 5 bytes for example, that is small in comparison to all the overhead it needs (30-40 bytes I think?) But minimum packet lengths are a measure of the transmission medium. Ethernet has some minimum packet size, while ATM does not (ATM in fact uses fixed length packets of a fairly small size, so if you were going over ATM, you would try to stay within the packet size perhaps). But also, since the OS (and even the server) does buffering, exactly the size of the packet as it goes over the wire is really hard to say. several short commands may get grouped into one packet. From mwedel at scruznet.com Sat Nov 4 02:22:39 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] map bug References: <3A038DC9.EDFF142A@scruznet.com> Message-ID: <3A03C74F.3C67543A@scruznet.com> Discussion was originally how a player standing on the dragon transport wasn't drawn 'perfectly'. I've made some changes in the update_position function which seems to fix this. I need to test it out more to make sure I haven't broken anything else - I'll probably check it in later this weekend. Basically, the maps are now three layers in most all instances - we draw the floor, the object with the highest visibility, and the top object. If none of the objects on the space has any visibility, we then draw the object below the top object. This actually now has the other effect that this 3 layers are drawn for all objects, so you can see that dragon wing on top of the orc head (an example from my private apartment). Or the skeletons standing on top of other treasure and so forth. At a quick glance, it seems going beyond this number of layers would not gain much - already in many cases, the stuff something is on top of is mostly obscured. From mtx93 at tzi.de Sat Nov 4 10:33:27 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] client cpl.ob.face at the start In-Reply-To: <3A03AF5B.BEF399C7@scruznet.com> Message-ID: Hi Ah, thanks for the fast patch. Can you insert a patch for the experience too? To include it easily also with older client, we need a better interface for client->server setup. For the sound for example, you can make set it on/off. But you must waste a cmd for it. Better we use a kind of setup cmd. Like: SETUP <(word) cmdid> <(word) value> <(word) cmdid> <....> Thats bottom up compatible and we dont must use the VERSION cmd for it. We simply can set: SETUP SETUP_SOUND ON SETUP_EXPEXT ON .... and so on. Michael > -----Original Message----- > From: master@scruz.net [mailto:master@scruz.net]On Behalf Of Mark Wedel > Sent: Saturday, November 04, 2000 7:40 AM > To: Michael Toennies > Cc: Crossfire-Devel > Subject: Re: [CF-Devel] client cpl.ob.face at the start > > > Michael Toennies wrote: > > > > Hi > > > > Ohm, its much more simple: in the struct who describe the > > player is a field cpl.ob.face what is the face of the > > player char (because all objects in cf use the same struct). > > > > Actually, there server had the right version. IT just never > sent that to the > client. > > I just checked this in the cvs repository, which should fix the bug: > > server/time.c: Add call to esrv_update_item to update the face for > the client after the player chooses a class. MSW 11/3/2000 > From mtx93 at tzi.de Sat Nov 4 16:15:15 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Windows server Message-ID: Hi There was a guy named Commander Gros or so, who worked a few month on a windows server. Had he finished and/or is here source avaible? Michael From mwedel at scruznet.com Sun Nov 5 18:56:31 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] client cpl.ob.face at the start References: Message-ID: <3A0601BF.8D2109C7@scruznet.com> Michael Toennies wrote: > > Hi > Ah, thanks for the fast patch. > > Can you insert a patch for the experience too? > To include it easily also with older client, we need a better > interface for client->server setup. > > For the sound for example, you can make set it on/off. > But you must waste a cmd for it. I don't know if waste is the correct term. And its not like we are restricted to a small number of commands for the protocol. > > Better we use a kind of setup cmd. > Like: > > SETUP <(word) cmdid> <(word) value> <(word) cmdid> <....> > > Thats bottom up compatible and we dont must use the VERSION cmd for it. > We simply can set: > > SETUP SETUP_SOUND ON SETUP_EXPEXT ON .... and so on. A few comments: 1) the client & server always needs to have at least some level of compatibility between them. If we take your example above, what do we do if the server does not have the experience extension, and how does the client know it? There probably needs to be some level of acknowledgement, especially if the client requires some 'extension' to work properly. Going back a few releases, if your client only supported png's, and tries to connect to an old server, it needs to know that server does not have png support and thus bail out. 2) I would rather not have the protocol commands/coding get too complicated with (if this extension then else if that one then else if this, etc). This tends to create more bugs and is harder to debug. IT is of course near impossible for me to debug something if the unix client doesn't support that extension, so in some sense, the unix client basically needs to be a referance and at least support all the various commands (what it does with the data may be another case) 3) The current protocol versions is largely there so a client a few revs back won't immediately break if it tries to connect to the latest server. At some point, the code to support these olders clients will be removed Now one problem with the current protocol scheme is that it is not very exact, but the point of it was basically to know how up to date both the client and server are. If for example you had protocol rev 1045, and then had changes to go to 1046 and then changes to go to 1047, if the client claims to be rev 1047 compliant, it must also be 1046 client. Now what it chooses to do with that data is up to it. A client that lacks sound capabilities but does not send a command to turn sound off should still deal somehow with the incoming sound commands. It may choose to just ignore them, but none the less, it must be able to handle them in some way. One problem/issue is that there is a potentially huge set of data out there which it could be nice for the client to know. The problem is that this could result in pretty huge client & server bloat, as well as bandwidth issues. In the case of this particular request (sending skill experience information to the client), a few notes: 1) If I was going to do it, I would just extend the stats command and update the protocol revision. ITs not that much bandwidth, but as said, I'm not convinced this is something that needs to be known often enough to updated. 2) The way the 'skills' command works on the server is currently highly inefficient. Some improvements to efficiency can be done, but even then, to gather the information as currently stored each tick would start chewing up a lot of cpu time (skills are currently invisible objects stored in the players inventory. The skills command traverses the inventory looking for a matching skill number, and if it finds one, prints the result. these means it has to travers nrof of skills * number of objects in the players inventory each time the command is run). 3) Adding fields in the player structure which contains the various skill experience totals could be done, but this is no longer a trivial fix (the updating of the face for example was a trivial 1 line fix). And I already have a pretty long list of things I plan to work on which I consider more important than that. Also, at some point it may get less costly if/when invisible objects are stored in a separate list from visible objects. From mtx93 at tzi.de Sun Nov 5 21:36:26 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] png<-> xpm 24<->32 Message-ID: Hi Much of the pngs, including most of the items, are scaled xpms. They look very ugly, we all hate them. But i find, that almost all items can be used as 24x24 pngs without resize them. They look then smaller on the map of course, but it looks ok and they are shown like the same in the xpm. Also, on my client side, it should be enough so convert the xpm to 24 pixel pngs. If the client find a 24x24 png, it simply resize them internal (in fact, i use a offset all times i use a sprite, to eleminate colorkey space on the sides, so i can include them there easily). For the linux client a workaround for it should easy too and we avoid with small work a lot of work for the artists at the start. Then they can be changed in time by demand or if the artist like. With this, we got rid off most of the really ugly pngs, ecexpt the iso suckers. Michael From mwedel at scruznet.com Sun Nov 5 22:29:11 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] png<-> xpm 24<->32 References: Message-ID: <3A063397.F8A0BCBD@scruznet.com> As a note, this can also be done in the server distribution - If we can identify what png's are resized xpm's (and thus pretty ugly),it is easy enough to make non expanded (yet resized) png's in the distribution that look better. What I mean is that you take the 24x24 xpm (which looks good), and turn it into a 32x32 png, with the 24x24 data centered (so you have 4 border pixels). Doing this should be quite easy - just some pipes of data through the pbm toolkit. The problem is identifying the bad png's. I will note there is a good many of png's that are 32x32 and look really good - David Sundqvist did some work on those. It would be a shame to lose those. As a note, at least on the unix client, the image data the server sends to the client is only relevant in that the client can understand it and make it some form of drawable. Whether it be png or xpm, what the client gets a hold of it and renders it, it all becomes and xpixmap no matter what the original source. So the idea of at least the unix client getting a xpm and converting it to a png makes no sense, so all it will do is take that png and convert it to an xpixmap, so why not do that with the xpm in the first place. So to restate: We need to identify what pngs images out there are scaled up xpm's that would look better as non scaled xpm's and make the change. As for the perspective (iso) images: Its a mixed bag - I agree that for some objects and monsters, the flatter representation would look better, as it is clearer. But for some things, like buildings and walls and some other objects, I think the perspective view looks nicer. The preferance probably depends a lot on the size of the image (perspective on single space objects doesn't work because generally it results in not much visible area), and also how quickly you need to identify it. Being able to identify that the shop is a weapons vs armor shop in an instant isn't very demanding, but being able to identify monsters quickly (say from a fairly harmless one compared to a nasty spell caster) is pretty important. From mtx93 at tzi.de Sun Nov 5 23:26:38 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] png<-> xpm 24<->32 In-Reply-To: <3A063397.F8A0BCBD@scruznet.com> Message-ID: > -----Original Message----- > From: crossfire-devel-admin@lists.real-time.com > [mailto:crossfire-devel-admin@lists.real-time.com]On Behalf Of Mark > Wedel > Sent: Monday, November 06, 2000 5:29 AM > To: Michael Toennies > Cc: Crossfire-Devel > Subject: Re: [CF-Devel] png<-> xpm 24<->32 > > > > As a note, this can also be done in the server distribution - > > If we can identify what png's are resized xpm's (and thus pretty > ugly),it is > easy enough to make non expanded (yet resized) png's in the > distribution that > look better. > > What I mean is that you take the 24x24 xpm (which looks good), > and turn it into > a 32x32 png, with the 24x24 data centered (so you have 4 border > pixels). Doing > this should be quite easy - just some pipes of data through the > pbm toolkit. > > The problem is identifying the bad png's. > > I will note there is a good many of png's that are 32x32 and > look really good - > David Sundqvist did some work on those. It would be a shame to > lose those. > > As a note, at least on the unix client, the image data the > server sends to the > client is only relevant in that the client can understand it and > make it some > form of drawable. Whether it be png or xpm, what the client gets > a hold of it > and renders it, it all becomes and xpixmap no matter what the > original source. > So the idea of at least the unix client getting a xpm and > converting it to a png > makes no sense, so all it will do is take that png and convert it > to an xpixmap, > so why not do that with the xpm in the first place. > > So to restate: > We need to identify what pngs images out there are scaled up > xpm's that would > look better as non scaled xpm's and make the change. > > As for the perspective (iso) images: Its a mixed bag - I agree > that for some > objects and monsters, the flatter representation would look > better, as it is > clearer. But for some things, like buildings and walls and some > other objects, > I think the perspective view looks nicer. > > The preferance probably depends a lot on the size of the image > (perspective on > single space objects doesn't work because generally it results in not much > visible area), and also how quickly you need to identify it. > Being able to > identify that the shop is a weapons vs armor shop in an instant isn't very > demanding, but being able to identify monsters quickly (say from a fairly > harmless one compared to a nasty spell caster) is pretty important. For the iso images, i mainly mean the monsters like the guards... They look cruel and the colors are bad. The buildings/walls are ok, except the hidden walls and the doors/gates, which don't are set to left and right exactly to a wall (AV wrotes a mail about it some day ago). There are also some ok looking 32x32 monsters like the cleaning woman, they are old style and looks good, perhaps they are from the 32x32 xpm set (which i never see). the xpm to png resize can be done for many items. Also can we eleminate some of the bad looking 32x32 pngs with it. There are also some quick task, which should goes fast in the CVS. What we MUST change are the skills scrolls fo example! They look exactly like normal scrolls, except 2-3 pixels. Also some other like the holder of arrows are from what i call the "brown color" set. They look all brown and i think the old xpms look some nicer, even if they are smaller. The nice thing is, that most rezist pictures are items and some buildings. Because the monsters should more "in size" we should only resize the items. Thats makes the whole task more easy to handle. Now we need a poor guys, who goes through the items with a program and change the xpm to png of the bad pictures. Who will ? :) What we get should be a little "out of size" set, but it should look much nice and should be useful and playable until some guys redraw it. I will make a mail with images which should be changed which should be updated by you all. Michael From mtx93 at tzi.de Sun Nov 5 23:36:05 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] PNG images to redraw or resized from xpm Message-ID: These picture should be changed. (also more from the items). ITEMS: readable/scrollr.111.png (skill scroll) From peterm at tesla.EECS.Berkeley.EDU Mon Nov 6 14:27:37 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Jan's fixes: I think they should go into CVS Message-ID: <200011062027.MAA26435@tesla.EECS.Berkeley.EDU> Hello, I've done some testing on Jan's fixes and I think they should go into CVS now rather than later, even if they're not quite perfect. We can help him test it and he can, if necessary, put further fixes into the CVS. I know of two other CVS developers who are waiting on his patches and would prefer to integrate their stuff with his rather possibly make more work for him by putting in their stuff first. Thoughts? PeterM From peterm at tesla.EECS.Berkeley.EDU Mon Nov 6 14:34:31 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Accidents and neglected players Message-ID: <200011062034.MAA22398@tesla.EECS.Berkeley.EDU> Should the center of scorn be a no-die area? Andreas Vogl has written a patch to allow no-die squares: I recently have seen: 1) A hazard present in the center of town killing a player 5-8 times in a row as he reappears in town 2) A player who was "idle" die 30x from starvation How about a no-die area in town? PM From mtx93 at tzi.de Mon Nov 6 14:54:09 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Accidents and neglected players In-Reply-To: <200011062034.MAA22398@tesla.EECS.Berkeley.EDU> Message-ID: > Should the center of scorn be a no-die area? Andreas Vogl > has written a patch to allow no-die squares: I recently have seen: > > 1) A hazard present in the center of town killing a player 5-8 > times in a row as he reappears in town > > 2) A player who was "idle" die 30x from starvation > > How about a no-die area in town? > Thats a real good idea! If we start to have more players, these town killings will increase, so we need some against it. Also, if you forget to logout, your 110 level char dies to a wimp. But now we have the race patch, where you start in a building. First, you see the char on town center, then in building, then teleported to center again. Thats confusing. There is the town hall near the center, a big building where is nothing in except the 10 food :), its a kind of big dummy building (the books in there aren't so interesting) what i hate, because these kind of buildings makes maps "dead". So, why not start there in a kind of pentagram? You start there after you first login and get teleported from race house and also if you die. For future extendings we can put teleporter to other maps for example easy in it, and dont must change the scorn city itself. Also, starting in town hall/church is a kind of old MUD standard procedure. It will also make the town hall to a "real used" building. Michael From peterm at tesla.EECS.Berkeley.EDU Mon Nov 6 15:19:34 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Accidents and neglected players In-Reply-To: Your message of "Mon, 06 Nov 2000 21:54:09 +0100." Message-ID: <200011062119.NAA06697@tesla.EECS.Berkeley.EDU> > Thats a real good idea! I'm glad you like the no-die area. > But now we have the race patch, where you start in a building. > First, you see the char on town center, then in building, then teleported > to center again. Thats confusing. I agree. If I could have done it better in a reasonable amount of time, I would have. Everything I tried to get a player to appear in the class-choice map at first failed in some bizarre fashion or other. Use of *any* other map than city/city caused problems. I tried many things which SHOULD have worked but did not, and instead caused some weird bug. In the end, I went with a kluge which has the effect you see. Would you please take a crack at removing that kluge? PeterM > There is the town hall near the center, a big building where is nothing in > except the 10 food :), its a kind of big dummy building (the books in there > aren't so > interesting) what i hate, because these kind of buildings makes maps "dead". > > So, why not start there in a kind of pentagram? You start there after you > first > login and get teleported from race house and also if you die. > > For future extendings we can put teleporter to other maps for example easy > in it, > and dont must change the scorn city itself. Also, starting in town > hall/church is > a kind of old MUD standard procedure. > > It will also make the town hall to a "real used" building. > > Michael > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mtx93 at tzi.de Mon Nov 6 15:40:58 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Jan's fixes: I think they should go into CVS In-Reply-To: <200011062121.NAA20777@tesla.EECS.Berkeley.EDU> Message-ID: > Would you please express this thought on crossfire-devel as > well as to me privately? > > PM Oops, of course :) MichToen > > > Hello, > > > > > > I've done some testing on Jan's fixes and I think they > > > should go into CVS now rather than later, even if > > > they're not quite perfect. We can help him test it and > > > he can, if necessary, put further fixes into the CVS. > > > > > > I know of two other CVS developers who are waiting on > > > his patches and would prefer to integrate their stuff with > > > his rather possibly make more work for him by putting in > > > their stuff first. > > > > > > Thoughts? > > > > > > PeterM > > > > I strongly agree. Perhaps MiDS can then update his server fast > ,so we all > > can testing, including my new client. This will help us all a lot. > > > > MichToen > From echter at informatik.uni-rostock.de Mon Nov 6 17:21:44 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Jan's fixes: I think they should go into CVS In-Reply-To: <200011062027.MAA26435@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Mon, Nov 06, 2000 at 12:27:37PM -0800 References: <200011062027.MAA26435@tesla.EECS.Berkeley.EDU> Message-ID: <20001107002144.A8771@hokkaido.informatik.uni-rostock.de> On Mon, Nov 06, 2000 at 12:27:37PM -0800, Peter Mardahl wrote: > I've done some testing on Jan's fixes and I think they > should go into CVS now rather than later, even if They're in now. Some notes: General: I've started using ISO date format (YYYY-MM-DD) in the CHANGES file because everybody seems to be confused when it comes to this MD/DM/YYYY format. Peter: I think a owner == NULL check is missing in the new ball lightning code. And please use the 'direction' parameter of hit_map() instead of fiddling with op->x and op->y as this may break other code, e.g. optimizations in common/map.c. Michael: Please be careful when modifying server/attack.c. You can only assume that the target is on a map if simple_attack is false. However, I don't mind changing get_attack_mode() to check that the target is always on a map if this makes your code a bit simpler. I'd rather see this check in get_attack_mode() than at various other places because such situation (target in some inventory) should never happen. -- Jan From peterm at tesla.EECS.Berkeley.EDU Mon Nov 6 18:04:55 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Jan's fixes: I think they should go into CVS In-Reply-To: Your message of "Tue, 07 Nov 2000 00:21:44 +0100." <20001107002144.A8771@hokkaido.informatik.uni-rostock.de> Message-ID: <200011070004.QAA16575@tesla.EECS.Berkeley.EDU> > Peter: I think a owner == NULL check is missing in the new ball > lightning code. And please use the 'direction' parameter of hit_map() > instead of fiddling with op->x and op->y as this may break other code, > e.g. optimizations in common/map.c. Yes, I changed it to do this stuff already after I looked at your patches. I will put the fix in in the next hour. PeterM From andi.vogl at gmx.net Mon Nov 6 21:42:37 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Accidents and neglected players In-Reply-To: <200011062034.MAA22398@tesla.EECS.Berkeley.EDU> Message-ID: <000001c0486c$c86b0aa0$bea3e23e@kyle> on Tue 7.11.00, Peter M. wrote: > Should the center of scorn be a no-die area? Andreas Vogl > has written a patch to allow no-die squares: I recently have seen: > > 1) A hazard present in the center of town killing a player 5-8 > times in a row as he reappears in town > > 2) A player who was "idle" die 30x from starvation > > How about a no-die area in town? The idea is nice, but in fact the "battleground" tiles that I have created are more than "no-die areas". They?re PvP dueling ground, putting them in scorn would cause several side-effects: - Peaceful mode is ignored, players strike when running into each other. - The arena would be somehow obsolete, people would duel right in scorn. - Players could get full restore (food/healh/cures) by "killing" each other in scorn. No more use for a house of healing. Of course I could modify the battleground tiles to be more flexible, to fit better into the desired purpose. Still, I think no-death area in scorn might cause even more chaos and upset than we face today. I would recommend to set "no_magic" for whole scorn. So that devine magic (and saving) still works but mage-spells don?t. The most newbie-deaths I have seen happened due to "horsing around" with elemtal magic in scorn. Starving might remain a problem, but it can usually be handled by carrying an extra bunch of waybreads. Andreas V. From mwedel at scruznet.com Mon Nov 6 23:28:17 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] Accidents and neglected players References: <200011062119.NAA06697@tesla.EECS.Berkeley.EDU> Message-ID: <3A0792F1.290C030F@scruznet.com> Peter Mardahl wrote: > > > Thats a real good idea! > > I'm glad you like the no-die area. > > > But now we have the race patch, where you start in a building. > > First, you see the char on town center, then in building, then teleported > > to center again. Thats confusing. > > I agree. If I could have done it better in a reasonable amount of time, > I would have. Everything I tried to get a player to appear in the > class-choice map at first failed in some bizarre fashion or other. > Use of *any* other map than city/city caused problems. > > I tried many things which SHOULD have worked but did not, and instead > caused some weird bug. > > In the end, I went with a kluge which has the effect you see. Would you > please take a crack at removing that kluge? Either privately or publicly, can you say what you tried and the end result? Otherwise, I have a feeling other people might try the same things you did, which ends up being a waste of time. But the other problem is that right now the starting city is used more for just where to start a new character - it is also where characters return to in not permadeath mode. I have a feeling that we really don't want to have characters return to the class selection map. I personally like the idea of characters (in not permadeath mode) returning to a building (like the city hall) in scorn. Someplace where you will basically be pretty much only if you died - your not going to typically go there. As far as it being a non killing area: If its easy to prevent 'accidental' killings, probably a good idea. By this, I mean someone accidentally casting a spell the summoned monsters into the area, and left, with those monsters becoming hostile towards other and killing them or the like. But it strikes me that no matter what we do, other malicious players can always set up lightning walls or the like that try to kill the player as they appear. Maybe not in the city hall map in this example, but perhaps as they exit the city hall they get zapped then. And if you prohibit it from the city itself, then perhaps the spaces around the city, etc. One solution for this at least in terms of appearing in the city hall would be to have savebeds there, so if players do get zapped as they leave city hall, they would re-appear in city hall and could then send a message to the admin (or some other friendly person that can take care of the situation), and go to the save bed and quit the game. But with the current save mechanism, you can save anywhere you want anyways. From mwedel at scruznet.com Mon Nov 6 23:37:05 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:06 2005 Subject: [CF-Devel] race/class woes. Message-ID: <3A079501.68110A2D@scruznet.com> I decided to try and start a new character last night. A poor little fireborn who decided to become a devotee. A few issues: 1) He has the skills of wizardry and praying twice (as you run the 'skills command). Probably not harmful, but doesn't make a lot of sense. 2) He does get some non useful equipment, like a robe and dagger. 3) There seems to be a propensity to get a crap ring or amulet (crap meaning in at least a few occasions I have tried this out, the ring or amulet has more minuses than plusses, and in some cases, it only had minus). 4) There also seems to be a very high likelihood of getting duplicate spells. IT seems that you will basically always get two holy word spellbooks - one time I actually got three. Since you can't sell them and you are guarenteed of learning the spell, any more than one has no use. These are just minor issues. I have a feeling the issue with the prayerbooks is that there are very few first level prayers, so you quickly get into duplicates. Another first level mage spell as a substition may be nice. From mtx93 at tzi.de Mon Nov 6 23:51:37 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] bug in item.h Message-ID: Hi Ther is a small bug in item.h of the client. #define NAME_LEN 64 must be #define NAME_LEN 128 because the max len of the name part of the Item1Cmd are 128 (for single item name, mutiple items name). It cause some broken names, for example if you get the ring of Elementals from the wizard tower, perhaps also buffer overflow, i got some strange looking results from my BltText routine. I remember that big names are also broken from server side, seems a problem from the same patch. MichToen From mtx93 at tzi.de Tue Nov 7 01:23:46 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] Containers Message-ID: Hi I have a idea, i got in mind some month ago when i playing cf. I think about it as i find a bug. But let me show what we has as containers: At the moment, there are 5 "kind" of containers you can have in your inventory: - all items (bag, sack, chests, bookshelves) - money, gems (pouches) - keys (keyrings) - arrows (holder of arrows) - bolts (holder of bolts) There should perhaps one more container: a scroll holder. Thats a AD&D official item, and it should be useful for cf too. You can toggle then with apply in a 3 stage loop: unapplied, applied, open. You can apply as many container you want. You can only open one container at the time. To close him, you must toggle him in the main inventory. You can put a container in a container (all items type) You can't apply or open a container in a container. Thats what we have. As a bug, i find this: In some cases you apply a container of some sort, for example a holder of arrow (you have also only one of it in your inventory). Now you playing with a pounch and apply him. For some reason, if you now go with autopickup over a arrow, the arrow isn't insert in the holder of arrows. Also a get don't put him in. You must toggle the holder 3 times to apply him again then it work. I don't test it really out, but has anyone the same experience? Well, i find that the work with container is not very comfortable for the player at this moment. Is a kind of complicate and when you apply 3-4 bags and sacks, you really don't know whats going on with your items and where they goes. Also, its not very logic to apply a container and you must give then a explicit cmd to open it. You should ready the container and then you should have the control about it, means put item in and be able to control whats in. After some thinking if find a way to do that, do only some minor changes to cf. It will not effect gameplay but it will make the containers much more effective. The windows client and the linux client use different interfaces for it, but both are weak (windows) or are complicate (unix). Because we have 5 sorts of containers, we can add a bar of containers next to the inventory. It will also work without a bar, simply show the container automatically if you have selected the container in the main inventory. But i will explain the bar idea. This means 1 slot for 1 applied kind of container. What we need for this is, that only one container of one type can be applied at the time. So, only one bag can be applied. If they are applied, they are also open. The items struct need to be updated for *container_items, *container_keys and so on. But they are only 4(5) pointers, because we can't apply more. Now can always show the container and the main inventory. Changing the container window and the inventory windows goes like a norton commander like panel system. Get and put item cmd also. This gives the player a much more better control about his containers, it make it easier on server side (never more than one of a container type, for example simply check for pickup a arrow container_arrow, if there is none check container_bag, if none it goes direct in main inventory.) Also, the interface on client side will be much better. The container you see in the container bar is the active container, all items go in this, and the shown itemlist of a container is the one of the selected container in bar list. And to change a container in the bar list, simply go to the inventory and apply a different container, and it will exchanged in the bar to the old one. This is straight, because the normal inventory stuff for wear and wield work in the absolut same way. This will bring the logic for all items in the same way. MichToen From peterm at tesla.EECS.Berkeley.EDU Tue Nov 7 03:12:10 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] Accidents and neglected players In-Reply-To: Your message of "Tue, 07 Nov 2000 00:28:17 EST." <3A0792F1.290C030F@scruznet.com> Message-ID: <200011070912.BAA28352@tesla.EECS.Berkeley.EDU> > Peter Mardahl wrote: > > > > In the end, I went with a kluge which has the effect you see. Would you > > please take a crack at removing that kluge? > > Either privately or publicly, can you say what you tried and the end result? > > Otherwise, I have a feeling other people might try the same things you did, > which ends up being a waste of time. > I tried many things, most of which didn't work, so I don't really remember them all, but here is my best recollection: 1) Emergency map and start map seemed distinct in the code. Starting map seemed to be read from the archetypes. I modified the archetypes file to make the start map be my new hall of selection. This failed, either by crash, or by corruption of either the start map or the city map. (Can't remember which of those three it was.) I figured some interaction between start map and emergency map was causing it so I gave up on doing that. I did NOT want to change emergency map. 2) Rather than insert the player into city/city as usual I tried to "enter exit" them into the HallOfSelection as soon as they finished with their race. This caused a corrupt HallOfSelection. 3) The present implementation sticks a Word of Recall to the HallOfSelection in the player. Players get inserted into city/city as before, THEN pulled out and into HallOfSelection. *This* worked. > But the other problem is that right now the starting city is used more for j > where to start a new character - it is also where characters return to in not > permadeath mode. I have a feeling that we really don't want to have characte > return to the class selection map. No, no char should EVER see the HallOfSelection twice. > I personally like the idea of characters (in not permadeath mode) returning > a building (like the city hall) in scorn. Someplace where you will basically > pretty much only if you died - your not going to typically go there. Agreed. > As far as it being a non killing area: If its easy to prevent 'accidental' > killings, probably a good idea. By this, I mean someone accidentally casting > spell the summoned monsters into the area, and left, with those monsters > becoming hostile towards other and killing them or the like. Well, someone proposed no_magic. I agree. However, this doesn't address the issue of the guy who leaves his char logged in, and his char dies 100x from starvation before he comes back. I'm not too worried about malicious players, but rather accidents. An accidental high-level burning hands spell might fry a beginning player 5-6 times. Ball lightning was horribly deadly too before I removed its ability to track players. > But it strikes me that no matter what we do, other malicious players can alw >ays > set up lightning walls or the like that try to kill the player as they appear >. > Maybe not in the city hall map in this example, but perhaps as they exit the > city hall they get zapped then. And if you prohibit it from the city itself, > then perhaps the spaces around the city, etc. > > One solution for this at least in terms of appearing in the city hall would > to have savebeds there, so if players do get zapped as they leave city hall, > they would re-appear in city hall and could then send a message to the admin > some other friendly person that can take care of the situation), and go to th > save bed and quit the game. But with the current save mechanism, you can sav > anywhere you want anyways. Yeah, but not necessarily before you get killed 5x and lose 68% of your experience. PeterM From andi.vogl at gmx.net Tue Nov 7 07:09:44 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] new savebed concept Message-ID: <22327.973602584@www34.gmx.net> on Tue 7.11.00, Mark W. wrote: > But the other problem is that right now the starting city is used more > for just where to start a new character - it is also where characters > return to in not permadeath mode. [...] > I personally like the idea of characters (in not permadeath mode) > returning to a building (like the city hall) in scorn. Someplace where > you will basically be pretty much only if you died - your not going to > typically go there. > [...] it strikes me that no matter what we do, other malicious players > can always set up lightning walls or the like that try to kill the player > as they appear. Maybe not in the city hall map in this example, but > perhaps as they exit the city hall they get zapped then. And if you > prohibit it from the city itself, then perhaps the spaces around the > city, etc. [...] Quite frankly: I dislike the current concept that players get beamed to scorn center after death. I think this is a relict from times where CF was pure hack 'n slash (like "gauntlet") with only a very small mapset. Dungeons that are not linked very closely to scorn don't get played because it's such a pain in the rare to travel all the way back after dying. This is sooo stupid. Just look at the teleporters in the appartment and all those ships in scorn harbour - Isn't this a sign that there is something wrong here? If we want to have larger, more complex map-sets (and I'm sure we do), then we need a change! In my opinion, the only reasonable way to go is have players wake up on the last-applied "bed of reality" (= savebed). Hence, we would write the location of the current wake-up-position into the player struct and -file. This can surely be done without breaking existing player files. I'm willing to do the coding myself if people are in favour of this idea. Also, I will remove all reality beds located in "insecure" areas (e.g. the one in wiztower). It mustn't be possible to get stuck on a map with reality beds, but that doesn't even need much change. The main advantages of this new savebed-concept would be: - long jorneys on beautiful large, complex map-sets are possible - no danger of accidental player-killing after wake up - players could actually "feel at home" on places other than scorn - CF would be a better game (hehe) Please tell me what you think. =) Andreas V. -- Sent through GMX FreeMail - http://www.gmx.net From erik at subnett.no Tue Nov 7 10:04:55 2000 From: erik at subnett.no (Erik Gjertsen) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] new savebed concept In-Reply-To: <22327.973602584@www34.gmx.net> Message-ID: On Tue, 7 Nov 2000, Andreas Vogl wrote: > In my opinion, the only reasonable way to go is have players wake up > on the last-applied "bed of reality" (= savebed). Hence, we would write > the > location of the current wake-up-position into the player struct > and -file. This can surely be done without breaking existing player files. > The main advantages of this new savebed-concept would be: > - long jorneys on beautiful large, complex map-sets are possible > - no danger of accidental player-killing after wake up > - players could actually "feel at home" on places other than scorn > - CF would be a better game (hehe) Excelent point. One of the things I've missed in CF, and in most MUDs for that matter, is the ability to choose your home town. As you advance levels, and you feel the need to search for greener pastures (aka nastier monsters) there is really not much for you in Scorn (except perhaps your appartment). I think it would be great if you could chose your starting point yourself; it would also be great with perm. appartments scattered throughout the different maps. You see them on many maps, but they are usually "closed". Appart from being a practical thing, I think this also makes for some extra depth to gameplay. I don't know how, but it might be possible to make your town alegiance significant in some way. Then again, I could be delerious from too much coffee... :) ---------------------------------------------e-r-i-k--g-j-e-r-t-s-e-n------ --- PGP http://erik.subnett.no/pgp.txt --- --- Why PGP? http://www.futt.org/whoami_html --- --------------------------------------------------------------------------- From mtx93 at tzi.de Tue Nov 7 14:50:20 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] new savebed concept In-Reply-To: Message-ID: Only one statement: Yes, yes and yes :) Only one more suggestion: There are in stone city buildings to buy. The point is, that there are only a few big buildings. Is a player buyed one (i do on a server) it is lost forever when the player leave ( i do :). The buildings are nice and cost a lot. Now my idea is, to make "virtual" perm. appartments. That mean, you start with a very small perm. appartment, much smaller than you one you have now. Then, you can "buy" you new appartments (buildings). They simply get copied above your old apparment structure. The items in there must get insert there too (on a bulk), well its always a nice thing to sort all your stuff new :) We can handle it in 2 ways. We can simply put in most citys per. appartment points (which i dont like). Or we can fake the real buildings, means you must go to the building and you enter there a teleporter like in the perm. appartment. I prefer this, because it looks more "real". You can do in this style a kind of "social" carrier, buy you in from low city parts in the royal center for example. Its stuff for nice new quest too. MichToen > -----Original Message----- > From: crossfire-devel-admin@lists.real-time.com > [mailto:crossfire-devel-admin@lists.real-time.com]On Behalf Of Erik > Gjertsen > Sent: Tuesday, November 07, 2000 5:05 PM > To: crossfire-devel@lists.real-time.com > Subject: Re: [CF-Devel] new savebed concept > > > On Tue, 7 Nov 2000, Andreas Vogl wrote: > > > In my opinion, the only reasonable way to go is have players wake up > > on the last-applied "bed of reality" (= savebed). Hence, we would write > > the > > location of the current wake-up-position into the player struct > > and -file. This can surely be done without breaking existing > player files. > > > > > The main advantages of this new savebed-concept would be: > > - long jorneys on beautiful large, complex map-sets are possible > > - no danger of accidental player-killing after wake up > > - players could actually "feel at home" on places other than scorn > > - CF would be a better game (hehe) > > Excelent point. One of the things I've missed in CF, and in most MUDs for > that matter, is the ability to choose your home town. As you advance > levels, and you feel the need to search for greener pastures (aka nastier > monsters) there is really not much for you in Scorn (except perhaps your > appartment). > > I think it would be great if you could chose your starting point > yourself; it would also be great with perm. appartments scattered > throughout the different maps. You see them on many maps, but they are > usually "closed". > > Appart from being a practical thing, I think this also makes for some > extra depth to gameplay. I don't know how, but it might be possible to > make your town alegiance significant in some way. > > Then again, I could be delerious from too much coffee... :) > > ---------------------------------------------e-r-i-k--g-j-e-r-t-s- > e-n------ > --- PGP http://erik.subnett.no/pgp.txt > --- > --- Why PGP? http://www.futt.org/whoami_html > --- > ------------------------------------------------------------------ > --------- > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From andi.vogl at gmx.net Tue Nov 7 17:58:56 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] severe bug in CVS!! Message-ID: <000001c04916$b1daf980$c521993e@kyle> I just downloaded the recent CF-server from CVS. After installing I realized that signs didn?t work properly anymore. - Yes, simple "signs", like in scorn center. When I apply a sign I get only about half of the message, the rest is missing. Sometimes even more trouble happens, like my client crashes (cfclient) or the map screws up. A mysterious and definitly very new bug. Please try to fix this as fast as possible, because the actual CVS version is completely broken now. Andreas V. From peterm at tesla.EECS.Berkeley.EDU Tue Nov 7 18:16:16 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:07 2005 Subject: I do not see this problem: Re: [CF-Devel] severe bug in CVS!! In-Reply-To: Your message of "Wed, 08 Nov 2000 00:58:56 +0100." <000001c04916$b1daf980$c521993e@kyle> Message-ID: <200011080016.QAA19941@tesla.EECS.Berkeley.EDU> Hello, So far as I know the crossfire server on crossfire.csua is a CVS snapshot in every way. Signs work as expected. I do not see any crashes. Would you please run "cvs update" "make depend" "make" "make install" to double-check? PeterM > I just downloaded the recent CF-server from CVS. > After installing I realized that signs didnīt work properly > anymore. - Yes, simple "signs", like in scorn center. > > When I apply a sign I get only about half of the message, the > rest is missing. Sometimes even more trouble happens, like > my client crashes (cfclient) or the map screws up. > A mysterious and definitly very new bug. > > Please try to fix this as fast as possible, because the actual CVS > version is completely broken now. > > > Andreas V. > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From peterm at tesla.EECS.Berkeley.EDU Tue Nov 7 19:43:21 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:07 2005 Subject: [CF-Devel] Severe bug confirmed. In-Reply-To: Your message of "Wed, 08 Nov 2000 00:58:56 +0100." <000001c04916$b1daf980$c521993e@kyle> Message-ID: <200011080143.RAA19466@tesla.EECS.Berkeley.EDU> I've also noticed the weird behavior Andreas V. notices below. The bug appears on Linux, but NOT on FreeBSD. PeterM > I just downloaded the recent CF-server from CVS. > After installing I realized that signs didnīt work properly > anymore. - Yes, simple "signs", like in scorn center. > > When I apply a sign I get only about half of the message, the > rest is missing. Sometimes even more trouble happens, like > my client crashes (cfclient) or the map screws up. > A mysterious and definitly very new bug. > > Please try to fix this as fast as possible, because the actual CVS > version is completely broken now. > > > Andreas V. > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From peterm at alfven.EECS.Berkeley.EDU Tue Nov 7 20:12:13 2000 From: peterm at alfven.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] Summary of the last 2 day's diffs Message-ID: <200011080212.SAA18704@alfven.EECS.Berkeley.EDU> ? config.log ? config.cache ? config.status ? Makefile ? common/Makefile ? crossedit/Makefile ? crossedit/crossedit ? crossedit/Cnv/Makefile ? crossedit/Cnv/test ? crossedit/bitmaps/Makefile ? crossedit/doc/Makefile ? crossedit/include/Makefile ? doc/Makefile ? doc/playbook/Makefile ? doc/playbook-html/Makefile ? doc/spoiler/Makefile ? doc/spoiler-html/Makefile ? include/Makefile ? include/autoconf.h ? lib/Makefile ? random_maps/Makefile ? random_maps/random_map ? server/Makefile ? server/crossfire ? socket/Makefile ? utils/Makefile Index: CHANGES =================================================================== RCS file: /home/cvs/CVS/crossfire/CHANGES,v retrieving revision 1.131 retrieving revision 1.133 diff -c -r1.131 -r1.133 *** CHANGES 2000/11/04 06:40:50 1.131 --- CHANGES 2000/11/07 00:43:29 1.133 *************** *** 18,23 **** --- 18,163 ---- else. With this, include the file(s) that you changed. ------------------------------------------------------------------------------ + PeterM: 2000-11-06 + server/spell_util.c crash bug removed from move ball lightning: + ball lightning mover improved in general. --PeterM + + -------------------------------------------- + --- BEGIN stop_item() / attack fix patch --- Jan Echternach 2000-11-06 + -------------------------------------------- + + Summary of this patch: Provide new stop_item() function for properly + handling "moving" items on a map (flying arrows, thrown objects, + active cones); obsoletes the workarounds. Fix some attack bugs (with + possible server crashes) - many attackers attacked while being + removed, even though much code could only handle the attacker being on + the same map as the victim (not even the attacker being in the + victim's inventory, e.g. poison). + + common/object.c: insert_ob_in_map(): Call check_walk_on() after + update_object() because the latter needs to update some very + important flags used by a lot of code before this code is called + by check_walk_on(). + + common/object.c: get_split_ob(): Completed support for splitting + removed objects. + + common/object.c: decrease_ob_nr(): Rewrote this function: Added + support for removed objects. Removing an object completely didn't + always update the environment's weight properly. Removing an amount + of 0 from an object with nrof == 0 destroyed the object. Improved + performance a bit (don't need to update the player's weight if an + object below the player is modified). + + server/apply.c: move_apply(): Added recursion limit. + + server/apply.c: move_apply(): THROWN_OBJ and ARROW: Use new + hit_with_arrow() function. + + server/apply.c: move_apply(): FBULLET and BULLET: Call + check_fired_arch() only when the victim blocks the square (FLAG_NO_PASS + or FLAG_ALIVE). + + server/attack.c: save_throw_object(): Use new stop_item() function + before trying to modify an object. Added originator to all + insert_ob_in_map() calls. + + server/attack.c: hit_map(): Added log message if the hitter is not on + a map. Added was_destroyed() check after calling save_throw_object(). + + server/attack.c: get_attack_mode() and abort_attack(): New functions + to determine the type of attack (simple or full attack). + + server/attack.c: attack_ob(): Now only attack_ob_simple() with default + damage and weapon class values. + + server/attack.c: attack_ob_simple(): Contains most of old attack_ob(), + but takes damage and weapon class as parameters, needed for + hit_with_arrow(). Uses get_attack_mode() and abort_attack() to + support new "simple" attack mode. + + server/attack.c: stick_arrow() and hit_with_arrow(): Moved those parts + of old stop_arrow() and move_arrow() that dealt with attacking a + victim over here. + + server/attack.c: hit_player(): Uses get_attack_mode() and + abort_attack() to support new "simple" attack mode. + + server/attack.c: paralyze_player(): Use insert_ob_in_map_simple() + instead of insert_ob_in_map() because the callers are not prepared for + this function triggering any complex machinery, and + insert_ob_in_map_simple() should be enough for plain visual effects. + + server/attack.c: thrown_item_effect(): Don't need to deal with thrown + objects, hit_with_arrow() already does everything necessary. + + server/attack.c: adj_attackroll(): Added log message if hitter and + victim are not on the same map. + + server/c_object.c: Fixed two typos in "can't pick up xxx" messages. + + server/c_object.c: pick_up_object(): Removed can_pick() check because + pick_up() already checks this. Added support for picking up removed + objects because the stop_item() in pick_up() can now call us with + removed objects. Moved FLAG_STARTEQUIP check to pick_up(). Fixed + weight limit lookup for monsters that have strength > MAX_STAT. + + server/c_object.c: pick_up(): Use new stop_item() function. + + server/player.c: fire_bow() and server/skills.c: do_throw(): Removed + FLAG_NO_PICK workaround for flying objects. stop_item() now handles + this correctly. + + server/rune.c: spring_trap(): Fix unlimited trap recursion. Since + traps are triggered by move_apply(), the result of triggering a trap + may trigger the trap again before it is deactivated. + + server/rune.c: spring_trap(): Runes that don't cast spells can only be + triggered by living objects. + + server/spell_effect.c: move_cancellation(): Don't call hit_map() with + a removed attacker. + + server/spell_util.c: cast_cone(): Only print warning message about + cones that don't have FLAG_FLY/WALK_ON if the cone does any damage. + + server/spell_util.c: move_cone(): Removed workaround for cones in ice + cubes. stop_item() now handles this correctly. + + server/spell_util.c: explode_object(): Rewrote this function: New + interface - exploding object must not be removed when the function is + called, it must have an other_arch (i.e. it must be able to explode), + and it will be gone for sure when the function terminates. Removed + some code with no effect. Don't call any attack functions with + removed attackers. + + server/spell_util.c: check_fired_arch(): Rewrote this function. + + server/spell_util.c: move_fired_arch(): Rewrote most of this function: + Don't attack with removed attackers. Call check_fired_arch() instead + of duplicating its code. + + server/spell_util.c: move_ball_lightning(): Don't attack with removed + attackers. Rewrote the movement algorithm to simplify this task. + + server/time.c: stop_item() and fix_stopped_item: New functions. + + server/time.c: fix_stopped_arrow(): Contains most of the old + stop_arrow() function. Unlike stop_arrow(), it takes an arrow that is + not removed. Removed FLACK_NO_PICK workaround. + + server/time.c: stop_arrow(): Stops arrows and thrown objects and puts + them on the map. Sticking objects into targets is no longer handled + by stop_arrow(), but by hit_with_arrow(). + + server/time.c: move_arrow(): Don't attack with removed attackers. + + socket/item.c: esrv_move_object(): Removed misleading comment. + + ------------------------------------------ + --- END stop_item() / attack fix patch --- Jan Echternach 2000-11-06 + ------------------------------------------ + server/time.c: Add call to esrv_update_item to update the face for the client after the player chooses a class. MSW 11/3/2000 Index: common/object.c =================================================================== RCS file: /home/cvs/CVS/crossfire/common/object.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** common/object.c 2000/06/27 03:34:34 1.8 --- common/object.c 2000/11/06 23:06:47 1.9 *************** *** 1,6 **** /* * static char *rcsid_object_c = ! * "$Id: object.c,v 1.8 2000/06/27 03:34:34 cvs Exp $"; */ /* --- 1,6 ---- /* * static char *rcsid_object_c = ! * "$Id: object.c,v 1.9 2000/11/06 23:06:47 jec Exp $"; */ /* *************** *** 1476,1495 **** else set_map_ob(op->map,op->x,op->y,op); /* Tell the map that we're here */ - /* Only check this if we are the head of the object */ - if (!op->head) { - mapstruct *map=op->map; - if (check_walk_on(op, originator)) - return NULL; - - /* If we are a multi part object, lets work our way through the check - * walk on's. - */ - for (tmp=op->more; tmp!=NULL; tmp=tmp->more) - if (check_walk_on (op, originator)) - return NULL; - - } if(op->type==PLAYER) op->contr->do_los=1; for(tmp=get_map_ob(op->map,op->x,op->y);tmp!=NULL;tmp=tmp->above) --- 1476,1481 ---- *************** *** 1512,1520 **** --- 1498,1525 ---- #endif /* Don't know if moving this to the end will break anything. However, * we want to have update_look set above before calling this. + * + * check_walk_on() must be after this because code called from + * check_walk_on() depends on correct map flags (so functions like + * blocked() and wall() work properly), and these flags are updated by + * update_object(). */ update_object(op); + /* Only check this if we are the head of the object */ + if ( ! op->head) { + mapstruct *map=op->map; + if (check_walk_on(op, originator)) + return NULL; + + /* If we are a multi part object, lets work our way through the check + * walk on's. + */ + for (tmp=op->more; tmp!=NULL; tmp=tmp->more) + if (check_walk_on (op, originator)) + return NULL; + } + return op; } *************** *** 1528,1533 **** --- 1533,1539 ---- object *get_split_ob(object *orig_ob,int nr) { object *newob; + int is_removed = (QUERY_FLAG (orig_ob, FLAG_REMOVED) != 0); if(orig_ob->nrofnrof-=nr)<1) { ! remove_ob(orig_ob); free_object(orig_ob); } ! else if(!QUERY_FLAG(orig_ob,FLAG_REMOVED)){ if(orig_ob->env!=NULL) sub_weight (orig_ob->env,orig_ob->weight*nr); if (orig_ob->env == NULL && orig_ob->map->in_memory!=MAP_IN_MEMORY) { --- 1543,1553 ---- newob=get_object(); copy_object(orig_ob,newob); if((orig_ob->nrof-=nr)<1) { ! if ( ! is_removed) ! remove_ob(orig_ob); free_object(orig_ob); } ! else if ( ! is_removed) { if(orig_ob->env!=NULL) sub_weight (orig_ob->env,orig_ob->weight*nr); if (orig_ob->env == NULL && orig_ob->map->in_memory!=MAP_IN_MEMORY) { *************** *** 1562,1625 **** * Return value: 'op' if something is left, NULL if the amount reached 0 */ ! object *decrease_ob_nr(object *op,int i) { ! object *tmp; ! ! /* nrof is split out into a long so it is handled ok on 64 bit machines. ! * I think it might work to just do op->nrof-=i and cast that to an sint32 ! * to see if it is negative. But if so, we might as well just nrof in ! * the object structure an sint32, since that would still set a maximum ! * value. ! */ ! long nrof=op->nrof; ! nrof -= i; ! if (nrof<0) nrof=0; ! op->nrof = nrof; ! ! if(!op->nrof) { ! op->nrof=0; /* just to be sure that remove_ob handles weight properly */ ! /* We don't have remove object send delete to the new client, because ! * in many areas, more intelligent strategies are employed. However, if ! * we are decreasing the number, we can be sure that the object is gone ! * for good, so send a delete down the line. Need to check for ! * environment before we call remove_ob, since that deletes the ! * environment. ! */ ! if(op->env!=NULL) { ! tmp=is_player_inv (op->env); ! if(tmp!=NULL) { ! (*esrv_del_item_func)(tmp->contr, op->count); ! (*esrv_update_item_func)(UPD_WEIGHT, tmp, tmp); ! } ! } else { ! for(tmp=op->above;tmp!=NULL;tmp=tmp->above) ! if(tmp->type==PLAYER) { ! (*esrv_del_item_func)(tmp->contr, op->count); ! (*esrv_update_item_func)(UPD_WEIGHT, tmp, tmp); ! } } ! remove_ob(op); ! free_object(op); ! return NULL; ! } ! else ! if(op->env!=NULL) { ! sub_weight(op->env,op->weight*i); ! tmp=is_player_inv (op->env); ! if(tmp!=NULL) { ! (*esrv_send_item_func)(tmp, op); ! (*esrv_update_item_func)(UPD_WEIGHT, tmp, tmp); ! } } else { ! for(tmp=op->above;tmp!=NULL;tmp=tmp->above) ! if(tmp->type==PLAYER) { ! (*esrv_send_item_func)(tmp, op); ! (*esrv_update_item_func)(UPD_WEIGHT, tmp, tmp); ! } } - return op; } /* --- 1569,1630 ---- * Return value: 'op' if something is left, NULL if the amount reached 0 */ ! object *decrease_ob_nr (object *op, int i) { ! object *tmp; ! if (i == 0) /* objects with op->nrof require this check */ ! return op; ! ! if (i > op->nrof) ! i = op->nrof; ! ! if (QUERY_FLAG (op, FLAG_REMOVED)) ! { ! op->nrof -= i; } ! else if (op->env != NULL) ! { ! tmp = is_player_inv (op->env); ! if (i < op->nrof) { ! sub_weight (op->env, op->weight * i); ! op->nrof -= i; ! if (tmp) { ! (*esrv_send_item_func) (tmp, op); ! (*esrv_update_item_func) (UPD_WEIGHT, tmp, tmp); ! } ! } else { ! remove_ob (op); ! op->nrof = 0; ! if (tmp) { ! (*esrv_del_item_func) (tmp->contr, op->count); ! (*esrv_update_item_func) (UPD_WEIGHT, tmp, tmp); ! } ! } ! } ! else ! { ! if (i < op->nrof) { ! op->nrof -= i; ! } else { ! remove_ob (op); ! op->nrof = 0; ! } ! for (tmp = op->above; tmp != NULL; tmp = tmp->above) ! if (tmp->type == PLAYER) { ! if (op->nrof) ! (*esrv_send_item_func) (tmp, op); ! else ! (*esrv_del_item_func) (tmp->contr, op->count); ! } ! } ! ! if (op->nrof) { ! return op; } else { ! free_object (op); ! return NULL; } } /* Index: include/sproto.h =================================================================== RCS file: /home/cvs/CVS/crossfire/include/sproto.h,v retrieving revision 1.16 retrieving revision 1.17 diff -c -r1.16 -r1.17 *** include/sproto.h 2000/10/30 22:09:59 1.16 --- include/sproto.h 2000/11/06 23:06:47 1.17 *************** *** 45,53 **** extern void apply_lighter ( object *who, object *lighter ); extern void scroll_failure ( object *op, int failure, int power ); extern int did_make_save_item ( object *op, int type ); ! extern void save_throw_object ( object *op, int type ); extern int hit_map ( object *op, int dir, int type ); extern int attack_ob ( object *op, object *hitter ); extern void tear_down_wall ( object *op ); extern int hit_player_attacktype ( object *op, object *hitter, int dam, uint32 attacktype, int magic ); extern int hit_player ( object *op, int dam, object *hitter, int type ); --- 45,54 ---- extern void apply_lighter ( object *who, object *lighter ); extern void scroll_failure ( object *op, int failure, int power ); extern int did_make_save_item ( object *op, int type ); ! extern void save_throw_object ( object *op, int type, object *originator ); extern int hit_map ( object *op, int dir, int type ); extern int attack_ob ( object *op, object *hitter ); + extern object *hit_with_arrow ( object *op, object *victim ); extern void tear_down_wall ( object *op ); extern int hit_player_attacktype ( object *op, object *hitter, int dam, uint32 attacktype, int magic ); extern int hit_player ( object *op, int dam, object *hitter, int type ); *************** *** 57,63 **** extern void blind_player ( object *op, object *hitter, int dam ); extern void paralyze_player ( object *op, object *hitter, int dam ); extern void deathstrike_player ( object *op, object *hitter, int *dam ); - extern object *thrown_item_effect ( object *hitter, object *victim ); extern int adj_attackroll ( object *hitter, object *target ); extern int is_aimed_missile ( object *op ); extern int checkbanned ( char *login, char *host ); --- 58,63 ---- *************** *** 124,130 **** extern int command_rskill ( object *pl, char *params ); extern int command_apply ( object *op, char *params ); extern int sack_can_hold ( object *pl, object *sack, object *op, int nrof ); - extern void pick_up_object ( object *pl, object *op, object *tmp, int nrof ); extern void pick_up ( object *op, object *alt ); extern int command_take ( object *op, char *params ); extern void put_object_in_sack ( object *op, object *sack, object *tmp, long nrof ); --- 124,129 ---- *************** *** 576,582 **** extern void move_golem ( object *op ); extern void control_golem ( object *op, int dir ); extern void move_missile ( object *op ); ! extern int explode_object ( object *op ); extern void check_fired_arch ( object *op ); extern void move_fired_arch ( object *op ); extern void drain_rod_charge ( object *rod ); --- 575,581 ---- extern void move_golem ( object *op ); extern void control_golem ( object *op, int dir ); extern void move_missile ( object *op ); ! extern void explode_object ( object *op ); extern void check_fired_arch ( object *op ); extern void move_fired_arch ( object *op ); extern void drain_rod_charge ( object *rod ); *************** *** 618,624 **** extern void move_detector ( object *op ); extern void animate_trigger ( object *op ); extern void move_hole ( object *op ); ! extern void stop_arrow ( object *op, object *tmp ); extern void move_arrow ( object *op ); extern void change_object ( object *op ); extern void move_teleporter ( object *op ); --- 617,624 ---- extern void move_detector ( object *op ); extern void animate_trigger ( object *op ); extern void move_hole ( object *op ); ! extern object *stop_item ( object *op ); ! extern object *fix_stopped_arrow ( object *op ); extern void move_arrow ( object *op ); extern void change_object ( object *op ); extern void move_teleporter ( object *op ); Index: server/apply.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/apply.c,v retrieving revision 1.21 retrieving revision 1.22 diff -c -r1.21 -r1.22 *** server/apply.c 2000/10/30 22:09:59 1.21 --- server/apply.c 2000/11/06 23:06:47 1.22 *************** *** 1,6 **** /* * static char *rcsid_apply_c = ! * "$Id: apply.c,v 1.21 2000/10/30 22:09:59 jec Exp $"; */ /* CrossFire, A Multiplayer game for X-windows --- 1,6 ---- /* * static char *rcsid_apply_c = ! * "$Id: apply.c,v 1.22 2000/11/06 23:06:47 jec Exp $"; */ /* CrossFire, A Multiplayer game for X-windows *************** *** 1085,1090 **** --- 1085,1102 ---- */ void move_apply (object *trap, object *victim, object *originator) { + static int recursion_depth = 0; + + /* move_apply() is the most likely candidate for causing unwanted and + * possibly unlimited recursion. */ + if (recursion_depth >= 5) { + LOG (llevError, "WARNING: move_apply(): aborting recursion " + "[trap arch %s, name %s; victim arch %s, name %s]\n", + trap->arch->name, trap->name, victim->arch->name, victim->name); + return; + } + recursion_depth++; + switch (trap->type) { case PLAYERMOVER: *************** *** 1101,1131 **** if (victim->speed_left<-50.0) victim->speed_left=-50.0; /* fprintf(stderr,"apply, playermove, player speed_left=%f\n", victim->speed_left);*/ } ! return; case SPINNER: if(victim->direction) { victim->direction=absdir(victim->direction-trap->stats.sp); update_turn_face(victim); } ! return; case DIRECTOR: if(victim->direction) { victim->direction=trap->stats.sp; update_turn_face(victim); } ! return; case BUTTON: case PEDESTAL: update_button(trap); ! return; case ALTAR: /* sacrifice victim on trap */ apply_altar (trap, victim, originator); ! return; case MMISSILE: if (QUERY_FLAG (victim, FLAG_ALIVE)) { --- 1113,1143 ---- if (victim->speed_left<-50.0) victim->speed_left=-50.0; /* fprintf(stderr,"apply, playermove, player speed_left=%f\n", victim->speed_left);*/ } ! goto leave; case SPINNER: if(victim->direction) { victim->direction=absdir(victim->direction-trap->stats.sp); update_turn_face(victim); } ! goto leave; case DIRECTOR: if(victim->direction) { victim->direction=trap->stats.sp; update_turn_face(victim); } ! goto leave; case BUTTON: case PEDESTAL: update_button(trap); ! goto leave; case ALTAR: /* sacrifice victim on trap */ apply_altar (trap, victim, originator); ! goto leave; case MMISSILE: if (QUERY_FLAG (victim, FLAG_ALIVE)) { *************** *** 1136,1166 **** free_object (trap); } } ! return; case THROWN_OBJ: case ARROW: ! if(QUERY_FLAG(victim, FLAG_ALIVE)&&trap->speed) { ! tag_t trap_tag = trap->count; ! if(attack_ob(victim,trap)) { ! /* There can be cases where a monster 'kills' an arrow. Typically ! * happens for things like black puddings that have hitback properties. ! */ ! if ( ! was_destroyed (trap, trap_tag)) { ! remove_ob(trap); ! stop_arrow(trap,victim); ! } ! } ! } ! return; case CANCELLATION: case BALL_LIGHTNING: if (QUERY_FLAG (victim, FLAG_ALIVE)) hit_player (victim, trap->stats.dam, trap, trap->attacktype); else if (victim->material) ! save_throw_object (victim, trap->attacktype); ! return; case CONE: if(QUERY_FLAG(victim, FLAG_ALIVE)&&trap->speed) { --- 1148,1171 ---- free_object (trap); } } ! goto leave; case THROWN_OBJ: + if (trap->inv == NULL) + goto leave; + /* fallthrough */ case ARROW: ! if (QUERY_FLAG (victim, FLAG_ALIVE) && trap->speed) ! hit_with_arrow (trap, victim); ! goto leave; case CANCELLATION: case BALL_LIGHTNING: if (QUERY_FLAG (victim, FLAG_ALIVE)) hit_player (victim, trap->stats.dam, trap, trap->attacktype); else if (victim->material) ! save_throw_object (victim, trap->attacktype, trap); ! goto leave; case CONE: if(QUERY_FLAG(victim, FLAG_ALIVE)&&trap->speed) { *************** *** 1168,1179 **** if (attacktype) hit_player(victim,trap->stats.dam,trap,attacktype); } ! return; case FBULLET: case BULLET: ! check_fired_arch(trap); ! return; case TRAPDOOR: { --- 1173,1186 ---- if (attacktype) hit_player(victim,trap->stats.dam,trap,attacktype); } ! goto leave; case FBULLET: case BULLET: ! if (QUERY_FLAG (victim, FLAG_NO_PASS) ! || QUERY_FLAG (victim, FLAG_ALIVE)) ! check_fired_arch (trap); ! goto leave; case TRAPDOOR: { *************** *** 1185,1191 **** if(!QUERY_FLAG(ab,FLAG_FLYING)) tot += (ab->nrof ? ab->nrof : 1) * ab->weight + ab->carrying; if(!(trap->value=(tot>trap->weight)?1:0)) ! return; SET_ANIMATION(trap, trap->value); update_object(trap); } --- 1192,1198 ---- if(!QUERY_FLAG(ab,FLAG_FLYING)) tot += (ab->nrof ? ab->nrof : 1) * ab->weight + ab->carrying; if(!(trap->value=(tot>trap->weight)?1:0)) ! goto leave; SET_ANIMATION(trap, trap->value); update_object(trap); } *************** *** 1199,1238 **** new_draw_info(NDI_UNIQUE, 0,ab,"You fall into a trapdoor!"); transfer_ob(ab,(int)EXIT_X(trap),(int)EXIT_Y(trap),0,ab); } ! return; } case CONVERTER: convert_item (victim, trap); ! return; case TRIGGER_BUTTON: case TRIGGER_PEDESTAL: case TRIGGER_ALTAR: check_trigger (trap, victim); ! return; case DEEP_SWAMP: walk_on_deep_swamp (trap, victim); ! return; case CHECK_INV: check_inv (victim, trap); ! return; case HOLE: /* Hole not open? */ if(trap->stats.wc > 0) ! return; /* Is this a multipart monster and not the head? If so, return. * Processing will happen if the head runs into the pit */ if (victim->head) ! return; play_sound_map (victim->map, victim->x, victim->y, SOUND_FALL_HOLE); new_draw_info (NDI_UNIQUE, 0, victim, "You fall through the hole!\n"); transfer_ob (victim, EXIT_X (trap), EXIT_Y (trap), 1, victim); ! return; case EXIT: if (victim->type == PLAYER && EXIT_PATH (trap)) { --- 1206,1245 ---- new_draw_info(NDI_UNIQUE, 0,ab,"You fall into a trapdoor!"); transfer_ob(ab,(int)EXIT_X(trap),(int)EXIT_Y(trap),0,ab); } ! goto leave; } case CONVERTER: convert_item (victim, trap); ! goto leave; case TRIGGER_BUTTON: case TRIGGER_PEDESTAL: case TRIGGER_ALTAR: check_trigger (trap, victim); ! goto leave; case DEEP_SWAMP: walk_on_deep_swamp (trap, victim); ! goto leave; case CHECK_INV: check_inv (victim, trap); ! goto leave; case HOLE: /* Hole not open? */ if(trap->stats.wc > 0) ! goto leave; /* Is this a multipart monster and not the head? If so, return. * Processing will happen if the head runs into the pit */ if (victim->head) ! goto leave; play_sound_map (victim->map, victim->x, victim->y, SOUND_FALL_HOLE); new_draw_info (NDI_UNIQUE, 0, victim, "You fall through the hole!\n"); transfer_ob (victim, EXIT_X (trap), EXIT_Y (trap), 1, victim); ! goto leave; case EXIT: if (victim->type == PLAYER && EXIT_PATH (trap)) { *************** *** 1240,1285 **** new_draw_info (NDI_NAVY, 0, victim, trap->msg); enter_exit (victim, trap); } ! return; case ENCOUNTER: #ifdef RANDOM_ENCOUNTERS if (victim->type == PLAYER && QUERY_FLAG (trap, FLAG_IS_FLOOR)) random_encounter (victim, trap); #endif ! return; case SHOP_MAT: apply_shop_mat (trap, victim); ! return; /* Drop a certain amount of gold, and have one item identified */ case IDENTIFY_ALTAR: apply_id_altar (victim, trap, originator); ! return; case SIGN: apply_sign (victim, trap); ! return; case CONTAINER: if (victim->type==PLAYER) (void) esrv_apply_container (victim, trap); else (void) apply_container (victim, trap); ! return; case RUNE: if (trap->level && QUERY_FLAG (victim, FLAG_ALIVE)) spring_trap (trap, victim); ! return; default: LOG (llevDebug, "name %s, arch %s, type %d with fly/walk on/off not " "handled in move_apply()\n", trap->name, trap->arch->name, trap->type); ! return; } } --- 1247,1295 ---- new_draw_info (NDI_NAVY, 0, victim, trap->msg); enter_exit (victim, trap); } ! goto leave; case ENCOUNTER: #ifdef RANDOM_ENCOUNTERS if (victim->type == PLAYER && QUERY_FLAG (trap, FLAG_IS_FLOOR)) random_encounter (victim, trap); #endif ! goto leave; case SHOP_MAT: apply_shop_mat (trap, victim); ! goto leave; /* Drop a certain amount of gold, and have one item identified */ case IDENTIFY_ALTAR: apply_id_altar (victim, trap, originator); ! goto leave; case SIGN: apply_sign (victim, trap); ! goto leave; case CONTAINER: if (victim->type==PLAYER) (void) esrv_apply_container (victim, trap); else (void) apply_container (victim, trap); ! goto leave; case RUNE: if (trap->level && QUERY_FLAG (victim, FLAG_ALIVE)) spring_trap (trap, victim); ! goto leave; default: LOG (llevDebug, "name %s, arch %s, type %d with fly/walk on/off not " "handled in move_apply()\n", trap->name, trap->arch->name, trap->type); ! goto leave; } + + leave: + recursion_depth--; } *************** *** 2509,2515 **** */ strcpy(item_name, item->name); ! save_throw_object(item,AT_FIRE); /* Change to check count and not freed, since the object pointer * may have gotten recycled */ --- 2519,2525 ---- */ strcpy(item_name, item->name); ! save_throw_object(item,AT_FIRE,who); /* Change to check count and not freed, since the object pointer * may have gotten recycled */ Index: server/attack.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/attack.c,v retrieving revision 1.17 retrieving revision 1.18 diff -c -r1.17 -r1.18 *** server/attack.c 2000/10/31 12:04:58 1.17 --- server/attack.c 2000/11/06 23:06:47 1.18 *************** *** 1,6 **** /* * static char *rcsid_attack_c = ! * "$Id: attack.c,v 1.17 2000/10/31 12:04:58 peterm Exp $"; */ /* CrossFire, A Multiplayer game for X-windows --- 1,6 ---- /* * static char *rcsid_attack_c = ! * "$Id: attack.c,v 1.18 2000/11/06 23:06:47 jec Exp $"; */ /* CrossFire, A Multiplayer game for X-windows *************** *** 86,98 **** * calling cancellation, etc.) */ ! void save_throw_object(object *op, int type) { ! ! if (!did_make_save_item(op, type)) { object *env=op->env; int x=op->x,y=op->y; mapstruct *m=op->map; /* Hacked the following so that type LIGHTER will work. * Also, objects which are potenital "lights" that are hit by * flame/elect attacks will be set to glow. "lights" are any --- 86,103 ---- * calling cancellation, etc.) */ ! void save_throw_object (object *op, int type, object *originator) ! { ! if ( ! did_make_save_item (op, type)) ! { object *env=op->env; int x=op->x,y=op->y; mapstruct *m=op->map; + op = stop_item (op); + if (op == NULL) + return; + /* Hacked the following so that type LIGHTER will work. * Also, objects which are potenital "lights" that are hit by * flame/elect attacks will be set to glow. "lights" are any *************** *** 105,111 **** &&op->other_arch&&op->glow_radius) { char *arch=op->other_arch->name; ! decrease_ob_nr(op,1); if((op = get_archetype(arch))!=NULL) { if(env) { op->x=env->x,op->y=env->y; --- 110,118 ---- &&op->other_arch&&op->glow_radius) { char *arch=op->other_arch->name; ! op = decrease_ob_nr (op, 1); ! if (op) ! fix_stopped_item (op, m, originator); if((op = get_archetype(arch))!=NULL) { if(env) { op->x=env->x,op->y=env->y; *************** *** 114,131 **** esrv_send_item(env, op); } else { op->x=x,op->y=y; ! insert_ob_in_map(op,m,NULL); } } return; } if(type&AT_CANCELLATION) { /* Cancellation. */ cancellation(op); return; } ! if(op->nrof>1) ! decrease_ob_nr(op,RANDOM()%op->nrof); ! else { if (op->env) { object *tmp= is_player_inv(op->env); --- 121,141 ---- esrv_send_item(env, op); } else { op->x=x,op->y=y; ! insert_ob_in_map(op,m,originator); } } return; } if(type&AT_CANCELLATION) { /* Cancellation. */ cancellation(op); + fix_stopped_item (op, m, originator); return; } ! if(op->nrof>1) { ! op = decrease_ob_nr(op,RANDOM()%op->nrof); ! if (op) ! fix_stopped_item (op, m, originator); ! } else { if (op->env) { object *tmp= is_player_inv(op->env); *************** *** 134,140 **** esrv_update_item(UPD_WEIGHT, tmp, tmp); } } ! remove_ob(op); free_object(op); } if(type&(AT_FIRE|AT_ELECTRICITY)) { --- 144,151 ---- esrv_update_item(UPD_WEIGHT, tmp, tmp); } } ! if ( ! QUERY_FLAG (op, FLAG_REMOVED)) ! remove_ob(op); free_object(op); } if(type&(AT_FIRE|AT_ELECTRICITY)) { *************** *** 144,150 **** insert_ob_in_ob(op,env); } else { op->x=x,op->y=y; ! insert_ob_in_map(op,m,NULL); } } return; --- 155,161 ---- insert_ob_in_ob(op,env); } else { op->x=x,op->y=y; ! insert_ob_in_map(op,m,originator); } } return; *************** *** 155,166 **** archetype *at = find_archetype("icecube"); if (at == NULL) return; if ((tmp = present_arch(at,op->map,op->x,op->y)) == NULL) { tmp = arch_to_object(at); tmp->x=op->x,tmp->y=op->y; ! insert_ob_in_map(tmp,op->map,NULL); } ! remove_ob(op); (void) insert_ob_in_ob(op,tmp); return; } --- 166,181 ---- archetype *at = find_archetype("icecube"); if (at == NULL) return; + op = stop_item (op); + if (op == NULL) + return; if ((tmp = present_arch(at,op->map,op->x,op->y)) == NULL) { tmp = arch_to_object(at); tmp->x=op->x,tmp->y=op->y; ! insert_ob_in_map(tmp,op->map,originator); } ! if ( ! QUERY_FLAG (op, FLAG_REMOVED)) ! remove_ob(op); (void) insert_ob_in_ob(op,tmp); return; } *************** *** 177,183 **** LOG (llevError, "BUG: hit_map(): free object\n"); return 0; } ! if (op->head) op=op->head; op_tag = op->count; --- 192,204 ---- LOG (llevError, "BUG: hit_map(): free object\n"); return 0; } ! ! if (QUERY_FLAG (op, FLAG_REMOVED) || op->env != NULL) { ! LOG (llevError, "BUG: hit_map(): hitter (arch %s, name %s) not on a map\n", ! op->arch->name, op->name); ! return 0; ! } ! if (op->head) op=op->head; op_tag = op->count; *************** *** 232,238 **** next_tag = next->count; if (QUERY_FLAG (tmp, FLAG_FREED)) { ! LOG (llevError, "BUG: hit_map(): found free object\n"); break; } --- 253,259 ---- next_tag = next->count; if (QUERY_FLAG (tmp, FLAG_FREED)) { ! LOG (llevError, "BUG: hit_map(): found freed object\n"); break; } *************** *** 248,254 **** if (was_destroyed (op, op_tag)) break; } else if (tmp->material) { ! save_throw_object(tmp,type); } } #ifdef NO_CONE_PROPOGATE --- 269,277 ---- if (was_destroyed (op, op_tag)) break; } else if (tmp->material) { ! save_throw_object(tmp,type,op); ! if (was_destroyed (op, op_tag)) ! break; } } #ifdef NO_CONE_PROPOGATE *************** *** 308,348 **** return &messages; } ! /* ! * attack_ob() returns 1 on a hit, and 0 on a miss. ! * op is what is being attacked, hitter is what is hitting (Arrow, player, ! * whatever) */ ! int attack_ob(object *op,object *hitter) { ! int roll,dam=0; char buf[MAX_BUF]; uint32 type; att_msg *msg; ! char *op_name; signed char luck=0; ! if(op->head!=NULL) ! op=op->head; ! if(op->name==NULL) { ! if(settings.debug >= llevDebug) { ! dump_object(op); ! LOG(llevDebug,"Object without name tried to attack.\n%s\n",errmsg); ! /* we don't NEED to print this a zillion times, so GIVE IT A NAME. */ ! op->name = add_string(op->arch->name); ! ! } ! if (QUERY_FLAG(op, FLAG_REMOVED) && !QUERY_FLAG(op, FLAG_FREED)) ! free_object(op); ! return 1; ! } /* * A little check to make it more difficult to dance forward and back * to avoid ever being hit by monsters. */ ! if (QUERY_FLAG(op, FLAG_MONSTER) && op->speed_left > -(FABS(op->speed))*0.3) { ! /* Decrease speed BEFORE calling process_object. Otherwise, an * infinite loop occurs, with process_object calling move_monster, * which then gets here again. By decreasing the speed before --- 331,408 ---- return &messages; } ! ! static int get_attack_mode (object **target, object **hitter, ! int *simple_attack) ! { ! if (QUERY_FLAG (*target, FLAG_FREED) || QUERY_FLAG (*hitter, FLAG_FREED)) { ! LOG (llevError, "BUG: get_attack_mode(): freed object\n"); ! return 1; ! } ! if ((*target)->head) ! *target = (*target)->head; ! if ((*hitter)->head) ! *hitter = (*hitter)->head; ! if ((*hitter)->env != NULL || (*target)->env != NULL) { ! *simple_attack = 1; ! return 0; ! } ! if (QUERY_FLAG (*target, FLAG_REMOVED) ! || QUERY_FLAG (*hitter, FLAG_REMOVED) ! || (*hitter)->map == NULL || (*hitter)->map != (*target)->map) ! { ! LOG (llevError, "BUG: hitter (arch %s, name %s) with no relation to " ! "target\n", (*hitter)->arch->name, (*hitter)->name); ! return 1; ! } ! *simple_attack = 0; ! return 0; ! } ! ! static int abort_attack (object *target, object *hitter, int simple_attack) ! { ! /* Check if target and hitter are still in a relation similar to the one ! * determined by get_attack_mode(). Returns true if the relation has changed. */ + int new_mode; ! if (hitter->env == target || target->env == hitter) ! new_mode = 1; ! else if (QUERY_FLAG (hitter, FLAG_REMOVED) ! || QUERY_FLAG (target, FLAG_REMOVED) ! || hitter->map == NULL || hitter->map != target->map) ! return 1; ! else ! new_mode = 0; ! return new_mode != simple_attack; ! } ! ! static void thrown_item_effect (object *, object *); ! ! static int attack_ob_simple (object *op, object *hitter, int base_dam, ! int base_wc) ! { ! int simple_attack, roll, dam=0; char buf[MAX_BUF]; uint32 type; att_msg *msg; ! char *op_name = NULL; signed char luck=0; + tag_t op_tag, hitter_tag; ! if (get_attack_mode (&op, &hitter, &simple_attack)) ! goto error; ! ! op_tag = op->count; ! hitter_tag = hitter->count; /* * A little check to make it more difficult to dance forward and back * to avoid ever being hit by monsters. */ ! if ( ! simple_attack && QUERY_FLAG (op, FLAG_MONSTER) ! && op->speed_left > -(FABS(op->speed))*0.3) ! { /* Decrease speed BEFORE calling process_object. Otherwise, an * infinite loop occurs, with process_object calling move_monster, * which then gets here again. By decreasing the speed before *************** *** 350,371 **** */ op->speed_left--; process_object(op); ! if (QUERY_FLAG(op, FLAG_FREED)) ! return 1; } add_refcount(op_name = op->name); - if(hitter->head!=NULL) - hitter=hitter->head; - if (hitter->name==NULL) { - if(settings.debug >= llevDebug) { - dump_object(hitter); - LOG(llevDebug,"Object without name tried to attack.\n%s\n",errmsg); - } - return 1; - } - /* BROKEN: the luck code. If you look carefully, luck has these effects: positive luck adds to the damage YOU take and to YOUR likelihood of getting HIT. This is intolerable. I am setting "luck" in this --- 410,422 ---- */ op->speed_left--; process_object(op); ! if (was_destroyed (op, op_tag) || was_destroyed (hitter, hitter_tag) ! || abort_attack (op, hitter, simple_attack)) ! goto error; } add_refcount(op_name = op->name); /* BROKEN: the luck code. If you look carefully, luck has these effects: positive luck adds to the damage YOU take and to YOUR likelihood of getting HIT. This is intolerable. I am setting "luck" in this *************** *** 382,392 **** roll=RANDOM()%20+1+luck; /* Adjust roll for various situations. */ ! roll += adj_attackroll(hitter,op); /* See if we hit the creature */ ! if(roll==(20+luck)||op->stats.ac>=hitter->stats.wc-roll) { ! int hitdam=hitter->stats.dam+luck; #ifdef CASTING_TIME if ((hitter->type == PLAYER)&&(hitter->casting > -1)){ hitter->casting = -1; --- 433,444 ---- roll=RANDOM()%20+1+luck; /* Adjust roll for various situations. */ ! if ( ! simple_attack) ! roll += adj_attackroll(hitter,op); /* See if we hit the creature */ ! if(roll==(20+luck)||op->stats.ac>=base_wc-roll) { ! int hitdam = base_dam + luck; #ifdef CASTING_TIME if ((hitter->type == PLAYER)&&(hitter->casting > -1)){ hitter->casting = -1; *************** *** 399,432 **** if (op->type == PLAYER) { new_draw_info(NDI_UNIQUE, 0,op,"You were hit and lost your spell!"); new_draw_info_format(NDI_ALL|NDI_UNIQUE,5,NULL, ! "%s was hit by %s and lost a spell.",op->name,hitter->name); } } #endif ! /* If you hit something, the victim should *always* wake up. ! * Before, invisible hitters could avoid doing this. ! * -b.t. */ ! if(QUERY_FLAG(op,FLAG_SLEEP)) CLEAR_FLAG(op,FLAG_SLEEP); ! ! /* If the victim can't see the attacker, it may alert others ! * for help. */ ! if(op->type!=PLAYER&&!can_see_enemy(op,hitter) ! &&!get_owner(op)&&RANDOM()%(op->stats.Int+1)) ! npc_call_help(op); ! ! /* if you were hidden and hit by a creature, you are discovered*/ ! if(op->hide && QUERY_FLAG(hitter,FLAG_ALIVE)) { ! make_visible(op); ! if(op->type==PLAYER) new_draw_info(NDI_UNIQUE, 0,op, ! "You were hit by a wild attack. You are no longer hidden!"); ! } ! ! /* thrown items (hitter) will have various effects ! * when they hit the victim. For things like thrown daggers, ! * this sets 'hitter' to the actual dagger, and not the ! * wrapper object. ! */ ! if((hitter=thrown_item_effect(hitter,op))==NULL) goto leave; /* Need to do at least 1 damage, otherwise there is no point * to go further and it will cause FPE's below. --- 451,494 ---- if (op->type == PLAYER) { new_draw_info(NDI_UNIQUE, 0,op,"You were hit and lost your spell!"); new_draw_info_format(NDI_ALL|NDI_UNIQUE,5,NULL, ! "%s was hit by %s and lost a spell.",op_name,hitter->name); } } #endif ! if ( ! simple_attack) ! { ! /* If you hit something, the victim should *always* wake up. ! * Before, invisible hitters could avoid doing this. ! * -b.t. */ ! if (QUERY_FLAG (op, FLAG_SLEEP)) ! CLEAR_FLAG(op,FLAG_SLEEP); ! ! /* If the victim can't see the attacker, it may alert others ! * for help. */ ! if (op->type != PLAYER && ! can_see_enemy (op, hitter) ! && ! get_owner (op) && RANDOM() % (op->stats.Int + 1)) ! npc_call_help (op); ! ! /* if you were hidden and hit by a creature, you are discovered*/ ! if (op->hide && QUERY_FLAG (hitter, FLAG_ALIVE)) { ! make_visible (op); ! if (op->type == PLAYER) ! new_draw_info (NDI_UNIQUE, 0, op, ! "You were hit by a wild attack. " ! "You are no longer hidden!"); ! } ! ! /* thrown items (hitter) will have various effects ! * when they hit the victim. For things like thrown daggers, ! * this sets 'hitter' to the actual dagger, and not the ! * wrapper object. ! */ ! thrown_item_effect (hitter, op); ! if (was_destroyed (hitter, hitter_tag) ! || was_destroyed (op, op_tag) ! || abort_attack (op, hitter, simple_attack)) ! goto leave; ! } /* Need to do at least 1 damage, otherwise there is no point * to go further and it will cause FPE's below. *************** *** 436,453 **** type=hitter->attacktype; if(!type) type=AT_PHYSICAL; /* Handle monsters that hit back */ ! if (QUERY_FLAG(op, FLAG_HITBACK) && QUERY_FLAG(hitter, FLAG_ALIVE)) { if (op->attacktype & AT_ACID && hitter->type==PLAYER) new_draw_info(NDI_UNIQUE, 0,hitter,"You are splashed by acid!\n"); hit_player(hitter, RANDOM()%(op->stats.dam+1), op, op->attacktype); ! if (QUERY_FLAG(op, FLAG_FREED)) goto leave; } /* In the new attack code, it should handle multiple attack * types in its area, so remove it from here. */ dam=hit_player(op, (RANDOM()%hitdam)+1, hitter, type); ! if (QUERY_FLAG(op, FLAG_FREED)) goto leave; } /* end of if hitter hit op */ /* if we missed, dam=0 */ --- 498,521 ---- type=hitter->attacktype; if(!type) type=AT_PHYSICAL; /* Handle monsters that hit back */ ! if ( ! simple_attack && QUERY_FLAG (op, FLAG_HITBACK) ! && QUERY_FLAG (hitter, FLAG_ALIVE)) ! { if (op->attacktype & AT_ACID && hitter->type==PLAYER) new_draw_info(NDI_UNIQUE, 0,hitter,"You are splashed by acid!\n"); hit_player(hitter, RANDOM()%(op->stats.dam+1), op, op->attacktype); ! if (was_destroyed (op, op_tag) ! || was_destroyed (hitter, hitter_tag) ! || abort_attack (op, hitter, simple_attack)) ! goto leave; } /* In the new attack code, it should handle multiple attack * types in its area, so remove it from here. */ dam=hit_player(op, (RANDOM()%hitdam)+1, hitter, type); ! if (was_destroyed (op, op_tag) || was_destroyed (hitter, hitter_tag) ! || abort_attack (op, hitter, simple_attack)) goto leave; } /* end of if hitter hit op */ /* if we missed, dam=0 */ *************** *** 492,502 **** new_draw_info(NDI_BLACK, 0, hitter->owner, buf); } ! leave: ! free_string(op_name); return dam; } void tear_down_wall(object *op) { int perc=0; --- 560,698 ---- new_draw_info(NDI_BLACK, 0, hitter->owner, buf); } ! goto leave; ! ! error: ! dam = 1; ! goto leave; ! ! leave: ! if (op_name) ! free_string (op_name); return dam; } + int attack_ob (object *op, object *hitter) + { + if (hitter->head) + hitter = hitter->head; + return attack_ob_simple (op, hitter, hitter->stats.dam, hitter->stats.wc); + } + + /* op is the arrow, tmp is what is stopping the arrow. + * + * Returns 1 if op was inserted into tmp's inventory, 0 otherwise. + */ + static int stick_arrow (object *op, object *tmp) + { + /* If the missile hit a player, we insert it in their inventory. + * However, if the missile is heavy, we don't do so (assume it falls + * to the ground after a hit). What a good value for this is up to + * debate - 5000 is 5 kg, so arrows, knives, and other light weapons + * stick around. + */ + if (op->weight <= 5000 && tmp->stats.hp >= 0) { + if(tmp->head != NULL) + tmp = tmp->head; + remove_ob (op); + op = insert_ob_in_ob(op,tmp); + if (tmp->type== PLAYER) + esrv_send_item (tmp, op); + return 1; + } else + return 0; + } + + /* hit_with_arrow() disassembles the missile, attacks the victim and + * reassembles the missile. + * + * It returns a pointer to the reassembled missile, or NULL if the missile + * isn't available anymore. + */ + object *hit_with_arrow (object *op, object *victim) + { + object *container, *hitter; + int hit_something; + tag_t victim_tag, hitter_tag; + sint16 victim_x, victim_y; + + /* Disassemble missile */ + if (op->inv) { + container = op; + hitter = op->inv; + remove_ob (hitter); + insert_ob_in_map_simple (hitter, container->map); + /* Note that we now have an empty THROWN_OBJ on the map. Code that + * might be called until this THROWN_OBJ is either reassembled or + * removed at the end of this function must be able to deal with empty + * THROWN_OBJs. */ + } else { + container = NULL; + hitter = op; + } + + /* Try to hit victim */ + victim_x = victim->x; + victim_y = victim->y; + victim_tag = victim->count; + hitter_tag = hitter->count; + hit_something = attack_ob_simple (victim, hitter, op->stats.dam, + op->stats.wc); + /* Arrow attacks door, rune of summoning is triggered, demon is put on + * arrow, move_apply() calls this function, arrow sticks in demon, + * attack_ob_simple() returns, and we've got an arrow that still exists + * but is no longer on the map. Ugh. (Beware: Such things can happen at + * other places as well!) */ + if (was_destroyed (hitter, hitter_tag) || hitter->env != NULL) { + if (container) { + remove_ob (container); + free_object (container); + } + return NULL; + } + + /* Missile hit victim */ + if (hit_something) + { + /* Stop arrow */ + if (container == NULL) { + hitter = fix_stopped_arrow (hitter); + if (hitter == NULL) + return NULL; + } else { + remove_ob (container); + free_object (container); + } + + /* Try to stick arrow into victim */ + if ( ! was_destroyed (victim, victim_tag) + && stick_arrow (hitter, victim)) + return NULL; + + /* Else try to put arrow on victim's map square */ + if ((victim_x != hitter->x || victim_y != hitter->y) + && ! wall (hitter->map, victim_x, victim_y)) + { + remove_ob (hitter); + hitter->x = victim_x; + hitter->y = victim_y; + insert_ob_in_map (hitter, hitter->map, hitter); + } else { + /* Else leave arrow where it is */ + merge_ob (hitter, NULL); + } + return NULL; + } + + /* Missile missed victim - reassemble missile */ + if (container) { + remove_ob (hitter); + insert_ob_in_ob (hitter, container); + } + return op; + } + + void tear_down_wall(object *op) { int perc=0; *************** *** 743,768 **** char buf[MAX_BUF]; object *old_hitter=NULL; /* this is used in case of servant monsters */ int maxdam=0,ndam,attacktype=1,attacknum,magic=(type & AT_MAGIC); ! tag_t hitter_tag; ! if (QUERY_FLAG (op, FLAG_FREED) || QUERY_FLAG (hitter, FLAG_FREED)) { ! LOG (llevError, "BUG: hit_player(): freed object\n"); return 0; ! } hitter_tag = hitter->count; ! if(op->head!=NULL) { ! if(op->head==op) { ! LOG(llevError,"Recursive head error!\n"); ! return 0; ! } ! #if 0 ! /* To paralyze/slow a creature, we must hit its head with the attacktype. ! * If we are going to do this, this should probably be expanded. ! */ ! if(type&AT_PARALYZE || type&AT_SLOW) ! return 0; ! #else /* slow and paralyze must hit the head. But we don't want to just * return - we still need to process other attacks the spell still * might have. So just remove the paralyze and slow attacktypes, --- 939,958 ---- char buf[MAX_BUF]; object *old_hitter=NULL; /* this is used in case of servant monsters */ int maxdam=0,ndam,attacktype=1,attacknum,magic=(type & AT_MAGIC); ! int body_attack = op && op->head; /* Did we hit op's head? */ ! int simple_attack; ! tag_t op_tag, hitter_tag; ! if (get_attack_mode (&op, &hitter, &simple_attack)) return 0; ! ! if (QUERY_FLAG (op, FLAG_WIZ)) ! return 0; ! ! op_tag = op->count; hitter_tag = hitter->count; ! if (body_attack) { /* slow and paralyze must hit the head. But we don't want to just * return - we still need to process other attacks the spell still * might have. So just remove the paralyze and slow attacktypes, *************** *** 776,794 **** type &= ~(AT_PARALYZE | AT_SLOW); if (!type || type==AT_MAGIC) return 0; } - #endif - op=op->head; } ! if(op->type==DOOR && op->inv && op->inv->type==RUNE) { ! spring_trap(op->inv,hitter); ! if (was_destroyed (hitter, hitter_tag)) ! return 0; } ! /* If its already dead, or we're the wizard, don't attack it - no point */ ! if(QUERY_FLAG(op,FLAG_WIZ)||!QUERY_FLAG(op,FLAG_ALIVE)||op->stats.hp<0) return 0; #ifdef ATTACK_DEBUG LOG(llevDebug,"hit player: attacktype %d, dam %d\n", type, dam); --- 966,994 ---- type &= ~(AT_PARALYZE | AT_SLOW); if (!type || type==AT_MAGIC) return 0; } } ! if ( ! simple_attack && op->type == DOOR) { ! object *tmp; ! for (tmp = op->inv; tmp != NULL; tmp = tmp->below) ! if (tmp->type == RUNE) { ! spring_trap (tmp, hitter); ! if (was_destroyed (hitter, hitter_tag) ! || was_destroyed (op, op_tag) ! || abort_attack (op, hitter, simple_attack)) ! return 0; ! break; ! } } ! if ( ! QUERY_FLAG (op, FLAG_ALIVE) || op->stats.hp < 0) { ! /* FIXME: If a player is killed by a rune in a door, the ! * was_destroyed() check above doesn't return, and might get here. ! */ ! LOG (llevDebug, "victim (arch %s, name %s) already dead in " ! "hit_player()\n", op->arch->name, op->name); return 0; + } #ifdef ATTACK_DEBUG LOG(llevDebug,"hit player: attacktype %d, dam %d\n", type, dam); *************** *** 1212,1218 **** if((tmp=present(PARAIMAGE,op->map,op->x,op->y))==NULL) { tmp=clone_arch(PARAIMAGE); tmp->x=op->x,tmp->y=op->y; ! insert_ob_in_map(tmp,op->map,NULL); } op->speed_left-=(float)FABS(op->speed)*(dam*3); tmp->stats.food+=(signed short) (dam*3)/op->speed; --- 1412,1422 ---- if((tmp=present(PARAIMAGE,op->map,op->x,op->y))==NULL) { tmp=clone_arch(PARAIMAGE); tmp->x=op->x,tmp->y=op->y; ! /* We can't use insert_ob_in_map() (which can trigger various things) ! * unless a lot of was_destroyed() checks are added in our callers. ! * But this is just a simple visual effect anyway. ! */ ! insert_ob_in_map_simple(tmp,op->map); } op->speed_left-=(float)FABS(op->speed)*(dam*3); tmp->stats.food+=(signed short) (dam*3)/op->speed; *************** *** 1274,1295 **** /* thrown_item_effect() - handles any special effects of thrown * items (like attacking living creatures--a potion thrown at a ! * monster). We return the hitter item for further ! * possible (ie physical) attacks. Other posibilities ! * include spilling containers, and lighting stuff on fire ! * with thrown torches. */ ! object *thrown_item_effect( object *hitter, object *victim) { ! object *tmp=hitter; ! ! if(hitter->type==THROWN_OBJ) tmp = hitter->inv; ! if(!tmp) return hitter; if(!QUERY_FLAG(hitter,FLAG_ALIVE)) { ! switch (tmp->type) { case POTION: if(QUERY_FLAG(victim,FLAG_ALIVE)&&!QUERY_FLAG(victim,FLAG_UNDEAD) ! &&!(victim->immune&AT_MAGIC)) (void) apply_potion(victim,tmp); break; case FOOD: /* cursed food is (often) poisonous....but it won't 'explode' --- 1478,1494 ---- /* thrown_item_effect() - handles any special effects of thrown * items (like attacking living creatures--a potion thrown at a ! * monster). */ ! static void thrown_item_effect (object *hitter, object *victim) ! { ! tag_t tag = hitter->count; if(!QUERY_FLAG(hitter,FLAG_ALIVE)) { ! switch (hitter->type) { case POTION: if(QUERY_FLAG(victim,FLAG_ALIVE)&&!QUERY_FLAG(victim,FLAG_UNDEAD) ! &&!(victim->immune&AT_MAGIC)) (void) apply_potion(victim,hitter); break; case FOOD: /* cursed food is (often) poisonous....but it won't 'explode' *************** *** 1299,1320 **** break; case POISON: /* poison drinks */ if(QUERY_FLAG(victim,FLAG_ALIVE)&&!QUERY_FLAG(victim,FLAG_UNDEAD) ! &&!(victim->immune&AT_POISON)) apply_poison(victim,tmp); break; case CONTAINER: /* spill_container(victim,RANDOM()%(hitter->stats.dam+1)); */ break; - default: - break; } - #if 0 - /* glow objects (torches) are on fire.. */ - if(!tmp->type&&tmp->glow_radius>0) { - } - #endif } - - return tmp; } /* adj_attackroll() - adjustments to attacks by various conditions */ --- 1498,1510 ---- break; case POISON: /* poison drinks */ if(QUERY_FLAG(victim,FLAG_ALIVE)&&!QUERY_FLAG(victim,FLAG_UNDEAD) ! &&!(victim->immune&AT_POISON)) apply_poison(victim,hitter); break; case CONTAINER: /* spill_container(victim,RANDOM()%(hitter->stats.dam+1)); */ break; } } } /* adj_attackroll() - adjustments to attacks by various conditions */ *************** *** 1324,1331 **** int adjust=0; /* safety */ ! if(!target||!hitter||!hitter->map||!target->map||hitter->map!=target->map) return 0; /* aimed missiles use the owning object's sight */ if(is_aimed_missile(hitter)) { --- 1514,1524 ---- int adjust=0; /* safety */ ! if(!target||!hitter||!hitter->map||!target->map||hitter->map!=target->map) { ! LOG (llevError, "BUG: adj_attackroll(): hitter and target not on same " ! "map\n"); return 0; + } /* aimed missiles use the owning object's sight */ if(is_aimed_missile(hitter)) { Index: server/c_object.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/c_object.c,v retrieving revision 1.12 retrieving revision 1.13 diff -c -r1.12 -r1.13 *** server/c_object.c 2000/11/03 05:42:56 1.12 --- server/c_object.c 2000/11/06 23:06:47 1.13 *************** *** 1,6 **** /* * static char *rcsid_c_object_c = ! * "$Id: c_object.c,v 1.12 2000/11/03 05:42:56 cvs Exp $"; */ /* CrossFire, A Multiplayer game for X-windows --- 1,6 ---- /* * static char *rcsid_c_object_c = ! * "$Id: c_object.c,v 1.13 2000/11/06 23:06:47 jec Exp $"; */ /* CrossFire, A Multiplayer game for X-windows *************** *** 246,259 **** * tmp is the object to pick up, nrof is the number to * pick up (0 means all of them) */ ! void pick_up_object (object *pl, object *op, object *tmp, int nrof) { /* buf needs to be big (more than 256 chars) because you can get * very long item names. */ char buf[HUGE_BUF]; object *env=tmp->env; ! uint32 weight; /* IF the player is flying & trying to take the item out of a container * that is in his inventory, let him. tmp->env points to the container --- 246,260 ---- * tmp is the object to pick up, nrof is the number to * pick up (0 means all of them) */ ! static void pick_up_object (object *pl, object *op, object *tmp, int nrof) { /* buf needs to be big (more than 256 chars) because you can get * very long item names. */ char buf[HUGE_BUF]; object *env=tmp->env; ! uint32 weight, effective_weight_limit; ! int tmp_nrof = tmp->nrof ? tmp->nrof : 1; /* IF the player is flying & trying to take the item out of a container * that is in his inventory, let him. tmp->env points to the container *************** *** 265,302 **** new_draw_info(NDI_UNIQUE, 0,pl, "You are levitating, you can't reach the ground!"); return; } - if(!can_pick(pl,tmp)) { - if (tmp->name!=NULL) { - sprintf(buf,"You can't pick up a %s", tmp->name); - new_draw_info(NDI_UNIQUE, 0,pl, buf); - } - else - new_draw_info(NDI_UNIQUE, 0,pl,"You can't take that!"); - return; - } if (QUERY_FLAG (tmp, FLAG_NO_DROP)) return; if(QUERY_FLAG(tmp,FLAG_WAS_WIZ) && !QUERY_FLAG(pl, FLAG_WAS_WIZ)) { new_draw_info(NDI_UNIQUE, 0,pl, "The object disappears in a puff of smoke!"); new_draw_info(NDI_UNIQUE, 0,pl, "It must have been an illusion."); if (pl->type==PLAYER) esrv_del_item (pl->contr, tmp->count); ! remove_ob(tmp); free_object(tmp); return; } - - /* startequip items are not allowed to be put into containers: */ - if (pl->type == PLAYER && op->type == CONTAINER && - QUERY_FLAG(tmp, FLAG_STARTEQUIP)) { - new_draw_info(NDI_UNIQUE, 0,pl,"This object cannot be put into containers!"); - return; - } ! if (nrof==0 || nrof>tmp->nrof) nrof=(tmp->nrof?tmp->nrof:1); /* Figure out how much weight this object will add to the player */ weight = tmp->weight * nrof; if (tmp->inv) weight += tmp->carrying * (100 - tmp->stats.Str) / 100; ! if ((pl->weight + pl->carrying +weight) > weight_limit[pl->stats.Str]) { new_draw_info(NDI_UNIQUE, 0,pl,"That item is too heavy for you to pick up."); return; } --- 266,293 ---- new_draw_info(NDI_UNIQUE, 0,pl, "You are levitating, you can't reach the ground!"); return; } if (QUERY_FLAG (tmp, FLAG_NO_DROP)) return; if(QUERY_FLAG(tmp,FLAG_WAS_WIZ) && !QUERY_FLAG(pl, FLAG_WAS_WIZ)) { new_draw_info(NDI_UNIQUE, 0,pl, "The object disappears in a puff of smoke!"); new_draw_info(NDI_UNIQUE, 0,pl, "It must have been an illusion."); if (pl->type==PLAYER) esrv_del_item (pl->contr, tmp->count); ! if ( ! QUERY_FLAG (tmp, FLAG_REMOVED)) ! remove_ob (tmp); free_object(tmp); return; } ! if (nrof > tmp_nrof || nrof == 0) ! nrof = tmp_nrof; /* Figure out how much weight this object will add to the player */ weight = tmp->weight * nrof; if (tmp->inv) weight += tmp->carrying * (100 - tmp->stats.Str) / 100; ! if (pl->stats.Str <= MAX_STAT) ! effective_weight_limit = weight_limit[pl->stats.Str]; ! else ! effective_weight_limit = weight_limit[MAX_STAT]; ! if ((pl->weight + pl->carrying + weight) > effective_weight_limit) { new_draw_info(NDI_UNIQUE, 0,pl,"That item is too heavy for you to pick up."); return; } *************** *** 307,313 **** SET_FLAG(tmp, FLAG_WAS_WIZ); #endif ! if(nrof != tmp->nrof && !(nrof == 1 && tmp->nrof == 0)) { object *tmp2 = tmp; tag_t tmp2_tag = tmp2->count; tmp = get_split_ob (tmp, nrof); --- 298,304 ---- SET_FLAG(tmp, FLAG_WAS_WIZ); #endif ! if (nrof != tmp_nrof) { object *tmp2 = tmp; tag_t tmp2_tag = tmp2->count; tmp = get_split_ob (tmp, nrof); *************** *** 317,323 **** } /* Tell a client what happened rest of objects */ if (pl->type == PLAYER) { ! if (was_destroyed (tmp2, tmp2_tag)) esrv_del_item (pl->contr, tmp2_tag); else esrv_send_item (pl, tmp2); --- 308,314 ---- } /* Tell a client what happened rest of objects */ if (pl->type == PLAYER) { ! if (was_destroyed (tmp2, tmp2_tag)) esrv_del_item (pl->contr, tmp2_tag); else esrv_send_item (pl, tmp2); *************** *** 327,335 **** * - we are moving all the items from the container to elsewhere, * so it needs to be deleted. */ ! if (tmp->env && pl->type==PLAYER) ! esrv_del_item (pl->contr, tmp->count); ! remove_ob(tmp); /* Unlink it */ } if(QUERY_FLAG(tmp, FLAG_UNPAID)) (void) sprintf(buf,"%s will cost you %s.", query_name(tmp), --- 318,328 ---- * - we are moving all the items from the container to elsewhere, * so it needs to be deleted. */ ! if ( ! QUERY_FLAG (tmp, FLAG_REMOVED)) { ! if (tmp->env && pl->type==PLAYER) ! esrv_del_item (pl->contr, tmp->count); ! remove_ob(tmp); /* Unlink it */ ! } } if(QUERY_FLAG(tmp, FLAG_UNPAID)) (void) sprintf(buf,"%s will cost you %s.", query_name(tmp), *************** *** 360,377 **** void pick_up(object *op,object *alt) /* modified slightly to allow monsters use this -b.t. 5-31-95 */ { ! object *tmp=NULL; int count; ! if(alt) ! tmp=alt; ! else if(op->below==NULL || !can_pick(op, tmp)) { ! new_draw_info(NDI_UNIQUE, 0,op,"There is nothing to pick up here."); ! return; ! } else ! tmp=op->below; ! if (op->type==PLAYER && op->contr->count && op->contr->count nrof) count=op->contr->count; else count=tmp->nrof; --- 353,394 ---- void pick_up(object *op,object *alt) /* modified slightly to allow monsters use this -b.t. 5-31-95 */ { ! int need_fix_tmp = 0; ! object *tmp; ! mapstruct *tmp_map; int count; + tag_t tag; ! /* Decide which object to pick. */ ! if (alt) ! { ! if ( ! can_pick (op, alt)) { ! new_draw_info_format (NDI_UNIQUE, 0, op, "You can't pick up a %s.", ! alt->name); ! goto leave; ! } ! tmp = alt; ! } ! else ! { ! if (op->below == NULL || ! can_pick (op, op->below)) { ! new_draw_info (NDI_UNIQUE, 0, op, ! "There is nothing to pick up here."); ! goto leave; ! } ! tmp = op->below; ! } ! ! /* Try to catch it. */ ! tmp_map = tmp->map; ! tmp = stop_item (tmp); ! if (tmp == NULL) ! goto leave; ! need_fix_tmp = 1; ! if ( ! can_pick (op, tmp)) ! goto leave; ! if (op->type==PLAYER) count=op->contr->count; else count=tmp->nrof; *************** *** 380,386 **** if (op->container) { alt = op->container; if (alt != tmp->env && !sack_can_hold (op, alt, tmp,count)) ! return; } else { /* non container pickup */ for (alt=op->inv; alt; alt=alt->below) if (alt->type==CONTAINER && QUERY_FLAG(alt, FLAG_APPLIED) && --- 397,403 ---- if (op->container) { alt = op->container; if (alt != tmp->env && !sack_can_hold (op, alt, tmp,count)) ! goto leave; } else { /* non container pickup */ for (alt=op->inv; alt; alt=alt->below) if (alt->type==CONTAINER && QUERY_FLAG(alt, FLAG_APPLIED) && *************** *** 405,415 **** #ifdef PICKUP_DEBUG printf ("Pick_up(): %s picks %s (%d) and inserts it %s.\n",op->name, tmp->name, op->contr->count, alt->name); #endif ! if(op->type==PLAYER) { ! pick_up_object(op, alt, tmp, op->contr->count); op->contr->count=0; ! } else ! pick_up_object(op, alt, tmp, tmp->nrof); } --- 422,448 ---- #ifdef PICKUP_DEBUG printf ("Pick_up(): %s picks %s (%d) and inserts it %s.\n",op->name, tmp->name, op->contr->count, alt->name); #endif ! ! /* startequip items are not allowed to be put into containers: */ ! if (op->type == PLAYER && alt->type == CONTAINER ! && QUERY_FLAG (tmp, FLAG_STARTEQUIP)) ! { ! new_draw_info (NDI_UNIQUE, 0, op, ! "This object cannot be put into containers!"); ! goto leave; ! } ! ! tag = tmp->count; ! pick_up_object (op, alt, tmp, count); ! if (was_destroyed (tmp, tag) || tmp->env) ! need_fix_tmp = 0; ! if (op->type == PLAYER) op->contr->count=0; ! goto leave; ! ! leave: ! if (need_fix_tmp) ! fix_stopped_item (tmp, tmp_map, op); } *************** *** 450,456 **** for (tmp=op->below; tmp!=NULL; tmp=tmp->next) if (!tmp->invisible) { char buf[MAX_BUF]; ! sprintf(buf,"You can't pick up a %s", tmp->name? tmp->name:"null"); new_draw_info(NDI_UNIQUE, 0,op, buf); break; --- 483,489 ---- for (tmp=op->below; tmp!=NULL; tmp=tmp->next) if (!tmp->invisible) { char buf[MAX_BUF]; ! sprintf(buf,"You can't pick up a %s.", tmp->name? tmp->name:"null"); new_draw_info(NDI_UNIQUE, 0,op, buf); break; Index: server/player.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/player.c,v retrieving revision 1.18 retrieving revision 1.19 diff -c -r1.18 -r1.19 *** server/player.c 2000/10/30 22:09:59 1.18 --- server/player.c 2000/11/06 23:06:47 1.19 *************** *** 1,6 **** /* * static char *rcsid_player_c = ! * "$Id: player.c,v 1.18 2000/10/30 22:09:59 jec Exp $"; */ /* --- 1,6 ---- /* * static char *rcsid_player_c = ! * "$Id: player.c,v 1.19 2000/11/06 23:06:47 jec Exp $"; */ /* *************** *** 974,980 **** arrow->level = SK_level (op); arrow->map = op->map; - SET_FLAG(arrow, FLAG_NO_PICK); SET_FLAG(arrow, FLAG_FLYING); SET_FLAG(arrow, FLAG_FLY_ON); SET_FLAG(arrow, FLAG_WALK_ON); --- 974,979 ---- Index: server/rune.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/rune.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** server/rune.c 2000/06/09 00:17:22 1.8 --- server/rune.c 2000/11/06 23:06:47 1.9 *************** *** 1,6 **** /* * static char *rcsid_rune_c = ! * "$Id: rune.c,v 1.8 2000/06/09 00:17:22 cvs Exp $"; */ /* --- 1,6 ---- /* * static char *rcsid_rune_c = ! * "$Id: rune.c,v 1.9 2000/11/06 23:06:47 jec Exp $"; */ /* *************** *** 211,220 **** object *env; tag_t trap_tag = trap->count; ! trap->stats.hp--; /*decrement detcount */ /* get the spell number from the name in the slaying field, and set that as the spell to be cast. */ ! if((spell_in_rune=look_up_spell_by_name(NULL,trap->slaying))!=-1) trap->stats.sp=spell_in_rune; if(victim) if(victim->type==PLAYER) new_draw_info(NDI_UNIQUE, 0,victim,trap->msg); /* Flash an image of the trap on the map so the poor sod * knows what hit him. */ --- 211,233 ---- object *env; tag_t trap_tag = trap->count; ! /* Prevent recursion */ ! if (trap->stats.hp <= 0) ! return; ! /* get the spell number from the name in the slaying field, and set that as the spell to be cast. */ ! if ((spell_in_rune = look_up_spell_by_name (NULL, trap->slaying)) != -1) ! trap->stats.sp=spell_in_rune; ! ! /* Only living objects can trigger runes that don't cast spells, as ! * doing direct damage to a non-living object doesn't work anyway. ! * Typical example is an arrow attacking a door. ! */ ! if ( ! QUERY_FLAG (victim, FLAG_ALIVE) && ! trap->stats.sp) ! return; ! ! trap->stats.hp--; /*decrement detcount */ if(victim) if(victim->type==PLAYER) new_draw_info(NDI_UNIQUE, 0,victim,trap->msg); /* Flash an image of the trap on the map so the poor sod * knows what hit him. */ *************** *** 239,245 **** cast_spell(trap,trap,trap->direction,trap->stats.sp,1,spellNormal,NULL); } ! if(!trap->stats.hp) { trap->type=98; /* make the trap impotent */ trap->stats.food=20; /* make it stick around until its spells are gone */ SET_FLAG(trap,FLAG_IS_USED_UP); --- 252,258 ---- cast_spell(trap,trap,trap->direction,trap->stats.sp,1,spellNormal,NULL); } ! if (trap->stats.hp <= 0) { trap->type=98; /* make the trap impotent */ trap->stats.food=20; /* make it stick around until its spells are gone */ SET_FLAG(trap,FLAG_IS_USED_UP); Index: server/skills.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/skills.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** server/skills.c 2000/06/09 12:01:47 1.8 --- server/skills.c 2000/11/06 23:06:47 1.9 *************** *** 1,6 **** /* * static char *rcsid_skills_c = ! * "$Id: skills.c,v 1.8 2000/06/09 12:01:47 jec Exp $"; */ /* CrossFire, A Multiplayer game for X-windows --- 1,6 ---- /* * static char *rcsid_skills_c = ! * "$Id: skills.c,v 1.9 2000/11/06 23:06:47 jec Exp $"; */ /* CrossFire, A Multiplayer game for X-windows *************** *** 1603,1609 **** throw_ob->speed_left = 0; throw_ob->map = op->map; - SET_FLAG(throw_ob, FLAG_NO_PICK); SET_FLAG(throw_ob, FLAG_FLYING); SET_FLAG(throw_ob, FLAG_FLY_ON); SET_FLAG(throw_ob, FLAG_WALK_ON); --- 1603,1608 ---- Index: server/spell_effect.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/spell_effect.c,v retrieving revision 1.24 retrieving revision 1.25 diff -c -r1.24 -r1.25 *** server/spell_effect.c 2000/10/20 19:19:39 1.24 --- server/spell_effect.c 2000/11/06 23:06:47 1.25 *************** *** 1,6 **** /* * static char *rcsid_spell_effect_c = ! * "$Id: spell_effect.c,v 1.24 2000/10/20 19:19:39 peterm Exp $"; */ --- 1,6 ---- /* * static char *rcsid_spell_effect_c = ! * "$Id: spell_effect.c,v 1.25 2000/11/06 23:06:47 jec Exp $"; */ *************** *** 1540,1551 **** if (at) for(i=1;i<9;i++) fire_arch(op,op,i,at,0,0); ! remove_ob(op); ! op->x=env->x; ! op->y=env->y; ! if(!explode_object(op)) /* Boom 8) */ ! LOG(llevError,"Error: bomb refused to go off.\n"); ! return; } --- 1540,1546 ---- if (at) for(i=1;i<9;i++) fire_arch(op,op,i,at,0,0); ! explode_object(op); } *************** *** 1586,1593 **** insert_ob_in_map(op,op->map,op); return; } ! hit_map(op, 0, op->attacktype); ! insert_ob_in_map(op,op->map,op); } void cancellation(object *op) --- 1581,1588 ---- insert_ob_in_map(op,op->map,op); return; } ! if ((op = insert_ob_in_map (op, op->map, op)) != NULL) ! hit_map (op, 0, op->attacktype); } void cancellation(object *op) Index: server/spell_util.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/spell_util.c,v retrieving revision 1.24 retrieving revision 1.26 diff -c -r1.24 -r1.26 *** server/spell_util.c 2000/10/31 22:11:46 1.24 --- server/spell_util.c 2000/11/07 00:43:30 1.26 *************** *** 1,6 **** /* * static char *rcsid_spell_util_c = ! * "$Id: spell_util.c,v 1.24 2000/10/31 22:11:46 peterm Exp $"; */ /* --- 1,6 ---- /* * static char *rcsid_spell_util_c = ! * "$Id: spell_util.c,v 1.26 2000/11/07 00:43:30 peterm Exp $"; */ /* *************** *** 1103,1109 **** if ( ! QUERY_FLAG (tmp, FLAG_FLYING)) LOG (llevDebug, "cast_cone(): arch %s doesn't have flying 1\n", spell_arch->name); ! if ( ! QUERY_FLAG (tmp, FLAG_WALK_ON) || ! QUERY_FLAG (tmp, FLAG_FLY_ON)) LOG (llevDebug, "cast_cone(): arch %s doesn't have walk_on 1 and " "fly_on 1\n", spell_arch->name); insert_ob_in_map(tmp,op->map,op); --- 1103,1110 ---- if ( ! QUERY_FLAG (tmp, FLAG_FLYING)) LOG (llevDebug, "cast_cone(): arch %s doesn't have flying 1\n", spell_arch->name); ! if (( ! QUERY_FLAG (tmp, FLAG_WALK_ON) || ! QUERY_FLAG (tmp, FLAG_FLY_ON)) ! && tmp->stats.dam) LOG (llevDebug, "cast_cone(): arch %s doesn't have walk_on 1 and " "fly_on 1\n", spell_arch->name); insert_ob_in_map(tmp,op->map,op); *************** *** 1115,1131 **** int i; tag_t tag; - if (op->env) { - /* handle flowers in icecubes */ - op->speed = 0; - update_ob_speed (op); - return; - } - /* if no map then hit_map will crash so just ignore object */ if (! op->map) { LOG(llevError,"Tried to move_cone object %s without a map.\n", op->name ? op->name : "unknown"); return; } --- 1116,1127 ---- int i; tag_t tag; /* if no map then hit_map will crash so just ignore object */ if (! op->map) { LOG(llevError,"Tried to move_cone object %s without a map.\n", op->name ? op->name : "unknown"); + op->speed = 0; + update_ob_speed (op); return; } *************** *** 1478,1524 **** } insert_ob_in_map(op,op->map,op); } - - int explode_object(object *op) { - object *tmp, *victim, *env; ! if(out_of_map(op->map,op->x,op->y)) /* peterm: check for out of map obj's.*/ ! { ! return 0; ! } ! for(env=op;env->env!=NULL;env=env->env); ! if (env->map == NULL) ! return 0; ! if(op->other_arch==NULL) ! return 0; ! tmp=arch_to_object(op->other_arch); ! /* peterm: Hack added to make objects be able to both hit for damage and ! then explode. */ ! if(op->attacktype){ ! for(victim=get_map_ob(op->map,op->x,op->y);victim!=NULL;victim=victim->above) ! if(QUERY_FLAG(victim,FLAG_ALIVE)) ! break; ! hit_map(op,0,op->attacktype); ! #if 0 ! /* Hit_map will also do a hit_player for us. Leaving this call in ! * effectively doubles the amount of damage the bullet is doing. ! */ ! /* Should hit_map also be doing this? Why call hit_player ! * again? Also, make sure victim has not been killed - it ! * is possible that hit_map killed the object. ! */ ! if(victim!=NULL && !QUERY_FLAG(victim,FLAG_FREED)) ! hit_player(victim,op->stats.dam,op,op->attacktype); ! #endif } /* peterm: hack added to make fireballs and other explosions level * dependent: */ - /* op->stats.sp stores the spell which made this object here. */ tmp->stats.dam += SP_level_dam_adjust(op,op,op->stats.sp); if(op->attacktype&AT_MAGIC) tmp->attacktype|=AT_MAGIC; --- 1474,1524 ---- } insert_ob_in_map(op,op->map,op); } ! void explode_object(object *op) ! { ! tag_t op_tag = op->count; ! object *tmp; ! mapstruct *map; ! if (op->other_arch == NULL) { ! LOG (llevError, "BUG: explode_object(): op without other_arch\n"); ! remove_ob (op); ! free_object (op); ! return; ! } ! if (op->env) { ! object *env; ! for (env = op; env->env != NULL; env = env->env) ; ! if (env->map == NULL || out_of_map (env->map, env->x, env->y)) { ! LOG (llevError, "BUG: explode_object(): env out of map\n"); ! remove_ob (op); ! free_object (op); ! return; } + remove_ob (op); + op->x = env->x; + op->y = env->y; + insert_ob_in_map_simple (op, env->map); + } else if (out_of_map (op->map, op->x, op->y)) { + LOG (llevError, "BUG: explode_object(): op out of map\n"); + remove_ob (op); + free_object (op); + return; + } + + if (op->attacktype) { + hit_map (op, 0, op->attacktype); + if (was_destroyed (op, op_tag)) + return; + } /* peterm: hack added to make fireballs and other explosions level * dependent: */ /* op->stats.sp stores the spell which made this object here. */ + tmp = arch_to_object (op->other_arch); tmp->stats.dam += SP_level_dam_adjust(op,op,op->stats.sp); if(op->attacktype&AT_MAGIC) tmp->attacktype|=AT_MAGIC; *************** *** 1526,1573 **** if(op->stats.hp) tmp->stats.hp=op->stats.hp; tmp->stats.maxhp=op->count; /* Unique ID */ ! tmp->x=env->x,tmp->y=env->y; #ifdef MULTIPLE_GODS /* needed for AT_HOLYWORD stuff -b.t. */ if(tmp->attacktype&AT_HOLYWORD||tmp->attacktype&AT_GODPOWER) ! if(!tailor_god_spell(tmp,op)) return 0; #endif ! if (wall(env->map,env->x,env->y)) ! tmp->x-=DIRX(env),tmp->y-=DIRY(env); ! if (out_of_map(env->map, env->x, env->y)) ! free_object(tmp); ! else ! insert_ob_in_map(tmp,env->map,op); ! free_object(op); ! return 1; } ! void check_fired_arch(object *op) { ! if(blocked(op->map,op->x,op->y)) { object *tmp; ! remove_ob(op); ! if(out_of_map(op->map,op->x,op->y)) { ! free_object(op); ! return; } ! if(explode_object(op)) ! return; ! for(tmp=get_map_ob(op->map,op->x,op->y);tmp!=NULL;tmp=tmp->above) ! if(QUERY_FLAG(tmp, FLAG_ALIVE)) ! break; ! if(tmp!=NULL) ! op->stats.dam-=hit_player(tmp,op->stats.dam,op,op->attacktype); ! if(blocked(op->map,op->x,op->y)) { ! free_object(op); ! return; } - insert_ob_in_map(op,op->map,op); - } } ! void move_fired_arch(object *op) { ! remove_ob(op); /* peterm: added to make comet leave a trail of burnouts it's an unadulterated hack, but the effect is cool. */ --- 1526,1588 ---- if(op->stats.hp) tmp->stats.hp=op->stats.hp; tmp->stats.maxhp=op->count; /* Unique ID */ ! tmp->x = op->x; ! tmp->y = op->y; #ifdef MULTIPLE_GODS /* needed for AT_HOLYWORD stuff -b.t. */ if(tmp->attacktype&AT_HOLYWORD||tmp->attacktype&AT_GODPOWER) ! if ( ! tailor_god_spell (tmp, op)) { ! remove_ob (op); ! free_object (op); ! return; ! } #endif ! /* Prevent recursion */ ! CLEAR_FLAG (op, FLAG_WALK_ON); ! CLEAR_FLAG (op, FLAG_FLY_ON); ! ! insert_ob_in_map (tmp, op->map, op); ! if ( ! was_destroyed (op, op_tag)) { ! remove_ob (op); ! free_object (op); ! } } ! void check_fired_arch (object *op) ! { ! tag_t op_tag = op->count, tmp_tag; object *tmp; ! int dam; ! ! if ( ! blocked (op->map, op->x, op->y)) ! return; ! ! if (op->other_arch) { ! explode_object (op); ! return; } ! ! for (tmp = get_map_ob (op->map,op->x,op->y); tmp != NULL; tmp = tmp->above) ! { ! if (QUERY_FLAG (tmp, FLAG_ALIVE)) { ! tmp_tag = tmp->count; ! dam = hit_player (tmp, op->stats.dam, op, op->attacktype); ! if (was_destroyed (op, op_tag) || ! was_destroyed (tmp, tmp_tag) ! || (op->stats.dam -= dam) < 0) ! { ! remove_ob (op); ! free_object(op); ! return; ! } ! } } } ! void move_fired_arch (object *op) ! { ! tag_t op_tag = op->count; ! int new_x, new_y; /* peterm: added to make comet leave a trail of burnouts it's an unadulterated hack, but the effect is cool. */ *************** *** 1576,1636 **** tmp1->x = op->x; tmp1->y = op->y; insert_ob_in_map(tmp1,op->map,op); } /* end addition. */ ! op->x+=DIRX(op),op->y+=DIRY(op); ! if(!op->direction||wall(op->map,op->x,op->y)) { ! if(explode_object(op)) ! return; ! free_object(op); ! return; } ! if(reflwall(op->map,op->x,op->y)) { ! op->direction=absdir(op->direction+4); ! if ((op = insert_ob_in_map(op,op->map,op)) != NULL) ! update_turn_face(op); ! return; } - if(blocked(op->map,op->x,op->y)) { - object *tmp; ! if(out_of_map(op->map,op->x,op->y)) { ! free_object(op); ! return; ! } ! ! if(explode_object(op)) ! return; ! ! for(tmp=get_map_ob(op->map,op->x,op->y);tmp!=NULL;tmp=tmp->above) ! if(QUERY_FLAG(tmp, FLAG_ALIVE)) ! break; ! ! if(tmp!=NULL) { ! /* Certain items, like speedballs, have attacktype ghosthit. ! * hit_player wants to remove the object after it hits the player. ! * Since it is already removed, just don't make it ghosthit, and ! * remove it here ! */ ! ! if (op->attacktype & AT_GHOSTHIT) { ! hit_player(tmp,op->stats.dam,op,(op->attacktype & ~AT_GHOSTHIT)); ! free_object(op); ! return; ! } ! else ! op->stats.dam-=hit_player(tmp,op->stats.dam,op,op->attacktype); ! } ! /* I guess this can be applicable if the object blocking the ! * space was destroyed? ! */ ! if(blocked(op->map,op->x,op->y)) { ! free_object(op); ! return; ! } ! } /* if space is blocked */ ! insert_ob_in_map(op,op->map,op); } --- 1591,1629 ---- tmp1->x = op->x; tmp1->y = op->y; insert_ob_in_map(tmp1,op->map,op); + if (was_destroyed (op, op_tag)) + return; } /* end addition. */ ! new_x = op->x + DIRX(op); ! new_y = op->y + DIRY(op); ! if (out_of_map (op->map, new_x, new_y)) { ! remove_ob (op); ! free_object (op); ! return; } ! if ( ! op->direction || wall (op->map, new_x, new_y)) { ! if (op->other_arch) { ! explode_object (op); ! } else { ! remove_ob (op); ! free_object (op); ! } ! return; } ! remove_ob (op); ! op->x = new_x; ! op->y = new_y; ! if ((op = insert_ob_in_map (op, op->map, op)) == NULL) ! return; ! if (reflwall (op->map, op->x, op->y)) { ! op->direction = absdir (op->direction + 4); ! update_turn_face (op); ! } else { ! check_fired_arch (op); ! } } *************** *** 1683,1727 **** /* peterm: ball lightning mover. */ /* ball lightning automatically seeks out a victim, if it sees any monsters close enough. */ - void move_ball_lightning(object *op) { ! int i,nx,ny,tx,ty,j,dam_save; object *owner; owner = get_owner(op); - remove_ob(op); /* Only those attuned to PATH_ELEC may use ball lightning with AT_GODPOWER */ ! if((!(owner->path_attuned & PATH_ELEC))&& (op->attacktype & AT_GODPOWER)) { free_object(op); new_draw_info_format(NDI_UNIQUE,0,owner,"The ball lightning dispells immediately. Perhaps you need attunement to the spell path?"); return; } ! nx=op->x+DIRX(op); ! ny=op->y+DIRY(op); ! ty=op->y; ! tx=op->x; /* the following logic makes sure that the ball ! doesn't move into a wall, and makes ! sure that it will move along a wall to try and ! get at it's victim. */ ! if(!wall(op->map, nx, ny)&&!blocks_view(op->map,nx,ny)) { ! tx=nx; ! ty=ny; } ! else ! { i=RANDOM()%2; ! if(i) { ! if(!wall(op->map,op->x,ny)&&!blocks_view(op->map,op->x,ny)) ty=ny; ! else if(!wall(op->map,nx,op->y)&&!blocks_view(op->map,nx,op->y)) tx=nx; ! } ! else { ! if(!wall(op->map,nx,op->y)&&!blocks_view(op->map,nx,op->y)) tx=nx; ! else if(!wall(op->map,op->x,ny)&&!blocks_view(op->map,op->x,ny)) ty=ny; ! } } ! op->y=ty; ! op->x=tx; insert_ob_in_map(op,op->map,op); dam_save = op->stats.dam; /* save the original dam: we do halfdam on --- 1676,1725 ---- /* peterm: ball lightning mover. */ /* ball lightning automatically seeks out a victim, if it sees any monsters close enough. */ void move_ball_lightning(object *op) { ! int i,nx,ny,tx,ty,j,dam_save,dir; object *owner; owner = get_owner(op); /* Only those attuned to PATH_ELEC may use ball lightning with AT_GODPOWER */ ! if(owner && (!(owner->path_attuned & PATH_ELEC))&& (op->attacktype & AT_GODPOWER)) { ! remove_ob(op); free_object(op); new_draw_info_format(NDI_UNIQUE,0,owner,"The ball lightning dispells immediately. Perhaps you need attunement to the spell path?"); return; } + + /* the following logic makes sure that the ball + doesn't move into a wall, and makes + sure that it will move along a wall to try and + get at it's victim. */ + dir = 0; ! if(!(RANDOM() %4)) ! j = RANDOM() %2; ! for(i = 1; i < 9; i++) { ! /* i bit 0: alters sign of offset ! * otther bits (i / 2): absolute value of offset ! */ ! ! int offset = ((i ^ j) & 1) ? (i / 2) : - (i / 2); ! int tmpdir = absdir (op->direction + offset); ! nx = op->x + freearr_x[tmpdir]; ! ny = op->y + freearr_y[tmpdir]; ! if ( ! wall (op->map, nx, ny) && ! blocks_view (op->map, nx, ny)) { ! dir = tmpdir; ! break; ! } } ! if (dir == 0) { ! nx = op->x; ! ny = op->y; } ! ! remove_ob(op); ! op->y=ny; ! op->x=nx; insert_ob_in_map(op,op->map,op); dam_save = op->stats.dam; /* save the original dam: we do halfdam on *************** *** 1731,1751 **** for(j=0;j<9;j++) { int hx,hy; /* hit these squares */ ! hx = tx+freearr_x[j]; hy = ty+freearr_y[j]; /* first, don't ever, ever hit the owner. Don't hit out of the map either.*/ ! if(! (owner->x==hx && owner->y==hy) && !out_of_map(op->map,hx,hy)) { ! op->x = hx; ! op->y = hy; if(j) op->stats.dam = dam_save/2; ! if(blocked(op->map,op->x,op->y)) hit_map(op,0,op->attacktype); } } /* restore to the center location and damage*/ - op->y = ty; - op->x = tx; op->stats.dam = dam_save; i=spell_find_dir(op->map,op->x,op->y,get_owner(op)); --- 1729,1745 ---- for(j=0;j<9;j++) { int hx,hy; /* hit these squares */ ! hx = nx+freearr_x[j]; hy = ny+freearr_y[j]; /* first, don't ever, ever hit the owner. Don't hit out of the map either.*/ ! if(! (owner && owner->x==hx && owner->y==hy) && !out_of_map(op->map,hx,hy)) { if(j) op->stats.dam = dam_save/2; ! if(blocked(op->map,hx,hy)) hit_map(op,j,op->attacktype); } } /* restore to the center location and damage*/ op->stats.dam = dam_save; i=spell_find_dir(op->map,op->x,op->y,get_owner(op)); *************** *** 1759,1764 **** --- 1753,1760 ---- op->direction=i; } } + + /* peterm: do LOS stuff for ball lightning. Go after the closest VISIBLE monster. Index: server/time.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/time.c,v retrieving revision 1.13 retrieving revision 1.14 diff -c -r1.13 -r1.14 *** server/time.c 2000/11/04 06:40:50 1.13 --- server/time.c 2000/11/06 23:06:47 1.14 *************** *** 1,6 **** /* * static char *rcsid_time_c = ! * "$Id: time.c,v 1.13 2000/11/04 06:40:50 cvs Exp $"; */ /* --- 1,6 ---- /* * static char *rcsid_time_c = ! * "$Id: time.c,v 1.14 2000/11/06 23:06:47 jec Exp $"; */ /* *************** *** 441,469 **** } ! /* stop_arrow() - what to do when a non-living flying object ! * has to stop. Sept 96 - I added in thrown object code in ! * here too. -b.t. ! * op is arrow, tmp is what is stopping the arrow (can be NULL) */ ! ! void stop_arrow(object *op,object *tmp) { ! if(wall(op->map,op->x,op->y)) ! op->x-=DIRX(op),op->y-=DIRY(op); ! if(wall(op->map, op->x, op->y)) { ! free_object(op); ! return; } if(RANDOM() % 100 < op->stats.food) { /* Small chance of breaking */ free_object(op); ! return; } op->direction=0; - CLEAR_FLAG(op, FLAG_NO_PICK); CLEAR_FLAG(op, FLAG_WALK_ON); CLEAR_FLAG(op, FLAG_FLY_ON); CLEAR_FLAG(op, FLAG_FLYING); --- 441,519 ---- } ! /* stop_item() returns a pointer to the stopped object. The stopped object ! * may or may not have been removed from maps or inventories. It will not ! * have been merged with other items. ! * ! * This function assumes that only items on maps need special treatment. ! * ! * If the object can't be stopped, or it was destroyed while trying to stop ! * it, NULL is returned. ! * ! * fix_stopped_item() should be used if the stopped item should be put on ! * the map. */ ! object *stop_item (object *op) ! { ! if (op->map == NULL) ! return op; ! switch (op->type) ! { ! case THROWN_OBJ: ! { ! object *payload = op->inv; ! if (payload == NULL) ! return NULL; ! remove_ob (payload); ! remove_ob (op); ! free_object (op); ! return payload; ! } ! ! case ARROW: ! if (op->speed >= MIN_ACTIVE_SPEED) ! op = fix_stopped_arrow (op); ! return op; ! ! case CONE: ! if (op->speed < MIN_ACTIVE_SPEED) { ! return op; ! } else { ! return NULL; ! } ! ! default: ! return op; } + } + /* fix_stopped_item() - put stopped item where stop_item() had found it. + * Inserts item into the old map, or merges it if it already is on the map. + * + * 'map' must be the value of op->map before stop_item() was called. + */ + void fix_stopped_item (object *op, mapstruct *map, object *originator) + { + if (map == NULL) + return; + if (QUERY_FLAG (op, FLAG_REMOVED)) + insert_ob_in_map (op, map, originator); + else if (op->type == ARROW) + merge_ob (op, NULL); /* only some arrows actually need this */ + } + + + object *fix_stopped_arrow (object *op) + { if(RANDOM() % 100 < op->stats.food) { /* Small chance of breaking */ + remove_ob (op); free_object(op); ! return NULL; } op->direction=0; CLEAR_FLAG(op, FLAG_WALK_ON); CLEAR_FLAG(op, FLAG_FLY_ON); CLEAR_FLAG(op, FLAG_FLYING); *************** *** 475,537 **** op->stats.sp = 0; op->stats.hp = 0; op->face=op->arch->clone.face; - - /* this happens for thrown objects, which 'carry' the - * real object in inventory. */ - if(op->inv) { - object *old=op,*new=op->inv; - remove_ob(op->inv); - new->map = old->map; - free_object(old); - op = new; - } - - /* If the missile hit a player, we insert it in their inventory. - * However, if the missile is heavy, we don't do so (assume it falls - * to the ground after a hit). What a good value for this is up to - * debate - 5000 is 5 kg, so arrows, knives, and other light weapons - * stick around. - */ - if(op->weight <= 5000 && tmp!=NULL&&tmp->stats.hp>=0) { - if(tmp->head != NULL) - tmp = tmp->head; - op = insert_ob_in_ob(op,tmp); - if (tmp->type== PLAYER) - esrv_send_item (tmp, op); - } else - insert_ob_in_map(op,op->map,op); op->owner=NULL; /* So that stopped arrows will be saved */ } /* Move an arrow along its course. op is the arrow or thrown object. */ void move_arrow(object *op) { object *tmp; if(op->map==NULL) { ! LOG(llevDebug,"Arrow had no map.\n"); remove_ob(op); free_object(op); return; } - remove_ob(op); - /* we need to stop thrown objects at some point. Like here. */ if(op->type==THROWN_OBJ) { if(op->last_sp-- < 0) { ! stop_arrow(op, NULL); return; } } ! if(wall(op->map,op->x+DIRX(op),op->y+DIRY(op))) { /* if the object doesn't reflect, stop the arrow from moving */ if(!QUERY_FLAG(op, FLAG_REFLECTING) || !(RANDOM()%20)) { ! stop_arrow(op,NULL); return; } else { /* object is reflected */ /* If one of the major directions (n,s,e,w), just reverse it */ --- 525,633 ---- op->stats.sp = 0; op->stats.hp = 0; op->face=op->arch->clone.face; op->owner=NULL; /* So that stopped arrows will be saved */ + update_object (op); + return op; } + /* stop_arrow() - what to do when a non-living flying object + * has to stop. Sept 96 - I added in thrown object code in + * here too. -b.t. + * + * Returns a pointer to the stopped object (which will have been removed + * from maps or inventories), or NULL if was destroyed. + */ + + static void stop_arrow (object *op) + { + if (op->inv) { + object *payload = op->inv; + remove_ob (payload); + insert_ob_in_map (payload, op->map, payload); + remove_ob (op); + free_object (op); + } else { + op = fix_stopped_arrow (op); + if (op) + merge_ob (op, NULL); + } + } /* Move an arrow along its course. op is the arrow or thrown object. */ void move_arrow(object *op) { object *tmp; + sint16 new_x, new_y; + int was_reflected; if(op->map==NULL) { ! LOG (llevError, "BUG: Arrow had no map.\n"); remove_ob(op); free_object(op); return; } /* we need to stop thrown objects at some point. Like here. */ if(op->type==THROWN_OBJ) { + if (op->inv == NULL) + return; if(op->last_sp-- < 0) { ! stop_arrow (op); return; } } + /* Calculate target map square */ + new_x = op->x + DIRX(op); + new_y = op->y + DIRY(op); + was_reflected = 0; + + /* See if there is any living object on target map square */ + tmp = out_of_map (op->map, new_x, new_y) + ? NULL : get_map_ob (op->map, new_x, new_y); + while (tmp != NULL && ! QUERY_FLAG (tmp, FLAG_ALIVE)) + tmp = tmp->above; + + if (tmp != NULL) + { + /* Found living object, but it is reflecting the missile. Update + * as below. + */ + if (QUERY_FLAG (tmp, FLAG_REFL_MISSILE)) + { + int number = op->face->number; + + op->direction = absdir (op->direction + 4); + op->state = 0; + if (GET_ANIM_ID (op)) { + number += 4; + if (number > GET_ANIMATION (op, 8)) + number -= 8; + op->face = &new_faces[number]; + } + if (wall (op->map, new_x, new_y)) { + /* Target is standing on a wall. Let arrow turn around before + * the wall. */ + new_x = op->x; + new_y = op->y; + } + was_reflected = 1; /* skip normal movement calculations */ + } + else + { + /* Attack the object. */ + op = hit_with_arrow (op, tmp); + if (op == NULL) + return; + } + } ! if ( ! was_reflected && wall (op->map, new_x, new_y)) ! { /* if the object doesn't reflect, stop the arrow from moving */ if(!QUERY_FLAG(op, FLAG_REFLECTING) || !(RANDOM()%20)) { ! stop_arrow (op); return; } else { /* object is reflected */ /* If one of the major directions (n,s,e,w), just reverse it */ *************** *** 566,572 **** else if(!right) op->direction=absdir(op->direction+1); else { /* is this possible? */ ! stop_arrow(op,NULL); return; } } --- 662,668 ---- else if(!right) op->direction=absdir(op->direction+1); else { /* is this possible? */ ! stop_arrow (op); return; } } *************** *** 577,624 **** } /* object is reflected */ } /* object ran into a wall */ ! op->x+=DIRX(op),op->y+=DIRY(op); ! tmp=get_map_ob(op->map,op->x,op->y); ! ! /* See if there is any living object on this space */ ! while(tmp!=NULL&&!QUERY_FLAG(tmp, FLAG_ALIVE)) ! tmp=tmp->above; ! ! /* Nothing alive? Insert arrow and return */ ! if(tmp==NULL) { ! insert_ob_in_map(op,op->map,op); ! return; ! } ! ! /* Found living object, but it is reflecting the missile. Update ! * as below. ! */ ! if (QUERY_FLAG(tmp, FLAG_REFL_MISSILE)) { ! int number = op->face->number; ! ! op->direction=absdir(op->direction+4),op->state=0; ! if(GET_ANIM_ID(op)) { ! number+=4; ! if(number > GET_ANIMATION(op, 8)) ! number-=8; ! op->face = &new_faces[number]; ! } ! insert_ob_in_map(op,op->map,op); ! return; ! } ! ! /* Attach the object. IF successful, stop the arrow */ ! if(attack_ob(tmp,op)) ! stop_arrow(op,tmp); ! else { ! /* if we miss, insert it back into the map. If no direction, ! * stop the arrow. ! */ ! if(op->direction) ! insert_ob_in_map(op,op->map,op); ! else ! stop_arrow(op,NULL); ! } } /* This routine doesnt seem to work for "inanimate" objects that --- 673,683 ---- } /* object is reflected */ } /* object ran into a wall */ ! /* Move the arrow. */ ! remove_ob (op); ! op->x = new_x; ! op->y = new_y; ! insert_ob_in_map (op, op->map, op); } /* This routine doesnt seem to work for "inanimate" objects that Index: socket/item.c =================================================================== RCS file: /home/cvs/CVS/crossfire/socket/item.c,v retrieving revision 1.6 retrieving revision 1.7 diff -c -r1.6 -r1.7 *** socket/item.c 2000/11/03 05:42:56 1.6 --- socket/item.c 2000/11/06 23:06:48 1.7 *************** *** 1,7 **** /* * static char *rcsid_item_c = ! * "$Id: item.c,v 1.6 2000/11/03 05:42:56 cvs Exp $"; */ /* --- 1,7 ---- /* * static char *rcsid_item_c = ! * "$Id: item.c,v 1.7 2000/11/06 23:06:48 jec Exp $"; */ /* *************** *** 710,717 **** } return; } else if (to == pl->count) { /* pick it up to the inventory */ - /* pick_up_object (pl, pl, op, nrof);*/ - /* Using pick_up will cause objects to get put into containers. */ pl->contr->count = nrof; pick_up(pl, op); return ; --- 710,715 ---- From mwedel at scruznet.com Tue Nov 7 23:15:12 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] new savebed concept References: <22327.973602584@www34.gmx.net> Message-ID: <3A08E160.BADDBEA3@scruznet.com> Andreas Vogl wrote: > Quite frankly: I dislike the current concept that players get beamed to > scorn center after death. I think this is a relict from times where > CF was pure hack 'n slash (like "gauntlet") with only a very small mapset. They needed to get beamed back someplace. The starting town seemed like a good place. > In my opinion, the only reasonable way to go is have players wake up > on the last-applied "bed of reality" (= savebed). Hence, we would write > the > location of the current wake-up-position into the player struct > and -file. This can surely be done without breaking existing player files. As an enhancement, perhaps have a flag or other setting on savebeds which control if they update your 'home' position or not. It may not be a big deal, but I would think there may be some cases where you really don't want to update your home position, but you want to save the game. Also, this would then suggest that when you do die, you would show up in an inn. I guess there is no harm in that, but seems like a bit of an odd place. From mwedel at scruznet.com Tue Nov 7 23:23:53 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] severe bug in CVS!! References: <000001c04916$b1daf980$c521993e@kyle> Message-ID: <3A08E369.F4C62960@scruznet.com> Andreas Vogl wrote: > > I just downloaded the recent CF-server from CVS. > After installing I realized that signs didn?t work properly > anymore. - Yes, simple "signs", like in scorn center. > > When I apply a sign I get only about half of the message, the > rest is missing. Sometimes even more trouble happens, like > my client crashes (cfclient) or the map screws up. > A mysterious and definitly very new bug. > > Please try to fix this as fast as possible, because the actual CVS > version is completely broken now. I believe I have fixed this and will check it in later tonight. The problem was my fix for long item names in socket/item.c. I'm not sure why there was a bug, since it appears that query_base_name should always return a static buffer of at least 256 bytes, and changing the 127'th value in that should not make a difference. Even more interesting is that at least in my playing, it could take quite a while for the bug to show up (I was getting it on my system as I use debug malloc, and it was getting fence post corruption and the like). The severity of the bug is somewhat random, since the data being written could be in one of many areas, so depending on your system type, it may be overwriting buffer areas, or it could be overwriting object areas, etc. In any case, I have played with a change in the way I terminate the buffer, and the long item still seems to work as well as not having any apparant memory corruption. From mwedel at scruznet.com Wed Nov 8 01:23:11 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] cvs checkin. Message-ID: <3A08FF5F.BD6952E4@scruznet.com> Both client & server checkins. Log entries below: Server: MSW 2000-11-07 common/item.c: query_base_name was not return plural version of items with 'of' in name. Also, much of the function was not using safe_strcat, which could result in buffer overlow problems. common/object.c: Change update_position so that we always generate 3 images per space. This fixes players standing on top of dragon transports, but generally works for things like monsters standing on objects. insert_ob_in_map: change 'return' statement to 'return NULL'. Also remove unused map pointer. decrease_ob_nr: Fix bug for client updates when player drops item that is then consume. It was using op->above after object was removed to find the player. Store above pointer before we remove the object. socket/item.c: Don't terminate pointer as returned by query_base_name - instead, terminator buffer after we copy it. For simple object, query_base_name may directly return a pointer to the objects name which is only long enough to hold the name itself. socket/lowlevel.c: Abort if we are trying to send the client a packet longer than supported by the protocol. Since that buffer is static, overflowing it will just create memory corruption - easier to stop then than try and debug it later. End of MSW checkin 2000-11-7 Client Checkin on 2000-11-7 by MSW: item.h: Update NAME_LEN to 128, as the server may send us names that long. Also, terminate the name after we copy it. From peterm at tesla.EECS.Berkeley.EDU Wed Nov 8 02:02:33 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] cvs checkin. In-Reply-To: Your message of "Tue, 07 Nov 2000 23:23:11 PST." <3A08FF5F.BD6952E4@scruznet.com> Message-ID: <200011080802.AAA28257@tesla.EECS.Berkeley.EDU> Well, Mark, it seems your fixes have repaired the obvious problems. However, I also looked at the crash with a debugger and it wasn't clear to me either why what you did would have made it crash. poking 0 to element 127 of a 256-long buffer.... should not have crashed. Perhaps something more subtle was going on? PeterM > Both client & server checkins. Log entries below: > > Server: > > MSW 2000-11-07 > common/item.c: query_base_name was not return plural version of items > with 'of' in name. Also, much of the function was not using safe_strcat, > which could result in buffer overlow problems. > > common/object.c: Change update_position so that we always generate > 3 images per space. This fixes players standing on top of dragon transports, > but generally works for things like monsters standing on objects. > insert_ob_in_map: change 'return' statement to 'return NULL'. Also > remove unused map pointer. > decrease_ob_nr: Fix bug for client updates when player drops item that > is then consume. It was using op->above after object was removed to > find the player. Store above pointer before we remove the object. > > socket/item.c: Don't terminate pointer as returned by query_base_name - > instead, terminator buffer after we copy it. For simple object, > query_base_name may directly return a pointer to the objects name > which is only long enough to hold the name itself. > > socket/lowlevel.c: Abort if we are trying to send the client a packet > longer than supported by the protocol. Since that buffer is static, > overflowing it will just create memory corruption - easier to stop > then than try and debug it later. > > End of MSW checkin 2000-11-7 > > Client > Checkin on 2000-11-7 by MSW: > item.h: Update NAME_LEN to 128, as the server may send us names that > long. Also, terminate the name after we copy it. > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From dnh at hawthorn.csse.monash.edu.au Wed Nov 8 05:38:13 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] Savebeds - Andreas Message-ID: I completely agree with Andreas, while scorn has always been the "center" I think delocalisation will mean a much greater spread of areas where players can "hang". Perhaps even we could start conisdering things like clans? =) we only have a small group of followers but if we put that support in new players might feel more welcome being in a clan =). JAT Anyway, red's idea may of course mean players are even less likely to meet, whether that is good or bad I can't say but that is a really trivial issue IMHO. I say go for it red, need any help gimme a bell ;) dnh (Darthy) From andi.vogl at gmx.net Wed Nov 8 08:35:47 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:08 2005 Subject: [CF-Devel] new savebed concept In-Reply-To: <3A08E160.BADDBEA3@scruznet.com> Message-ID: <000101c04991$36f6bf80$7e99e23e@kyle> On Tue, 7.11.00, Erik G. wrote: > I think it would be great if you could chose your starting point > yourself; it would also be great with perm. appartments scattered > throughout the different maps. You see them on many maps, but they > are usually "closed". [...] On Tue, 7.11.00, Michael T. wrote: > Now my idea is, to make "virtual" perm. appartments. > That mean, you start with a very small perm. appartment, [...] > Then, you can "buy" new appartments (buildings). [...] > You can do in this style a kind of "social" carrier, buy you in > from low city parts in the royal center for example. Its stuff for > nice new quest too. [...] Those are very nice ideas and I?d love to see them realized. Anyways, I?m very happy to read so much positive response. :-) On Wed, 8.11.00, Mark W. wrote: > > In my opinion, the only reasonable way to go is have players wake > > up on the last-applied "bed of reality" (= savebed). > > As an enhancement, perhaps have a flag or other setting on savebeds > which control if they update your 'home' position or not. > > It may not be a big deal, but I would think there may be some cases > where you really don't want to update your home position, but you > want to save the game. Sure, but all you need to do is type "save" and you?re settled. I really can?t think of any use for savebeds that do not update the "home position". Hence, I believe that half-working savebeds would only confuse players. > Also, this would then suggest that when you do die, you would show up > in an inn. I guess there is no harm in that, but seems like a bit of > an odd place. For saving/respawning in RPGs I have never seen much else rather than inns or churches. But feel free to put savebeds wherever you want, as long as it?s a secure place in a city. =) Andreas V. From peterm at tesla.EECS.Berkeley.EDU Wed Nov 8 14:33:28 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] arch32 on the cvs repository? Message-ID: <200011082033.MAA19550@tesla.EECS.Berkeley.EDU> Does the arch32 dir on the CVS repository serve any purpose any longer? If we move to sourceforge it would be well to reduce the size of our repository a bit. PeterM From echter at informatik.uni-rostock.de Wed Nov 8 14:37:41 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] New god_intervention() Message-ID: <20001108213741.A11475@hokkaido.informatik.uni-rostock.de> Hi, First what this patch does outside of god_intervention(): The problems with start equipment (cursed items, many spellbooks with same spell) should be fixed. "summon avatar" is probably broken, because it used the god itself as the archetype to clone, and that has now some randomitems that the avatar should not have. But once the patch doesn't need to care about compatibility anymore, it'll be trivial to make a seperate avatar archetype and record the name of this archetype somewhere in the god's treasure list. A bug in god_intervention() has been fixed. Depletion was always removed even if the god had attacktype & (AT_DRAIN | AT_DEPLETION) because the code did test for attacktype & (AT_DRAIN || AT_DEPLETION). Well, you'll find this is the kind of bug when you a) look _very_ carefully, or b) put spaces before and after operators. god_intervention() now looks at the god->randomitems if the god has some. I've already implemented some new possibilities. You need to follow Mostrai if you want to test them with this patch. There's still a lot of compatibility code left. I'd like to remove that code ASAP, but that requires that every god has a treasure list. What's different from old god_intervention() except that you can now select each feature independently from each other and independently from god's path_attuned/repelled/denied: * Distinct "remove damnation", you can have gods that only remove curses, not damnations. * Some gods may enchant weapons better than other gods (determined by the level of the treasure object). I've also reduced enchantments at high wisdom levels. Even a god with god_enchant_weapon_high will only enchant weapons to magic +11 (if follower has maximum wisdom level). * Weapons will get a title first, before everything else. Gods will never add an attacktype to a weapon without that title. * (Not yet in this patch, but in my sources:) God will add its attacktypes if weapon has some of the attacktypes, but not yet all. * God can give any treasure (from a treasure list in the "treasures" file) to the follower. FLAG_STARTEQUIP will be set on these items. Be careful when using this feature, because the amount is not limited. Example in the patch: random_food. * God can give any item (with or without FLAG_STARTEQIUP) to the follower. It won't hand out this item if the follower already has something similar. This makes it rather safe to use. Example in the patch: Helmet of Mostrai. * God can say arbitrary messages. * God gives spells to the follower. In addition to what was already implemented (directly teaching the spell), the god can also give a spellbook with that spell. The new code doesn't use learn_prayer_chance[] anymore, because the calls to god_intervention() are already influenced by the followers wisdom, and it turned out that the only limiting factor was the level (because once I had reached the required level, I went to an altar, started praying, put some heavy item on the 'use_skill praying key and just waited until I got the spell). Possible features not implemented: * There is only the possibility to completely heal the follower. Some gods (e.g. those with path_repelled & PATH_RESTORATION) could use a less powerful healing method. * There is no possiblity to restore spellpoints implemeted yet. * Enchanting of bows and other types of equipment. What's needed now is discussing these and other ideas, and creating the treasure lists for the other gods. I'd appreciate if somebody else would create these lists. All required features and standard archetypes to replace the old god_intervention() are already in this patch, you'd only need to create archetypes for the spells and put the treasure lists in lib/treasures. Then I can remove the compatibility code and make the patch ready for inclusion in the official CVS tree. -- Jan -------------- next part -------------- A non-text attachment was scrubbed... Name: patch38a.gz Type: application/x-gunzip Size: 9199 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001108/a08f5a72/patch38a.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: arch38a.gz Type: application/x-gunzip Size: 1128 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001108/a08f5a72/arch38a.bin From John.Cater at eng.monash.edu.au Wed Nov 8 15:45:07 2000 From: John.Cater at eng.monash.edu.au (John Cater) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] TODO List - Flamebait Message-ID: Fellow Developers, I am a little concerned about the way we use our cvs tree etc at the moment. It seems as if the two main activities are taking place on the one branch. Or perhaps I don't understand how things are supposed to work. Firstly, the repository is being used to fix bugs in the last release - fine and good. But it is also being used to "test" new features (an example is the race/class split). Is this the best way? Is there a way of just getting a patch that handles the bugs in 0.95.7 without the new features? As for new features etc, I was looking throught the TODO file. I think that it contains some very attractive ideas for future directions/features in crossfire. However, I think some of them have already been dealt with, such as the skills update etc, I'd love to update the file, but I'm just not sure what's what. Also, the TODO file contains some of the collected "past wisdom" for things like player starting location / ressurection location that has been discussed extensively before on the list or how objects were going to be "redone" Now I'm a bug fixing kind of guy myself and I'd love to hunt some down in a relatively static tree. I think also think it would be good if someone like Jan went through the TODO list and made some kind of priority ranking of the new features for the next major version. Actually what I would like is a "feature freeze" of the current CVS, leaving it only open to bug fixes with the focus on a "stable" 0.96 Could we have another branch for 0.97 to which new features (from the TODO list) can be added? Johnc From andi.vogl at gmx.net Wed Nov 8 15:45:11 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] CVS update: battle-arena feature Message-ID: <000301c049cd$31944da0$a7a0e23e@kyle> Since Jan?s attacktype patch is in and CF-server seems to be stable, I have put my battle-arena feature (code and maps) on CVS now. A short summary of what it does: New maps: A huge arena south-east in scorn. New code: When a player dies on a "battleground"-tile he won?t loose exp nor stats. He won?t drop a gravestone but a finger instead (containing info about his level and killer). And he won?t get beamed to scorn but to a special location specified in the battleground arch. Moreover, exp-draining is disabled and acid won?t harm equipment on battleground. To make things easier, peaceful- mode is ignored too. Finally, it is impossible to gain exp by killing anything standing on such a tile. I?ve tested it local and on MiDS? server big time now, but if someone still discovers a bug - please let me know. Andreas V. From John.Cater at eng.monash.edu.au Wed Nov 8 15:52:28 2000 From: John.Cater at eng.monash.edu.au (John Cater) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] DONE, CHANGES Message-ID: Okay, so I've been browsing the text files that we include in the top level of the source distribution. The file "DONE" seems pretty useless at the moment, it talks about stuff that happened long ago, meanwhile the file changes is growing every day. I suggest that we remove the existing contents of DONE and instead fill it with the contents of CHANGES that refer to previous released versions. I am happy to do this if anyone agrees... Johnc From peterm at tesla.EECS.Berkeley.EDU Wed Nov 8 15:53:08 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] Crossfire CVS mailing list Message-ID: <200011082153.NAA04439@tesla.EECS.Berkeley.EDU> Because of complaints of high volume and spam to the crossfire-devel list, I removed the automatic send of CVS update messages to crossfire-devel. I asked for a special crossfire-cvs list, but the maintainers of crossfire.real-time.com haven't got back to me about it. Therefore, I've set up a crossfire-cvs list here: crossfire-cvs@lists.sourceforge.net You may subscribe by: http://lists.sourceforge.net/mailman/listinfo/crossfire-cvs I would also ask all the developers to sign up at sourceforge (www.sourceforge.net), in case we decide to move the entire crossfire development effort there. PeterM From andi.vogl at gmx.net Wed Nov 8 16:07:22 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! Message-ID: <000401c049d0$481c18c0$a7a0e23e@kyle> When a player had an item with attribute "reflect spell/missile" equiped, this didn?t work on 100% of all incoming projectiles. A meteor storm for instance used to make short work of a wannabe- hero with reflect spell. Maybe that was due to a bug in the old attack-code, but the effect was surely desired - and needed! With the new attack-code from Jan E. this has changed: Reflect spell/missile holds away 100% of all projectiles now. This breaks a whole lot of maps and quests because certain spells are rendered ridiculously harmless for highlevel players! E.g. I can face showers of meteor storms from Kasnuk in chaoslair (lake country) and get myself a coke in the meantime. The wounding spells from several pupland monsters don?t do any harm either... Please reduce the success-chance of reflect spell/missile to 90%. That is very important for gameplay. Andreas V. From leaf at real-time.com Wed Nov 8 16:21:16 2000 From: leaf at real-time.com (Rick Tanner) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] Crossfire CVS mailing list In-Reply-To: <200011082153.NAA04439@tesla.EECS.Berkeley.EDU> Message-ID: On Wed, 8 Nov 2000, Peter Mardahl wrote: {snip} > I asked for a special crossfire-cvs list, but the maintainers > of crossfire.real-time.com haven't got back to me about it. > Ughh, I thought I forwarded or cc'd a copy of these messages to the list. ============ Here was my initial email to Mark Wedel. Hi Mark, I thought I would bring this to your attention.. I have received two requests to make a separate mailing list for CVS updates so they wouldn't get posted to the crossfire-devel list. Let me know how you would like to proceed. (set it up, see what the devel list has to say, etc.) Thanks! ============ Here is the reply from Mark. I think there should probably be more discussion. Another thing which may help out, but I'm not sure how feasible, is to have the cvs repository reduce the number of messages - have it digest them or the like. Of course, the users who don't like it could also use procmail to avoid it. There could also be misunderstanding about what the developer list is for. IMO, it is really for those people who are or are thinking about writing actual code and the like. It isn't the list for 'woudn't this be a neet feature, or 'why don't you add this'. IMO, the more general list is the place for that, as anyone can comment on the validity of those options. Now those discussions may eventually get moved to the developer list after someone says 'yeah - I will do that, but now whats the best way to actually implement it'. I think you have the lists send out a message once a month to subscribers letting them know of their password and how to get off? IF so, then perhaps also adding a description of the lists and what each ones purpose is might be useful also, so stuff will remain on the right list. OTOH, if it isn't hard to set up a mailing list, I guess you could have a crossfire-cvs which only gets the cvs mailing messages (I imagine you can add a filter so it only takes them from whatever host, ie a moderated list), and people could opt in/opt out as they want. If possible, the reply-to on that should be crossfire-devel however, so that if people have questions/comments on a cvs commit, they can easily reply to it and bring up thoughts about it. From peterm at tesla.EECS.Berkeley.EDU Wed Nov 8 16:31:35 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] TODO List - Flamebait In-Reply-To: Your message of "Thu, 09 Nov 2000 08:45:07 +1100." Message-ID: <200011082231.OAA30611@tesla.EECS.Berkeley.EDU> > Firstly, the repository is being used to fix bugs in the last release - > fine and good. But it is also being used to "test" new features (an > example is the race/class split). Is this the best way? > Is there a way of just getting a patch that handles the bugs in 0.95.7 > without the new features? This is fine in theory, but it gets confusing in practice, and it is also more work. What you're proposing is that we maintain separately 2+ branches: one "stable" branch for bugfixes only, and development branches. Don't get me wrong, it's a good idea, but it is also more hoops for the developer to jump through and makes it less fun and requires more in-depth CVS knowledge on the part of developers. Not only should we keep game PLAY easy and fun, so we keep players, we should keep game DEVELOPMENT easy and fun (and open!), so we keep developers. (Easy in the sense of little boring administrative stuff!) I also don't think that features + fixes in the same cvs-line is much of a problem in crossfire: we simply don't have that many active developers, most of the time. Yeah, you get the effect of the new features creating bugs as fast as the bugfixers fix them, but Mark can always call a feature freeze for a while and we can emphasize testing in preparation for a release. His strategy of waiting for a development lull to release a snapshot as a release has seemed fine to me. It also seems to be the case that cool new features fuels the enthusiasm of the bugfixers. Instead of forking off devel/stable branches, why don't we discuss and agree on what goes into our next release, and do an intense period of bugfixing/testing for a week or so before the release and the next development free-for-all cycle? For the next release, I propose: 1) Current CVS with bugfixes 2) Inclusion of Jan's god-intervention patch 3) Use of Jan's god-intervention patch to finally balance religions 4) Distribution of priest spells to balance religions 5) Intensive testing of all recent patches 6) Any nifty features that get done and debugged before 4) is completed. PeterM > As for new features etc, I was looking throught the TODO file. I think > that it contains some very attractive ideas for future > directions/features in crossfire. However, I think some of them have > already been dealt with, such as the skills update etc, I'd love to > update the file, but I'm just not sure what's what. > > Also, the TODO file contains some of the collected "past wisdom" for > things like player starting location / ressurection location that has > been discussed extensively before on the list or how objects were going > to be "redone" > > Now I'm a bug fixing kind of guy myself and I'd love to hunt some down > in a relatively static tree. I think also think it would be good if > someone like Jan went through the TODO list and made some kind of > priority ranking of the new features for the next major version. > > Actually what I would like is a "feature freeze" of the current CVS, > leaving it only open to bug fixes with the focus on a "stable" 0.96 > Could we have another branch for 0.97 to which new features (from the > TODO list) can be added? > > Johnc > > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From andi.vogl at gmx.net Wed Nov 8 17:20:17 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] TODO List - Flamebait In-Reply-To: <200011082231.OAA30611@tesla.EECS.Berkeley.EDU> Message-ID: <000601c049da$80c583a0$a7a0e23e@kyle> I completely agree with Peter Mardahl. I think a game that is cool and has a few little bugs is much more fun that a game that is stable as a rock, but ten years old. Moreover, players definitly want the "new features", and developers want the players to test them too. So why should we make both sides unhappy and release a stripped version with nothing but bugfixes? For the "TODO" and "DONE"-files: In my opinion ideas are too vague and too flexible to be effectively listed up. People don?t work on a project because it?s written in a TODO-file, people work when they like to. I for instance have my own personal fun-TODO-list here on my desk. And today I?ve put a checkmark to the line "battle arena". =)) Don?t get me wrong, bugfixing *is* important. But we shouldn?t sacrifice development-speed for it, unless we indend to make a CF-release withing one or two weeks. Andreas V. From mwedel at scruznet.com Thu Nov 9 00:04:15 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] arch32 on the cvs repository? References: <200011082033.MAA19550@tesla.EECS.Berkeley.EDU> Message-ID: <3A0A3E5F.AB09D1A@scruznet.com> Peter Mardahl wrote: > > Does the arch32 dir on the CVS repository serve any purpose > any longer? If we move to sourceforge it would be well to > reduce the size of our repository a bit. It does not server any purpose anymore. It originally held the 32x32 xpm images (which I converted to the 32x32 png images). Enought stuff has changed in the arch directory that I can't see the arch32 directory having any use. From mwedel at scruznet.com Thu Nov 9 00:38:45 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] TODO List - Flamebait References: Message-ID: <3A0A4675.EDAEF71A@scruznet.com> John Cater wrote: > > Fellow Developers, > > I am a little concerned about the way we use our cvs tree etc at the > moment. It seems as if the two main activities are taking place on the > one branch. Or perhaps I don't understand how things are supposed to > work. > > Firstly, the repository is being used to fix bugs in the last release - > fine and good. But it is also being used to "test" new features (an > example is the race/class split). Is this the best way? > Is there a way of just getting a patch that handles the bugs in 0.95.7 > without the new features? In theory, CVS should not be a testing ground - stuff put into CVS should be tested/stable, but balancing is another issue. While having a 'stable' and 'bleeding edge' release are nice idea, as Peter mentioned, there is some issue of trying to keep it up to date. I personally don't really mind that idea, as long as it doesn't create any more work for me or other developers. What this would entail is somewhere volunteering to maintain the older & stable release. that person would watch checkins to the latest CVS repository, and see what things are actually bug fixes that should be backported, or other features that have proven stable and thus should be in the stable version. The other problem is how many people will use each of these two releases. If no one uses the latest CVS snapshot (or a very small sample size), then you'll never really find out if the stuff checked into CVS is balanced and stable. At the same time, if few people use the stable release, then there is a lot of effort to produce these that few people use. > > As for new features etc, I was looking throught the TODO file. I think > that it contains some very attractive ideas for future > directions/features in crossfire. However, I think some of them have > already been dealt with, such as the skills update etc, I'd love to > update the file, but I'm just not sure what's what. If you have questions, ask. I always try to answer them. > > Also, the TODO file contains some of the collected "past wisdom" for > things like player starting location / ressurection location that has > been discussed extensively before on the list or how objects were going > to be "redone" I do notice that the TODO has some out of date entries. The area about client issues that should be removed when we go to true client/server are all pretty much irrelevant or items that should be moved to a client TODO list. > > Now I'm a bug fixing kind of guy myself and I'd love to hunt some down > in a relatively static tree. I think also think it would be good if > someone like Jan went through the TODO list and made some kind of > priority ranking of the new features for the next major version. Note you can always do a cvs checkout (or base off of 95.7 for example), and fix the bugs in that, then integrate into CVS tree. For some bugs, the re-integration may be very easy - other ones may be large scale. > > Actually what I would like is a "feature freeze" of the current CVS, > leaving it only open to bug fixes with the focus on a "stable" 0.96 > Could we have another branch for 0.97 to which new features (from the > TODO list) can be added? Andreas mentioned he had is TODO list of things he wants to put into. I have my own, and I'm sure each person has their own TODO list in terms of priority. It may be a good idea share these lists (and priorities) so everyone can see what is in store for future development. My fairly short list: 1) Add metaserver support to the server. Originally, this information will be available via web or perhaps other interfaces, but adding support in the client to be able to try and connect to these servers will be needed - that may actually be the harder part (having client connect to the metaserver, present the list to the player to choose one (or none of the above), would actually be a bit of client code. 2) Re-do object structure. Mainly to remove overloading names and to hopefully makes things more general. But this is a major undertaking - my latest idea on this would be to implement the new structures, but have the loader by able to handle the existing form, and updating the arch's later on. This would also hopefully make the .arc files more readable, as the fields will actually be named for what they do, and not what happened to be left over like many of the objects use. 3) Map tiling (from TODO). I want to get #2 done before doing this. Somewhere in #2 and #3 would be a rules/engine split. Generic object & map handling would be in one directory, while things specific to the type of game (fantasy, science fiction, etc) would be in another. So while right now exits are handled in the server directory, that would really be in the engine directory (since all systems would use exits), but generation of some items may be in the rules. The current directory structure (whats in common and server) doesn't make a lot of sense, and even files within the directories don't always make sense (the 'skills command for example is dispatched in c_wiz.c, which certainly wasn't where I expected it). Generally speaking, the bulk of crossfire code is fairly unchanged from 7-8 years ago, so there are lots of artifacts left with that, and if we want to continue going into the future, I think this really needs to be cleaned up. From mwedel at scruznet.com Thu Nov 9 00:47:02 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] DONE, CHANGES References: Message-ID: <3A0A4866.AB736F80@scruznet.com> John Cater wrote: > > Okay, so I've been browsing the text files that we include in the top > level of the source distribution. > > The file "DONE" seems pretty useless at the moment, it talks about stuff > that happened long ago, meanwhile the file changes is growing every day. > > I suggest that we remove the existing contents of DONE and instead fill > it with the contents of CHANGES that refer to previous released > versions. I am happy to do this if anyone agrees... I'm not convince we need both CHANGES and DONE. Taking a quick glance at DONE, it appears it basically contains the log entries as checkins were done. Generally, I put whatever I used as the CVS log entry into CHANGES. We've never really decided what should really be in the LOG and CHANGES file. But generally, I've been satisfied with the details provided in the log entries. The one thing I could see would be that the CHANGES may actually go into higher detail than people may really care. So perhaps removal of a DONE file and instead the addition of a SUMMARY file or the like that contains even briefer descriptions, and include stuff more than players care about than users. For example, many things in the CHANGES file should be there, but in reality, don't effect how the game plays (some things are compiler warnings, some things may assist in debugging, etc) From dnh at hawthorn.csse.monash.edu.au Thu Nov 9 01:04:25 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] Jans gods fix Message-ID: Thanks Jan, that is exactky what I have been waiting/hopeing for. I would like to take the project of gods balancing please as that is what I am most interested in (also top of my todo list). Again thanks Jan, your patch is perfect for all the ideas I have had on balancing the gods abit better =). I will write up a list of the Gods "gifts" and strengths weaknesses.. which will be based on the current gods, mostly relying on their titles (Ruggilli god of chaos, etc etc). Any suggestion etc would be appreciated, the best way to send them is through irc via #crossfire on IRCnet ;). Everyone is invited to the channel. dnh (Darthy) ps. Johnc: monash ehh? clayton? ;) From mwedel at scruz.net Thu Nov 9 01:29:41 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:09 2005 Subject: [CF-Devel] Stat-wrapping bug get killed enough and your stats go to 30! References: <200011022040.MAA18381@tesla.EECS.Berkeley.EDU> Message-ID: <3A0A5265.A352E6F2@scruz.net> Peter Mardahl wrote: > > I've a report that depletion on death code can > wrap your stats all the way from 18, to 1, to -126, to 127. > > Build a perfect char, just kill him a LOT. > > We really ought to fix this.... I've fixed the bug, but not extensively tested this - I didn't really feel like spending the time to kill a character several hundred times. I did still confirm that it does deplete the stat when you die, so worst case is it still doesn't preven the wrap. However, the patch is fairly trivial - basically, don't allow depletion in kill_player to deplete a stat beyond -50. Note that this bug only happens if you are playing with depletion on death and not balanced stat loss. IT appears that the balanced stat loss already takes into account how depleted a stat is, so you never get into that problem (I could be wrong - very high level players could perhaps have highly negative depletions, but since your losing lots of exp to do that, I really don't know if its worth it. And I think the stat loss ratio is still high enough that even high level characters could not wrap it. Anyways, from the CHANGES file (this change is in cvs): server/player.c: removed unused tmp2 variable from move_player_attack. modify depletion in kill_player so the maximum depletion for a stat is -50. This should preven stat wrapping from -126 to 127. MSW 2000-11-08 From mtx93 at tzi.de Thu Nov 9 06:10:52 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] brace and face Message-ID: Hi I wonder how you can face to a direction without hit a object in the direction. For example, you have set a earth wall which will break, if you hit him once again. If you can't move from down under to him, there is no way i see to face to him, without destroying him. if you use brace, you also do a hit if you give the direction cmd. If there a kind "face north" cmd, which will face your char to a direction without doing a hit to the object in the dir? I can't see one. Perhaps we need "face "? Michael From dnh at hawthorn.csse.monash.edu.au Thu Nov 9 07:01:57 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Stamina draining. Message-ID: I was thinking of creating a whole new attack_type, hp_draining. What it would do is take the normal dam off monsters current hp, and give the attacker say 3-5% of that value onto current hp. This can obviously be balanced, decreased increased etc. but the idea I think is good. I am willing to have a shot at coding it and am seeking general opinion before I consider how to do it. This kind of power would be suited for weapons that may need balancing and also may be useful to some new items I am creating. Perhaps even giving this attack_type to creatures would make some things more hardy, (vampires for example ;). As an example we could remove the aggressive spells they vampire can sometimes have, ie fire ice lightning, and in turn give it this skill which would make it more of a physical threat. Just a thought. =) dnh (Darth_bob) ps I have started my god balancing table and am coming up with heaps of cool ideas for gods gifts (for instance gaea's tears (potions of restoration). Story: Gaea weaps at the damage caused, you quickly grab a flask from the alter and bottle them (potion of restoration x4) also, Gnarg Hp bonuses, Lythander gives luck onto bow + improves it up to +6 and possibly even gives the bow attacktype confuse (Lythander the trickster). Another idea was the ability to CREATE traps.. I don't know how useful that would be but might be good for an assassin or something. pps these are all just thoughts but if any are good I am completely willing to implement them myself now that I have finished school... FOREVER ;) From echter at informatik.uni-rostock.de Thu Nov 9 04:21:34 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! In-Reply-To: <000401c049d0$481c18c0$a7a0e23e@kyle>; from andi.vogl@gmx.net on Wed, Nov 08, 2000 at 11:07:22PM +0100 References: <000401c049d0$481c18c0$a7a0e23e@kyle> Message-ID: <20001109112133.A13927@hokkaido.informatik.uni-rostock.de> On Wed, Nov 08, 2000 at 11:07:22PM +0100, Andreas Vogl wrote: > When a player had an item with attribute "reflect spell/missile" > equiped, this didn?t work on 100% of all incoming projectiles. > A meteor storm for instance used to make short work of a wannabe- > hero with reflect spell. Maybe that was due to a bug in the old > attack-code, but the effect was surely desired - and needed! I didn't intend to fix this bug with that patch, but I think the bug was that whenever another spell object was put on a firebullet or similar spell objects, check_fired_arch() was called which let the firebullet explode if it happened to be below the player after it was reflected, because reflect spell/missile is checked in the movement code, not in check_fired_arch(). > Please reduce the success-chance of reflect spell/missile to 90%. > That is very important for gameplay. Even though I'm happy that I finally fixed this strange bug, I agree that such a change is needed now. FLAG_REFL_MISSILE is only used in move_arrow(). FLAG_REFL_SPELL is used when a bolt is moved, when a "fired arch" (fire bullets, magic bullets etc.) is moved, and after get_pointed_target() with spells like finger of death and holy wrath. I suggest implementing the following protections/immunities: arrows/thrown objects: 80% spell missiles: 90% bolt spells: 100% finger of death: 100% "smite" spells: 90% -- Jan From echter at informatik.uni-rostock.de Thu Nov 9 04:28:24 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] DONE, CHANGES In-Reply-To: <3A0A4866.AB736F80@scruznet.com>; from mwedel@scruznet.com on Wed, Nov 08, 2000 at 10:47:02PM -0800 References: <3A0A4866.AB736F80@scruznet.com> Message-ID: <20001109112824.B13927@hokkaido.informatik.uni-rostock.de> On Wed, Nov 08, 2000 at 10:47:02PM -0800, Mark Wedel wrote: > I'm not convince we need both CHANGES and DONE. DONE is neither used nor needed anymore. Just remove it. > The one thing I could see would be that the CHANGES may actually go into higher > detail than people may really care. So perhaps removal of a DONE file and > instead the addition of a SUMMARY file or the like that contains even briefer Such a file is typically called "NEWS". I think a crossfire NEWS file should contain three sections for each crossfire release: player visible changes, bug fixes, and changes that are only relevant to developers. -- Jan From echter at informatik.uni-rostock.de Thu Nov 9 04:57:33 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] TODO List - Flamebait In-Reply-To: ; from John.Cater@eng.monash.edu.au on Thu, Nov 09, 2000 at 08:45:07AM +1100 References: Message-ID: <20001109115731.C13927@hokkaido.informatik.uni-rostock.de> On Thu, Nov 09, 2000 at 08:45:07AM +1100, John Cater wrote: > Firstly, the repository is being used to fix bugs in the last release - > fine and good. But it is also being used to "test" new features (an > example is the race/class split). Is this the best way? It's much easier than fixing each bug twice: Once in the stable branch, and once in the development branch. Furthermore, many bugs are fixed as new code replaces old code. If something is wrong with a new feature that's already in the CVS, there are two options: Deferring a release until the feature has been fixed, or removing/disabling the feature again. New features in official releases contain rather few bugs, most bugs that I fix are bugs in old code. I think implementing new features is at least as important as fixing new bugs because the TODO list is still very long. > Actually what I would like is a "feature freeze" of the current CVS, > leaving it only open to bug fixes with the focus on a "stable" 0.96 I doubt that a feature freeze would help much with making a stable release. Right now, a code review is more efficient because only little code is aware of that any non-trivial function call can destroy or move almost any object. I think the most likely cause for a server crash is still that an object is destroyed after putting it on a map. -- Jan From echter at informatik.uni-rostock.de Thu Nov 9 16:37:11 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] New god_intervention() In-Reply-To: <20001108213741.A11475@hokkaido.informatik.uni-rostock.de>; from echter@informatik.uni-rostock.de on Wed, Nov 08, 2000 at 09:37:41PM +0100 References: <20001108213741.A11475@hokkaido.informatik.uni-rostock.de> Message-ID: <20001109233711.A26401@hokkaido.informatik.uni-rostock.de> On Wed, Nov 08, 2000 at 09:37:41PM +0100, Jan Echternach wrote: > The problems with start equipment (cursed items, many spellbooks with > same spell) should be fixed. This new version of the patch contains some more fixes and improvements. > "summon avatar" is probably broken, because it used the god itself as > There's still a lot of compatibility code left. I'd like to remove All compatibility code is gone and god_intervention() was completely rewritten. Avatars should be working fine. I've added some new options to god_intervention(). See arch/gods/randomitems/ for archetypes that can be put into gods' treaure lists to activate them. Each god in this patch has a treaure list, but it contains only the old features. There shouldn't be any significant player visible changes in this patch. I think there are only two things left until the patch can go into the CVS: Writing the change log and testing the patch. The PATH_NULL kludge in include/spellist.h isn't needed anymore. I'd like to change the spell paths back to some meaningful values. I suggest immunity to xxx PATH_PROT invulnerability PATH_PROT cause black death PATH_WOUNDING divine shock PATH_ELEC (Divine shock doesn't have PATH_NULL at the moment, but PATH_WOUNDING. However, there are already so many wounding spells, and divine shock really looks like an electricity spell.) -- Jan -------------- next part -------------- A non-text attachment was scrubbed... Name: patch38b.gz Type: application/x-gunzip Size: 13952 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001109/0d87df70/patch38b.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: arch38b.gz Type: application/x-gunzip Size: 4905 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001109/0d87df70/arch38b.bin From peterm at tesla.EECS.Berkeley.EDU Thu Nov 9 16:53:31 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Divine shock In-Reply-To: Your message of "Thu, 09 Nov 2000 23:37:11 +0100." <20001109233711.A26401@hokkaido.informatik.uni-rostock.de> Message-ID: <200011092253.OAA25840@tesla.EECS.Berkeley.EDU> > (Divine shock doesn't have PATH_NULL at the moment, but PATH_WOUNDING. > However, there are already so many wounding spells, and divine shock > really looks like an electricity spell.) Yeah, that spell is sort of a tossup. It's like a combined wounding/electricity spell, because it uses AT_ELECTRICITY | AT_GODPOWER It's really intended for Sorig: I rewrote the spell so that it requires PATH_ATTUNED electricity to work. Assignment of that spell along with all of the diseases will have to be considered for balancing the religions. PeterM From mwedel at scruz.net Thu Nov 9 21:39:02 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] brace and face References: Message-ID: <3A0B6DD6.FC497560@scruz.net> Michael Toennies wrote: > > Hi > > I wonder how you can face to a direction without hit a object in the > direction. > > For example, you have set a earth wall which will break, if you hit him once > again. > If you can't move from down under to him, there is no way i see to face to > him, without > destroying him. > > if you use brace, you also do a hit if you give the direction cmd. > > If there a kind "face north" cmd, which will face your char to a direction > without doing > a hit to the object in the dir? > > I can't see one. > > Perhaps we need "face "? > I believe you are correct in that there is no way to face a direction without doing some action in that direction. Can you explain why you might need to face a direction without doing anything in that direction? I can't think of any. From mwedel at scruz.net Thu Nov 9 21:44:57 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Stamina draining. References: Message-ID: <3A0B6F39.D6429336@scruz.net> dnh@hawthorn.csse.monash.edu.au wrote: > > I was thinking of creating a whole new attack_type, hp_draining. What it > would do is take the normal dam off monsters current hp, and give the > attacker say 3-5% of that value onto current hp. This can obviously be > balanced, decreased increased etc. but the idea I think is good. > > I am willing to have a shot at coding it and am seeking general opinion > before I consider how to do it. This kind of power would be suited for > weapons that may need balancing and also may be useful to some new items I > am creating. Perhaps even giving this attack_type to creatures would make > some things more hardy, (vampires for example ;). As an example we could > remove the aggressive spells they vampire can sometimes have, ie fire ice > lightning, and in turn give it this skill which would make it more of a > physical threat. Just a thought. =) Since weapons with attacktype drain are currently pretty much useful against monsters, maybe it would just be better to add that to the current drain code. Ie, drain attacktype takes both HP and experience. That way, if you have a weapon with attacktype drain, at least it has some use. That would certainly be easier to do. Balancing will be hard to do for this because monsters have so many more hp than players. And the fact is, the tougher monsters where you are more likely to die are also the places where you are more likely to fighting high hp monsters. For example, I think with draining, fighting a titan may become quite a bit easier - if you are getting 10 hp back every few ticks, it may now be very difficult for the titan to dish out enough damage to kill a player. From andi.vogl at gmx.net Thu Nov 9 22:26:25 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! In-Reply-To: <20001109112133.A13927@hokkaido.informatik.uni-rostock.de> Message-ID: <000301c04ace$9a21d200$7815993e@kyle> Jan E. wrote: > I suggest implementing the following protections/immunities: > > arrows/thrown objects: 80% > spell missiles: 90% > bolt spells: 100% > finger of death: 100% > "smite" spells: 90% This is a good concept. Please go for it =) Just to make sure I understood it right: arrows/thrown objects: 80% (arrows, bolts, boulders etc) spell missiles: 90% (meteors, magic bullets, firebullet etc) bolt spells: 100% (lightning, firebolt, sunspear etc) finger of death: 100% (obvious) "smite" spells: 90% (Not sure what this is. Cause wounds maybe? However, 90% seems like a good value no matter what it is.) Andreas V. From mwedel at scruz.net Fri Nov 10 01:16:34 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Accidents and neglected players References: <200011070912.BAA28352@tesla.EECS.Berkeley.EDU> Message-ID: <3A0BA0D2.36729EB9@scruz.net> Peter Mardahl wrote: > 1) Emergency map and start map seemed distinct in the code. Starting > map seemed to be read from the archetypes. I modified the archetypes > file to make the start map be my new hall of selection. This failed, > either by crash, or by corruption of either the start map or the city > map. (Can't remember which of those three it was.) > > I figured some interaction between start map and emergency map was > causing it so I gave up on doing that. I did NOT want to change emergency > map. Hmm.. I just tried changing the slaying field for the starting map, and I don't see any odd behaviour. Both the hall of selection and the city seemed to work fine. However, this did have the effect that when a character died, they popped back to the hall of selection, which obviously is not desired. Whenever that patch is done, then perhaps I can play with this more. There would still need to be some special code in that selection to set the 'death' map to something else after the player has chosen their class. Otherwise, a starting character could kill themselves, pop back to the hall of selection, and get more skills and equipment. From dnh at hawthorn.csse.monash.edu.au Fri Nov 10 01:22:00 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Stamina draining. In-Reply-To: <3A0B6F39.D6429336@scruz.net> Message-ID: On Thu, 9 Nov 2000, Mark Wedel wrote: > dnh@hawthorn.csse.monash.edu.au wrote: > > > > I was thinking of creating a whole new attack_type, hp_draining. What it > > would do is take the normal dam off monsters current hp, and give the > > attacker say 3-5% of that value onto current hp. This can obviously be > > balanced, decreased increased etc. but the idea I think is good. > > > > I am willing to have a shot at coding it and am seeking general opinion > > before I consider how to do it. This kind of power would be suited for > > weapons that may need balancing and also may be useful to some new items I > > am creating. Perhaps even giving this attack_type to creatures would make > > some things more hardy, (vampires for example ;). As an example we could > > remove the aggressive spells they vampire can sometimes have, ie fire ice > > lightning, and in turn give it this skill which would make it more of a > > physical threat. Just a thought. =) > > Since weapons with attacktype drain are currently pretty much useful against > monsters, maybe it would just be better to add that to the current drain code. > Ie, drain attacktype takes both HP and experience. yes I did have that thought.. but, Firstly as you saiud balance, many monsters that currently have drain may become even more powerful (may be good or bad) and also players will be able to really pump the hp at VERY high levels. This is the main reason I suggest it be a unique attack_type (yes I understand that is a pain). I don't like the idea of some weapons getting even more powerful.. none the less it remains an option to just improve drain. This idea can also be implemented for hp -> sp and hp -> gr (which I really like cause that could be a reward for attacking (ruggilli for instance is the kind of god I believe would bless players for killing/attacking things). Infact that last idea could be taken to, only do that for slaying monster.. =)) Titans are a good point, do we need to do something with them? perhaps give them fork lightning ;). Cause currently one holy word from mostrai and no more titans... although.. I have been working on balancing gods.. and mostrai has now got some vun to deal with. Maybe I could put vun elec in there? (currently para, poison and possibly confuse? anyway.. ill put the god balance stuff I have been doing up on a web server soon so you can tell me what you think on that (Gnarg and lythander have been given a nice boost ;) dnh (Darth_bob) > That way, if you have a weapon with attacktype drain, at least it has some use. > > That would certainly be easier to do. > > Balancing will be hard to do for this because monsters have so many more hp > than players. And the fact is, the tougher monsters where you are more likely > to die are also the places where you are more likely to fighting high hp > monsters. > > For example, I think with draining, fighting a titan may become quite a bit > easier - if you are getting 10 hp back every few ticks, it may now be very > difficult for the titan to dish out enough damage to kill a player. > From mwedel at scruz.net Fri Nov 10 02:02:05 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Metaserver information. Message-ID: <3A0BAB7D.B5F97763@scruz.net> I was doing some work on the addition of metaserver reporting. The basic plan is that servers that decide to do so will contact the metaserver telling it that they are alive. Then people can just look at the metaserver and see what servers are out there and which one they want to connect to. So the question I have is what information should be reported to the metaserver. What I have so far: hostname of server. Note that the metaserver will determine IP address on its own based on where the packet comes from. number of active players on server. short description/note: Settable by server admin - this is a brief message of less than 100 characters that will be reported to the metaserver. This could be something like 'latest CVS version. No player killing. located in n. california'. The last time the server has sent a message will be tracked by the metaserver, so it will report that information - if the last packet received was more than a few hours, you could probably bet that that server is down for now. But the main point is that the server doesn't need to report uptime to the metaserver. Is there any data I'm missing or other data people think might be useful? Since there is already a comment that the server admin can set up, this would basically be data that the program has readily available. One thought I had would be for the server to send the protocol versions - this could be used to get a rough idea of the server version, but I'm not really sure how useful that is and if it may be more confusing (what does 1026 mean for example). From peterm at tesla.EECS.Berkeley.EDU Fri Nov 10 02:51:02 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] Metaserver information. In-Reply-To: Your message of "Fri, 10 Nov 2000 00:02:05 PST." <3A0BAB7D.B5F97763@scruz.net> Message-ID: <200011100851.AAA14076@tesla.EECS.Berkeley.EDU> I think this is a cool idea, I'd add this though: 1) Hostname 2) # players 3) Version 4) Description Version is the hard part. How about setting creating a VERSION file which contains the current date, for people using CVS, and a tag, for people using releases? So a server running a snapshot would report this: CVS 2000/12/01 or Version 97.0 for a release. The idea is to change VERSION every day in the CVS via a crontab, OR modify the commit process so that every commit causes VERSION to be updated. PeterM > I was doing some work on the addition of metaserver reporting. The basic pl >an > is that servers that decide to do so will contact the metaserver telling it t >hat > they are alive. Then people can just look at the metaserver and see what > servers are out there and which one they want to connect to. > > So the question I have is what information should be reported to the > metaserver. What I have so far: > > hostname of server. Note that the metaserver will determine IP address on it >s > own based on where the packet comes from. > > number of active players on server. > > short description/note: Settable by server admin - this is a brief message o >f > less than 100 characters that will be reported to the metaserver. This could > be > something like 'latest CVS version. No player killing. located in n. > california'. > > The last time the server has sent a message will be tracked by the metaserve >r, > so it will report that information - if the last packet received was more tha >n a > few hours, you could probably bet that that server is down for now. But the > main point is that the server doesn't need to report uptime to the metaserver >. > > Is there any data I'm missing or other data people think might be useful? > Since there is already a comment that the server admin can set up, this would > basically be data that the program has readily available. One thought I had > would be for the server to send the protocol versions - this could be used to > get a rough idea of the server version, but I'm not really sure how useful th >at > is and if it may be more confusing (what does 1026 mean for example). > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From echter at informatik.uni-rostock.de Fri Nov 10 05:28:57 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:10 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! In-Reply-To: <000301c04ace$9a21d200$7815993e@kyle>; from andi.vogl@gmx.net on Fri, Nov 10, 2000 at 05:26:25AM +0100 References: <20001109112133.A13927@hokkaido.informatik.uni-rostock.de> <000301c04ace$9a21d200$7815993e@kyle> Message-ID: <20001110122856.A28688@hokkaido.informatik.uni-rostock.de> On Fri, Nov 10, 2000 at 05:26:25AM +0100, Andreas Vogl wrote: > "smite" spells: 90% > (Not sure what this is. Cause wounds maybe? However, > 90% seems like a good value no matter what it is.) Holy wrath, insect plague and retributive strike. -- Jan From echter at informatik.uni-rostock.de Fri Nov 10 05:41:10 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] brace and face In-Reply-To: <3A0B6DD6.FC497560@scruz.net>; from mwedel@scruz.net on Thu, Nov 09, 2000 at 07:39:02PM -0800 References: <3A0B6DD6.FC497560@scruz.net> Message-ID: <20001110124110.B28688@hokkaido.informatik.uni-rostock.de> On Thu, Nov 09, 2000 at 07:39:02PM -0800, Mark Wedel wrote: > Can you explain why you might need to face a direction without doing anything > in that direction? I can't think of any. Throw and invoke commands, although you can work around the invoke problem by using cast, fire and fire_stop. -- Jan From mtx93 at tzi.de Fri Nov 10 06:14:07 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] Metaserver information. In-Reply-To: <3A0BAB7D.B5F97763@scruz.net> Message-ID: > I was doing some work on the addition of metaserver reporting. > The basic plan > is that servers that decide to do so will contact the metaserver > telling it that > they are alive. Then people can just look at the metaserver and see what > servers are out there and which one they want to connect to. > > So the question I have is what information should be reported to the > metaserver. What I have so far: > > hostname of server. Note that the metaserver will determine IP > address on its > own based on where the packet comes from. > > number of active players on server. > > short description/note: Settable by server admin - this is a > brief message of > less than 100 characters that will be reported to the metaserver. > This could be > something like 'latest CVS version. No player killing. located in n. > california'. > > The last time the server has sent a message will be tracked by > the metaserver, > so it will report that information - if the last packet received > was more than a > few hours, you could probably bet that that server is down for > now. But the > main point is that the server doesn't need to report uptime to > the metaserver. Isn't it easier to let the metaserver "ping" the servers all 5-10 minutes? If he don't get x times in a row no contact, the meta drop the server. This makes the list very up to date and the server must report only one time (when he starts) to the meta. > Is there any data I'm missing or other data people think might > be useful? > Since there is already a comment that the server admin can set > up, this would > basically be data that the program has readily available. One > thought I had > would be for the server to send the protocol versions - this > could be used to > get a rough idea of the server version, but I'm not really sure > how useful that > is and if it may be more confusing (what does 1026 mean for example). What also is urgent needed, mainly for new players, is a value for the connection speed - from her client side of course! As i start, i must do some test, which server is playable and which not. To connect from europe to an asian server for example will bring you most times a lag of 300-500 ms, that makes playing very nasty and will put cf to a newbie in a bad mind. So, after a player starts a client, the client must receive the server datas (ip, port, version, etc.) from the meta and then he must show the client connect to the listed servers. Most games i know present a small bar from red to green and poll all servers in the list after one. What is better: Ping the host or implement a special "ping connect" to the server itself? The point for a "ping connect" is, that many cf servers will not run stand alone on their machines, perhaps a normal ping will show a much better connect then the real server has in his task, and a stand alone server on a smaller line will be faster. This should be tested. MichToen From mtx93 at tzi.de Fri Nov 10 06:15:18 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] brace and face In-Reply-To: <3A0B6DD6.FC497560@scruz.net> Message-ID: > Michael Toennies wrote: > > > > Hi > > > > I wonder how you can face to a direction without hit a object in the > > direction. > > > > For example, you have set a earth wall which will break, if you > hit him once > > again. > > If you can't move from down under to him, there is no way i see > to face to > > him, without > > destroying him. > > > > if you use brace, you also do a hit if you give the direction cmd. > > > > If there a kind "face north" cmd, which will face your char to > a direction > > without doing > > a hit to the object in the dir? > > > > I can't see one. > > > > Perhaps we need "face "? > > > > I believe you are correct in that there is no way to face a > direction without > doing some action in that direction. > > Can you explain why you might need to face a direction without > doing anything > in that direction? I can't think of any. At the moment all action who needs a direct facing to a tile next to you. Thats the skills lockpicking and singing for example. For singing the face action is hard at the moment because you must direct face the monster but you should not hit him, wich ends in strange move actions. Mainly, its a kind of game style, simply to face north when you will, instead of looking how you can move to face so without hit something. MichToen From peterm at tesla.EECS.Berkeley.EDU Fri Nov 10 19:14:47 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! In-Reply-To: Your message of "Fri, 10 Nov 2000 05:26:25 +0100." <000301c04ace$9a21d200$7815993e@kyle> Message-ID: <200011110114.RAA11367@tesla.EECS.Berkeley.EDU> > Jan E. wrote: > > > I suggest implementing the following protections/immunities: > > > > arrows/thrown objects: 80% > > spell missiles: 90% > > bolt spells: 100% > > finger of death: 100% > > "smite" spells: 90% I'm a little concerned with arrows/thrown and spells objects.... Right now, guards are practically immune to arrows and most spells because they can't be shot at them fast enough. I'm actually in favor of makign them abit vulnerable, as Jan proposes but this would change the game. Any other comments? PeterM From mwedel at scruz.net Fri Nov 10 22:40:04 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] Metaserver information. References: Message-ID: <3A0CCDA4.9C913358@scruz.net> Michael Toennies wrote: > Isn't it easier to let the metaserver "ping" the servers all 5-10 minutes? > If he don't get x times in a row no contact, the meta drop the server. > > This makes the list very up to date and the server must report only one time > (when he starts) to the meta. The servers have to contact the metaserver at least at some point. If I set up a server, the metaserver has no idea it exists. The bandwidth for the server to send updated information every 5-10 minutes is minimal. Plus, the server has to notify the metaserver of any updated information (number of players for example). This is also less dangerous in terms of attacks against the metaserver. Yes, you can still send thousands of packets to the metaserver, put that is the case now. If the metaserver actually keeps pinging the servers, a malicous person could set it up to register thousands of servers to the metaserver, and the metaserver is now sending lots of packets out to try and contact that. Plus, the servers out there still need to respond so that the metaserver knows they are alive. Much eaiser for the servers to just send the pings to the metaserver, and the metaserver doesn't need to respond then. > What also is urgent needed, mainly for new players, is a value for the > connection speed - from her client side of course! This has to be done purely on the client. If for example the metaserver is located in northern california, it would probably show very good connect speed to the berkely server for example. But that data is completely useless if you are in germany, since the lag is actually getting the packet to the metaserver. And due to how the internet is routed, you can get situations like: metaserver hosted off one major carrier. server and client hosted off another major carrier, but the same one. Communication between the two major carriers is bad, so times from the metaserver to the server are not good, nor are times from the client to the metaserver. But times from the client and server are just peachy keen. This can especially be true for example if the client and server are actually on the same LAN, and its the connection out of that LAN which is slow. So it is up to the client to verify this speed. Note that it would not necessarily be hard to do. You could just time the transmission of some of the protocol setup (Exchange of client revisions for example). This is probably more accurate than just a ping, since this requires actual server interaction, which would be slower if the system has a high cpu load or is swapping like crazy - things you would care about, but which ping would not show. It would actually be easy enough to add a PING command to the protocol, but I'm not sure how much that would add to the server. The disadvantage with this is that it does impose load on the server and client (to setup the connection and tear it down to then present the results to the player). The problem is that there are problems of scalability. If you have 100 servers (hypothetically), determining the speed of all those could literaly take a few minutes. Perhaps in that case, you select a few which you think might be near by (based on description of hostname), and ping those to see which is best? Similary, if you said had thousands of players with all those servers, there could be a decent amount of load caused by all those connections (to see lag), even if only 10-20 people are per server. But that is probably getting ahead of myself. And realistically, you can't prevent that - if a client really wants to get the most accurate timing information, it could do the connection and protocol exchange, and there is really no way to prevent that (as the clients are open source). From mwedel at scruz.net Fri Nov 10 22:51:17 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] Metaserver information. References: <200011100851.AAA14076@tesla.EECS.Berkeley.EDU> Message-ID: <3A0CD045.F2E90E00@scruz.net> Peter Mardahl wrote: > > I think this is a cool idea, I'd add this though: > 1) Hostname > 2) # players > 3) Version > 4) Description What should the metaserver do, if anything, if the ip address the connection is really coming from does not match the hostname? Or should the metaserver not even try to resolve that (I know that resolving hostname/ip can hang, so in this case, you would need a helper process or the like that tries to resolve these. This could be implemented as a simple pipe/socket. Server sends the data to that helper, and reads it as available.) > > Version is the hard part. How about setting creating a VERSION file > which contains the current date, for people using CVS, and > a tag, for people using releases? The current version.h and patchlevel.h could probably be merged into one file - there is no strong reason that they need to be separate (I don't think). At one point, imake might have had a reason for it when packaging releases, but now days I beleive I just set that in the top level makefile. That said, you could have something like normal versions for released copies (0.95.7 for example). This gets hand set by me when I make a release. After that point, a cron could update it each night to be something like 0.95.7-2000/11/10 - the trailing date would then note it is a CVS release. I was thinking you could probably grab real version numbers off CVS if you could have the file updated automatically. All files more or less have something like: /* * static char *rcsid_config_h = * "$Id: config.h,v 1.8 2000/10/16 19:26:38 peterm Exp $"; */ at the top of the file, and there is no requirement that these be commented out. In fact, many applications don't comment that stuff out, as you can then do something like a 'strings crossfire | grep config.h' and see what version of a particular file is being used. The problem is I'm not sure how useful that 1.86 version number will be other than to get a rough idea of the build, which we get just as well with the date (if we wanted that, we could add the $Id$ string to the CHANGES file, and grep that out into version.h or something.) Advantage I guess that has is that if nothing has been checked in, at least the metaserver will show them as the same version. In this case, you would probably need to have it in conjuction, like 0.95.8, build 1.153 so people don't need to that starting at version 1.146 was when it became 0.95.8 so that they are really playing on an 0.95.8 file. I think it would still be good for standard release servers not to have any of that trailing information to make it more clear that that is a stock release and not cvs update. If there is demand to do patches for these things, then the patch script would update that (0.95.7p1 for example). From mwedel at scruz.net Fri Nov 10 22:55:01 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! References: <200011110114.RAA11367@tesla.EECS.Berkeley.EDU> Message-ID: <3A0CD125.FC9BDDF0@scruz.net> Peter Mardahl wrote: > > > Jan E. wrote: > > > > > I suggest implementing the following protections/immunities: > > > > > > arrows/thrown objects: 80% > > > spell missiles: 90% > > > bolt spells: 100% > > > finger of death: 100% > > > "smite" spells: 90% > > I'm a little concerned with arrows/thrown and spells objects.... > Right now, guards are practically immune to arrows and most spells > because they can't be shot at them fast enough. > > I'm actually in favor of makign them abit vulnerable, as Jan proposes but this > would change the game. Any other comments? While I don't necessarily like the change the behaviour for monsters vs. players, one thought would be to reduce the effectiveness only against players. I think one of the issues of reflection not working right before was that if you ran on top of an object heading at you, you would get hit. If you were standing still, I think before you were pretty much invulnerable also, but how often do you really stand still? I haven't looked at the new behaviour, but my guess is that now if you run on top of a bullet heading towards you, you now reflect it vs detonating. From mwedel at scruz.net Fri Nov 10 22:58:05 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] brace and face References: <3A0B6DD6.FC497560@scruz.net> <20001110124110.B28688@hokkaido.informatik.uni-rostock.de> Message-ID: <3A0CD1DD.4551266A@scruz.net> Jan Echternach wrote: > > On Thu, Nov 09, 2000 at 07:39:02PM -0800, Mark Wedel wrote: > > Can you explain why you might need to face a direction without doing anything > > in that direction? I can't think of any. > > Throw and invoke commands, although you can work around the invoke > problem by using cast, fire and fire_stop. Ok.. I was about to say that all skills and spells you can already use with a direction quite easily. But throw is a good example. Adding a face command should be quite easy to do. I'm not sure how you'll bind it to keyboard commands, as most combinations are already taken, but I guess that is up to the player. I'll see about adding this. From andi.vogl at gmx.net Sat Nov 11 20:36:57 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] "reflect spell/missile" is working too perfect now! In-Reply-To: <3A0CD125.FC9BDDF0@scruz.net> Message-ID: <000101c04c51$7714fce0$59a7e23e@kyle> On Sat 11.11.00, Mark W. wrote: > > I'm a little concerned with arrows/thrown and spells objects.... > > > Right now, guards are practically immune to arrows and most spells > > because they can't be shot at them fast enough. > > > > I'm actually in favor of makign them abit vulnerable, as Jan proposes but this > > would change the game. Any other comments? > > While I don't necessarily like the change the behaviour for monsters vs. > players, one thought would be to reduce the effectiveness only against players. > > I think one of the issues of reflection not working right before was that if > you ran on top of an object heading at you, you would get hit. If you were > standing still, I think before you were pretty much invulnerable also, but how > often do you really stand still? Nope, this is not correct. With the old server you could stand frozen like an icecube, and still a meteor storm made roast-beef out of you. > I haven't looked at the new behaviour, but my guess is that now if you run on > top of a bullet heading towards you, you now reflect it vs detonating. As long as we do apply Jan?s vuln.-scheme for players everything is okay. For monsters it?s not really important. The only monsters with reflect spell/ missile that I know of are guards. And they can be easily killed with about level 10 physical. Nobody puts a line of guards on a map expecting players not be able to pass. Besides, if s.o. wants to create a monster that is immune to all magic, this is possible via immunity flag. However, a high level monsters with reflect spell would most likely be annoying anyways. Still I have no objections against a 100% reflect spell/missile for monsters. Andreas V. From andi.vogl at gmx.net Sat Nov 11 21:01:03 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] new gadget for CF-players: chessclub Message-ID: <000001c04c54$cdf938c0$59a7e23e@kyle> I?ve completed the set of chessfigures for CF as well as enhancing the existing ones (especially pngs). Then I have created a "chessclub" map in scorn where people can play chess against each other - in peace and harmony. So from now on, if all else fails, people can play chess to entertain themselves ;) Andreas V. From dnh at hawthorn.csse.monash.edu.au Sun Nov 12 03:29:47 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] PR (Partial resistance) Message-ID: Well, I have recently been in contact with Marc(I hope its a c? =}) about this issue and he has forwarded the Japanese crews patch on it. He tells me it is old and probably not much use, but I think with this patch there may be enough context for a good programmer finally start the task. I think we are going to need a team of at least two programmers who can handel the server side code (smiles nicely at Jan =)) and one person to handle balance of items etc. Considering I am currently balancing the gods I can undertake the later and with alittle luck discussions can start again. PR I believe is the biggest issue facing CF server code, as map making/item making and monster making all come down to a basic need for much more complicated levels of resistance, because players get to powerful for protection to do much at all. The sooner this project can be undertaken the better for me as I don't want to create any maps until PR is in due to balance issues. To go about it would be basically to follow these steps; 1) Implement a working addative resistances system, much like the current armour is for physical, these resistance systems would do the same just be based on another "armour" type value 2) Implement this code to all resistance types 3) Determine values for the current resistance and immunity and write a quick program to sort through archs and change all to partial (ie prot -> 33%, Immunity -> 90%) 4) Implement this system for monsters, again using a quick program to run through archs and change defaults. 5) Jump up and down and celebrate if working ;) 6) Send patch to CVS 7) Test very vigorously, will need to take several chars from beginning to end (110 or so) trying EVERY item and fiddling with a few values to make some items alittle better or worse, and monsters balanced well also. If all that could be achieved I think we will no longer have warrior/wizard/priest balance issues as warriors will now have a way to survive that awesome dragon breath, and wizards will have a harder time killing some monsters that previously would have been easy. Can anyone even remotely interested in joining this team, be it for beta testing/balancing or the coding itself, please mail me. Then once we know how many people are around, the process can be divided and started. I can send a copy of the patch to anyone interested also, but I ask not to start working on it without telling someone (so we don't do the same thing and waste time) I think anyone for their interest in this project and hope it can finally get off the ground. dnh (Darth_bob) From dnh at hawthorn.csse.monash.edu.au Sun Nov 12 04:25:35 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] Gods proposals, the great balance ;) Message-ID: I have completed a table which lists some ideas we have undertaken, plus some ideas which will either help or hinder some gods. I invite everyone to view it at http://mids.student.utwente.nl/~dnh/crossfire_gods.html and send any opinions to the list. Please don't hold back, tell me any thoughts good or bad so I can know the general opinion of the team. I have stuck to with little exceptoion to the current titles of the Gods and so keeping completely to theme. Some people may not like seeing their favorite God, mostrai in particullar, getting the short end of the stick, but that is quite simply because mostrai has been overpowered. I too used to play mostrai, but realised I prefered devourers really, it was just that mostrai was the best. With these changes, I strongly believe gods like Ruggilli and devourers may now have a fighting chance and even a slight edge. This is because they also have many negatives, so players will have alot more on their plate it they choose these gods, I plan them for the very experienced players looking for more than the easy holy word and avatar combinations. These changes are direly needed and I will implement them with the utmost speed along with any changes which WE see as reasonable. I think Jan for the massive patch which handles the God intervention and has allowed all this to become a reality. I had actually been pondering doing this for along time, but have been unable because only a very small set of choices could be made for the gods. Thanks, dnh (Darth_bob) Contact me via, email -> dnh@hawthorn.csse.monash.edu.au irc -> #crossfire @ IRCnet ICQ -> 45691269 From andi.vogl at gmx.net Sun Nov 12 04:47:29 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] PR (Partial resistance) In-Reply-To: Message-ID: <000001c04c95$f65b71c0$59a7e23e@kyle> I think partial resistances are needed. And if we want to go that way we should start as fast as possible, because there will be heaps of work to do for re-balancing everything. Maybe it would be nice to have an option in the code to set up a "no_pr_server", just in case that someone doesn?t like the new scheme at first. If someone does the coding for PR, I would like to help with re-adjusting monsters, maps and artifacts. Especially since this will be the biggest amount of work about this project. Andreas V. From dnh at hawthorn.csse.monash.edu.au Sun Nov 12 05:15:39 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] PR (Partial resistance) (fwd) Message-ID: ---------- Forwarded message ---------- Date: Sun, 12 Nov 2000 11:49:32 +0100 From: Michael Toennies To: dnh@hawthorn.csse.monash.edu.au Subject: RE: [CF-Devel] PR (Partial resistance) Hi I like the idea very much, because i also think about it. What we really need is a protection value in %, that will also will makes items much for flexible. What we also need, is to show the resistance to the player. I have just finished a litte bar for my client to show the player his resistance factor. What we need for this is, to add a update to the STAT cmd so the client knows then the value. Because at the moment we become a "you feel hot like..." message if a res. value change. We can skip this messages and let the client generate then when needed, so we also safe some cmd and bandwitch with it. Specially if you drink potions and go in heavy fights, you often get killed when your immunities wear of. This is often really annyoing because there comes some physical. If you go in heavy fights, you often gets some lags, makes it impossible to safe you if your hps starts to go down. Also, the "wear off" messages of the potions vanished in the mass of messages you got in the text windows, even if you toggle the message level. Much better will be, if you lose the potion protection in 10 or 5% steps every second, after they wear off! And this can then the player see in the resistance bar. This will be very nice in game play, also for newbies who try out items and potions, they will see the effect. This is also good "game play" because if there is a potion of fire res in real and you hold the finger in a fire, you will find it out very directly. :) MichToen > > Well, I have recently been in contact with Marc(I hope its a c? =}) about > this issue and he has forwarded the Japanese crews patch on it. He tells > me it is old and probably not much use, but I think with this patch there > may be enough context for a good programmer finally start the task. I > think we are going to need a team of at least two programmers who can > handel the server side code (smiles nicely at Jan =)) and one person to > handle balance of items etc. Considering I am currently balancing the gods > I can undertake the later and with alittle luck discussions can start > again. > > PR I believe is the biggest issue facing CF server code, as map > making/item making and monster making all come down to a basic need for > much more complicated levels of resistance, because players get to > powerful for protection to do much at all. The sooner this project can be > undertaken the better for me as I don't want to create any maps until PR > is in due to balance issues. > > To go about it would be basically to follow these steps; > > 1) Implement a working addative resistances system, much like the current > armour is for physical, these resistance systems would do the same just be > based on another "armour" type value > > 2) Implement this code to all resistance types > > 3) Determine values for the current resistance and immunity and write a > quick program to sort through archs and change all to partial (ie prot -> > 33%, Immunity -> 90%) > > 4) Implement this system for monsters, again using a quick program to run > through archs and change defaults. > > 5) Jump up and down and celebrate if working ;) > > 6) Send patch to CVS > > 7) Test very vigorously, will need to take several chars from beginning > to end (110 or so) trying EVERY item and fiddling with a few values to > make some items alittle better or worse, and monsters balanced well also. > > If all that could be achieved I think we will no longer have > warrior/wizard/priest balance issues as warriors will now have a way to > survive that awesome dragon breath, and wizards will have a harder time > killing some monsters that previously would have been easy. > > Can anyone even remotely interested in joining this team, be it for beta > testing/balancing or the coding itself, please mail me. Then once we know > how many people are around, the process can be divided and started. I > can send a copy of the patch to anyone interested also, but I ask not to > start working on it without telling someone (so we don't do the same thing > and waste time) > > I think anyone for their interest in this project and hope it can finally > get off the ground. > > dnh (Darth_bob) > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From andi.vogl at gmx.net Sun Nov 12 18:35:59 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] savebed feature is done Message-ID: <000001c04d09$b385aae0$9d9ee23e@kyle> I have coded the new savebed feature now. (-> If not already done, read the original posts about it) It does the following: - After death players wake up on the last-applied bed of reality. (For starting players default is scorn city) - No conflicts with old player files. - The feature can be disabled in "include/config.h", in case that someone doesn?t like it. (Per default it is enabled) When there are no objections I?ll put it on cvs very soon. Andreas V. From mwedel at scruz.net Sun Nov 12 20:26:08 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] savebed feature is done References: <000001c04d09$b385aae0$9d9ee23e@kyle> Message-ID: <3A0F5140.230E49DA@scruz.net> Andreas Vogl wrote: > - The feature can be disabled in "include/config.h", in case that > someone doesn?t like it. (Per default it is enabled) > > When there are no objections I?ll put it on cvs very soon. This is a more generic note and just not to Andreas: I know it has been the default for a long time to put various features in config.h. However, please try to also add a command line option and not have the code be compile time dependant (If this is already done in this case, my apologies). When I check in the metaserver changes, I have also added a 'settings' file which sets in lib which can be used to control most of this even without command line options. Command line options still take precedence over the settings file. I really want to try and get rid as much compile time dependent code as possible. This reduces bugs (as that seemingly unused function that you delete will now result in immediate linkage errors and not when the first time to switch config.h finds the error), and also makes binary distributions that much more friendly/possible. Right now, for many of the options, someone who grabs a binary package is basically at the whim of whatever flags were used in config.h to compile the executable. Having command line options/settings file also makes it easier to debug problems with these non default behaviours - instead of having to recompile the code, just insert the appropriate run-time switch, and away you go. From mwedel at scruz.net Sun Nov 12 22:24:29 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:11 2005 Subject: [CF-Devel] PR (Partial resistance) References: Message-ID: <3A0F6CFD.6A1512B7@scruz.net> dnh@hawthorn.csse.monash.edu.au wrote: > 3) Determine values for the current resistance and immunity and write a > quick program to sort through archs and change all to partial (ie prot -> > 33%, Immunity -> 90%) This actually does not need to be done right away. For testing purposes, it may be easier to add something like this to the item loading function: If protected/vulnerable/immune to attacktype, assign default value to the relevant protected field. This at least gets you up and running quickly, and probably should be done anyways (with a debugging statement), simply becauses there may be old maps out there that don't get converted right away. > > 4) Implement this system for monsters, again using a quick program to run > through archs and change defaults. Note that unless you are using different default values for items & monsters, #3 and #4 are the same, since the archetype format is the same. Now there are some issues that may be of debate. Like should immunity potions really be 100% or instead something like 90%. Same for some monsters. Also, if/when the protected, immune, and vulnerable fields go away, i think there may be some objects that use those for non obvious purposes (I think the gods code did so at one time). That ability will be gone. > > 5) Jump up and down and celebrate if working ;) I actually don't think getting it working will be that hard. Getting it balanced will be the much harder part, as that entails twiddling values of the object, running again, seeing if it works out correctly, etc. As a side note, currently armour in the object structure is an 8 bit signed value (-127 to 127). If we presume the vulnerable equals -100 protection (double damage which is currently the case), you probably want to use 16 bit values to reduce the danger of overflow if someone has a few vulnerable items. From mwedel at scruz.net Sun Nov 12 22:38:20 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:12 2005 Subject: [CF-Devel] Gods proposals, the great balance ;) References: Message-ID: <3A0F703C.27E2062D@scruz.net> Not directly related on the gods, but a few thoughts: I don't really like the disease named 'ebola', since that is a region in Africa (not scorn). Maybe 'red death' or something of the like. Purely a cosmetic change. An idea for a spell I have would be 'regeneration'. Basically, its the same idea of a ring of regen - it increases how fast you regain hp. Perhaps giving this to some of the healing/peace gods, with the regen rate faster at higher levels could also assist in balancing them (so for example, at high levels, a follower of Gaea may regenerate a fairly substantial number of HP fairly quickly, thus making them more difficult to die). To balance out food consumption, the spell should probably also include sustenance in the spell effect (being it is magical healing) - otherwise the character might be eating a waybread every few seconds. From mwedel at scruz.net Sun Nov 12 22:49:58 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] PR (Partial resistance) (fwd) References: Message-ID: <3A0F72F6.27F2FFB6@scruz.net> > Date: Sun, 12 Nov 2000 11:49:32 +0100 > From: Michael Toennies > To: dnh@hawthorn.csse.monash.edu.au > Subject: RE: [CF-Devel] PR (Partial resistance) > > What we need for this is, to add a update to the STAT cmd so the client > knows then the value. When the protections are done, thus would not be hard to add. Since for efficiency, all the protections have to be calculated and the end result stored someplace handy, getting these values would be quite easy. > If you go in heavy fights, you often gets some lags, makes it impossible to > safe you > if your hps starts to go down. Also, the "wear off" messages of the potions > vanished in > the mass of messages you got in the text windows, even if you toggle the > message level. One thought I had if I was to do another client would be split the message window in a few places. So for example, have one section that is just for messages to/from other players & npcs, perhaps another which just contains the attack messages (which you usually don't care about), and maybe another with these other relevant messages. You could sort of do that now by checking the suggested color for the message. This isn't perfect, but might be reasonably accurate. It would in fact probably be better for the server to not send a color, but instead a flag about what the message is about, and let the client determine how they want it displayed (maybe I want my 'gain level' messages in blue and not red. I'm not sure how many different categories there would need to be, but I could think of these: 1) Player conversation messages (tell, say, shout) 2) attack messages dealing with damage. 3) other attack type messages (item is corroded, exp has been drained, etc) 4) experience status change messages (gain/lose level) 5) ability type messages (stronger/weaker, faster hp regen, etc) 6) object messages (examine) 7) shop messages (sell, buy, listing) 8) There is a big group of misc. messages that are in response to player commands (maps, who, version, etc), and it probably is not worth it seperate all of those. > > Much better will be, if you lose the potion protection in 10 or 5% steps > every second, > after they wear off! And this can then the player see in the resistance bar. Possible, but a bit more work. It has been suggested that this get done for spells (in the TODO list), and since potions are basically just spells you drink, doing it for one would basically do it for the other. > > This will be very nice in game play, also for newbies who try out items and > potions, they will > see the effect. I thought for the most part, whenever you consume a potion, you pretty much know what it is. Of course, you don't know when it will wear off. Some people may actually think the uncertainity of such spell effects makes the game more interesting/challenging (and it certainly does). > > This is also good "game play" because if there is a potion of fire res in > real and you hold the > finger in a fire, you will find it out very directly. :) Actually, you need to drink potions for them to take effect, so the dipping method does not work. Note that if you do have the skill alchemy, applying that skill will attempt to identify any potions you do have. So you don't need identify scrolls or the like. Of course, using the skills to identify stuff doesn't always work (however, it does not give false results - it just simply fails). From peterm at tesla.EECS.Berkeley.EDU Mon Nov 13 01:45:08 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] Gods proposals, the great balance ;) In-Reply-To: Your message of "Sun, 12 Nov 2000 21:25:35 +1100." Message-ID: <200011130745.XAA00792@tesla.EECS.Berkeley.EDU> > to view it at http://mids.student.utwente.nl/~dnh/crossfire_gods.html and I have looked at it. It looks like a good 1st cut. Questions first: is Gnarg the only one to get cold, flu, smallpox? (Warts is irrelevant) > experienced players looking for more than the easy holy word and avatar > combinations. Gaea: Holy word work against undead only for Gaea? What do people think? Right now everyone with holy word can kill undead easily. Gaea really needs some advantage. If anyone, SHE should get the hp regen advantage. And how about a prayer of pacification, which would work like Face of Death, and HIT like face of death (1/2 levels or below), and turn monsters peaceful. Pacified monsters would turn over their experience to the priest and not have exp value anymore, and lose their ability to attack permanently, but not die. "pacified" monsters in this way must drop all their stuff and get out of a player's way. Lythander: How about changing the description of Lythander to include a magical bent? And granting +sp to followers? Not exactly a god of magic, but a god who helps with magic? Lythander should definitely get smallpox, as it is a good way to wipe out trolls and goblins. And for Lythander: how about a prayer of conflict, which turns monsters against each other? (very tricky and confusing) And in the description, you call him Elven god. This implies that he belongs to the elves. Other way around. Lythander created the elves, but as a god, he is for many races, too. More like Gnarg. How about praying at altar of Lythander gives arrows of assassination? Gnarg: Protection from disease isn't currently possible, and not, unfortunately, straightforward at all to add. +2 regen is too powerful, and I think inappropriate for Gnarg. He harms, not helps. I disagree about fear as an attacktype too. I'm in favor of leaving fear as a vuln, because goblins etc. are actualy quite craven creatures and are only brave when they've got the upper hand. How about a disease which all gnarg people would carry but be immune to, and transfer every time they hit something? "blood poisoning" from their filth? Which has a certain fatality rate but gets more power as the level of the priest increases? And which, when IT kills, grants exp to the wisdom category? Mostrai: No vuln cold for mostrai. It is too much of a weakness and not appropriate for a dwarf anyway, who are hardy creatures. For Mostrai, how about a prayer of metal mastery, which would turn all weapons affected on their owners? Ruggilli: I've no objection to making only "armor" denied to "no_wear_armor" players, and allow girdles. However, shields, helmets, boots, etc. are clearly armour... I think gaining gr and hp from hitting things could be enough of an advantage. Sorig: Would you leave Sorig with wounding? Then he would get some of the deadly diseases in addition to divine shock. I disagree about cold spells for Sorig. Sorig could add attacktype electricity to gloves. Devourers: Still needs work. How do low/mid level D-priests advance? Not holy word: they can't hit undead. Also, I think the story on Devourers needs some work. Why does everyone's holy word work against undead? How about this: the rest of the gods work for dominance of the natural order, while Devourers seeks the perversion of creation and natural cycles. Instead of the Lord of the Tomb he is the violator of the tomb, wrongfully wresting the dead from the arms of Gaea and setting them walking in an obscenity insulting to all the other gods. Therefore, as a minus, how about vuln. godpower? Gorokh: Immolation would actually be a good one for this one too. I can't imagine many tortures worse than being set on fire, and these ARE demons.... I was planning on giving Balrogs the immolation as well. Gorokh is actually a pretty OK god holy word kills undead, and he gets wounding and so a lot of diseases, right? Valriel: Another pretty OK god, and being able to kill demons is HANDY Adding the light is all Ithink is needed. From mtx93 at tzi.de Mon Nov 13 03:41:59 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] savebed feature is done In-Reply-To: <3A0F5140.230E49DA@scruz.net> Message-ID: > Andreas Vogl wrote: > > - The feature can be disabled in "include/config.h", in case that > > someone doesn?t like it. (Per default it is enabled) > > > > When there are no objections I?ll put it on cvs very soon. > > This is a more generic note and just not to Andreas: > > I know it has been the default for a long time to put various features in > config.h. However, please try to also add a command line option > and not have > the code be compile time dependant (If this is already done in > this case, my > apologies). > > When I check in the metaserver changes, I have also added a > 'settings' file > which sets in lib which can be used to control most of this even > without command > line options. Command line options still take precedence over > the settings > file. > > I really want to try and get rid as much compile time dependent code as > possible. This reduces bugs (as that seemingly unused function > that you delete > will now result in immediate linkage errors and not when the first time to > switch config.h finds the error), and also makes binary > distributions that much > more friendly/possible. > > Right now, for many of the options, someone who grabs a binary package is > basically at the whim of whatever flags were used in config.h to > compile the > executable. > > Having command line options/settings file also makes it easier to debug > problems with these non default behaviours - instead of having to > recompile the > code, just insert the appropriate run-time switch, and away you go. All true. The point is also, that we will get much more #ifdefs in the systems modules: If i convert the server code to windows. I want make it so of course, that we have one source for all systems. I we do it right, we will have a pretty seperated source, so game changings will not effect the cross platfrom code. Best way is, to seperate game code and modules totaly from "system code". I don't look in the server code so deeply at the moment but at most project which not start as cross platform, it should cost some work. So, please, if you make changes now to the code hold in mind that it should be prepared to cross platform style. MichToen From echter at informatik.uni-rostock.de Mon Nov 13 05:36:38 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] brace and face In-Reply-To: ; from mtx93@tzi.de on Fri, Nov 10, 2000 at 01:15:18PM +0100 References: <3A0B6DD6.FC497560@scruz.net> Message-ID: <20001113123638.A27480@hokkaido.informatik.uni-rostock.de> On Fri, Nov 10, 2000 at 01:15:18PM +0100, Michael Toennies wrote: > Thats the skills lockpicking and singing for example. For singing the face > action > is hard at the moment because you must direct face the monster but you > should not > hit him, wich ends in strange move actions. I think you can do 'ready_skill singing/lockpicking and then use fire + direction. -- Jan From andi.vogl at gmx.net Mon Nov 13 07:13:43 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] PR (Partial resistance) References: <3A0F6CFD.6A1512B7@scruz.net> Message-ID: <10872.974121223@www10.gmx.net> Mark W. wrote: > > 3) Determine values for the current resistance and immunity > > and write a quick program to sort through archs and change all > > to partial (ie prot -> 33%, Immunity -> 90%) > > This actually does not need to be done right away. For testing > purposes, it may be easier to add something like this to the item > loading function: > > If protected/vulnerable/immune to attacktype, assign default value > to the relevant protected field. > > This at least gets you up and running quickly, and probably should > be done anyways (with a debugging statement), simply becauses there > may be old maps out there that don't get converted right away. Good point. Maybe we should just leave the old style immunities working as they do (in the code)? It might be desireable to give monsters or non-equipment-items 100% immunities for some reason (e.g. make a crystal that cannot burn, etc). And what we like to change can be done in the maps and archs. For the old-style protections, we can assign a default value as Mark proposed. That way we could do the changing and re-balancing slowly and step by step. We would skip the period of "chaos and anarchy" that could otherwise happen shortly after the patch. > Now there are some issues that may be of debate. Like should > immunity potions really be 100% or instead something like 90%. > Same for some monsters. Potions should definitly NOT give 100%, because I don't want to have all the work on this patch wasted! I think they should give an absolute value of about 80% and not add up on the player's protection. So when a player gets equipment with good protections it will be more and more inefficient to use potions. That way low-level players get the help they need, while high-level players don't. > Also, if/when the protected, immune, and vulnerable fields go away, > i think there may be some objects that use those for non obvious > purposes (I think the gods code did so at one time). That ability > will be gone. Uh oh. Very important to track these down. > I actually don't think getting it working will be that hard. > Getting it balanced will be the much harder part, as that entails > twiddling values of the object, running again, seeing if it works > out correctly, etc. That is exactly how I feel about it. I'm willing to help with all the balancing stuff, but someone must first code the patch... =) > As a side note, currently armour in the object structure is an 8 bit > signed value (-127 to 127). If we presume the vulnerable equals -100 > protection (double damage which is currently the case), you probably > want to use 16 bit values to reduce the danger of overflow if someone > has a few vulnerable items. Using 8 bit values would be a terrible mistake. Those have already caused so much troubles in the past.. It is still possible to get various kinds of buffer overflows on different stat-values (ac, dam, etc). So please use 16 bit. Also, I would be very interested in the exact calculations that we're about to use in the PR-patch. How much prot. will a player get for wearing an amour with 99% fire resistance? How much % resistance on equipment is required to reach 99% as a player? ... Andreas V. -- Sent through GMX FreeMail - http://www.gmx.net From andi.vogl at gmx.net Mon Nov 13 07:25:27 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] savebed feature is done References: <3A0F5140.230E49DA@scruz.net> Message-ID: <7920.974121927@www10.gmx.net> Mark W. wrote: > > - The feature can be disabled in "include/config.h", in case that > > someone doesn?t like it. (Per default it is enabled) > > > > When there are no objections I?ll put it on cvs very soon. > > This is a more generic note and just not to Andreas: > > I know it has been the default for a long time to put various > features in config.h. However, please try to also add a command > line option and not have the code be compile time dependant (If > this is already done in this case, my apologies). > [...] I just thought it would be a nice gesture to have the option of disabling the feature. But I understand your point. So I will just make my feature permanent and take out the #ifndef. It's better if mapmakers can rely on certain standards anyways. And such a trivial thing like respawn position doesn't deserve a commandline option I believe. Andreas V. -- Sent through GMX FreeMail - http://www.gmx.net From pjka at cc.jyu.fi Mon Nov 13 12:02:42 2000 From: pjka at cc.jyu.fi (Pertti Karppinen (OH6KTR)) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] Wow! In-Reply-To: <7920.974121927@www10.gmx.net>; from andi.vogl@gmx.net on Mon, Nov 13, 2000 at 02:25:27PM +0100 References: <3A0F5140.230E49DA@scruz.net> <7920.974121927@www10.gmx.net> Message-ID: <20001113200242.A4758@tukki.jyu.fi> I was told, that Kudos should go out to Mark on this one: Best visual effect of the year Oscar goes to: .... drumroll ... traps not obscuring thing beneath them. Way cool!!! It was perhaps the most annoying thing with the original (well for me original 0.94.3 crossfire) code. I mean now it looks like it was supposed to look. I bow before excellence. Now if only someone would fix wall of thorns (better yet, would get rid of it ....) roWer a devouted follower of Mostrai, sworn to the secret art of sorcery -- BSc. Pertti Karppinen |'Bridge Players | Systems Designer, University of Jyvaskyla, Finland | Do | http://www.iki.fi/~pjka/ | Office : +358 14 260 2088 | It | HAM: OH6KTR QTH: KP22UF | Cellular: +358 40 564 0786 | on the Table' | From dnh at hawthorn.csse.monash.edu.au Mon Nov 13 14:37:52 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] PR Message-ID: Well, I can see we are in favour. Some excellent points have been made which i have saved but I am very worried. No one seems to have the time to do the coding and so this will not take off. I am willing to be very patient but have so far got only one maybe for the coding, although there are several people interested in the balancing. I must again emphasise that this project cannot take of without one the experience coders helping, while I can dream of doing the coding the reality is it is over my head. Peterm cannot help at the moment cause he has heaps of work to do, and Mark maybe able to help but alittle later during his holidays. As of yet I haven't seen a reply from Jan but I am waiting anxiously. I cannot believe these problems are happening, but then it is understandable. Basically right now is not a good time to take on big projects I assume? Well until someone can help, we can discuss till we're blue in the face. Is it just me that sees that this is the most important project since way back. This is going to change game play signifigantly and I believe for the better. Please consider. dnh (Darth_bob) ps. (For the gods balancing stuff I need some ideas on how to slow down mostrai for low levels. It has been pointed out that vun confuse doesn't seem very appropriate (Although poision is and I can't see why it wasn't in before). Currently Gorokh and Valriel are the finished product, I am going to make there avatars alittle more powerful but nothing more. Although Gorokh MAY get immolation... perhaps at a higher level? From mwedel at scruz.net Tue Nov 14 00:05:26 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] PR (Partial resistance) References: <3A0F6CFD.6A1512B7@scruz.net> <10872.974121223@www10.gmx.net> Message-ID: <3A10D626.7C08849A@scruz.net> Andreas Vogl wrote: > Good point. Maybe we should just leave the old style immunities > working as they do (in the code)? It might be desireable to give > monsters or non-equipment-items 100% immunities for some reason > (e.g. make a crystal that cannot burn, etc). > And what we like to change can be done in the maps and archs. > For the old-style protections, we can assign a default value as > Mark proposed. A good question that this raises is 'how should an items protected/immunity value affect its saving throws'? A simple solution would be to divide the protection value by 10, and that is the bonus. So something that is 100% protected gets a +10 saving throw. Which depending on the item, is a pretty good thing. Looking at the code right now, I see that if an item is protected or immune to an attacktype, it can't be destroyed by it. It also appears an item has no penalties for being vulnerable to an attacktype. Doing the protection value /10 fixes that later point, since vulnerable items basically have a negative protection. > Potions should definitly NOT give 100%, because I don't want to have > all the work on this patch wasted! OTOH, at least potions and spells are temporary abilities. The objects that have immune and never go away are really the bad ones. I guess the biggest problem with the potions are the fact that with the two correct potions, you can basically take on most anything at lower levels (protection fire, protection physical will let you take on a big dragon assuming you can do damage to it fast enough) > > That is exactly how I feel about it. I'm willing to help with all the > balancing stuff, but someone must first code the patch... =) I had said private to Darth that I may be able to get that done over thanksgiving holidays (nov 23->26). > Also, I would be very interested in the exact calculations that we're > about to use in the PR-patch. How much prot. will a player get for > wearing an amour with 99% fire resistance? How much % resistance on > equipment is required to reach 99% as a player? ... It has been suggested to basically use the same method that is used for armor. The code snippet on that is: op->armour+=((100-op->armour)*tmp->armour)/100; op is the player/monster. This gets initialized to the archetype value, which for all players I believe this is 0. So if you have to 50% items, that gives you 75%. A third one gives you 87%. But two 80% items would give you 96% protection. And two 90% items would give you 99%. Vulnerabilities would have the desired negative effect. I just wrote a little program that lets you try different values and gives you the results. One thing I notice is that vulnerable (negative values) are very easily offset by positive values (basically, a 50% protection negates a -100% vulnerability). And for example, if you have two 80% protections (which give you 96% protection), the -100% vulnerability only reduces that to 92% overall. Here is the program if anyone else wants to play with it: #include main() { char buf[256]; int value=0; while (gets(buf)) { value += ((100-value)*atoi(buf))/100; printf("value now %d\n", value); } } From mwedel at scruz.net Tue Nov 14 01:40:53 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] metaserver update. Message-ID: <3A10EC85.5BFAAF35@scruz.net> I've just checked in the code for the metaserver notifications. The code should be fairly safe - it actually isn't much code - I'll enclose the changelog below. I have also included a sample settings file - in that, the metaserver is currently a test server I have set up (tavern.santa-clara.ca.us). I would appreciate it for those of you running latest CVS versions to activate and use the metaserver stuff (presuming you want to be part of it) so I can test/improve/debug the script (I'm writing the metaserver side in perl - its portable, easier to do, and probably less vulnerable to buffer overrun problems). At some point, a more permanent host will probably need to be found. What I plan for the metaserver script to do is: 1) Generate an html file (directory can be specified), which can be accessed via the web. 2) Ability to get the data via request from client or other sources. metaserver update: common/init.c: Add meta_ fields to settings structure initialization. include/global.h: Add meta_ fields to settings structure. include/sockproto.h: Updated for new meta_ functions. lib/Makefile.in: Have it install settings file. lib/settings: Default settings file with some metaserver default value.s server/init.c: Add load_settings file. Add call to metaserver_init. server/main.c: Add call to metaserver_update in do_specials. socket/Makefile.in: Add metaserver.c to list of files. socket/metaserver.c: File that deals with metaserver related data. socket/item.c: Remove some unused variables. Unrelated to metaserver changes. socket/loop.c: Add calls to metaserver_update in block_until_new)connection. Change function so that if there are no active players, it still timeouts and does metaserver update. Basically changed to do it the way the WATCHDOG code did it. End of metaserver update. MSW 2000-11-13 From peterm at tesla.EECS.Berkeley.EDU Tue Nov 14 02:58:53 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] Immolation effect added Message-ID: <200011140858.AAA07800@tesla.EECS.Berkeley.EDU> Immolation is disease-like effect you may have seen "dnh" describing on this list. An object you hit has a chance of catching on fire. Basically, I've modified the disease code to be a bit more general. Immolation: A player may both "carry" and be "immune" to an immolation "disease". When a player who "carries" the immolation disease hits something physically, he has a chance of passing that disease to the thing he hit. That thing will then catch fire. Nothing is immune to immolation. However, some things won't mind being immolated: any fire-immune creature shall take no damage at all. How to use immolation: Place the "immolation" and "immolation_immunity" objects in a player. The player will then carry immolation but will not actually be immolated. Kills by means of immolation will go to the player's Wis experience area. the "wc" field of immolation sets the chance of passing it on during any given hit: chance = wc/127. Right now, "wc" is set to 3, and immolation will kill a non-regenerating monster with no protection from fire about 1/10 the time. Also, immolation will NOT be passed onto anything else the monster may hit right now. To enable that, set "armour 0" in the immolation archetype or object. Additionally, I have made creeping_frost creeping_frost_immunity which are identical almost to immolation except use cold attacktype and a bit less fatal. PeterM From dnh at hawthorn.csse.monash.edu.au Tue Nov 14 06:01:31 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] Armour type resistance Message-ID: I agree with Mark, the armour code is very good I think right now as it tapers of well, perhaps we could even make it tapering off lower? Well, anyway, I think resistance that works like armour would be perfect for our needs, although I do wonder about such items as the wizards hat, it has many many protections. That item plus the ring of the elementals could be one heck of a combination =) And what about Acid? I think we should leave that as protection and immunity although I don't like how immunity doesn't protect your items. I can see the logic, but I still don't like it =) Perhaps PR should only work for the major attack_types? Magic/Fire/Ice/Elec/God_Power? and of course physical which is just armour. Although if physical is armour, what then is the purpose of protected phys? Wouldn't it be better to convert protected armours into arm +50% or something? (obviously not 50%). Hmmmmm I am very happy that Mark has replied to my request to tell me if you are ven remotely interested in this, thanks Mark. Thanks also to Andreas and pete (Although that was via irc), are there no other people interested? Also it worries me that very few people have commented on my proposed changes. I made them spur of the moment and was expecting some flames regarding some gods. (I still need some word of what to do with mostrai). If I don't get many more responses I will be inclined to begin putting the changes in. Pete has already finished the Immolation spell for ruggilli and the Creeping frost for devourers. These changes are quite big and I don't want to do something and get told after I have done it all that it is no good. Speak now or forever hold your peace ;) One other thing, I am getting responses very late recently, infact around 2-3 hours later than everyone else. I have taken to checking the online mail and replying to that (As I type this message still Marks message on PR hasn't got to me). dnh (with the slightly raised blood pressure ;) ps i am not going to start work on PR for awhile, that is a long term project that can't really be begun until someone does the coding. The gods changes on the other hand is one of my projects, and I would like to start ASAP. From andi.vogl at gmx.net Tue Nov 14 13:04:42 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:13 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) In-Reply-To: <10872.974121223@www10.gmx.net> Message-ID: <000001c04e6d$c2c58420$5018993e@kyle> -----Forwarded Message----- From: Michael Toennies [mailto:mtx93@tzi.de] Sent: Tue, 14.11.2000 04:01 To: Andreas Vogl Subject: RE: [CF-Devel] PR (Partial resistance) > Mark W. wrote: > > > > 3) Determine values for the current resistance and immunity > > > and write a quick program to sort through archs and change all > > > to partial (ie prot -> 33%, Immunity -> 90%) > > > > This actually does not need to be done right away. For testing > > purposes, it may be easier to add something like this to the item > > loading function: > > > > If protected/vulnerable/immune to attacktype, assign default value > > to the relevant protected field. > > > > This at least gets you up and running quickly, and probably should > > be done anyways (with a debugging statement), simply becauses there > > may be old maps out there that don't get converted right away. > > Good point. Maybe we should just leave the old style immunities > working as they do (in the code)? It might be desireable to give > monsters or non-equipment-items 100% immunities for some reason > (e.g. make a crystal that cannot burn, etc). > And what we like to change can be done in the maps and archs. > For the old-style protections, we can assign a default value as > Mark proposed. > > That way we could do the changing and re-balancing slowly and step > by step. We would skip the period of "chaos and anarchy" that could > otherwise happen shortly after the patch. > > > Now there are some issues that may be of debate. Like should > > immunity potions really be 100% or instead something like 90%. > > Same for some monsters. > > Potions should definitly NOT give 100%, because I don't want to have > all the work on this patch wasted! > I think they should give an absolute value of about 80% and not add up > on the player's protection. So when a player gets equipment with good > protections it will be more and more inefficient to use potions. > That way low-level players get the help they need, while high-level > players don't. > > > Also, if/when the protected, immune, and vulnerable fields go away, > > i think there may be some objects that use those for non obvious > > purposes (I think the gods code did so at one time). That ability > > will be gone. > > Uh oh. Very important to track these down. > > > I actually don't think getting it working will be that hard. > > Getting it balanced will be the much harder part, as that entails > > twiddling values of the object, running again, seeing if it works > > out correctly, etc. > > That is exactly how I feel about it. I'm willing to help with all the > balancing stuff, but someone must first code the patch... =) > > > As a side note, currently armour in the object structure is an 8 bit > > signed value (-127 to 127). If we presume the vulnerable equals -100 > > protection (double damage which is currently the case), you probably > > want to use 16 bit values to reduce the danger of overflow if someone > > has a few vulnerable items. > > Using 8 bit values would be a terrible mistake. Those have already caused > so much troubles in the past.. It is still possible to get various kinds > of buffer overflows on different stat-values (ac, dam, etc). > So please use 16 bit. > > Also, I would be very interested in the exact calculations that we're > about to use in the PR-patch. How much prot. will a player get for > wearing an amour with 99% fire resistance? How much % resistance on > equipment is required to reach 99% as a player? ... Thats the point why i want potions: I don't want a player which have armor, rings and amulets on, giving him 99% prot in fire and cold and all the stuff. Remember a char can wear&wield at the moment more than 13 items at the same time (yeah, count it!). You will come in some problems to balance it without a cap. I want a value X you can maximal get with items, which gives you enough protection to avoid killing by fire for example of a red dragon, perhaps the abillity (if you are fast) to kill the critter with a good weapon, but you should nearly dead then. To boost your res to nearly immunity, you never should be able to do this permanent with armors or other tricks. Also, when he has about 80%-90% natural in all (that means you can cut through a row of red dragons all times you want), i will call the char and the game then broken. We dont want this kind of super chars. If you really want then attacking 5 dragons, you must drink a potion, giving you for a short time immunity. Or you should cast a spell. ** The protection spells in the game are really useless at this point **! I never use them, because when i get them i always have items which do the same. So, simply make potions and spells cap indepentend and you got the non permanent style we all want. Real caps are shown to the player too and are simple to include. If you have a armor of fire res +30% and a amulet of 30% you should not get automatically 60% fire res. Every point you got nearer the cap, you need more points to get closer. If yur caps 60, you got 40 points for example. If your caps are 70, you got 44% from both or so. And if you caps are 20, you got 19. (i think all here knows the prinzip). So, make a low cap. This will sacrifice most game parts also: - Different races/professions have different personal caps. - Gods will give different caps. - Perhaps quest can give you permanent higher caps!! (invisible items!) I play in a MUD with this prinzip and i remember it as really great, because you chars get a highly different style to play. Also, all items automatically fits in the system, no one can give you to much. If they do, they get caped. Calculate also the numbers of items with a special res, so you get more res >from 5 items with all 10% fire res as from wear one item with 50%. This will cap the "super items". A great thing if you do this and what i remember as i play this MUD is, that if you do this in the way i describe, different items fits in a different way in chars with different caps, because the get caped in different ways. That means that a item are great for some chars, and not so great for others. MichToen From peterm at tesla.EECS.Berkeley.EDU Tue Nov 14 14:04:40 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] Armour type resistance In-Reply-To: Your message of "Tue, 14 Nov 2000 23:01:31 +1100." Message-ID: <200011142004.MAA20227@tesla.EECS.Berkeley.EDU> > I agree with Mark, the armour code is very good I think right now as it > tapers of well, perhaps we could even make it tapering off lower? I like that behavior as well. > And what about Acid? I think we should leave that as protection and > immunity although I don't like how immunity doesn't protect your items. I > can see the logic, but I still don't like it =) Hmm, yes, I guess we cannot use the old protected + immune == protects items hack anymore. How about >100% protection Acid protects items? > Perhaps PR should only work for the major attack_types? > Magic/Fire/Ice/Elec/God_Power? and of course physical which is just > armour. Although if physical is armour, what then is the purpose of > protected phys? Wouldn't it be better to convert protected armours into > arm +50% or something? (obviously not 50%). Hmmmmm I think ALL current protections should be set to 33, for items, and 50, for protections on living things. I think this default will produce a balanced game at the outset of the new protection scheme. Immunities should add 100% protection as before, at least to start. We can then go through and modify some monsters, maps, artifacts, and treasures as needed. > changes in. Pete has already finished the Immolation spell for ruggilli > and the Creeping frost for devourers. These changes are quite big and I These are not spells. They're more like abilities. If Immolation + Immolation_immunity is placed in a player, he may set fire to someone he hits, and it is a god-driven fire. The player does NOTHING to explicitly turn it on. > don't want to do something and get told after I have done it all that it > is no good. Speak now or forever hold your peace ;) Give it a week or so as a review period, dnh. Some of the less active contributors may need a bit of time. However, I will ask: the gods mod is a major shift in direction, everyone interested please weigh in! PeterM From dnh at hawthorn.csse.monash.edu.au Tue Nov 14 14:34:38 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] Acid Message-ID: Okay 50% or greater gives items protection, 100% gives player protection (Protection is actually immunity, its just that when a player or its items are protected no acid can harm them) dnh From andi.vogl at gmx.net Tue Nov 14 18:14:30 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:13 2005 Subject: [CF-Devel] new savebed feature on CVS Message-ID: <000101c04e99$0e3cc3c0$7b9ee23e@kyle> I have put the new savbed-respawn feature on CVS now. So players will re-awake on the last-applied savebed after death in future. As promised in my last post, I threw out the compile- dependant option of disabling that feature. Most likely nobody would have used it anyways. =) Even more, I have also fixed (hopefully all) maps that contained misplaced savebeds. If still anyone discovers savebeds on an insecure place, please inform me. Andreas V. From andi.vogl at gmx.net Tue Nov 14 18:59:39 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] compile error with current CVS-server! Message-ID: <000301c04e9f$5bddc100$7b9ee23e@kyle> I downloaded the server from CVS today and got the following error on comiling (make): metaserver.c: In function `metaserver_update': metaserver.c:109: `MSG_DONTWAIT' undeclared (first use in this function) metaserver.c:109: (Each undeclared identifier is reported only once metaserver.c:109: for each function it appears in.) make[2]: *** [metaserver.o] Error 1 make[2]: Leaving directory `/home/av/crossfire/crossfire/socket' make[1]: *** [../socket/socket.a] Error 2 As most people will see, this error is cause by an undefined constant 'MSG_DONTWAIT' in the new metaserver code (metaserver.c). *glances at Mark* I?m using SuSE Linux. Peter M., using FreeBSD, has compiled as well and did not get the error. Is 'MSG_DONTWAIT' supposed to be defined in one of the system headers? Anyways, please remove that bug as fast as possible, it?s a serious problem! Andreas V. From mwedel at scruz.net Tue Nov 14 21:46:12 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] compile error with current CVS-server! References: <000301c04e9f$5bddc100$7b9ee23e@kyle> Message-ID: <3A120704.652F8430@scruz.net> At least on my version of linux, that is defined in /usr/include/bits/socket.h. /usr/include/bits/socket.h gets included by sys/socket.h and netinet.h/in.h (both of which are included by metaserver.c) On solaris, it exists in sys/socket.h. Can you try adding a '#include ' line near the top of the metaserver.c file and see if that fixes it? Without a system to reproduce it on, all I can do is toss out suggestions until hopefully the right answer is found. Andreas Vogl wrote: > > I downloaded the server from CVS today and got > the following error on comiling (make): > > metaserver.c: In function `metaserver_update': > metaserver.c:109: `MSG_DONTWAIT' undeclared (first use in this function) > metaserver.c:109: (Each undeclared identifier is reported only once > metaserver.c:109: for each function it appears in.) > make[2]: *** [metaserver.o] Error 1 > make[2]: Leaving directory `/home/av/crossfire/crossfire/socket' > make[1]: *** [../socket/socket.a] Error 2 > > As most people will see, this error is cause by an undefined > constant 'MSG_DONTWAIT' in the new metaserver code (metaserver.c). > *glances at Mark* > > I?m using SuSE Linux. Peter M., using FreeBSD, has compiled as > well and did not get the error. Is 'MSG_DONTWAIT' supposed to > be defined in one of the system headers? > > Anyways, please remove that bug as fast as possible, it?s a serious > problem! > > Andreas V. > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mwedel at scruz.net Tue Nov 14 21:52:10 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] Armour type resistance References: Message-ID: <3A12086A.8E9B90A@scruz.net> dnh@hawthorn.csse.monash.edu.au wrote: > Well, anyway, I think resistance that works like armour would be perfect > for our needs, although I do wonder about such items as the wizards hat, > it has many many protections. That item plus the ring of the elementals > could be one heck of a combination =) They obviously get balanced out. IF they have one heck of a number of protections, then maybe they keep all of them but at only 10% level. Or the number is reduced, but the value goes up. > Perhaps PR should only work for the major attack_types? > Magic/Fire/Ice/Elec/God_Power? and of course physical which is just > armour. Although if physical is armour, what then is the purpose of > protected phys? Wouldn't it be better to convert protected armours into > arm +50% or something? (obviously not 50%). Hmmmmm For simplicity, the array of protections will be equal to the number of attacks. Some may not have much effect. For things like confusion, fear, drain, ..., the only really effect would be to reduce duration of the spell effects and the amount of exp drained. So if you got hit by a confusion attach that would normally last for 100 ticks, but you have 80% protection to confusion, it only lasts 20 ticks on you. This would mean that things like 10% protection in those areas may not do much. The alternative would be for adjustment to the saving throw to be affected by this. 80% equals a +8 save, so you are much less likely to be affected, but if you are, you still get full duration. I would say that only one or the other should be done - decrease time you are affected, or increase the saving throw. Doing both might be too much a benefit. protected/immune to physical would lack meaning. Items that have that should be given some armour value instead. From mwedel at scruz.net Tue Nov 14 22:10:30 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:14 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) References: <000001c04e6d$c2c58420$5018993e@kyle> Message-ID: <3A120CB6.E6B135ED@scruz.net> Andreas Vogl wrote: > Thats the point why i want potions: I don't want a player which have armor, > rings and > amulets on, giving him 99% prot in fire and cold and all the stuff. Remember > a char can wear&wield > at the moment more than 13 items at the same time (yeah, count it!). You > will come in some problems > to balance it without a cap. I agree this can be a problem. Even if you put proposed caps for items at some low value like 30, 4 items that have that level of protections gives you 75% protection. > > I want a value X you can maximal get with items, which gives you enough > protection to avoid > killing by fire for example of a red dragon, perhaps the abillity (if you > are fast) to kill the > critter with a good weapon, but you should nearly dead then. To boost your > res to nearly immunity, you > never should be able to do this permanent with armors or other tricks. > Also, when he has about > 80%-90% natural in all (that means you can cut through a row of red dragons > all times you want), > i will call the char and the game then broken. We dont want this kind of > super chars. Agree. But I think that can also be a problem in the balancing of the items and not implementation. At one point, characters could basically get all stats up to 30 with the weapon improvement code. End result was to reduce the potency of that a bit The problem here is that there are really only 5-6 attacktypes you really need to protect yourself again (fire, cold, electricity, physical). So that protection of fear is really irrelevant. > ** The protection spells in the game are really useless at this point **! > I never use them, because when i get them i always have items which do the > same. > So, simply make potions and spells cap indepentend and you got the non > permanent style > we all want. I mostly agree that the protection spells are useless. However, I am getting a little fearful of making this protection code too complicated. > > Real caps are shown to the player too and are simple to include. > If you have a armor of fire res +30% and a amulet of 30% you should not get > automatically > 60% fire res. Every point you got nearer the cap, you need more points to > get closer. > If yur caps 60, you got 40 points for example. If your caps are 70, you got > 44% from both or so. > And if you caps are 20, you got 19. The armor code sort of does this. If you have two 30% items, you armor is 51. One question is where do these caps come from? I would think that one way this could be done is instead of using the 100 value in the armor code, you use this cap. I just tried this out on my demo program, assuming a cap of 60, and with 1 item, your protection is 30, two it is 45, three is 52, 56,58, 59, 59. One effect of the way it is done is that if you have an item above the cap, your ability is basically the cap (actually one side effect is that if you only have 1 item above the cap, you get full value, and each additional protection reduces you towards the cap, but that should be easy to fix). At least from the fix_player perspective, to implement this would require two arrays within the function, and in one we fill in the values are limited by the cap, and the other has the spell effects. Then afterwards, we apply the spell effects to the item (capped) value, for a higher resistance that can go beyond the cap. Is that what you are describing? > Also, all items automatically fits in the system, no one can give you to > much. If they do, they get caped. > Calculate also the numbers of items with a special res, so you get more res > >from 5 items with all 10% fire res > as from wear one item with 50%. This will cap the "super items". Unfortunately, the way the calculations work, you actually get the opposite effect. One item with 50% will give you more than 5 items with 10%. It becomes more difficult if you want to cap values/make it harder to get near the cap and at the same time reward the player for having multiple items of protection. And I'm not sure a good way to implement that without getting too complicated or too easy for players to bypass. I mean I guess you could take the average value of all the protections (on a per item basis), and increase it by some point, but with that method, then a set of items that are like 50, 1, 1, 1, 1 would appear the same as 11,11,11,11,11. I think the real solution is to prevent the super items from getting created in the first place. If map designers put unbalancing items in the maps, I really don't want to try to have the code prevent that. Simply put, that map should be fixed. And some of that is that if a map maker really wants to put unbalancing items in, they will always be able to figure out how to get beyond code restrictions. Now it may be worth while to set strict guidelines on what acceptable items are (for example, can not provide more than 120% total protection, and no one protection can be more than 30%). From peterm at tesla.EECS.Berkeley.EDU Wed Nov 15 01:05:49 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:14 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) In-Reply-To: Your message of "Tue, 14 Nov 2000 20:10:30 PST." <3A120CB6.E6B135ED@scruz.net> Message-ID: <200011150705.XAA05045@tesla.EECS.Berkeley.EDU> > Andreas Vogl wrote: > > > Thats the point why i want potions: I don't want a player which have armor, > > rings and > > amulets on, giving him 99% prot in fire and cold and all the stuff. Remembe >r > > a char can wear&wield > > at the moment more than 13 items at the same time (yeah, count it!). You > > will come in some problems > > to balance it without a cap. 1 2 3 4 5 6 7 8 9 Armor shield cloak helmet ring1 ring2 amulet glove girdle 10 11 12 13 14 15 boots weapon bow (talisman) (holy symbol) (lockpicks) Of these, very rarely do glove, girdle, boots, bow, talisman, holy symbol, lockpicks grant any protection at all, and the last three ditch you whenever you switch skills. So that leaves 8 items which commonly provide protection. Protections will compete with things like STATS, DAMAGE, PATH_ATTUNED for these 8 slots as well. I do not see a problem here. The player must make tradeoffs. > I agree this can be a problem. Even if you put proposed caps for items at s > low value like 30, 4 items that have that level of protections gives you 75% > protection. Yeah, so? Do you know how fast a dragon can roast someone with only 75% protection from fire? Try playing with lag sometimes. > > Also, when he has about > > 80%-90% natural in all (that means you can cut through a row of red dragons > > all times you want), How do you know this without trying it? I think this is pure speculation. MY pure speculation is that two or three dragons can roast someone with 90% protection unless he heals a few times before he can kill them. > The problem here is that there are really only 5-6 attacktypes you really ne > to protect yourself again (fire, cold, electricity, physical). So that > protection of fear is really irrelevant. 5-6 attacktypes and 8 slots to do it with. Slots that you often also need for things like SP_REGEN, regeneration, Pow bonus, Str bonus, Dex bonus, Con bonus.... > I mostly agree that the protection spells are useless. However, I am gettin > little fearful of making this protection code too complicated. They're useless because every protection is 50%. > > Real caps are shown to the player too and are simple to include. > > If you have a armor of fire res +30% and a amulet of 30% you should not get > > automatically > > 60% fire res. Every point you got nearer the cap, you need more points to > > get closer. > > If yur caps 60, you got 40 points for example. If your caps are 70, you got > > 44% from both or so. > > And if you caps are 20, you got 19. > > The armor code sort of does this. If you have two 30% items, you armor is 5 >1. Everyone who's spoken of partial protections has said, "use the armor way of adding, not straight addition." This alone, along with defaults of 30% protection for "protected" items will balance things nicely, I think. And it is simple. I believe that we should try it first before going with some complex system. > One question is where do these caps come from? > > I would think that one way this could be done is instead of using the 100 va > in the armor code, you use this cap. I just tried this out on my demo progra > assuming a cap of 60, and with 1 item, your protection is 30, two it is 45, > three is 52, 56,58, 59, 59. I see NO benefit at all to partial protections if we set a "cap" at 60. 60 ~= 50. We do lots of work for an insignificant change. I think players SHOULD be able to arrange for 90% protection.... *if* they trade off lots of other stuff for it. Which they will have to do if we use the armor adding system. > At least from the fix_player perspective, to implement this would require tw > arrays within the function, and in one we fill in the values are limited by t > cap, and the other has the spell effects. Then afterwards, we apply the spel > effects to the item (capped) value, for a higher resistance that can go beyon > the cap. Is that what you are describing? I would make life easy for us and just make protection spells work like the armor spell. It seems to stop working at about 75. > > Also, all items automatically fits in the system, no one can give you to > > much. If they do, they get caped. I don't think we should "fix" abusive items in the code. Should we have a "cap" on damage dealt? How about weapon speed? How about total stats given? How about number of distinct attack types? The idea of hard coded "caps" disgusts me. Fix abusive items in the maps. > I think the real solution is to prevent the super items from getting created > the first place. If map designers put unbalancing items in the maps, I reall > don't want to try to have the code prevent that. Simply put, that map should > fixed. And some of that is that if a map maker really wants to put unbalanci Hear hear!! > Now it may be worth while to set strict guidelines on what acceptable items > (for example, can not provide more than 120% total protection, and no one > protection can be more than 30%). I'm not in favor of "strict" guidelines. A player maxes out at about 500 hp or something like that. Monsters can get 32,000, and are often immune to all spells, etc. A player might *need* 90% protection in something AND a powerful weapon to defeat a monster like that. High order protections and great items are the proper reward for completing hard quests. Items are only "abusive" in their context. We can (and should) fix them case by case--in the maps. PeterM From mtx93 at tzi.de Wed Nov 15 03:18:23 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:14 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) In-Reply-To: <3A120CB6.E6B135ED@scruz.net> Message-ID: > > Thats the point why i want potions: I don't want a player which > have armor, > > rings and > > amulets on, giving him 99% prot in fire and cold and all the > stuff. Remember > > a char can wear&wield > > at the moment more than 13 items at the same time (yeah, count it!). You > > will come in some problems > > to balance it without a cap. > > I agree this can be a problem. Even if you put proposed caps > for items at some > low value like 30, 4 items that have that level of protections > gives you 75% > protection. > > > > > I want a value X you can maximal get with items, which gives you enough > > protection to avoid > > killing by fire for example of a red dragon, perhaps the > abillity (if you > > are fast) to kill the > > critter with a good weapon, but you should nearly dead then. To > boost your > > res to nearly immunity, you > > never should be able to do this permanent with armors or other tricks. > > Also, when he has about > > 80%-90% natural in all (that means you can cut through a row of > red dragons > > all times you want), > > i will call the char and the game then broken. We dont want this kind of > > super chars. > > Agree. But I think that can also be a problem in the balancing > of the items > and not implementation. At one point, characters could basically > get all stats > up to 30 with the weapon improvement code. End result was to > reduce the potency > of that a bit > > The problem here is that there are really only 5-6 attacktypes > you really need > to protect yourself again (fire, cold, electricity, physical). So that > protection of fear is really irrelevant. > > > > ** The protection spells in the game are really useless at this > point **! > > I never use them, because when i get them i always have items > which do the > > same. > > So, simply make potions and spells cap indepentend and you got the non > > permanent style > > we all want. > > I mostly agree that the protection spells are useless. However, > I am getting a > little fearful of making this protection code too complicated. > > > > > Real caps are shown to the player too and are simple to include. > > If you have a armor of fire res +30% and a amulet of 30% you > should not get > > automatically > > 60% fire res. Every point you got nearer the cap, you need more > points to > > get closer. > > If yur caps 60, you got 40 points for example. If your caps are > 70, you got > > 44% from both or so. > > And if you caps are 20, you got 19. > > The armor code sort of does this. If you have two 30% items, > you armor is 51. > > One question is where do these caps come from? > > I would think that one way this could be done is instead of > using the 100 value > in the armor code, you use this cap. I just tried this out on my > demo program, > assuming a cap of 60, and with 1 item, your protection is 30, two > it is 45, > three is 52, 56,58, 59, 59. Yes, thats exactly how the protection should work too if we assume a value between 0 (nothing) and 100% (immun). It fix 2 main problems: - Items with many or to much protection. They get balanced automatically - different characters / gods fits too Simply assume a general res cap factor of XX. Like the 20 of all stats as default value. Now a fireborn has fire res caps +yy and cold res -xx. And so on. The value should be a good balance between vulnerable and pretection. Btw, vulnerable can simply put in, the item with vulnerability give a -zz factor to the caps! To access from XX to 100% (immunity), you should use spells or potions. Simply don't count the protection value of the spell/potion over the cap. This gives also a nice way for potions: A potion of minor protection of fire gives xx%, a potion of major res. zz% and so on. > One effect of the way it is done is that if you have an item > above the cap, > your ability is basically the cap (actually one side effect is > that if you only > have 1 item above the cap, you get full value, and each > additional protection > reduces you towards the cap, but that should be easy to fix). > > At least from the fix_player perspective, to implement this > would require two > arrays within the function, and in one we fill in the values are > limited by the > cap, and the other has the spell effects. Then afterwards, we > apply the spell > effects to the item (capped) value, for a higher resistance that > can go beyond > the cap. Is that what you are describing? Exactly. This give us the difference between permanent/non perm and resistance/immunity. > > > Also, all items automatically fits in the system, no one can give you to > > much. If they do, they get caped. > > Calculate also the numbers of items with a special res, so you > get more res > > >from 5 items with all 10% fire res > > as from wear one item with 50%. This will cap the "super items". > > Unfortunately, the way the calculations work, you actually get > the opposite > effect. One item with 50% will give you more than 5 items with 10%. Ah, this is not so bad, its a bonus for good items! In many games you have the problem that the best item/unit is the whimpy ( i remember games like C&C and others, where you buy the lowest units and use them in hordes). > It becomes more difficult if you want to cap values/make it > harder to get near > the cap and at the same time reward the player for having > multiple items of > protection. And I'm not sure a good way to implement that > without getting too > complicated or too easy for players to bypass. I mean I guess > you could take > the average value of all the protections (on a per item basis), > and increase it > by some point, but with that method, then a set of items that are > like 50, 1, 1, > 1, 1 would appear the same as 11,11,11,11,11. That should not be. > I think the real solution is to prevent the super items from > getting created in > the first place. If map designers put unbalancing items in the > maps, I really > don't want to try to have the code prevent that. Simply put, > that map should be > fixed. And some of that is that if a map maker really wants to > put unbalancing > items in, they will always be able to figure out how to get beyond code > restrictions. > > Now it may be worth while to set strict guidelines on what > acceptable items are > (for example, can not provide more than 120% total protection, and no one > protection can be more than 30%). > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From mtx93 at tzi.de Wed Nov 15 03:29:04 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:14 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) In-Reply-To: <200011150705.XAA05045@tesla.EECS.Berkeley.EDU> Message-ID: > > Andreas Vogl wrote: > > > > > Thats the point why i want potions: I don't want a player > which have armor, > > > rings and > > > amulets on, giving him 99% prot in fire and cold and all the > stuff. Remembe > >r > > > a char can wear&wield > > > at the moment more than 13 items at the same time (yeah, > count it!). You > > > will come in some problems > > > to balance it without a cap. > > 1 2 3 4 5 6 7 8 9 > Armor shield cloak helmet ring1 ring2 amulet glove girdle > > 10 11 12 13 14 15 > boots weapon bow (talisman) (holy symbol) (lockpicks) > > Of these, very rarely do glove, girdle, boots, bow, talisman, holy symbol, > lockpicks grant any protection at all, and the last three ditch you > whenever you switch skills. > > So that leaves 8 items which commonly provide protection. Protections > will compete with things like STATS, DAMAGE, PATH_ATTUNED for > these 8 slots > as well. > > I do not see a problem here. The player must make tradeoffs. > > > I agree this can be a problem. Even if you put proposed caps > for items at s > > low value like 30, 4 items that have that level of protections > gives you 75% > > protection. > > Yeah, so? Do you know how fast a dragon can roast someone with only 75% > protection from fire? Try playing with lag sometimes. > > > > Also, when he has about > > > 80%-90% natural in all (that means you can cut through a row > of red dragons > > > all times you want), > > How do you know this without trying it? I think this is pure speculation. > MY pure speculation is that two or three dragons can roast someone with > 90% protection unless he heals a few times before he can kill them. > > > The problem here is that there are really only 5-6 attacktypes > you really ne > > to protect yourself again (fire, cold, electricity, physical). So that > > protection of fear is really irrelevant. > > 5-6 attacktypes and 8 slots to do it with. Slots that you often also > need for things like SP_REGEN, regeneration, Pow bonus, Str bonus, > Dex bonus, Con bonus.... Thats right. Wat i want is not the way to make you permanent immune to something or without some effort. With the caps, you can give more items protection which have some use, because the fits in the caps/armor system. The caps system is real nothing more than a slightly more complex armor system we have. > > I mostly agree that the protection spells are useless. > However, I am gettin > > little fearful of making this protection code too complicated. > > They're useless because every protection is 50%. > > > > Real caps are shown to the player too and are simple to include. > > > If you have a armor of fire res +30% and a amulet of 30% you > should not get > > > automatically > > > 60% fire res. Every point you got nearer the cap, you need > more points to > > > get closer. > > > If yur caps 60, you got 40 points for example. If your caps > are 70, you got > > > 44% from both or so. > > > And if you caps are 20, you got 19. > > > > The armor code sort of does this. If you have two 30% items, > you armor is 5 > >1. > > Everyone who's spoken of partial protections has said, "use the armor > way of adding, not straight addition." This alone, along with defaults > of 30% protection for "protected" items will balance things nicely, > I think. And it is simple. I believe that we should try it first > before going with some complex system. > > > One question is where do these caps come from? > > > > I would think that one way this could be done is instead of > using the 100 va > > in the armor code, you use this cap. I just tried this out on > my demo progra > > assuming a cap of 60, and with 1 item, your protection is 30, > two it is 45, > > three is 52, 56,58, 59, 59. > > I see NO benefit at all to partial protections if we set a "cap" at 60. > 60 ~= 50. We do lots of work for an insignificant change. I think > players SHOULD be able to arrange for 90% protection.... *if* they trade > off lots of other stuff for it. Which they will have to do if we > use the armor adding system. > > > At least from the fix_player perspective, to implement this > would require tw > > arrays within the function, and in one we fill in the values > are limited by t > > cap, and the other has the spell effects. Then afterwards, we > apply the spel > > effects to the item (capped) value, for a higher resistance > that can go beyon > > the cap. Is that what you are describing? > > I would make life easy for us and just make protection spells work like > the armor spell. It seems to stop working at about 75. > > > > Also, all items automatically fits in the system, no one can > give you to > > > much. If they do, they get caped. > > I don't think we should "fix" abusive items in the code. Should we have > a "cap" on damage dealt? How about weapon speed? How about total stats > given? How about number of distinct attack types? > > The idea of hard coded "caps" disgusts me. Fix abusive items in the > maps. > > > > I think the real solution is to prevent the super items from > getting created > > the first place. If map designers put unbalancing items in the > maps, I reall > > don't want to try to have the code prevent that. Simply put, > that map should > > fixed. And some of that is that if a map maker really wants to > put unbalanci > > Hear hear!! > > > Now it may be worth while to set strict guidelines on what > acceptable items > > (for example, can not provide more than 120% total protection, > and no one > > protection can be more than 30%). > > I'm not in favor of "strict" guidelines. A player maxes out at about 500 > hp or something like that. Monsters can get 32,000, and are often > immune to all spells, etc. A player might *need* 90% protection > in something > AND a powerful weapon to defeat a monster like that. > > High order protections and great items are the proper reward for > completing > hard quests. Items are only "abusive" in their context. We can > (and should) > fix them case by case--in the maps. > > PeterM > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From echter at informatik.uni-rostock.de Wed Nov 15 03:44:48 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] compile error with current CVS-server! In-Reply-To: <000301c04e9f$5bddc100$7b9ee23e@kyle>; from andi.vogl@gmx.net on Wed, Nov 15, 2000 at 01:59:39AM +0100 References: <000301c04e9f$5bddc100$7b9ee23e@kyle> Message-ID: <20001115104448.A29151@hokkaido.informatik.uni-rostock.de> On Wed, Nov 15, 2000 at 01:59:39AM +0100, Andreas Vogl wrote: > metaserver.c:109: `MSG_DONTWAIT' undeclared (first use in this function) MSG_DONTWAIT is not portable. O_NONBLOCK must be set on the socket instead. -- Jan From erik at subnett.no Wed Nov 15 04:47:24 2000 From: erik at subnett.no (Erik Gjertsen) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] new savebed feature on CVS In-Reply-To: <000101c04e99$0e3cc3c0$7b9ee23e@kyle> Message-ID: On Wed, 15 Nov 2000, Andreas Vogl wrote: > I have put the new savbed-respawn feature on CVS now. > So players will re-awake on the last-applied savebed > after death in future. Would any map-gurus volunteer to update those cities with "closed" perm appartments as well? Being able to store your stuff in another city than Scorn would be a great feature. ---------------------------------------------e-r-i-k--g-j-e-r-t-s-e-n------ --- PGP http://erik.subnett.no/pgp.txt --- --- Why PGP? http://www.futt.org/whoami_html --- --------------------------------------------------------------------------- From echter at informatik.uni-rostock.de Wed Nov 15 04:40:38 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] PR (Partial resistance) In-Reply-To: ; from dnh@hawthorn.csse.monash.edu.au on Sun, Nov 12, 2000 at 08:29:47PM +1100 References: Message-ID: <20001115114038.B29151@hokkaido.informatik.uni-rostock.de> On Sun, Nov 12, 2000 at 08:29:47PM +1100, dnh@hawthorn.csse.monash.edu.au wrote: > 1) Implement a working addative resistances system, much like the current > armour is for physical, these resistance systems would do the same just be > based on another "armour" type value I favour the following scheme: Each item has a protection value per attacktype. Typical values should be Dragon mail 10 Fire shield 8 Simple ring 4 (Ring prot: fire, vuln: cold) Simple amulet 7 (Amulet prot: fire, vuln: cold) Ring of Fire 6 Crown of Fire 5 Ring of Elements 4 (but for several attacktypes) Vulnerabilites: Simple ring -5 Simple amulet -9 Spells: Protection from fire up to 20 - 30, depending on level (e.g. 10 for wisdom level 25) Immunities (value >= 50): Potion of fire resistance 100 The effective protection is calculated this way: sum_prot = sum of all values < 50 sum_immu = sum of all values >= 50 limited_sum_prot = MIN (50, sum_prot) tmp_sum = limited_sum_prot + sum_immu sum = MAX(-50, MIN (250, tmp_sum)) table_index = 50 + sum protection = table[table_index] limited_sum_prot = 50: maximum protection equals a "small" immunity sum = 250: two normal immunities (e.g. potion + holy posession) and best protection, or three immunities sum -50: highest vulnerability * Protections are limited. * Spells are still useful. * Different strengths of protections (and even immunites) possible. * Easy to calculate. * Easy to balance with the table. * Uses little space (one unsigned char per protection value). * Optional: Add magic or magic/2 to the item's base protection value (e.g. body armour with high protection usually has value 9, but Dragon mail +3 gives 9+3/2=10.5, if enchanted to +10 it gives 9+10/2=14). But this is a bit difficult to get right. For example, gauntlets +10 with some protection would give something like 3+10/2=8 which is very much for gauntlets. Maybe a formula like effective_value = base_value * magic_modifier_table[magic_value] would be better. * Using spells or potions multiple times should probably be forbidden, like many poison spells won't make the poison stronger, but will only make it last longer. But maybe it's already implemented this way. -- Jan From dnh at hawthorn.csse.monash.edu.au Wed Nov 15 06:25:10 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] Gods, again Message-ID: Okay, I have completed a table of all changes to the current gods. The table shows all the old, unchanged and new features of each god. http://mids.student.utwente.nl/~dnh/crossfire_pantheon.html That is where it is at currently. Peterm has once again been busy and has finished the immolation spell (also creeping frost) and I must say it is looking very cool =) Sorry for the short message, but most of what I want to say is in the table, so go read it already ;). Any changes you want, please mail me and CC it to the list (currently I am getting VERY late messages from crossfire-devel so if you want prompt reply send one straight to me). I would love to hear of ANY ideas you have as well as changes. dnh ps (I agree with Peterm about MichToens email on PR) From dnh at hawthorn.csse.monash.edu.au Wed Nov 15 07:11:36 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] Pr (especially Jan) Message-ID: Umm, I am noticing a common trend that people are worried players are going to be easily able to get high resistances and be walking gods, thus some suggestion have "caps" in them. Firstly, caps in general are bad because it limits the expandability of the game. Currently Issues have appeared due to caps at 30 on all stats, we don't want further caps. If a combination of items exists that is too powerful, we change the items, not the player. Secondly, there seem to be a big fear of goin above 75-80% resistance, I think this is unjustified. I don't know if you realise how much damage high level monsters do, but with my lag, if I walk into a room without full immunities and there are two dragons, with protection from fire, I don't even have time to hit run or heal. I fear even at 90% or greater, there are monsters out there that will cut players to shreads in a few moments, let alone when a player gets surrounded. Not only this, but if we do go for the armour style PR, getting to 90% will be a bitch already, and there are plenty of vuns that will make sure some gods etc cannot reach immunity. (100%- 10% etc.) All I have to say is I am against anything that limits what a player can aim for. Ohh no, a wizard can get to 90% fire resistance with these items etc. etc., all we do is change the items.. they are all going to need changing around anyway... dnh From echter at informatik.uni-rostock.de Wed Nov 15 08:04:01 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:14 2005 Subject: [CF-Devel] Pr (especially Jan) In-Reply-To: ; from dnh@hawthorn.csse.monash.edu.au on Thu, Nov 16, 2000 at 12:11:36AM +1100 References: Message-ID: <20001115150401.A5388@hokkaido.informatik.uni-rostock.de> On Thu, Nov 16, 2000 at 12:11:36AM +1100, dnh@hawthorn.csse.monash.edu.au wrote: > Firstly, caps in general are bad because it limits the expandability of > the game. Currently Issues have appeared due to caps at 30 on all stats, Some limits are needed. Otherwise you're permanently making both players and monsters stronger. > Secondly, there seem to be a big fear of goin above 75-80% resistance, I I'm not sure what this has to do with my suggestion. The protection values I suggested are abstract values that have no direct relation to how much they actually protect. This relation is in a speperate table. This table can contain a value of 75% for a protection value of 50, or a value of 90%. You can even change the values in the table later if they turned out to be too low (or too high) without changing any items. -- Jan From echter at informatik.uni-rostock.de Wed Nov 15 08:24:39 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] Gods, again In-Reply-To: ; from dnh@hawthorn.csse.monash.edu.au on Wed, Nov 15, 2000 at 11:25:10PM +1100 References: Message-ID: <20001115152439.A6245@hokkaido.informatik.uni-rostock.de> On Wed, Nov 15, 2000 at 11:25:10PM +1100, dnh@hawthorn.csse.monash.edu.au wrote: > Okay, I have completed a table of all changes to the current gods. The > table shows all the old, unchanged and new features of each god. > > http://mids.student.utwente.nl/~dnh/crossfire_pantheon.html The following message is about the old table, but the new table isn't all that different. On Sun, Nov 12, 2000 at 09:25:35PM +1100, dnh@hawthorn.csse.monash.edu.au wrote: > some ideas which will either help or hinder some gods. I invite everyone > to view it at http://mids.student.utwente.nl/~dnh/crossfire_gods.html and > send any opinions to the list. Please don't hold back, tell me any The list doesn't mention all special prayers that are given by the gods. For example, many gods currently teach the cause critical/many wounds spells, but these spells are not mentioned anywhere in this list. Does this mean that they should still teach these spells? Is 'max weapon modifications' equivalent to 'Weapons +10'? If so, too many gods give maximum item enchantments. 'Offensive' gods should give medium weapon/bow enchantments, 'defensive' gods medium armour enchantments. Medium weapon enchantment is currently weapon +7. High enchantments (currently +11) should be reserved for one or at most two gods. I'm not going into detail which armour types might be improved by a god. "Armour medium" could mean that Mostrai enchants all armour types a bit, that Lythander gives speed bonus to boots and enchants body armour, or that Valriel highly enchants all shields. > Some people may not like seeing their favorite God, mostrai in > particullar, getting the short end of the stick, but that is quite simply > because mostrai has been overpowered. I too used to play mostrai, but Mostrai was a simple god with no disadvantages and few advantages. I think it should stay a simple god. If the goblins are no longer Mostrai's enemies, followers of Mostrai will have a hard time getting to medium wisdom levels. (Beware, an incomplete list follows, it doesn't contain all advantages and disadvantages of the gods.) Gnarg: Simple offensive god. Even though it has an enemy race, its attack power isn't focused on this race. Weapons medium, bows low, armour low. The poison spell is already very powerful (cause critical wounds easily kills dragons). Don't make it even more powerful. I like the idea of a poisonous fog. No hp regen +2. Gnarg hurts and doesn't heal. I'd prefer Goblin boots (Prot: draining, ac +1, armour 8, sp regen -1) over a helmet. Vuln. fire would be a great disadvantage and fear just suits better. Goblins aren't very smart and are easily frightened. Lythander: Defensive god, but master of bows. Weapons low, bows high, armour medium. I think Lythander could teach the 'defense' spell. New prayer to enchant arrows. You put some arrows and some body parts of goblins or trolls on an altar of Lythander and invoke this prayer. Lythander will take the sacrifice and add attacktype: paralyze, protected: fire, cold, electricity to the arrows. No "conflict" spell. This seems to be impossible to balance. Immunity: confusion, paralyze. Boots (speed +2). Bolts of adamantite (with 100% chance of breaking). Mostrai: Simplest god, neither offensive or defensive, no disadvantages, and only small advantages except the enemy race which is Mostrai's most interesting property. Weapons high, bows low, armour medium. No interesting spells, only wall of thorns. No holy possession, at least no holy possession with immunities. No vulnerabilities. The avatar of Mostrai should make less damage, but still have the same number of hit points. Removing goblins from Mostrai's enemies will make it more difficult for followers of Mostrai to advance in wisdom levels. Maybe helmet of Mostrai (ac +2, magic +2, high armour value) to help low level followers because dwarfs are always hit on the head... Gaea: Defensive god. No weapon improvements, bows low, armour medium. Daylight, insect plague, wall of thorns. New prayer "earth shield" which improves both armour value and armour class. New prayer "elemental shield" which gives protections against fire, cold and electricity. I like the "sanctuary" spell, but I wouldn't implement this face of death like spell. Normal potions of healing would be ok. Ruggilli: Offensive god, even if followers can't use weapons. This should be the perfect god for Quetzalcoatls and Fireborns. This god combines extreme advantages with extreme disadvantages. Weapons low, bows medium or high, no armour enchantments. Holy rage is a nice spell. Immolation looks interesting but I don't know how difficult it is to get it balanced. Should get the simple wounding spells (no disease spells). Retributive strike as the most powerful attack. I wouldn't change the attacktypes and weapons are only of minor importance. The followers of Ruggilli wreck havoc using prayers. Bolts with attacktype: weaponmagic to compensate the disadvantage of Fireborns that they can't use weapons. Sometimes the only way to damage an enemy is using bows. Sorig: Rather offensive god, but with some defensive capabilities, master of electricity. Weapons medium, bows medium, armour low. There aren't that many electricity prayers right now. I wouldn't like forked lightning if it's another cone spell. I'd prefer this "holy lightning" (finger of death like spell), and a "thunderstorm" spell that casts various non-magical electricity spells in the vicinity of the caster for an extended period of time. Simple wounding spells. New "headwind" prayer. Reflects spells and missiles. A new prayer to start flying, and another one to stop flying. Powerful avatar. Devourers: Offensive god, enemy of all living things. Weapons medium, bows low, armour low or no armour enchantments. All disease and death spells, simple wounding spells. I don't like weapon attacks that heal the attacker in any way, because differing weapon speed, class and damage will make it almost impossible to balance this. I would prefer a prayer that drains the victim's life and heals the caster, either once or for an extended period of time like poison. Nightfall spell. I can't say much about Creeping Frost because I don't know this spell, but Devourers already gives many powerful spells. Attacktype cold would fit. I wouldn't add fear attacktype because Devourers already gives many attacktypes. Leave fear for other gods. BTW, I don't like weapons with drain attacktype because I got much less experience when fighting with these weapons. Gorokh: Offensive god, focused a bit on its enemy race. Weapons medium, bows medium, armour low. Simple wounding spells. New "gates of hell" spell. You point at an enemy, and the gates of hell open behind him for a moment. Effect is a large fireball, like retributive strike, but with fire attack. New spells that summon a daemon which enters the caster's body and makes him a ferocious fighter for quite a while. It could be two spells: One for a daemon with high offensive capabilities, another spell for a daemon with medium offensive and medium defensive capabilities. Substituting attacktype slow for attacktype fear. I hate attacktype confusion because it makes your opponent much stronger in hand-to-hand combats: He makes a step aside, you miss him, you pass by, and he cast some spells at you (or in any direction, firebullets can damage you indirectly even if they hit a wall, and cone spells cover a large angel). Thus, confused monsters are often more dangerous than monsters with any regular movement type. Immunities (holy possession): Slow, paralyze, confusion, fear. That's a lot, but there are also many items with these immunities, and Gorokh likes hand-to-hand combats, where these effects are rather nasty compared to casting spells at the enemy from a safe distance. Valriel: Defensive god, except for the enemy race. Weapons low, bows low, armour medium. Defense spell. All resurrection spells. Some kind of regeneration spell that doesn't consume food. New "holy shield" spell that decreases ac a lot and also reflects missiles. Attacktype fear is one of the more powerful attacktypes because a frightened enemy will run away and has little time to strike back. I wouldn't add other attacktypes, but blinding is reasonable. It fits the picture of a god that prevents the monsters from attacking. Permanent glow is often nasty, but a prayer that makes you glow would be ok. Immunity confusion, fear, blinding. -- Jan From jbontje at suespammers.org Wed Nov 15 08:40:57 2000 From: jbontje at suespammers.org (Joris Bontje) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] Gods, again In-Reply-To: <20001115152439.A6245@hokkaido.informatik.uni-rostock.de> References: ; from dnh@hawthorn.csse.monash.edu.au on Wed, Nov 15, 2000 at 11:25:10PM +1100 Message-ID: <3A12AE89.19556.1AE5C89@localhost> My server is going down for a day... changing OS You can find DNH's god stuff on http://www.sgapc.vuurwerk.nl/dnh/crossfire_pantheon.html Sorry for this, I am hoping to be back soon, Joris Bontje "MiDS" --- The suespammers.org mail server is located in California; do not send unsolicited bulk e-mail or unsolicited commercial e-mail to my suespammers.org address From mtx93 at tzi.de Wed Nov 15 11:53:00 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] Pr (especially Jan) In-Reply-To: Message-ID: > Umm, I am noticing a common trend that people are worried players are > going to be easily able to get high resistances and be walking gods, thus > some suggestion have "caps" in them. > > Firstly, caps in general are bad because it limits the expandability of > the game. Currently Issues have appeared due to caps at 30 on all stats, > we don't want further caps. If a combination of items exists that is too > powerful, we change the items, not the player. Hm, this thread goes in the false direction. I programmed and played with caps and there is nothing about to worry. If they dont fit, you simply change them. They are the best way to balance things because they work like a scaling value. Simply remember a light button, which you can turn and make the light brighter or not. A cap is the same. They limit nothing. If it not bright enough, you simply turn on the control and make it brighter. Thats the prinzip. Thats why i implement in most games/programs i do a real value, which scales the damage. If it don't fit after a change i set the scale value to 0.9 or so, and its maybe better. Caps are more complex but work in the game play in the same way. I dont know what this talking about 80-90% res as "is nearly enough to get alive" should be. At the moment, you walk in the game with simply res. and you don't get killed all times. It works. We remove in the past most items with total immunities, there is only the lava slasher left when i remember right (the dragon mail is dropped by AV). And yes, i fear to much immunities, because i walk some times with dragon mail and lava slasher and the game get fast to easy. So i know where i talking about. And i don't want get a value of xx or yy. Simpy set the caps, test, if not enough change it slightly and test again. Then we have a perfect line. 30% or 90%, if it works, ok. > Secondly, there seem to be a big fear of goin above 75-80% resistance, I > think this is unjustified. I don't know if you realise how much damage > high level monsters do, but with my lag, if I walk into a room without > full immunities and there are two dragons, with protection from fire, I > don't even have time to hit run or heal. I fear even at 90% or greater, > there are monsters out there that will cut players to shreads in a few > moments, let alone when a player gets surrounded. Not only this, but if we > do go for the armour style PR, getting to 90% will be a bitch already, and > there are plenty of vuns that will make sure some gods etc cannot reach > immunity. (100%- 10% etc.) Well, and thats what we don't want to change: you should not run into rooms where maybe dragon are without immunity and survive longer than a second. If you can survive this, you can kill them too. Dragons are the biggest common monsters in game. They should be fearsom at all times. In my personal view, the blue dragons are far not powerful enough. With reflection, you can stand in the fireline of the beasts without taking damage. And you can kill them easily with sorig avatars from the distance. At level 30, with an enchanted shootingstar and str 30, i kill a red dragon in hand to hand combat with simpy res. He dont drain me fast enough with his fire. If he do, i simply give a healing spell or restoration in the fight and then he is really gone. So, if you know how, they are easy. But i love to kill them with game play. It is always fun to run in, see your hp drop like hell, cast the earth wall and the healing spell and run out. Drop the bombs then and again... That how it should be. It is the trick to look in the room first, glance and ready to run like hell. > All I have to say is I am against anything that limits what a player can > aim for. Ohh no, a wizard can get to 90% fire resistance with these items > etc. etc., all we do is change the items.. they are all going to need > changing around anyway... Also, 90% of all maps are simply playable with the "big 3": fire, cold, elec. If you don't get enough damage from this, the game is broken. All other damage is "not really common" at the moment or do not enough damage (except confusion/paralyze and the other "non damage" effects). MichToen From mtx93 at tzi.de Wed Nov 15 12:30:32 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] lag Message-ID: Hi One thing dnh says, is very true. With some lag (it must not be the big lag), you got problems with casting monsters. It seems, that they can target you easier (because you dont move so fast/react in the same second) and the cone spells like fire/cold but also lightning do much more damage. I remember that i play a server in usa and the skulls in the mansion in scorn kills me so fast that i even cant run away. So, dnh's is right when he feels that the res can be higher for good play, the effect on him with lag gives him the feeling. The problem is, that for players with less lag the prot. value is ok. Well, calculating lag effects are a major task in real time games. Most games like quake&Co. have the same problem in moving actions. The word for it is "Client Prediction". It is the technique to "guess" and/or calculate the moving action of players with different lags to make them looking and playing as all with the same lag (and make it looking as there is no lag). We can simply implement the in cf. Not in the movement of course, but in the damage. To calculate the lag to the client is easy. We don't need a real exact value. What we simply need is a scaling factor for the damage/protection, which slightly change it depending on the lag of the connected client. This sounds much more strange at it is. The "you got more damage with lag effect" is real and this is an easy methode to prefent it. MichToen From peterm at tesla.EECS.Berkeley.EDU Wed Nov 15 20:44:47 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] General notes on the latest gods In-Reply-To: Your message of "Wed, 15 Nov 2000 15:40:57 +0100." <3A12AE89.19556.1AE5C89@localhost> Message-ID: <200011160244.SAA16530@tesla.EECS.Berkeley.EDU> I'd like to see EVERY god have something special and cool given to it, so that players would be interested in trying a religion just to find out about such things if nothing else. Also: on Conflict for Lythander: Conflict is one of the coolest things ever, as anyone who has ever played nethack will tell you. I understand the argument against it: what if things got too easy because the monsters would fight and kill each other without the player having to do anything? Well, I argue that monsters have a much harder time damaging each other than they have harming a player. Monsters have way more hitpoints, they're typically immune to their own attack spells, and their physical damage potential is scaled to the player and not to their own hp level. Think of the glee a player will feel as the monsters all turn on each other and he fires arrows into the fray from a safe distance. It can be balanced by limiting the range and duration as well. In fact, it's not so much more powerful than the spell "mass confusion". I would also like to see special arrows given to Lythander followers. Regen +2 for Gnarg: Nooooo. I agree with Jan. No healing for this god, who is a poisoner and corrupter, not a healer. I also concur with his preference for boots and not a helm, though not on the sp regen -1 part of the boots. If sp regen -1, put it in the player. I would also like to see vuln fear. I think smallpox is a good enough special prayer for Gnarg. Mostrai: I disagree with Wall of Thorns.... That one seems like a Gaea spell if ever there was one How about a prayer of sharpening, which adds to the players wc temporarily? That won't help gain Wis experience, it's true, but the holy word they got is a very good one. Gaea: What could be more defensive than converting your enemies to becoming peaceful? It's no worse than the Devourer's Face of Death spell, and the Devourers don't even have to give up weapons. Furthermore, the Devourer's spell gets you the items, while it is rather difficult to get intact items out of a live but peaceful creature, if you cannot even hit it. The Spell of Peace is just *so* appropriate, and gives a way for Gaeans to have a general "attack". On the flip side, why is Gaea not denied Wounding and Death? The proposed Sanctuary spell would stop ALL "magical" attacks: all cones, all bullets, all bolts, whether they had AT_MAGIC or not. This is a side effect of using countermagic. Ruggilli: What does "Enemy God: All" mean? A generally acting holy word? I think NOT. No generally acting holy word. If you're going to put "Immolation" under a column, it belongs under "attack types" and not spells. The weapon class and dam of the Ruggilli players "immolation" should be scaled according to his Wis level every time he comes to the altar. Note that the dam is negative: this tells the disease code to take a fraction of the victims HP rather than a set number. I think immmolation is special and cool enough. Sorig: Divine shock and Forked lightning are pretty cool spells. I agree about removing wounding. As compensation for removing Wounding, I propose removing the "Denied protection". A proposal which didn't make it onto dnh's page is this: the "windstorm" spell, which would do minor physical damage in a cone, but exert a force on everything in the cone to move away from the caster. The force and the damage would start VERY low but increase with level. Devourers: Creeping frost is not needed. We can give it to some undead monster for it to use on players instead. I don't think D's should get immune/protected fear either. The Face of Death spell is sufficiently nice. Gorokh Flaming aura is cool, but perhaps insufficiently attractive. How about a Vitriol prayer which would spew agonizing, burning acid onto monsters? Spreads in a cone, but drops puddles of acid on the ground which keep smoking for a little while? This would be rather unique, as it would be the ONLY player-acid attack in the game except for Color Spray. I disagree with Jan's idea on having a large fireball. I would prefer to reserve most fire, cold, electricity "magical" attacks to mages. Priests are supposed to be more spritual. Valriel Ah, valriel, how shall he advance? He is not TOO bad, because the holy word spell works on both undead AND demons. The holy possession spell is only moderatly useful. the blinding attack though, THAT is useful. I agree with Jan about a regeneration spell for Valriel. I don't understand why Jan thinks a permanent glow would be nasty? PeterM From mwedel at scruz.net Thu Nov 16 00:10:43 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] compile error with current CVS-server! References: <000301c04e9f$5bddc100$7b9ee23e@kyle> <20001115104448.A29151@hokkaido.informatik.uni-rostock.de> Message-ID: <3A137A63.87860C2B@scruz.net> Jan Echternach wrote: > > On Wed, Nov 15, 2000 at 01:59:39AM +0100, Andreas Vogl wrote: > > metaserver.c:109: `MSG_DONTWAIT' undeclared (first use in this function) > > MSG_DONTWAIT is not portable. O_NONBLOCK must be set on the socket > instead. When using sendto, you are not required to actually have a socket connected. So using O_NONBLOCK may not do anything. I'll just add a little line in which is something like: #ifndef MSG_DONTWAIT #define MSG_DONTWAIT 0 #endif which should at least fix the compile problem. From mwedel at scruz.net Thu Nov 16 01:42:23 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:15 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) References: <200011150705.XAA05045@tesla.EECS.Berkeley.EDU> Message-ID: <3A138FDF.1574052A@scruz.net> Peter Mardahl wrote: > > > Andreas Vogl wrote: > > > > > Thats the point why i want potions: I don't want a player which have armor, > > > rings and > > > amulets on, giving him 99% prot in fire and cold and all the stuff. Remembe > >r > > > a char can wear&wield > > > at the moment more than 13 items at the same time (yeah, count it!). You > > > will come in some problems > > > to balance it without a cap. > > 1 2 3 4 5 6 7 8 9 > Armor shield cloak helmet ring1 ring2 amulet glove girdle > > 10 11 12 13 14 15 > boots weapon bow (talisman) (holy symbol) (lockpicks) > > Of these, very rarely do glove, girdle, boots, bow, talisman, holy symbol, > lockpicks grant any protection at all, and the last three ditch you > whenever you switch skills. And there has been some creeping featurism into items. At one time, girdles, gloves, and boots were only available in artifact forms (basically). So having boots do anything beyond the two artifact forms (levitation and speed I think) did not happen, so you had little choice in those. gloves and girdles were also incredibly rare, so once again, there was limited choice. Cloaks did not exist at one point. And the artifact rings added protections to many rings (and better protections) that did not really exist before. At one time, only the 'strange ring' had immunity to drain, and that is all it did. There is the ring of life, which is actually more common and a better item (As it also gives hp regen). I guess my real point to all of this is that constraints on the items needs to be observed. If you also wanted to put more restrictions on it, many items should not be usable simultaneously (at least in terms of protections and what not). You certainly can't be firing a bow while holding a sword and shield (or lockpics or holy symbols for that matter). > > So that leaves 8 items which commonly provide protection. Protections > will compete with things like STATS, DAMAGE, PATH_ATTUNED for these 8 slots > as well. > > I do not see a problem here. The player must make tradeoffs. Agree. one issue may be that for some items, the flavors they come in are very limited. There are not a lot of boots out there, so you probably don't make the tradeoff on that (same for girdles for example). I actually wouldn't mind going back to the old days when basically the only boots out there were the artifact boots. In many cases, get the armor benefits of boots + armor probably doesn't make sense, as the armor already includes boots (or gauntlets for that matter). I could see the point of the artifact gloves & gauntlets being that you are replacing the ones that came with your suit of armor with better versions - but those better versions did not give AC for armor value - I mentioned the boots above, and the gloves were things like strength and dex. I've said it before and I'll say it again - right now, it is very easy to get a very negative AC with all the peripheral items out there. But that is a bit off topic. From echter at informatik.uni-rostock.de Thu Nov 16 03:45:35 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] compile error with current CVS-server! In-Reply-To: <3A137A63.87860C2B@scruz.net>; from mwedel@scruz.net on Wed, Nov 15, 2000 at 10:10:43PM -0800 References: <000301c04e9f$5bddc100$7b9ee23e@kyle> <20001115104448.A29151@hokkaido.informatik.uni-rostock.de> <3A137A63.87860C2B@scruz.net> Message-ID: <20001116104535.A14279@hokkaido.informatik.uni-rostock.de> On Wed, Nov 15, 2000 at 10:10:43PM -0800, Mark Wedel wrote: > When using sendto, you are not required to actually have a socket connected. > So using O_NONBLOCK may not do anything. O_NONBLOCK is a socket property, not a connection property. It is supposed to work, at least according to SUSv2. -- Jan From mwedel at scruz.net Thu Nov 16 00:12:04 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] new savebed feature on CVS References: Message-ID: <3A137AB4.14836F10@scruz.net> Erik Gjertsen wrote: > > On Wed, 15 Nov 2000, Andreas Vogl wrote: > > > I have put the new savbed-respawn feature on CVS now. > > So players will re-awake on the last-applied savebed > > after death in future. > > Would any map-gurus volunteer to update those cities with "closed" perm > appartments as well? Being able to store your stuff in another city than > Scorn would be a great feature. I would guess that should not be hard to do. But for the record, all these apartments should be unique. Ie, having a permanent apartment in navar city won't let you get your stuff in scorn and vice versa. From mwedel at scruz.net Thu Nov 16 00:53:02 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] lag References: Message-ID: <3A13844E.A646992F@scruz.net> Michael Toennies wrote: > > The word for it is "Client Prediction". It is the technique to "guess" > and/or calculate the moving > action of players with different lags to make them looking and playing as > all with the same lag > (and make it looking as there is no lag). > > We can simply implement the in cf. Not in the movement of course, but in the > damage. > To calculate the lag to the client is easy. We don't need a real exact > value. > Actually, this gets fairly complicated. For the server to determine lag, it must have client cooperation. Doing that is not hard. What is hard or impossible to to know that the client is telling the truth, and how to deal with varying lag. The changing lag of the connection is not really hard to determine, but the fact that it does change mean that you need to constantly keep checking the lag. The truthfulness of the client has never been assumed, and determining lag would require truthfulness (Otherwise, if the server basically gives a bonus (reduced damage), you can bet someone will come up with a hacked client that reports higher lag numbers even if the lag isn't bad - player does better, and everyone else seeing this feel cheated.) The fact the client is open source makes it very easy to make a non truthful client. From the getgo, it was always assumed that the client would not be trustworthy (server keeps all its data and doesn't care what the client thinks is going on). I'd really hate to change that. From echter at informatik.uni-rostock.de Thu Nov 16 12:29:44 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] General notes on the latest gods In-Reply-To: <200011160244.SAA16530@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Wed, Nov 15, 2000 at 06:44:47PM -0800 References: <3A12AE89.19556.1AE5C89@localhost> <200011160244.SAA16530@tesla.EECS.Berkeley.EDU> Message-ID: <20001116192944.A27349@hokkaido.informatik.uni-rostock.de> On Wed, Nov 15, 2000 at 06:44:47PM -0800, Peter Mardahl wrote: > on Conflict for Lythander: Conflict is one of the coolest things > ever, as anyone who has ever played nethack will tell you. I understand > the argument against it: what if things got too easy because the monsters > would fight and kill each other without the player having to do anything? You're right. I hadn't considered that monsters already hit each other very often (even if not confused), usually with spells. On the other hand, conflict won't probably be as cool as in nethack because of this. Another unique prayer that seems suitable for Lythander could be a "glue" spell that casts a small cone consisting of glue that stays on the map for a while. Gaea might have a similar spell that creates a spider web, maybe in form of a FBULLET (fireball etc.) spell. > Mostrai: I disagree with Wall of Thorns.... That one seems like > a Gaea spell if ever there was one > > How about a prayer of sharpening, which adds to the players wc > temporarily? That won't help gain Wis experience, it's true, but > the holy word they got is a very good one. I'd prefer a spell that actually creates something, e.g. "[create] holy axe" which creates a very good axe (probably weaponmagic attack type) that dissolves after a while. Different prayers for different weapons are possible, e.g. one prayer for a weapon with much damage and low weapon class, and another prayer for a weapon with AC bonus, low weapon class but less damage. > Gaea: What could be more defensive than converting your enemies > to becoming peaceful? It's no worse than the Devourer's Face of > Death spell, and the Devourers don't even have to give up weapons. > Furthermore, the Devourer's spell gets you the items, while it is > rather difficult to get intact items out of a live but peaceful creature, > if you cannot even hit it. The Spell of Peace is just *so* appropriate, > and gives a way for Gaeans to have a general "attack". First of all, Gaeans don't want to attack. ;-) I remember killing a titan with create fire wall (create several fire walls along a wall, then trick the titan into running into them). It was rather easy and I didn't have to fight the titan directly. Indeed, it was the titan's greed for my blood which killed it. This should be the way how Gaeans fight. If wall of thorns isn't strong enough, make it stronger. Or add other passive attack spells. A very powerful spell could be "create wood" which creates trees at all tiles in the area of effect that are not blocked, and these trees attack the caster's enemies until they get destroyed or dissolve. An interesting spell could be a "sedative" prayer that lowers the victim's damage and increases its weapon class. Even though it's kind of interesting if opposing gods have similar high level prayers, I wouldn't like Gaea to have a prayer that's so similar to face of death. Gaea wiping out half of a map full of monsters would just look wrong, since everybody is used to the idea that hostile monsters only disappear when killed. Furthermore, one problem with "face of death" is that it kills immediately. I think changing it to a prayer that simply does damage depending on the level difference will be needed some day to get it balanced better. Such change wouldn't be possible with the Spell of Peace. > Ruggilli: What does "Enemy God: All" mean? A generally acting > holy word? I think NOT. No generally acting holy word. > > If > you're going to put "Immolation" under a column, it belongs under > "attack types" and not spells. The weapon class and dam of I'm wondering if fireborns can inflict immolation on others using their flame touch attack, because it doesn't do any physical damage. > Sorig: Divine shock and Forked lightning are pretty cool spells. > I agree about removing wounding. As compensation for removing Wounding, > I propose removing the "Denied protection". I second this. I like Sorig being a god with some defensive capabilities. > A proposal which didn't make it onto dnh's page is this: > the "windstorm" spell, which would do minor physical damage in a cone, > but exert a force on everything in the cone to move away from the caster. > The force and the damage would start VERY low but increase with level. This is an interesting spell. > Gorokh > I disagree with Jan's idea on having a large fireball. I would prefer > to reserve most fire, cold, electricity "magical" attacks to mages. > Priests are supposed to be more spritual. The "gates of hell" prayer wouldn't do the damage directly. It opens a portal for some original hell fire to get on the map (which might have pure AT_FIRE attack type). The effect can be made more interesting: A hellfire ball explodes at the target location, some map tiles will keep burning for a while, and if the caster has bad luck, a demon or two are sucked through the portal and will attack the caster because they didn't like this. However, an acid spell is also very reasonable and interesting. > Valriel > > Ah, valriel, how shall he advance? He is not TOO bad, because > the holy word spell works on both undead AND demons. The holy > possession spell is only moderatly useful. the blinding attack though, > THAT is useful. I agree with Jan about a regeneration spell for > Valriel. I don't understand why Jan thinks a permanent glow would > be nasty? On dark maps, makes you visible to monsters without can_see_in_dark. -- Jan From mwedel at scruz.net Thu Nov 16 01:27:58 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] Pr (especially Jan) References: Message-ID: <3A138C7E.54C648C3@scruz.net> This is a more general note and not a direct reply to anything. 1) The simple approach is usually the best first approach. Its faster to do, has less bugs (less code = less bugs), and can be extended later. 2) We should keep in mind inexperience players. I have seen lots of various suggestions which seems to be fairly non intuitive. Now granted, have two 30% protections will not equal 60%, but if two 30% protections for fire get you 46% and two 30% protections get you 53% due to limits or other factors, I can see this starting to get confusing for new players. I also think that balance and usuablity might be interesting. If for example the most protection you can get from items is 50%, that won't be too hard to get (if we presume as has been suggested that items with normal protections get converted to 30%, that means two such items do so). The end result there is that people will just wear two items of protection for each attacktype. OTOH, if you use the armor conversion and have no practical limit, players may now want to use 4 items of 30% protection to get that 75% protection limit. So players now have to choose what they want to go for, and I find that more preferable. From mwedel at scruz.net Thu Nov 16 01:31:51 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:15 2005 Subject: [CF-Devel] Acid References: Message-ID: <3A138D67.5E215DE5@scruz.net> dnh@hawthorn.csse.monash.edu.au wrote: > > Okay 50% or greater gives items protection, 100% gives player protection > (Protection is actually immunity, its just that when a player or its items > are protected no acid can harm them) I was also thinking that the effects of acid should be extended. For example, instead of just adding a negative value to the magic, it could also reduce the effectiveness of other abilities (armour and protection values for example). After all, if there is less of the item, there is less magic or other protection that the item gives. But to rephrase the above: If an item has 50% protection or higher to acid, it is immune to acids corrosion effects. If a player has 100% protection, all items he has are immune to the acids corrisive effects. That sounds fine, but under the revised protection system, 100% protection seems that it will be very unlikely if not impossible. So is the goal to make it next to impossible to protect your items? From dnh at hawthorn.csse.monash.edu.au Thu Nov 16 03:40:16 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] Grrmphf Message-ID: Okay, this may go on.. we shall see.. Firstly, to Jan. Jan, my changes are to BALANCE the gods, all or at least most of your ideas do not do this. Infact that leave the god right where it is currently. I make these changes because the gods NEED them, not because they are pretty etc. (Although I am very happy with where things are headed). Most gods have max weapons at around 10, because the realiance on melee weapons in crossfire is HUGE!!!!!!!. If a player can't make a weapon decent, then they have to change gods. Monks have it so tough, even with meditation they have to get stat bonuses etc. As you said, fireborns can't even hit some monsters, this is because of our reliance on melee weapons. With EVERY example I can think off that a fireborn can't hurt a monster, it will be fixed with PR, thus you begin to see why I am pushing this so hard. Currently, a monster is either vunerable or immune at high levels, so if a player is DEN anything it will be EXTRAORDINARLY hard to make a living later on. A fireborn is fundementally flawed. I will refer to this again later on. You have made many suggestions which I consider "turning down". Take away this, remove this.. etc..etc. I have added these extra strengths because those gods are LACKING! Devourers is LACKING, Ruggilli is LACKING, infact I think every god which you complained most strongly about happens to be one of the weakest gods. My aim is to remove "weak" gods. If this means adding things like immolation, and hp/gr stealing, I WILL! I have thought long and hard about each idea and have scraped ALOT, the ones I present are AFAICS very close to balanced. With minimal tuning I think players may again start using Gnarg and Gorokh. I will now go through your message so you can see alittle context. >The list doesn't mention all special prayers that are given by the >gods. For example, many gods currently teach the cause critical/many >wounds spells, but these spells are not mentioned anywhere in this >list. Does this mean that they should still teach these spells? No, if they aren't attuned to it they obviously wont, if they now are.. obviously they will. I have stopped gods like Lythander, from getting high diseases. But I have also allowed devourers, the red death. I have play tested that already by using a wraith and I can say, the red death isn't as powerful as everyone makes out, infact it is very time consuming. While I spent 30+ mins cleaning out the Giant castle (one of petes quests), Pete managed to do it in under 10, with fire and holy word of mostrai. Sorry off topic. >Is 'max weapon modifications' equivalent to 'Weapons +10'? If so, too >many gods give maximum item enchantments. 'Offensive' gods should give >medium weapon/bow enchantments, 'defensive' gods medium armour >enchantments. Medium weapon enchantment is currently weapon +7. High >enchantments (currently +11) should be reserved for one or at most two >gods. Yes, I may make one god have +11, but that is after everything has been tested.. For instance, I was going to allow mostrai to improve any item, but obviously that is way to powerful without some serious balancing. I would be prepared to do it, but everytime I get close. EVERYONE complains that I am "spoiling" their favorite god. I ask, why is it your favorite? and they say it is because it has no negatives. Do you see? I do these changes because I am have played through crossfire to maxed levels I have tried every god and alot of the most powerful combinations. I know mostrai is strong devourers is weak, that is the purpose of these changes. What I have done is what I consider fair, I am willing to trade some things like vun confuse for speed -5.. I have done this. If you give me a suggestion which will not change the current balance I will VERY happily do it. Enchanting armour isn't a big deal, we are gonna have to make the armour wiehgt increase anyway.. so it will only save money, not give a particular god a big advantage. So what, Lythander will only improve to +5, it only costs 1000 for more scrolls, and by the time a player has enough levels to get their armour up to +5, they are gonna be able to afford plenty of scrolls. Infact, improving armour was only a suggestion I made, because I thought it fitting to allow gods to change it.. I didn't begin to think it would change balance in anyway, just money. >Mostrai was a simple god with no disadvantages and few advantages. I >think it should stay a simple god. If the goblins are no longer >Mostrai's enemies, followers of Mostrai will have a hard time getting >to medium wisdom levels. Well, if you have troubles.. try a different god. Mostrai is piss easy, infact roWer can get to level 10 in 15 mins with mostrai EVERYTIME! If I can in anyway make mostrai add an extra 5 mins to that time I would be happy (I know roWer is the best player out there score wise, so it is fair for him to be able to do that). Mostrais, middle is so easy, you can kill undead with holy word, demilich with avatar, and anything else with weapon. There are no negatives. You say you want it simple? well how about I make it simple and remove weapon magic, that would be the simple way to make mostrai balanced, but that is not appropriate, I am trying to find ways around that. >Gnarg: >Simple offensive god. Even though it has an enemy race, its attack >power isn't focused on this race. I have tried to achieve this already. basically anything attuned to wounding is a god who has many enemies because it enjoys harming. The major signifigance of this now is that draining will give gr points, because the god rewards you for harming things. Draining is currently crap because as you said, you get alot less points for killing things, so obviously you will get only minimal gr and hp from draining. >Weapons medium, bows low, armour low. This is what already have, I thought >The poison spell is already very powerful (cause critical wounds easily >kills dragons). Don't make it even more powerful. i never said make it more powerful?! That stuff about strong poison was for poisionous fog or its equivilent. >I like the idea of a poisonous fog. >No hp regen +2. Gnarg hurts and doesn't heal. Okay I will remove it as it seems a popular choice. >I'd prefer Goblin boots (Prot: draining, ac +1, armour 8, sp regen -1) >over a helmet. Well, I wouln't wear boots that gave that if I was paid to. Sp -1? What a stupid pair of boots. For the boots I would prefer to be much more positive, but be rare. Remember ONLY gnarg players should be able to use these items.. so basically it is a way of balancing gods at low levels, and high levels. >Vuln. fire would be a great disadvantage and fear just suits better. >Goblins aren't very smart and are easily frightened. Hang on, I thought you just said "Gnarg hurts and doesn't heal", do you really mean, "Gnarg doesn't heal.. but it protects"? sounds contradictory to mean, protection is like healing. Infact the god of protection also happens to be the god of healing (Valriel). On Gnarg: Gnarg is a SUPER sucky god because its holy word is completely pointless. Poison is a crappy attack as it is slow as all hell, and Gnarg gives no real positives. As an "assassin" one would expect gnarg to be a good god for sneak attacking and spells that fast and silient. Poisionous fog for example, would be fairly unnoticeble (In real life) but would be a VERY effective tool of assassination. Perhaps Gnargs boots should give stealth? >Lythander: >Defensive god, but master of bows. Defensive god? I hardly think so... "Elven Deity of Luck, Huntsman of Goblins, Trollslayer, The Trickster". Sounds as nasty as Gnarg, a huntsman of Goblins.. Trollslayer. Lythander is a mean god who enjoys tricking things. Lythander would be so busy tricking people it wouldn't bother with armour. >Weapons low, bows high, armour medium. This is what I have already? >I think Lythander could teach the 'defense' spell. No? Defense is not Lythanders game. >New prayer to enchant arrows. You put some arrows and some body parts >of goblins or trolls on an altar of Lythander and invoke this prayer. >Lythander will take the sacrifice and add attacktype: paralyze, >protected: >fire, cold, electricity to the arrows. Cool idea, I have put it in. I have been thinking about arrows for ages, I think you have made a very good solution =) Thanks. >No "conflict" spell. This seems to be impossible to balance. >Immunity: confusion, paralyze. hey, if pete wants to put Conflict, I am all for it. A brilliant idea, its all about confusing and tricking the opposition. Balance? That is easy for things like this.. you can very easilty make a nasty spell balanced by adding appropriate amounts of gr or speed of casting etc etc. >Boots (speed +2). Bolts of adamantite (with 100% chance of breaking). Speed? no... Stealth? Bolts of Adamantite? perhaps lythander should turn arrows to Adamant with the sacrafice of golbin bits.. say, a head gives the arrows adamantite? >Mostrai: >Simplest god, neither offensive or defensive, no disadvantages, and >only small advantages except the enemy race which is Mostrai's most >interesting property. hehe, no disadvantages?? You a dwarf, strong yes, resistant.. hardly. I would think back to the hobbit.. and the spiders coming from the tree.. the dwarfs lasted all but a few seconds. They are hardly, but certainly have their weaknesses... >Weapons high, bows low, armour medium. Bows? Heck no... "Dwarven Diety of Metal Smithing". I have yet to see a metal bow in a fanatasy game.. let alone all of em. I would think Mostrai would not only not touch bows, but shun their shoddy wooden construction. (Dwarves and elves aren't on the best of terms because of this ;) >No interesting spells, only wall of thorns. That is what I have, I haven't changed that. >No holy possession, at least no holy possession with immunities. What I have >No vulnerabilities. I have already said what I think of that. >The avatar of Mostrai should make less damage, but still have the >same number of hit points. Mostrais avatar is fine. With changes I will obviously make it move slower. >Removing goblins from Mostrai's enemies will make it more difficult >for followers of Mostrai to advance in wisdom levels. WAHHH!? Mostrai HAAAATTTEEESSSS Goblins, most of the maps talk of mostrais hatred of Golbins. That is just fundementally wrong. >Maybe helmet of Mostrai (ac +2, magic +2, high armour value) to help >low level followers because dwarfs are always hit on the head... Well that is kinda what I had in mind yes. Remembering this is a VERY high level item that may even be slighty under powered. I am planing to give this one away about level 50 wisdom. By that stage players are drinking a potion of fire and running along corridors of Dragons. >Gaea: >Defensive god. Yup >No weapon improvements, bows low, armour medium. HAHA obviously no weapon improvements =) You can' equip it to get em =)) I am also against bows, Gaea is the most anti violence there is. Bows are weapons, gaea wouldn't be to pleased about them, if she does realise they are necessary even for her followers.. to survive. Anything we add will be to defense. >Daylight, insect plague, wall of thorns. WAll of thorns? no.. agressive spell.. >New prayer "earth shield" which improves both armour value and >armour class. Added >New prayer "elemental shield" which gives protections against >fire, cold and electricity. added >I like the "sanctuary" spell, but I wouldn't implement this face of >death like spell. I like both. >Normal potions of healing would be ok. Well, currently no one has objected.. and AndreasV has already draw graphics for it. >Ruggilli: >Offensive god, even if followers can't use weapons. This should be >the perfect god for Quetzalcoatls and Fireborns. This god combines >extreme advantages with extreme disadvantages. Bleh.. I don't like that at all. Ruggilli should be a god for ALL players. I don't worry about Fireborn and Qs... they get so stuffed later on that they are impossible to balance later on.. that is the price you pay for getting an easy start. >Weapons low, bows medium or high, no armour enchantments. >Holy rage is a nice spell. Yup... still thinking about it.. >Immolation looks interesting but I don't know how difficult it is >to get it balanced. immolation is the coolest thing so far said. (no pun intended) It is everything ruggilli is, plus it is completely new.. and it is already coded. >Should get the simple wounding spells (no disease spells). it wont get any disease. (except the common ones) >Retributive strike as the most powerful attack. I hate that spell with avengance. I would be happy to see it gone. If it comes to it though, ruggilli can haveit.. but immolation shuold be a better substitute. >I wouldn't change the attacktypes and weapons are only of minor >importance. Very wrong here, the reason I change the attack_types is because ruggilli is now an enemy of every (bah itself) this means draining will steal hp AND gr. Instead of praying, followers who are given the Drain attack_type, plus Gnarg (Will have to find a weapon with drain, this property is actually based on attuned wounding) will get gr faster by hitting monsters. Ruggilli is the god of chaos blah blah etc.. i find praying alittle funny =) The followers of Ruggilli wreck havoc using prayers. Now this is a funny point, cause I tend to think of it the otherway, they are current repelled to ice.. so they don't make great sorcerers.. (only dangerous to ice creatures... which aren't worth many points in the long term). I would like ruggilli to be a super attacking warrior.. that has to fight to survive... thus things like Trolls might be better suited than things like fireborn which wont get many advantages at all from ruggilli. >Bolts with attacktype: weaponmagic to compensate the disadvantage of >Fireborns that they can't use weapons. Sometimes the only way to damage >an enemy is using bows. Nah. immolation, plus new drain should allow some nasty pasty high level chars. At very high levels something might be added to compensate for real lack of firepower against fire creatures. >Sorig: >Rather offensive god, but with some defensive capabilities, master >of electricity. Well no.. actually sorig aint really offensive at all.. sorig is a peaceful god who can get angry, but usually doesn't hold grudges etc.. thus they have enemies NONE! Divine shock etc are spells which are used when sorig gets angered, but other than that Sorig doensn't give much out. >Weapons medium, bows medium, armour low. hmm, sort of what I have already. >There aren't that many electricity prayers right now. I wouldn't like >forked lightning if it's another cone spell. I'd prefer this "holy >lightning" (finger of death like spell), and a "thunderstorm" spell >that casts various non-magical electricity spells in the vicinity of >the caster for an extended period of time. Don't like thunderstorm.. we have already started work on Windstorm.. which is a physical gush of wind.. not to sure where that will fit in.. but its such a cool spell ill find somewhere ;) >Simple wounding spells. >New "headwind" prayer. Reflects spells and missiles. Well yeah.. wounding? Everything gets wounding spells.. I thought you could buy them? Perhaps I been playing CVS to much. I don't like wounding spells much at all.. just not a god like spell. >A new prayer to start flying, and another one to stop flying. >Powerful avatar. Bleh, flying sucks.. very very little point in spending time making that. Avatar is powerful. One of the fastest movers with a nice amount of health.. at high levels those things can cane serious arse. >Devourers: >Offensive god, enemy of all living things. Yup, thus it has attuned wounding, drain advantage. >Weapons medium, bows low, armour low or no armour enchantments. Well, erm.. I haven't worried about bows.. doesn't seem a very DEATH like weapon currently. Given devourers shield upgrades.. i don't really know why.. just sounded good at the time.. I can change that. >All disease and death spells, simple wounding spells. Not all diseases.. only red death infact. Small pox is rather nasty at all levels, where as red death only takes effect later on. Later on is when devourers starts to fade because of the complete lack of fire + vun fire. (Net result dragons kick your arse.. and you can't hurt chinese dragons.. etc) >I don't like weapon attacks that heal the attacker in any way, because >differing weapon speed, class and damage will make it almost impossible >to balance this. Not at all. Everything can be balanced with enough time.. that is why im doing this. I am not worried about balance for each particullar idea. I Just want a reasonable list of ideas that will allow enough choice to balance. >I would prefer a prayer that drains the victim's life and heals the >caster, either once or for an extended period of time like poison. >Nightfall spell. Bleh, I don't like that.. I like devourers getting in and sucking their victims up close and personal, it's the undead's touch that kills.. >I can't say much about Creeping Frost because I don't know this spell, >but Devourers already gives many powerful spells. Well, I have removed it.. it isn't really needed now.. >Attacktype cold would fit. Not needed.. >I wouldn't add fear attacktype because Devourers already gives many >attacktypes. Leave fear for other gods. Removed. >BTW, I don't like weapons with drain attacktype because I got much less >experience when fighting with these weapons. BTW, that is precisely why i am changing it. Drain currently sucks. >Gorokh: >Offensive god, focused a bit on its enemy race. Yup. >Weapons medium, bows medium, armour low. Nah, I don't like the bows.. Bows for angels, tridents for demons.. that is the way of things ;))) >Simple wounding spells. Yup. >New "gates of hell" spell. You point at an enemy, and the gates of >hell open behind him for a moment. Effect is a large fireball, like >retributive strike, but with fire attack. Well, except for LARGE part of fireball.. that is EXACTLY what Hell fire does already. And it is a VERY crappy spell.. I don't like Gates of Hell at all. >New spells that summon a daemon which enters the caster's body and makes >him a ferocious fighter for quite a while. It could be two spells: >One for a daemon with high offensive capabilities, another spell for a >daemon with medium offensive and medium defensive capabilities. >Substituting attacktype slow for attacktype fear. has alot of potential.. but i am not going to code it.. nor I think would pete.. so if you want to do it.. ill put it in. >I hate attacktype confusion because it makes your opponent much stronger >in hand-to-hand combats: He makes a step aside, you miss him, you pass >by, and he cast some spells at you (or in any direction, firebullets >can damage you indirectly even if they hit a wall, and cone spells >cover a large angel). Does this need changing? i don't really know.. It can be removed.. people? >Thus, confused monsters are often more dangerous >than monsters with any regular movement type. >Immunities (holy possession): Slow, paralyze, confusion, fear. That's a >lot, but there are also many items with these immunities, and Gorokh likes Yeah, that is why alot of gods suck.. the immunities they give are to easy to get already.. but that is fine.. we just give those gods other things to make up for that. Infact I think that is one of the reasons you may not be realising why I make alot of these big changes.. such problems like that are what make the difference between say Gnarg and Mostrai. >hand-to-hand combats, where these effects are rather nasty compared to >casting spells at the enemy from a safe distance. hmm Valriel: >Defensive god, except for the enemy race. Yes. >Weapons low, bows low, armour medium. ? well i spose.. but we gonna need to give Valriel plenty of stuff, its sucks alot right now.. >Defense spell. Yup, what though? >All resurrection spells. Mmmehh.. resurrection is only for permadeath.. I don't really care about that.. cause I have never played permadeath.. if permadeath players wont it.. add it I will. >Some kind of regeneration spell that doesn't consume food. Sure... ill put it in now. >New "holy shield" spell that decreases ac a lot and also reflects >missiles. Hmm... >Attacktype fear is one of the more powerful attacktypes because a >frightened enemy will run away and has little time to strike back. >I wouldn't add other attacktypes, but blinding is reasonable. Yeah well, I would like to remove it myself.. but valriel needs it. > It >fits the picture of a god that prevents the monsters from attacking. >Permanent glow is often nasty, but a prayer that makes you glow >would be ok. ??? Permaglow is nothing more than infravision made pretty. I can't see why you would think it is nasty. It is fairly irrelevant.. dark vision etc are just as good.. >Immunity confusion, fear, blinding. added blinding. Sorry for getting agro at the start.. but sometimes things can bite even though they may seem to have no reason to. It bites me that you are tending to want to remove everything we have done.. while that may not be true.. it is what im feeling.. PS. please note the crossfire_gods.html is JUST ideas.. it is not meant for comparisons etc. just for temp ideas I have.. now all ideas are put into crossfire_pantheon.html. Please only refer to that from now on unless something in there is not well explained and you want to refer back. Now Mich, the gripe I have is with caps. I am strongly against caps because I believe they are a cheap way to get around a difficult problem. For games where the team focus on prettyness ect, caps are set because spending the time balancing is not in their interests. Crossfire is VERY VERY different. Firstly, Pete and I don't even care about the graphics... all we care about is Gameplay Gameplay Gameplay. We don't want to see crossfire follow the lines of the other games and just cap everything they can't handel. While caps on things like player stats are necessary to create some uniqueness between characters, that is ALL I would ever want to add. If a wizard can become a better warrior than a warrior.. we want to make sure that the wizard must also get plenty of negs to make it stupid to try. This is what we have done, a wizard would not want all the armour of a barbarian.. cause they can't cast and they are very slow. With such a low str, big armour is not an issue.. even heavy weapons are bad.. ask roWer, his favorite weapon is the unicorn horn. That is all he uses (and all he ever plays is Wizard), why.. because we have managed to balance it well enough that it is better to go light than heavy for a wizard. Do you see how much better this is? Caps are breaks against mathematics, they are simply a set a values to limit a formula. I don't want to do that, because if crossfire is based only on formulas it can be extended for ever. Look what has happen, with caps on hp, warriors get stuffed because they quickly reach 540 hp, then the only way they can go is magic. It would be alot better to allow warriors to keep going for con, but in doing so reduce the option of sp. This COULD be achieved by allowing weapon improvements to go above the max stat of the class, but that is may be very hard to maintain, as a warrior might be able to put EVERYTHING onto con, and so end up with a mega char. Perhaps in doing so they will end up sacraficing to much.. that would be MUCH cooler than the current 540 limit. While it is not a direct corrilation, PR should be the same, and I expect it would be. Wizards don't like heavy armour.. so we just make sure light armour is balanced properly.. =) So much more simple than adding stupid caps everywhere... and having to move them around constantly.. everytime a new monster is added that exploits another weakness that a particualar char may have because of low caps preventing fire etc. Anyway, don't try to compare crossfire with other games, we want a unique and different game that has drawn from other games to begin with, but steped its own way into far greater things. PS. Michael, my brother has redone linux client so it now has smooth scroll, support for any size tile and alpha channel invisibility, perhaps you will want to add those things so that the clients wont be to different. Also we have experimented with Fish eye, soon we'll release a client and players can say what they think of that one =). it fits more map in, and looks cool.. but also looks like you walking on a sphere, and gives motion sickness fast =))) Pete, Agreed on conflict. Special arrows covered by Jan's idea. Regen +2 is removed. Vuln fear? We are talking about the god of TROLLS as well as goblins.. infact it is the god of ASSASSINS in general. I would think you would have to be pretty darn fearless to be an assassin. Small pox will be given, Red death wont. Wall of thorns is aggressive, thorns etc.. I don't like it for Gaea. if it slowed down players etc, perhaps in might be considered though ;)) Sharpening sounds good. I think that is what Bless already does though. Agreed on Gaea. Do I DEN Wounding and Death? It would be happy to.. but want to hear it from a few people. Sanctuary I think should stop the elements as well, fire, cold, elec. It shouldn't be to powerful, as gaeans can't do much damage anyway. Enemy god: All = Draining -> gr and hp. But no holy word. Basically it is my way of saying what is already there. Ruggilli hates everyone, and so will quite happily kill anything.. thus the draining reflects this idea. Holy word for ruggilli never even crossed my mind. Well, I wasn't sure.. ill change it now. Sorig: mmhmm, general consensus? I don't like attuned wounding.. only for "special" gods. Windstorm is added, I feel this shuold have very minimal damage as a physical attack type on a cone is nothing but powerful =). Add it, but require some clever balancing. Gorokh: I quite like Flaming Aura.. funny thing is it will kill everything on the ground (items) as you walk around.. =) have to be careful not to hurt the wrong things =)) Acid? yeah its a possibility.. consensus? Agreed on large fireball etc.. Valriel: well I keep saying to you its in a hole right now. We need something that will give valriel some okay points at beginning.. I plan to boost avatar alittle.. possibly Gorokhs too. Well this ends my largest post ever, sorry if it offends anyone, it isn't meant to. If you are feeling really pissed off with me.. PLEASE PLEASE PLEASE.. either send me a message in private or come onto irc and abuse me =). (#crossfire on IRCnet) Again, this is only meant to get the message across that I have not taken to some of the responses well, I am easily aggravated. I really don't want to start a war, or a pointless flame war. I hope this is the last message I send with this tone.... =(( dnh ps. Mark about that, can you tell me a time when you will more than probably be able to come on.. 9pm your time is GREAT for me.. cause I have just got home and am reading through messages etc etc. From echter at informatik.uni-rostock.de Thu Nov 16 03:51:47 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:16 2005 Subject: FWD: RE: [CF-Devel] PR (Partial resistance) In-Reply-To: <3A138FDF.1574052A@scruz.net>; from mwedel@scruz.net on Wed, Nov 15, 2000 at 11:42:23PM -0800 References: <200011150705.XAA05045@tesla.EECS.Berkeley.EDU> <3A138FDF.1574052A@scruz.net> Message-ID: <20001116105147.B14279@hokkaido.informatik.uni-rostock.de> On Wed, Nov 15, 2000 at 11:42:23PM -0800, Mark Wedel wrote: > I actually wouldn't mind going back to the old days when basically the only > boots out there were the artifact boots. Removing the AC bonus from jack boots would fix the worst problems. -- Jan From peterm at tesla.EECS.Berkeley.EDU Thu Nov 16 13:24:47 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] General notes on the latest gods In-Reply-To: Your message of "Thu, 16 Nov 2000 19:29:44 +0100." <20001116192944.A27349@hokkaido.informatik.uni-rostock.de> Message-ID: <200011161924.LAA08299@tesla.EECS.Berkeley.EDU> > Another unique prayer that seems suitable for Lythander could be a > "glue" spell that casts a small cone consisting of glue that stays on > the map for a while. > > Gaea might have a similar spell that creates a spider web, maybe in > form of a FBULLET (fireball etc.) spell. I really like these ideas, especially for Gaea. I'd rather see it for Gaea. > > Mostrai: I disagree with Wall of Thorns.... That one seems like > > a Gaea spell if ever there was one > > > > How about a prayer of sharpening, which adds to the players wc > > temporarily? That won't help gain Wis experience, it's true, but > > the holy word they got is a very good one. > > I'd prefer a spell that actually creates something, e.g. "[create] holy > axe" which creates a very good axe (probably weaponmagic attack type) > that dissolves after a while. Different prayers for different weapons > are possible, e.g. one prayer for a weapon with much damage and low > weapon class, and another prayer for a weapon with AC bonus, low weapon > class but less damage. How about a spell which animates ALL the weapons in range, including ones in the inventory of the enemies close by (but not in players inventories), and sets them all against whatever enemy creatures are about? This could be an impressive effect. A maelstrom of mixed clubs, swords, daggers, maces, all turned on their former owners. Easy to balance too. Short duration, short range. > First of all, Gaeans don't want to attack. ;-) I remember killing a > titan with create fire wall (create several fire walls along a wall, > then trick the titan into running into them). It was rather easy and I > didn't have to fight the titan directly. Indeed, it was the titan's > greed for my blood which killed it. This should be the way how Gaeans > fight. If wall of thorns isn't strong enough, make it stronger. Or > add other passive attack spells. A very powerful spell could be > "create wood" which creates trees at all tiles in the area of effect > that are not blocked, and these trees attack the caster's enemies until > they get destroyed or dissolve. Well, these are pretty cool ideas. Create wood should work underneath monsters. > Even though it's kind of interesting if opposing gods have similar high > level prayers, I wouldn't like Gaea to have a prayer that's so similar > to face of death. Gaea wiping out half of a map full of monsters would > just look wrong, since everybody is used to the idea that hostile > monsters only disappear when killed. I'm a bit confused. You realize that the intention is that the peaceful monsters stay around right? They just no longer fight or give experience if they die, or spellcast. Furthermore, it is hard to get items out of them. Arguably, Gaea needs such a spell more than Devourers, who has many other ways of attack. > > Ruggilli: What does "Enemy God: All" mean? A generally acting > > holy word? I think NOT. No generally acting holy word. > > > > If > > you're going to put "Immolation" under a column, it belongs under > > "attack types" and not spells. The weapon class and dam of > > I'm wondering if fireborns can inflict immolation on others using their > flame touch attack, because it doesn't do any physical damage. Not with flame touch, they can't. Hmmm. If we add a physical component to flame touch (or if there already is), then it can. > > I disagree with Jan's idea on having a large fireball. I would prefer > > to reserve most fire, cold, electricity "magical" attacks to mages. > > Priests are supposed to be more spritual. > > The "gates of hell" prayer wouldn't do the damage directly. It opens a > portal for some original hell fire to get on the map (which might have > pure AT_FIRE attack type). The effect can be made more interesting: A > hellfire ball explodes at the target location, some map tiles will keep > burning for a while, and if the caster has bad luck, a demon or two are > sucked through the portal and will attack the caster because they > didn't like this. > > However, an acid spell is also very reasonable and interesting. No harm in having both spells I suppose. It is sort of in character. Any displaced demons ought to attack anything in range though, including the player. > > Valriel We need some good ideas for Valriel. How about a holy aura, like sanctuary or flaming aura, except which blinds anyone who comes near? PeterM From andi.vogl at gmx.net Thu Nov 16 05:13:39 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] some map updates... In-Reply-To: Message-ID: <000001c04fbe$4745a120$0e9be23e@kyle> On Wed, 15.11.00 Erik G. wrote: > Would any map-gurus volunteer to update those cities with "closed" > perm appartments as well? Being able to store your stuff in another > city than Scorn would be a great feature. I?m already working on that. When I?m at it, I also plan to slightly enhance some of the oldest and most ugly maps out there. Like by adding a floor and stuff, maybe adding a few NPC?s etc. I must do this without asking the original authors because they?re gone, but anyways I?m absolutely sure they would agree. ;) If someone is interested in the details of my work, please watch the cvs-list and read the change-logs. Only for doing important changes, I?ll post to the devel-list. Andreas V. From dnh at hawthorn.csse.monash.edu.au Thu Nov 16 14:00:15 2000 From: dnh at hawthorn.csse.monash.edu.au (dnh@hawthorn.csse.monash.edu.au) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] added Message-ID: I have added most ideas onto table, including *Vitriol *Protections for sorig *Spider Web I was wondering whether we take off slow from gorokh and instead give acid? Perhaps even remove fear? but then Gorokhs weapon will be scary. For acid... how about Acid splash.. a bolt of acid? Or a more powerful version Acid bath ;) Of course.. with new changes it shouldn't be to hard to become completely immune to acid.. perhaps I will have to think more about the 50% protection from acid, 100% immunity from it. Anyway must go now, dnh From echter at informatik.uni-rostock.de Thu Nov 16 14:37:42 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] General notes on the latest gods In-Reply-To: <200011161924.LAA08299@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Thu, Nov 16, 2000 at 11:24:47AM -0800 References: <20001116192944.A27349@hokkaido.informatik.uni-rostock.de> <200011161924.LAA08299@tesla.EECS.Berkeley.EDU> Message-ID: <20001116213742.A585@hokkaido.informatik.uni-rostock.de> On Thu, Nov 16, 2000 at 11:24:47AM -0800, Peter Mardahl wrote: > How about a spell which animates ALL the weapons in range, including ones > in the inventory of the enemies close by (but not in players inventories), > and sets them all against whatever enemy creatures are about? This could > be an impressive effect. A maelstrom of mixed clubs, swords, daggers, > maces, all turned on their former owners. Easy to balance too. Impressive effect, but easy to balance? Monsters will lose weapons even though they are not killed, and sometimes the weapon is the only thing you want from the monster. I don't like spells that allow you to overcome a monster no matter how many hit points it has. But I have no objections to animating all weapons on the ground. > Well, these are pretty cool ideas. Create wood should work underneath > monsters. The trees should be blocking. I'd like to avoid blocking objects below monsters. And it also means that the spell isn't trivial to use. You need some free space between you and your enemies for maximum spell effect. However, wall of thorns could create thorns below monsters, giving followers of Gaea a useful spell in close combat. > I'm a bit confused. You realize that the intention is that the > peaceful monsters stay around right? They just no longer fight I'm sorry, I missed that. But it would still be a spell that overcomes monsters regardless of hit points, and it is in my opinion still a bit too offensive for Gaea. If monsters stay around and don't hurt anyone anymore, the Spell of Peace would be kind of unlimited paralysis. A powerful side effect can be that they may block their fellows. > Not with flame touch, they can't. Hmmm. If we add a physical > component to flame touch (or if there already is), then it can. Flame touch is currently pure AT_FIRE (attacktype 4). > We need some good ideas for Valriel. How about a holy aura, like > sanctuary or flaming aura, except which blinds anyone who comes near? Aura of Celestial Might, has AT_FEAR and maybe also AT_TURN_UNDEAD, matches the gods alignment well. No other attack spells because Valriel has the second best holy word. -- Jan From echter at informatik.uni-rostock.de Thu Nov 16 10:17:33 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] New god_intervention() In-Reply-To: <20001109233711.A26401@hokkaido.informatik.uni-rostock.de>; from echter@informatik.uni-rostock.de on Thu, Nov 09, 2000 at 11:37:11PM +0100 References: <20001108213741.A11475@hokkaido.informatik.uni-rostock.de> <20001109233711.A26401@hokkaido.informatik.uni-rostock.de> Message-ID: <20001116171733.A25352@hokkaido.informatik.uni-rostock.de> On Thu, Nov 09, 2000 at 11:37:11PM +0100, Jan Echternach wrote: > I think there are only two things left until the patch can go into the > CVS: Writing the change log and testing the patch. This version comes with the change log, some documentation and a small bug fix. Still not much tested, however. The archetypes haven't changed in this version, use the arch38b.gz from my previous mail. -- Jan -------------- next part -------------- common/treasure.c: Various changes to support several new flags that affect how treasures are created and how they are inserted into objects or put on maps. include/config.h: Increased ARCHTABLE (size of archtype hash table). lib/treasures: Added gods' treasure lists. server/apply.c: do_learn_spell() and do_forget_spell(): New functions for learning and forgetting spells. apply_spellbook() now uses do_learn_spell(). server/c_wiz.c: command_learn_spell() and command_forget_spell(): New functions that implement the new "learnspell" and "forgetspell" wizard commands. server/disease.c: cure_disease(): Bugfixes: Fixed loop to traverse the whole inventory and not stop after the first disease. Corrected the return value to return true only if a disease was cured. server/disease.c: reduce_symptoms(): Only change speed_left of diseases whose symptoms where actually reduced. Return true only if some symptoms were reduced. server/gods.c: stop_using_item(): Use apply_special() directly and unapply even cursed or damned items. server/gods.c: god_intervention(): Rewrote this basically from scratch, now uses the god's treasure list to determine the effects. server/player.c: give_initial_items(): Use new GT_STARTEQUIP and GT_ONLY_GOOD flags. FLAG_STARTEQUIP is now set by create_treasure(), and we also won't get any cursed items. Don't give players the same spell twice. server/skills.c: pray(): Fixed a typo. server/spell_effect.c: cast_heal(): Fixed return value. Don't freeze the caster if the spell had no effect. server/summon_avatar(): Don't use the god archetype itself as its avatar. Use determine_holy_arch() instead (for both avatars and holy servants). -------------- next part -------------- A non-text attachment was scrubbed... Name: patch38c.gz Type: application/x-gunzip Size: 15384 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001116/9d9cd345/patch38c.bin From mtx93 at tzi.de Thu Nov 16 18:28:31 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] drain ring Message-ID: Hi I recognized that the drain ring has a animation, and the client recieve all animation steps, but it don't get animated. Also the server don't do it on map. MichToen From jbontje at suespammers.org Thu Nov 16 18:35:32 2000 From: jbontje at suespammers.org (Joris Bontje) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] MD5 crypt in FreeBSD Message-ID: <3A148B64.16468.1ABAD5B@localhost> Problem: When an existing user logs in with username and password: "Wrong Password!", Trying to create a new user: "The passwords did not match." Background story: Two days ago I upgraded my server from RedHat Linux to FreeBSD, made a backup of the important userstuff and installed CF again. Everything worked fine... now I have done a "build world" and things aren't working again. Thoughts: FreeBSD has a disgust for the weak DES algorithm, the base systems has the default DES libcrypt (I think). But when you remake everything (and maybe tell it to use the more secure MD5), MD5 is used. Normally (DES) the password field in the userfiles look like this: "password vIPIFM3456FKD" that doesn't work with the MD5 algorithm... now create an MD5 hash with a perl program and replace the DES --- perl program --- #!/usr/bin/perl -w use strict; print "The password is: "; print crypt("secretpass",""); print "\n\n"; --- end of perl program --- This gives: The password is: $1$$stmAa3iXQxI4jYtPrZgI./ Now replace the DES password in the playerfile with the MD5 hash and log in, it should work. But when you save the character it is mangled to: "password $1$Lr????,?$xX5to" So the second time you can't login anymore. New users still can't be created... The DES to MD5 step is rare and you can't do something about it except for supporting 2 password formats... But MD5 should work! Somewhere deep inside the C code the password is mangled and restricted and that lets MD5 fail its job. Fix: -- insert here :) -- Joris Bontje "MiDS" Admin of mids.student.utwente.nl --- The suespammers.org mail server is located in California; do not send unsolicited bulk e-mail or unsolicited commercial e-mail to my suespammers.org address From mwedel at scruz.net Thu Nov 16 22:12:49 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] compile error with current CVS-server! References: <000301c04e9f$5bddc100$7b9ee23e@kyle> <20001115104448.A29151@hokkaido.informatik.uni-rostock.de> <3A137A63.87860C2B@scruz.net> <20001116104535.A14279@hokkaido.informatik.uni-rostock.de> Message-ID: <3A14B041.D188B846@scruz.net> Jan Echternach wrote: > > On Wed, Nov 15, 2000 at 10:10:43PM -0800, Mark Wedel wrote: > > When using sendto, you are not required to actually have a socket connected. > > So using O_NONBLOCK may not do anything. > > O_NONBLOCK is a socket property, not a connection property. It is > supposed to work, at least according to SUSv2. At least on my linux box, the defined value for O_NONBLOCK is different than the defined value for MSG_DONTWAIT. But perhaps an #ifdnef MSG_DONTWAIT/define MSG_DONTWAIT O_NONBLOCK/#endif is the best way to handle that. > > -- > Jan > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mwedel at scruz.net Thu Nov 16 22:30:14 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] MD5 crypt in FreeBSD References: <3A148B64.16468.1ABAD5B@localhost> Message-ID: <3A14B456.4FA5DA36@scruz.net> The simple fix of course is to use the older crypt. Its not like the crossfire player files need very strong security. I'm not sure, but my guess is that this improved crypt is generating 8 bit data? If so, I could certainly see why it may not work - everthing dealith with passwords in crossfire assume textual type data - it does things like strcpy's, stores the data in character format, etc, and all of those will probably break on 8 bit data. In reality, you could probably store the password un-encrypted in reasonable safety if you use the right perms on the save files so no one else can see them (this later step isn't even needed if the players don't have access to the server crossfire is running on or you trust the users that do). Joris Bontje wrote: > > Normally (DES) the password field in the userfiles look like this: > > "password vIPIFM3456FKD" > > that doesn't work with the MD5 algorithm... > now create an MD5 hash with a perl program and replace the DES > --- perl program --- > #!/usr/bin/perl -w > use strict; > print "The password is: "; > print crypt("secretpass",""); > print "\n\n"; > --- end of perl program --- > This gives: > The password is: $1$$stmAa3iXQxI4jYtPrZgI./ > > Now replace the DES password in the playerfile with the MD5 hash > and log in, it should work. But when you save the character it is > mangled to: > > "password $1$Lr????,?$xX5to" > > So the second time you can't login anymore. New users still can't > be created... > The DES to MD5 step is rare and you can't do something about it > except for supporting 2 password formats... > But MD5 should work! Somewhere deep inside the C code the > password is mangled and restricted and that lets MD5 fail its job. > > Fix: > -- insert here :) -- > > Joris Bontje "MiDS" > Admin of mids.student.utwente.nl > --- > The suespammers.org mail server is located in California; > do not send unsolicited bulk e-mail or unsolicited > commercial e-mail to my suespammers.org address > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mwedel at scruz.net Thu Nov 16 23:07:04 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] Just checked in. Message-ID: <3A14BCF8.F1FE4E24@scruz.net> A few bugfixes in various areas: MSW: 2000/11/16: socket/metaserver.c: Add #ifdef MSG_DONTWAIT into metaserver.c for systems that lack that definition. random_maps/style.c: alphasort was not properly de-referencing pointers when doing name comparisons, and thus returned garbage results, resulting in a crash when entering random maps. This only happens for systems which lack scandir in normal libraries (like Solaris). BSDs and linux have scandir built in, and did not have a problem. server/disease.c: fix infect_object - server would crash if player did not have praying skill and was infecting someone else. end of changes, MSW 2000/11/16 From echter at informatik.uni-rostock.de Fri Nov 17 05:26:02 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:16 2005 Subject: [CF-Devel] compile error with current CVS-server! In-Reply-To: <3A14B041.D188B846@scruz.net>; from mwedel@scruz.net on Thu, Nov 16, 2000 at 08:12:49PM -0800 References: <000301c04e9f$5bddc100$7b9ee23e@kyle> <20001115104448.A29151@hokkaido.informatik.uni-rostock.de> <3A137A63.87860C2B@scruz.net> <20001116104535.A14279@hokkaido.informatik.uni-rostock.de> <3A14B041.D188B846@scruz.net> Message-ID: <20001117122601.A8624@hokkaido.informatik.uni-rostock.de> On Thu, Nov 16, 2000 at 08:12:49PM -0800, Mark Wedel wrote: > At least on my linux box, the defined value for O_NONBLOCK is different than > the defined value for MSG_DONTWAIT. But perhaps an #ifdnef MSG_DONTWAIT/define > MSG_DONTWAIT O_NONBLOCK/#endif is the best way to handle that. No, most systems just don't have any sendto() flag that makes this function call non-blocking even if the socket is blocking. O_NONBLOCK is not to be used in the sendto() flags argument. You should set O_NONBLOCK in the socket flags with fcntl(F_SETFL/F_GETFL). -- Jan From jbontje at suespammers.org Fri Nov 17 08:31:02 2000 From: jbontje at suespammers.org (Joris Bontje) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] MD5 crypt in FreeBSD In-Reply-To: <3A148B64.16468.1ABAD5B@localhost> Message-ID: <3A154F36.15447.11DC94E@localhost> On 17 Nov 2000, at 1:35, Joris Bontje wrote: > Problem: > When an existing user logs in with username and password: > "Wrong Password!", Trying to create a new user: "The passwords > did not match." > > [big cut] > > Fix: > -- insert here :) -- > I did a quick and dirty fix, works for me but probably not on something other than FreeBSD. Solution use libdes: ->replace -lcrypt with -ldes ->replace #include with #include ->replace crypt(s,p) with des_crypt(s,p) Patchfile is attached. Maybe someone with more C know-how can include this with some nice #ifdef 's Joris Bontje --- The suespammers.org mail server is located in California; do not send unsolicited bulk e-mail or unsolicited commercial e-mail to my suespammers.org address -------------- next part -------------- --- server/Makefile.old Fri Nov 17 15:08:29 2000 +++ server/Makefile Fri Nov 17 14:57:38 2000 @@ -80,7 +80,7 @@ INCLUDES= $(EXTRA_INCLUDES) -I../include -I$(srcdir)/../include -LIBS = -lm -lcrypt $(EXTRA_LIBS) +LIBS = -lm -ldes $(EXTRA_LIBS) SHELL = /bin/sh --- server/main.c.old Fri Nov 17 15:10:09 2000 +++ server/main.c Fri Nov 17 14:58:07 2000 @@ -27,7 +27,7 @@ */ #ifdef HAVE_CRYPT_H -#include +#include #endif #include @@ -146,7 +146,7 @@ else s[0]= salt[0], s[1]= salt[1]; - return (char*)crypt(str,s); + return (char*)des_crypt(str,s); } int check_password(char *typed,char *crypted) { From andi.vogl at gmx.net Fri Nov 17 10:43:19 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] Cvs-update: St. Dominion Message-ID: <000101c050b5$873b7fa0$70a6e23e@kyle> Most of the St. Dominion-maps were ugly and disgusting for today?s standards. I?ve done a few improvements to the St. Dominion maps: Added permanent appartments, a new quest (the mudman?s place), and several enhancements of old maps. "Lord of the rings" charges for a small entrance fee now (100 plat). I think this is needed to balance the huge sortiment of rings in that shop. Andreas V. From bugs at real-time.com Fri Nov 17 06:23:38 2000 From: bugs at real-time.com (bugs@real-time.com) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] [Bug 27] Changed - "Arrows of mystery" appear in inventory, vanish at logout Message-ID: <200011171223.eAHCNcL04133@crusader.real-time.com> http://bugzilla.real-time.com/show_bug.cgi?id=27 *** shadow/27 Wed Sep 6 11:47:51 2000 --- shadow/27.tmp.4130 Fri Nov 17 06:23:37 2000 *************** *** 3,10 **** Version: 0.95.6 Platform: Other OS/Version: Linux ! Status: NEW ! Resolution: Severity: minor Priority: P4 Component: server --- 3,10 ---- Version: 0.95.6 Platform: Other OS/Version: Linux ! Status: RESOLVED ! Resolution: WORKSFORME Severity: minor Priority: P4 Component: server *************** *** 46,48 **** --- 46,54 ---- ------- Additional Comments From leaf@real-time.com 2000-09-06 11:47 ------- Additional note about these arrows. As far as I can tell, they are arrows that are shot at you by monsters - and hit you of course. + + ------- Additional Comments From jan.echternach@informatik.uni-rostock.de 2000-11-17 06:23 ------- + Known bug in 0.95.5, but 0.95.6 is supposed to have a workaround for + this. I couldn't reproduce it in 0.95.6, and I didn't get a confirmation + from the reporter that this bug has really been observed in 0.95.6. + From peterm at tesla.EECS.Berkeley.EDU Fri Nov 17 13:06:43 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] Windstorm prayer implemented in CVS, and slight mod to saving throws Message-ID: <200011171906.LAA21516@tesla.EECS.Berkeley.EDU> for items. The Windstorm prayer does no damage when it is first granted. After 25 levels, it starts to do 1 damage. This can be changed easily enough. Windstorm pushes monsters and other movable items away from the caster. It tends to form neat piles up against walls. Motion is based on randomness and weight. The higher the level, the more weight. Many objects, however, would be destroyed by a windstorm which dealt damage, even 1pt. This bothered me. A windstorm shouldn't break most metal objects such as swords. I can see swords breaking to STRONG physical attacks (dam 10 or something), but 1 point of wind damage should not harm a sword. So I modified saving throws a bit. A certain dam threshhold must be crossed to fail a saving throw. This threshold is based on the original saving throw. The better the original saving throw, the higher the damage threshhold. PeterM From peterm at tesla.EECS.Berkeley.EDU Fri Nov 17 17:41:03 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] Comments on current Gods proposal Message-ID: <200011172341.PAA22435@tesla.EECS.Berkeley.EDU> Gaea has "sanctuary", "earth shield", "elemental shield" Sanctuary will DO elemental shield. In fact, it was be hard NOT to make it do elemental shield. I will implement it as a weaker counterspell type of object. "earth shield" mildly concerns me: it is just a clerical version of the "armour" spell. The name also makes me think that a circle of earth will rear up and circle the player in 8 squares. I have no objection to a clerical version of armour: can we please call it something else? "ironwood skin"? (And nuke "elemental shield") PM From seer11 at hotmail.com Fri Nov 17 17:40:58 2000 From: seer11 at hotmail.com (the seer) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] General notes on the latest gods Message-ID: How about something like an offensive field - kinda like a really overactive immune system for Valriel. Has a short term duration, and a small radius around the player that increases with exp. It can either attack items, enemy stats, or hp causing damage as long as they are within range. -The Seer _________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. Share information about yourself, create your own public profile at http://profiles.msn.com. From peterm at tesla.EECS.Berkeley.EDU Fri Nov 17 18:44:16 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] Graphics drawing support request Message-ID: <200011180044.QAA23655@tesla.EECS.Berkeley.EDU> I could use graphics for the following spell effects: 1) Flying doves for the spell of peace 2) Steaming puddle of acid 3) flying splash of acid Anyone up for doing the art? PM From mwedel at scruz.net Fri Nov 17 22:48:33 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] race/classes notes/thoughts. Message-ID: <3A160A21.5A79CB18@scruz.net> I've been playing a troll barbarian lately, and a few notes. His natural intelligence is -3 (shown with the statistics command). Not a big problem, as that the fix_player (or someplace) is smart enough to raise it to one. However, I was fortunately enough to find a potion of intelligence, but drinking it did not work (it did nothing). Looking at the code, I can see the reason - the change_abil function makes sure that when we change a stat, it is still in the valid range (1 to 30), so drinking cursed potions won't drop you too much. Unfortunately, since the character had a -3, drinking one potion only raises it to -2, which is still out of this threshold so it doesn't work. So I guess the question is: Is this a bug in that his natural stat is -3, or is it a bug in change_abil, which should be improved to see what the potion is doing and then verify that it remains within bounds (so if increasing a stat, it only makes sure it doesn't go above 30, and decreasing, it only makes sure it doesn't go below 1). A misc. thought came to me that probably not all races/classes should be willing to eat flesh items. I see no problem with a troll barbarian gnawing on a goblin leg, but I really don't see that elf wizard doing the same thing. I wonder if it might be worth while to add some ability/skill like 'will eat flesh'? Granted, this is generally an advantage, since it supplies a great many more sources of food, but probably isn't a very big one. Or maybe a skill (or extend woodsman skill) that let you turn flesh into food? Unrelated to this, but something that I think should be done is to add a decay factor to flesh (like what demon ichors do). So you might have the leg being fresh, then as it gets older, it has less nutritional value, becomes poisonous/diseased, and then finally decomposes into nothing. Converting it to found could be assumed that you are drying it/salting it/whatever so it lasts indefinately. Not having the literacy skill makes some things difficult. What immediately came to mind was the hall of quests in the castle of scorn - without literacy, you can't read the information scrolls. I knew from past experience where the goblin and ogre hole were, but I wonder if it might be better to make those scrolls readable by anyone, or use magic mouths? This question might more belong the the non developer list, but I'm lazy so I'm grouping it here. I've noticed that pretty much skill scrolls and stat potions have disappeared from shops (its been a while since I've actually played a character serious compared to working on crossfire). After the newbie tower, goblin hole/quest and ogre hole/quest, my 6'th level barbarian has around 1400 platinum. What do people generally spend the money on? The only thing I can really think of is to search for a good ring/amulet. The character already has a +3 sword, +1 plate, +2 boots, girdle of damage (reward for quest), +1 helmet and shield, most all of it found, since in term of mundane items he is in pretty good shape (and going to the shops, it is unlikely he will find anything much better than most of that). With an int of 1 (-2), he obviously isn't going to be casting spells anytime soon. Granted, 1400 pp isn't a huge some of money, but that usually enough to buy something pretty decent. One thought I had would be to stock a portion of the shops with non random merchandise. Ie, the armor shop will always have a +2 shield and helmet (at least when initially loaded), if your willing to pay for it. You could actually set a stack of 10 items for that matter. Maybe different shops should stock different good items (so perhaps the shop in scorn is a shield shop so has good shields all the time plus the usual random stuff, while the shop is santa dominion is a good helmet shop, etc). I just wasn't interested in doing town hopping looking for something good in all the shops, but something like that might add character. this could potentially be tied into the god code. For example, its been discussed certain gods would be interested in certain pieces of armor/weapons and not really use the others. So if you want that god blessed/improved helmet, you must first buy that helmet from the high quality helmet shop or the like. This could perhaps even help balance things out if it is difficult to get to certain towns (it isn't right now, but I think it would be nice to actually have random monsters in the countryside - granted, a high level character could clear the path for newbies, but there could also be more intelligent monster generation for the wilderness - the fewer the monsters, the faster they generate for example - this would also effectively put a cap on the maximum number in any area, so you wouldn't get a case of the map filled with hill giants). Thats the end of my various thoughts for now. From peterm at tesla.EECS.Berkeley.EDU Sat Nov 18 01:03:43 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] race/classes notes/thoughts. In-Reply-To: Your message of "Fri, 17 Nov 2000 20:48:33 PST." <3A160A21.5A79CB18@scruz.net> Message-ID: <200011180703.XAA12096@tesla.EECS.Berkeley.EDU> > I've been playing a troll barbarian lately, and a few notes. > > His natural intelligence is -3 (shown with the statistics command). Not a b > problem, as that the fix_player (or someplace) is smart enough to raise it to I would rather that there be a "hard" minimum of 1 on a troll's intrinsic stats. I'll toss this one in the hopper of "things to fix". However, I would also like to see a change in behavior for potions so that they'll raise negative "intrinsic" stat values. *** Regarding food/body parts: body parts aren't really that useful for food because they're heavy and suck up inventory slots. I hate paging through inventory so I keep my items carried to a minimum. That means one type of food. For player convenience, so that players do not have to figure out "is this food old or not?" all the time, and have stuff rotting on them all the time, I would say "no" to aging food. It's good "reality", but I'd rather things stayed where I put them, and not have to do things like "sniff food" "cook food" "eat food" which I consider pretty much hoop jumping and not much benefit to fun game play. > Not having the literacy skill makes some things difficult. What immediately > came to mind was the hall of quests in the castle of scorn - without literacy > you can't read the information scrolls. I knew from past experience where th > goblin and ogre hole were, but I wonder if it might be better to make those > scrolls readable by anyone, or use magic mouths? Like Ballots in Florida, noble rank isn't for everyone. I think being literate is a reasonable prerequisite for participating in the noble rank quests. However, I don't feel too strongly about it and if there's a consensus against me on this one, I won't object to someone changing the hall of quests to use magic mouths. > This question might more belong the the non developer list, but I'm lazy so > grouping it here. I've noticed that pretty much skill scrolls and stat potio > have disappeared from shops (its been a while since I've actually played a > character serious compared to working on crossfire). After the newbie tower, > goblin hole/quest and ogre hole/quest, my 6'th level barbarian has around 140 > platinum. What do people generally spend the money on? The only thing I can > really think of is to search for a good ring/amulet. The character already h > a +3 sword, +1 plate, +2 boots, girdle of damage (reward for quest), +1 helme > and shield, most all of it found, since in term of mundane items he is in pre > good shape (and going to the shops, it is unlikely he will find anything much > better than most of that). With an int of 1 (-2), he obviously isn't going t > be casting spells anytime soon. Well, for a troll, I actually like to load up on better armor I buy myself +2 helm, +2 shield, +(best armour I can find in a shop) +boots. +3 sword is good enough that I wouldn't bother looking. If I've already got all that AND money then I'll go hunting for wyverns and get myself a scale and have a dragonshield. > One thought I had would be to stock a portion of the shops with non random > merchandise. Ie, the armor shop will always have a +2 shield and helmet (at > least when initially loaded), if your willing to pay for it. You could actua > set a stack of 10 items for that matter. Maybe different shops should stock > different good items (so perhaps the shop in scorn is a shield shop so has go > shields all the time plus the usual random stuff, while the shop is santa > dominion is a good helmet shop, etc). I just wasn't interested in doing town > hopping looking for something good in all the shops, but something like that > might add character. I like this idea. In fact, I made a "basic spells shop" in scorn, which you may not have seen, which supplies basic attack spells: icestorm, burning hands, small/medium/large snowstorm/fireball and small/large lightning, and cause light/medium/serious/many wounds. All at about 3x their normal shop price, the price you pay for convenience. Put in your "good" but "non-artifact" items at a premium price so people can just exchange money for convenience. PeterM From mwedel at scruz.net Sat Nov 18 01:46:30 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] race/classes notes/thoughts. References: <200011180703.XAA12096@tesla.EECS.Berkeley.EDU> Message-ID: <3A1633D6.DFEA093A@scruz.net> Peter Mardahl wrote: > I would rather that there be a "hard" minimum of 1 on a troll's intrinsic > stats. I'll toss this one in the hopper of "things to fix". I think this is a good idea just for intuitiveness (this of course should probably apply to all race/class combinations). Otherwise, even if it does work, the player doesn't see any change and may get confused. Of course, the statistics command is out there to make that easier to see, but that isn't a mainstream command. > > However, I would also like to see a change in behavior for potions > so that they'll raise negative "intrinsic" stat values. Probably not hard to do. > > *** > > Regarding food/body parts: body parts aren't really that useful > for food because they're heavy and suck up inventory slots. I hate > paging through inventory so I keep my items carried to a minimum. > That means one type of food. I agree - I don't carry them around, but while in the dungeon, they can make excellent supplemental sources (instead of carrying around my food, consume a corpse). In terms of flesh aging, I was thinking that the names should change to be pretty obvious that it has aged, and ideally even have different images which show it in a more decomposed state. The one nice thing this would add is that dungeons would in a sense get cleaned up. But this does give me another idea. Currently, most all monsters motivation is to kill the player and nothing else. It would be interesting to have things like carrion crawlers whose motivation is to find flesh items and eat them (I leave food items out because that would otherwise get annoying). The crawlers would not directly attack stuff, but perhaps creatures adjacant have some random chance of being hit. Motivation for other creatures could be added. Rust monsters should be interested in that big pile of metal - this actually makes things cool - you could bring in bunch of armor on a level where you know a rust monster is and lure it to a spot and then kill the rust monster while it munches on that. > > Like Ballots in Florida, noble rank isn't for everyone. I think being > literate is a reasonable prerequisite for participating in the noble > rank quests. > > However, I don't feel too strongly about it and if there's a consensus > against me on this one, I won't object to someone changing the hall of > quests to use magic mouths. I guess I might care more depending on which other classes/races also lack literacy. If there are other combinations that may be more respectible, then perhaps that is more reason to change that. OTOH, at least for those quests, as much as anything else, some of the lower level ones the king should be happy for anyone to get them done. So maybe a compromise would be for the first 4 or so to not require literacy, and beyond that, the king would also want someone with more noble blood. This also gives the characters enough time to accumulate some money and try and become literate if they want to > Well, for a troll, I actually like to load up on better armor > I buy myself +2 helm, +2 shield, +(best armour I can find in a shop) > +boots. +3 sword is good enough that I wouldn't bother looking. > > If I've already got all that AND money then I'll go hunting for wyverns and > get myself a scale and have a dragonshield. Good point, and I think one of the random quests even has some wyverns in it. As I recall, the +2 helm and +2 shields are not very expensive, so that won't chew up much money, but first time through the shop did have +4 chain which at the time (before doing the ogre quest) was beyond my price range. > I like this idea. In fact, I made a "basic spells shop" in scorn, which > you may not have seen, which supplies basic attack spells: > icestorm, burning hands, small/medium/large snowstorm/fireball and > small/large lightning, and cause light/medium/serious/many wounds. > All at about 3x their normal shop price, the price you pay for > convenience. > > Put in your "good" but "non-artifact" items at a premium price so people > can just exchange money for convenience. Right - no artifact stuff in shops. 3x shop price seems a bit excessive, but I was certainly thinking that some premium to have those items would make sense. For armor, the price may be less relevant, because if you do find better stuff (like the artifact armor), you can always re-sell that equipment and recoup some portion of that money back. Spell books of course get used up so you can't re-sell those after you find a duplicate - you can sell back the duplicate, but that only gets you the normal price. From mwedel at scruz.net Sat Nov 18 01:48:54 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] MD5 crypt in FreeBSD References: <3A154F36.15447.11DC94E@localhost> Message-ID: <3A163466.5C7F2B38@scruz.net> Joris Bontje wrote: > I did a quick and dirty fix, works for me but probably not on > something other than FreeBSD. > Solution use libdes: > ->replace -lcrypt with -ldes > ->replace #include with #include > ->replace crypt(s,p) with des_crypt(s,p) > > Patchfile is attached. Maybe someone with more C know-how can > include this with some nice #ifdef 's Does anyone know if we can safely check for -ldes, and if we find that, assume it is safe/better to use that than normal crypt? I notice my solaris and linux box don't have libdes, so they would still use crypt. From mtx93 at tzi.de Sat Nov 18 04:31:22 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] race/classes notes/thoughts. In-Reply-To: <200011180703.XAA12096@tesla.EECS.Berkeley.EDU> Message-ID: > > One thought I had would be to stock a portion of the shops > with non random > > merchandise. Ie, the armor shop will always have a +2 shield > and helmet (at > > least when initially loaded), if your willing to pay for it. > You could actua > > set a stack of 10 items for that matter. Maybe different shops > should stock > > different good items (so perhaps the shop in scorn is a shield > shop so has go > > shields all the time plus the usual random stuff, while the > shop is santa > > dominion is a good helmet shop, etc). I just wasn't interested > in doing town > > hopping looking for something good in all the shops, but > something like that > > might add character. > > I like this idea. In fact, I made a "basic spells shop" in scorn, which > you may not have seen, which supplies basic attack spells: > icestorm, burning hands, small/medium/large snowstorm/fireball and > small/large lightning, and cause light/medium/serious/many wounds. > All at about 3x their normal shop price, the price you pay for > convenience. > > Put in your "good" but "non-artifact" items at a premium price so people > can just exchange money for convenience. > I also like the idea for more different shops. But it should be not accessible from start on. I really like to be "a snob" in game, like we all :) . So, we should add much more things like the noble quests, room and quest who can you only enter when you have done something before. Why not make shops only to enter when you have a special noble rank? Which this, you can make game play (you now have a reason to become noble) also you can group the items, because you can imagine a minumum level/hours in play a char have when he have noble rank x. Special in medium ranks about 8-15 you start to have some money and lake some items. For spellbooks for example, we have the book shop in detab. Makeing some shops with a good item level can be very useful for game play, because you can fit you for the harder quests. I personal played some times which character, who has the level but lake one or two items he needs for survive the next quest stages. MichToen From andi.vogl at gmx.net Sat Nov 18 06:24:01 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:17 2005 Subject: [CF-Devel] race/classes notes/thoughts. In-Reply-To: <3A160A21.5A79CB18@scruz.net> Message-ID: <000101c0515a$74b50220$749ae23e@kyle> On Sat, 18.11.00 Mark W. wrote: > [...] > I've noticed that pretty much skill scrolls and stat potions > have disappeared from shops (its been a while since I've > actually played a character serious compared to working on > crossfire). Just for the record: Stat potions have been entirely banned from shops, but skill scrolls are still quite common. > After the newbie tower, goblin hole/quest and ogre hole/quest, > my 6'th level barbarian has around 1400 platinum. What do > people generally spend the money on? Immunity postions? They grant godlike powers at any level. (Hope this will change with partial resistances.) > [...] Maybe different shops should stock different good items > (so perhaps the shop in scorn is a shield shop so has good > shields all the time plus the usual random stuff, while the shop > is santa dominion is a good helmet shop, etc). [...] As long as it?s only items with magic bonus (not artifacts) I do agree, nice idea. > This could perhaps even help balance things out if it is difficult > to get to certain towns (it isn't right now, but I think it would > be nice to actually have random monsters in the countryside - > granted, a high level character could clear the path for newbies, > but there could also be more intelligent monster generation for the > wilderness - [...] I also feel that it would be much more fun if travelling on the worldmap was less secure. Did you know that we already have this "random encounter" thing in the code? I never tested it but maybe we could dig that out again. Random encounter means that with every step you take there is a small chance to get teleported on a little map with a few monsters. This "random encounter map" is encircled by (invisible?) teleporters that lead to the player?s original position. We could create a flag for the map-struct to turn that feature on/off seperately for each map, so we can make it happen on worldmaps only. *If* people would like this, the random encounter code should probably be re-done to take advantage of existing random-map features and stuff. Andreas V. From mwedel at scruz.net Sat Nov 18 12:56:24 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] race/classes notes/thoughts. References: <000101c0515a$74b50220$749ae23e@kyle> Message-ID: <3A16D0D8.FFA4636A@scruz.net> Andreas Vogl wrote: > Just for the record: Stat potions have been entirely banned from > shops, but skill scrolls are still quite common. Ok. I've looked a few times, but haven't been able to find any. I know the library always stocks a literacy scroll. > Immunity postions? They grant godlike powers at any level. > (Hope this will change with partial resistances.) So far, the only really useful immunity would be physical - so far the quests I've done haven't include spellcasters. And as it is now, at least in the ogre quest, I was rarely threatened (my one death happened on a trapped door actually). I think I really need to look for a good ring/amulet, since those are very hard to find. > > I also feel that it would be much more fun if travelling on the > worldmap was less secure. > Did you know that we already have this "random encounter" thing in > the code? I never tested it but maybe we could dig that out again. > Random encounter means that with every step you take there is a > small chance to get teleported on a little map with a few monsters. > This "random encounter map" is encircled by (invisible?) teleporters > that lead to the player?s original position. We could create a flag > for the map-struct to turn that feature on/off seperately for each map, > so we can make it happen on worldmaps only. > > *If* people would like this, the random encounter code should probably > be re-done to take advantage of existing random-map features and stuff. It has long been a TODO list thing to make the scale of the world map much larger (I really wanted to wait until i got automatic map tiling done, as that would then make that task much easier). At that point, having monsters out there would work better. The random encounter code has several problems IMO: 1) it takes a 3x3 map space area and turns that into the random encounter. All the terrrain types in that area need to be the same - mixed types don't work, so if you stay on the roads (since none of the roads are 3x3), you are always safe. 2) For characters of high enough level that don't care about the encounters, they become a real pain, as you now have to exit the area, and chances are, you will run into another random encounter not too far away. 3) They map over the existing squares on the map, so those squares are not accessible. This can be a problem is there is some important feature on one of those spaces. Now even with large map scale, there will be a little trickery - for example, you probably don't want the monsters from the mountains (those being tougher monsters) going into the plains and hanging out around a city (perhaps a travelling character saw one of those monsters and ran as fast as they could to the city, so that monster is now waiting for the next person, who may be even lower level (planning on a shorter journey), and gets killed by that monster). So perhaps some form of terrain type is needed for the monsters, or some form of starting place where the monster won't wander more than X squares from it. Even then, there probably needs to be some way to mark the areas of the map - some of the low level random quests of scorn are in the outside mountains, so you probably don't want big nasties in those mountains. Perhaps invisible objects in the map which describe the encounter areas would be the way to go. From mwedel at scruz.net Sat Nov 18 13:02:05 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] new release soon. Message-ID: <3A16D22D.6E35838@scruz.net> I want to make a new release of crossfire before starting on the partial resistance code (since that will probably take a while to debug). I'll probably make the new release sometime early this week (nov 20-22). Please do check in any pending bugfixes you have. Please hold off checking in large scale code changes until after the release. Thanks. From peterm at tesla.EECS.Berkeley.EDU Sat Nov 18 22:10:55 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Cones and someone's mod Message-ID: <200011190410.UAA22549@tesla.EECS.Berkeley.EDU> Didn't someone modify cones so that they don't use 3 objects in the center of them? That doesn't seem to be the case any longer. What happened? PeterM From peterm at tesla.EECS.Berkeley.EDU Sun Nov 19 01:40:48 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] New spells implemented in CVS Message-ID: <200011190740.XAA24833@tesla.EECS.Berkeley.EDU> But not available in books: 1) sanctuary 2) holy rage 3) peace 4) forked lightning 5) flaming aura 6) spiderweb These spells remain to be implemented: 7) conflict 8) vitriol 9) poison fog Is the God code still handing out "special prayers" by picking non-book prayers from the spellist with the appropriate spell path, or did Jan's patch remove that "feature"? I only want these prayers used in the context of balancing the Gods, and I'd rather the next release of the code didn't have these prayers being handed out except as specified in DNH's gods balancing. If the God code still is, then I'll change all these prayers' paths to PATH_NULL to prevent them being handed out in the next release. (Unless the next release includes the gods balancing stuff.) PeterM From peterm at tesla.EECS.Berkeley.EDU Sun Nov 19 01:48:45 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Notes on new prayers Message-ID: <200011190748.XAA06695@tesla.EECS.Berkeley.EDU> 1) Sanctuary: a new class of spell, an "aura". It surrounds the player and hits each square around him with AT_COUNTERSPELL. This provides a good but not foolproof defense against cones, magic projectiles, and explosions. 2) Holy Rage: Basically the spell of haste, constitution, strength, dex, regeneration, armour, and improved weapon class all in one prayer. This will require some balancing. I'm considering restricting it so one rage in effect at a time: no additive rages. 3) Peace: Converts monsters into peaceful pushovers. When it does that it assigns experience points to the caster. Conversion success follows the same rule as deathstrike. Peace flows in a cone spell in front of the caster. 4) Forked lighting: Lightning will fork into daughter lightnings off at angles. The daughter forks may also fork. Damage is halved at every fork, or actually, dam= dam/2 +1; It's sort of like a narrow cone. 5) Flaming Aura: Another Aura spell, this one hits the area adjacent to the caster with AT_FIRE. 6) Spiderweb: A cone spell, leaves behind spider webs to slow monsters or players who walk into the web. PeterM From echter at informatik.uni-rostock.de Sun Nov 19 14:11:16 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] New spells implemented in CVS In-Reply-To: <200011190740.XAA24833@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Sat, Nov 18, 2000 at 11:40:48PM -0800 References: <200011190740.XAA24833@tesla.EECS.Berkeley.EDU> Message-ID: <20001119211116.A28505@hokkaido.informatik.uni-rostock.de> On Sat, Nov 18, 2000 at 11:40:48PM -0800, Peter Mardahl wrote: > Is the God code still handing out "special prayers" by picking > non-book prayers from the spellist with the appropriate spell > path, or did Jan's patch remove that "feature"? My patch will change that, but it's still not applied because I haven't found time to test it extensively yet. I suggest setting the prayers' paths to PATH_NULL, and putting the real path in a comment after it. I'll set the correct paths when I apply my patch. -- Jan From echter at informatik.uni-rostock.de Sun Nov 19 14:20:45 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Comments on current Gods proposal In-Reply-To: <200011172341.PAA22435@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Fri, Nov 17, 2000 at 03:41:03PM -0800 References: <200011172341.PAA22435@tesla.EECS.Berkeley.EDU> Message-ID: <20001119212045.B28505@hokkaido.informatik.uni-rostock.de> On Fri, Nov 17, 2000 at 03:41:03PM -0800, Peter Mardahl wrote: > Sanctuary will DO elemental shield. In fact, it was be hard Does conterspell work against non-magical dragon breath? Elemental shield will do, and it also protects against direct hits. Furthermore, elemental and earth shield could give stronger (or weaker) protections compared to other spells/prayers when partial resistances are implemented. > "earth shield" mildly concerns me: it is just a clerical > version of the "armour" spell. The name also makes me think that > a circle of earth will rear up and circle the player in 8 squares. It can also reduce AC, like a real shield. > "ironwood skin"? I don't mind. I can hardly ever think of good names. ;-) -- Jan From peterm at tesla.EECS.Berkeley.EDU Sun Nov 19 16:56:32 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Comments on current Gods proposal In-Reply-To: Your message of "Sun, 19 Nov 2000 21:20:45 +0100." <20001119212045.B28505@hokkaido.informatik.uni-rostock.de> Message-ID: <200011192256.OAA24594@tesla.EECS.Berkeley.EDU> > On Fri, Nov 17, 2000 at 03:41:03PM -0800, Peter Mardahl wrote: > > Sanctuary will DO elemental shield. In fact, it was be hard > > Does conterspell work against non-magical dragon breath? Elemental > shield will do, and it also protects against direct hits. Furthermore, > elemental and earth shield could give stronger (or weaker) protections > compared to other spells/prayers when partial resistances are > implemented. Yes, right now counterspell can stop dragon breath. The reason for this is this: nearly every monster casts all spells as abilities rather than as magic. Counterspell would be useless if it didn't ignore AT_MAGIC. > > "earth shield" mildly concerns me: it is just a clerical > > version of the "armour" spell. The name also makes me think that > > a circle of earth will rear up and circle the player in 8 squares. > > It can also reduce AC, like a real shield. > > > "ironwood skin"? > > I don't mind. I can hardly ever think of good names. ;-) Should be easy enough to implement. I'll go ahead and do it. PeterM From andi.vogl at gmx.net Sun Nov 19 20:25:57 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] permanent apartments Message-ID: <000101c05299$3dab8a20$ff9be23e@kyle> Along with lots of other stuff (map fixes, cosmetics, new stuff) I have added permanent appartments to the following cities: - St. Dominion - Caterham (dtabb) - Nuernberg (pupland) - Scorn (not added, but still there) I think those are basically enough, but maybe I will still add one to Wolfsburg and Brest. Has anyone special preferences that I left out? Most apartments contain teleporters (very expensive to buy) that lead to other cities in close range. I like this because that way the apartments work as "base of operations" for a certain area. But now here?s my real important point: While experimenting with those perm. apartments I realized that there is still some very nasty bug involved with those "personal unique maps": When I enter such an apartment for the first time, the map doesn?t get saved - probably it doesn?t even get created in the player-dir. This is really annoying because the first action is usually paying the entrance fee... =/ When I enter again after a while, then at some time, it starts working. Please look for that bug, it can?t be very hard to find. PS.: I have done some work on the pngs lately. Correcting the worst flaws... It really looks better now, but there is still a lifetime-job left. Andreas V. From peterm at alfven.EECS.Berkeley.EDU Sun Nov 19 19:04:36 2000 From: peterm at alfven.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] New prayers in CVS now: Message-ID: <200011200104.RAA32059@alfven.EECS.Berkeley.EDU> PeterM 2000/11/18: New spells added: 1) Sanctuary (aura of counterwall) 2) Peace (make monsters unable to fight) 3) Spiderweb (create spider webs) 4) rage (heroism, armour, haste, regenration combined) 5) forked lightning (lightning which forks and strikes ) 6) flaming aura (aura of fire) 7) vitriol combined ball/cone/pool acid attack spell 8) vitriol splash (spell for internal use only) 9) ironwood skin (clerical version of armour spell) Not implemented: 10) poison fog: I need help with concept. what is POISON FOG supposed to DO? Notes: Sanctuary and flaming aura are implemented as auras, which are basically inventory items which attack squares surrounding the player. Peace and spiderweb are the result of a new feature of cone. If a cone has an "other arch" it will drop "other arch" wherever the cone goes. In the case of spiderweb, it drops a spiderweb. For Peace, it drops a peacemaker object, which attacks the square it is on. If the attack is successful, the victim is made "peaceful" various peaceful flags are set, dam=0, sp=0, Pow=0, exp=0. Forked lighting: lightning mover modified so that if the bolt archetype has a Dex, it might split into daughter bolts. Daughter bolts get 1/2 +1 the parents damage. Vitriol is a strange new spell. It is fired like a fireball, hits like a missile, explodes like a cone, and drops a pool of acid wherever the cone goes. The pool also continues to damage. rage is a possibly-too-powerful prayer which grants all of heroism (str, dex, con), armour, regeneration, and haste, all in one go. Oh, and some weapon class too. ironwood skin is simply a clerical version of armour. PeterM From peterm at alfven.EECS.Berkeley.EDU Sun Nov 19 19:09:41 2000 From: peterm at alfven.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] I forgot to mention the prayer of conflict Message-ID: <200011200109.RAA32065@alfven.EECS.Berkeley.EDU> Conflict sets a monster (if affected) to attacking whatever monster is nearest it. The prayer of conflict grants no experience to the caster. (Should I change that?) From peterm at alfven.EECS.Berkeley.EDU Sun Nov 19 19:42:21 2000 From: peterm at alfven.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Does gcfclient have a maintainer? Message-ID: <200011200142.RAA32099@alfven.EECS.Berkeley.EDU> Server requests for colored text are not being honored by gcfclient.... PM From mwedel at scruz.net Mon Nov 20 00:04:22 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Does gcfclient have a maintainer? References: <200011200142.RAA32099@alfven.EECS.Berkeley.EDU> Message-ID: <3A18BEE6.3801BDAB@scruz.net> Peter Mardahl wrote: > > Server requests for colored text are not being honored by > gcfclient.... Best I know, no one is officially maintaining/is reponsible for the gcfclient. I've done some limited work on that client. As previously said, what I would really want to do is change the color information to not be color but instead go into different categories of messages so that the client can sort them. This could also make some things easier - I know when David originally wrote the gtk client, determining multi line queries were difficult to determine - an option for the message could denote it should be applied as part of a query. From mwedel at scruz.net Mon Nov 20 00:07:44 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] permanent apartments References: <000101c05299$3dab8a20$ff9be23e@kyle> Message-ID: <3A18BFB0.6C02055@scruz.net> Andreas Vogl wrote: > While experimenting with those perm. apartments I realized that > there is still some very nasty bug involved with those "personal > unique maps": > When I enter such an apartment for the first time, the map doesn?t > get saved - probably it doesn?t even get created in the player-dir. > This is really annoying because the first action is usually paying > the entrance fee... =/ > When I enter again after a while, then at some time, it starts > working. Please look for that bug, it can?t be very hard to find. I think I looked at this before, and was not able to reproduce it. Note that the permanent apartments are like the other maps - they don't necessarily get saved out to disk immediately after a person has left the map (apartment in this case). Perhaps some maps should get saved out immediately. From peterm at tesla.EECS.Berkeley.EDU Mon Nov 20 01:23:55 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] possible problems with permanent apartments In-Reply-To: Your message of "Sun, 19 Nov 2000 22:07:44 PST." <3A18BFB0.6C02055@scruz.net> Message-ID: <200011200723.XAA04979@tesla.EECS.Berkeley.EDU> > I think I looked at this before, and was not able to reproduce it. I also have NOT noticed this. I *did* notice that if I foolishly killed crossfire before it saved the map, the perm. apartment wouldn't save, and I lost stuff. PM > Note that the permanent apartments are like the other maps - they don't > necessarily get saved out to disk immediately after a person has left the map > (apartment in this case). Perhaps some maps should get saved out immediately >. > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mtx93 at tzi.de Mon Nov 20 04:51:40 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Does gcfclient have a maintainer? In-Reply-To: <3A18BEE6.3801BDAB@scruz.net> Message-ID: Hi I near finishing the dx client, also sound work fine now and i have do some work in the gcfclient working me through the code, so i have done work. Not in the X code, more in the cmd and client/server communication. I have some idea how we can useful extend the commands. for example at this time we a range of very small cmds, following one action. if you hit some, you get (perhaps) - a draw info - a sound cmd and in some cases - stats cmd (exp) - map cmd Its only an example. What i mean is, that cf got some more complex in the past and more and more features and actions are implemented. And which every feature, some is added. I strongly prefer the SETUP cmd, i talk about some weeks ago. I found some glitches and artifacts how the client works. In old times, the client examine the drawinfo for information. There are still many places where the windows/gcfclient do it. A real real bad part which needs a lifting is the way, the client get the nrof items and the type of items. Both works with some creepy text parsing. The type works with a buggy table, identify only 80% of the items. Also old items like the wizard cloak and 70% of all non standard weapons are identified as type "unknown". Also, gloves for example are identified as type "boot"... I don't wear gloves on my foots most times. I have finished a inventory puppy. There you see, what you have actually applied. It look great and its very useful. With the old code, there is no real good way to implement and identify all item types (which i need to give the puppy the right armor on the right slot). For this and for some more it will be useful to make a new version of client, include the SETUP cmd for what the client wants in which way and include more information direct in the cmd, like the item type and nrof. When you look in the code of the cmds, you will see that you can do most changes without more bandwith use, in many case you can make the cmds smaller (putting the nrof in a int value for example). ** Also, i want much more sound infos. I will do some work in it, because i know a friend of me, who has do a lot of sounds for a prof. full prize game. He has a bunch of cool sounds for a rp game he don't use and when i ask him and can show him some useful way we use it, he will give it us for free!! ** What will be very useful when we add more (and more complex) sound actions, is a BATCH cmd! Lets name it BATCH. It works very simple, first value is the length of the batch, perhaps next is the number of cmds in the batch (it can avoided if we count the length), next the cmd. cmd is still . With it, we can easy include a snd cmd for more actions like find traps, disarm traps success/not done/failed and of course color information and much more cmds. If we include the new protection code, i strongly prefer to show the player the value. Handling it with rod of protection will be a pain in the ass. The player MUST see it, it will be to confusing. I want die i the game because i do bad actions, not why i get tired of zapping a rod or counting values. Also, for this we can extend the STAT cmd, drop the drawinfo for protection and let the client show/info the player. So, please let us work together in the client stuff. MichToen > > Server requests for colored text are not being honored by > > gcfclient.... > > Best I know, no one is officially maintaining/is reponsible for > the gcfclient. > I've done some limited work on that client. > > As previously said, what I would really want to do is change the color > information to not be color but instead go into different > categories of messages > so that the client can sort them. This could also make some > things easier - I > know when David originally wrote the gtk client, determining > multi line queries > were difficult to determine - an option for the message could > denote it should > be applied as part of a query. > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From bugs at real-time.com Mon Nov 20 02:10:02 2000 From: bugs at real-time.com (bugs@real-time.com) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Your Bugzilla buglist needs attention. Message-ID: <200011200810.eAK8A2Y10056@crusader.real-time.com> [This e-mail has been automatically generated.] You have one or more bugs assigned to you in the Bugzilla bugsystem (http://bugzilla.real-time.com/) that require attention. All of these bugs are in the NEW state, and have not been touched in 7 days or more. You need to take a look at them, and decide on an initial action. Generally, this means one of three things: (1) You decide this bug is really quick to deal with (like, it's INVALID), and so you get rid of it immediately. (2) You decide the bug doesn't belong to you, and you reassign it to someone else. (Hint: if you don't know who to reassign it to, make sure that the Component field seems reasonable, and then use the "Reassign bug to owner of selected component" option.) (3) You decide the bug belongs to you, but you can't solve it this moment. Just use the "Accept bug" command. To get a list of all NEW bugs, you can use this URL (bookmark it if you like!): http://bugzilla.real-time.com/buglist.cgi?bug_status=NEW&assigned_to=crossfire-devel@lists.real-time.com Or, you can use the general query page, at http://bugzilla.real-time.com/query.cgi. Appended below are the individual URLs to get to all of your NEW bugs that haven't been touched for a week or more. You will get this message once a day until you've dealt with these bugs! http://bugzilla.real-time.com/show_bug.cgi?id=33 http://bugzilla.real-time.com/show_bug.cgi?id=34 From andi.vogl at gmx.net Mon Nov 20 21:05:07 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] changing WoR (Word of Recall) Message-ID: <000401c05367$dbc60ae0$c6a7e23e@kyle> Now that the savebed-respawn-after-death works fine, and new Permanent Apartments have been added, the question arises: What shall we do with WoR (Word of Recall)? The aim of the savebed feature was to free players from the bounds of scorn, allowing them to choose their home town at own will. But now if someone decides to rise his character in Caterham (dtabb), a WoR pointing to scorn is nothing but a pain in the rare. I propose to make WoR pointing to the same spot that you would visit after death - the last-applied savebed. Advantage: Veeeery easy to do, as well as simple to understand and to play. Players are 100% independant from scorn. Disadv.: In future we must be very careful where to put savebeds. IF a player manages to get stuck on a savebed-map he is in real BIG trouble. Tell me what you all think =) Andreas V. From peterm at tesla.EECS.Berkeley.EDU Mon Nov 20 22:28:02 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:18 2005 Subject: [CF-Devel] Strange behavior? dead objects benig hit? Message-ID: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU> UG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object victim (arch cwall_2_1_2, name wall) already dead in hit_player() BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object victim (arch cwall_2_1_2, name wall) already dead in hit_player() BUG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object I'm getting lots of these sorts of messages. Curreent CVS snapshot. Perhaps we should hold off on a release for a little while? PetrM From mwedel at scruz.net Mon Nov 20 22:36:20 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] Does gcfclient have a maintainer? References: Message-ID: <3A19FBC4.A29EE78C@scruz.net> Michael Toennies wrote: > > for example at this time we a range of very small cmds, following one > action. > > if you hit some, you get (perhaps) > - a draw info > - a sound cmd > and in some cases > - stats cmd (exp) > - map cmd > > Its only an example. What i mean is, that cf got some more complex > in the past and more and more features and actions are implemented. > And which every feature, some is added. As I've said before, there is no compelling reason that the number of commands that gets sent back and forth need to be reduced. And personally, I find it much easier to debug the 4 individual commands than if you had 1 mega command that includes all that stuff. And in that mega command, you really are not saving that much space, as you still need to have markers to say if you are including draw info, stats, sound, etc, and some of those also need legnth parameters. > I found some glitches and artifacts how the client works. > In old times, the client examine the drawinfo for information. > There are still many places where the windows/gcfclient do it. > > A real real bad part which needs a lifting is the way, the client > get the nrof items and the type of items. Both works with some creepy > text parsing. > The code is still there for legacy reasons. I don't believe the server will use the older item command anymore, and always uses the item1 protocol command that includes the nrof as a seperate field so the client does not need to reverse engineer the name. If there are any cases were the server is still using the item command, that should be fixed up. It may be getting near time to remove all the depreciated commands and code from the protocol and client, but generally, there has not been a major reason to do so - they may still provide useful if anyone is playing on older servers, and the code pretty much works. > > The type works with a buggy table, identify only 80% of the items. > Also old items like the wizard cloak and 70% of all non standard weapons > are identified as type "unknown". Also, gloves for example are identified as > type "boot"... I don't wear gloves on my foots most times. The table can be easily edited at least for the unix client. I've generally tried to fill in missing types. Note that for the unix client at least, the item_types table is just used for grouping and nothing else. When making up that table, I did not have a problem grouping the footware and handware together, since they are fairly uncommon items. If its a big deal, it is very easy to change that. > For this and for some more it will be useful to make a new version of > client, include > the SETUP cmd for what the client wants in which way and include more > information direct > in the cmd, like the item type and nrof. nrof is already done - see above. item type is sort of odd, in that even on the server, I personally think that there are many more item types than you might find useful. Also, one thing the client does is that the item_types file lets you order where the items appear in your inventory, so things like containers are at the top, followed by weapons, armor, etc. The item numbers that the server uses are not in any meaningful order. For example, here is the order if I extract the entries that may actually appear in the players inventory: #define ROD 3 #define POTION 5 #define FOOD 6 #define POISON 7 #define BOOK 8 #define CLOCK 9 #define ARROW 13 #define BOW 14 #define WEAPON 15 #define ARMOUR 16 #define SPECIAL_KEY 21 #define SHIELD 33 #define HELMET 34 #define HORN 35 #define MONEY 36 #define GRAVESTONE 38 #define AMULET 39 And I'll snip it there. But just for note, WAND is type 109, which is no where near rod (#3 up there). I personally like my wands and rods stuck near each other in the inventory. Likewise, if you look at the above, the special key type is between the armor and shields, and gauntlets and boots don't even appear on the list. So using the server idea of item numbers if of very limited use if you want your items sorted together. Now sure, you could create a mapping table in the client that sorts these, but you run into the same problem we have right now - new items get added, and so your mapping table is out of date. Also, in some cases, the client should not know about the different item types. For example, a player (client) should not know if the item type is food or poison. And in many maps, certain item types are disguised with the name & image of another item type. I know that at least one map used a shovel as a special key - if you could instantly see that shovel was a special key, that would make things less interesting, and in some maps, it may basically ruin the quest if you know what the special item happens to be. In less than an hour of work, the item_types file for the client could be made 100% complete. Of course, as new archetypes are added, it may get out of date again, but the same could be true when new item types are added. > ** Also, i want much more sound infos. I will do some work in it, because i > know a friend of > me, who has do a lot of sounds for a prof. full prize game. He has a bunch > of cool sounds for > a rp game he don't use and when i ask him and can show him some useful way > we use it, he will > give it us for free!! ** He has to agree to give us the sounds under the GPL for it to acceptable, as this is what the rest of the game is under (or I guess we could make an alternate sound distribution with a different license). As I said previously, sound code in crossfire has really not changed much in a long while, and is probably one of the more out of date areas. > > What will be very useful when we add more (and more complex) sound > actions, is a BATCH cmd! > > Lets name it BATCH. It works very simple, first value is the length of the > batch, > perhaps next is the number of cmds in the batch (it can avoided if we count > the length), > next the cmd. cmd is still . > > With it, we can easy include a snd cmd for more actions like find traps, > disarm traps > success/not done/failed and of course color information and much more cmds. I fail to see how the batch command makes any difference. IT is no different than just sending a bunch of commands - all you are doing is encapsulating them in another layer. Just send a bunch of sound commands. the result is the same. > > If we include the new protection code, i strongly prefer to show the player > the value. > Handling it with rod of protection will be a pain in the ass. The player > MUST see it, > it will be to confusing. I want die i the game because i do bad actions, not > why i get > tired of zapping a rod or counting values. > > Also, for this we can extend the STAT cmd, drop the drawinfo for protection > and let the client > show/info the player. I have no problem extending the stat command when we do the partial resistance code. I don't see a big reason to drop the drawinfo message. Sure, you may not need it, but it doesn't really hurt anything. Especially if the expiration of the spell drops your resistance by 10 points - you may not notice that in the stat, but you may still want to re-cast that protection spell. It does seem to me that a bit of stuff that perceive self tells the player should really be known but there is no other way to really find out. For example, many races start with some special ability or another (see in dark, some level of protection/vulnerability/etc), but there is really know way of know that fact. Likewise, if you gods gives you something or takes it away, you would think that the character should have that knowledge, but once again, save for perceive self, there is no way to get that information. As time has passed, more information has made it into various commands (like skills and statistics). And perceive self seems like it is generally a spell that is very seldom used. Is there really anything that perceive self tells you that is actually useful that shouldn't be common knowledge (at least to your character?) From mwedel at scruz.net Mon Nov 20 22:44:20 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] Accidents and neglected players References: <200011070912.BAA28352@tesla.EECS.Berkeley.EDU> Message-ID: <3A19FDA4.44F3359B@scruz.net> Peter Mardahl wrote: > Well, someone proposed no_magic. I agree. However, this doesn't > address the issue of the guy who leaves his char logged in, and > his char dies 100x from starvation before he comes back. Going back to a sort of old message: With the return to last savebed upon death patch, the one thing I could perhaps think would be something: If the character is about to die, and is standing on their 'home' savebed, just save them off and drop the connection to the client (unfortunately, about to die could be hard to determine, but perhaps an easier thing would be if the character dies of starvation on their home savebed, give them 100 food, save them off, and drop the connection). The 100 food is sort of a bonus, but really not a big deal. I mainly include it so the character has enough time to go out and buy/find some food before they die again. Presuming that all savebeds are in towns were one can find food, that should be enough. When I say 100 food, I mean give them 100 food points to their character, and not actually any food items in their inventory. So you really can't abuse it, and if you are actually that desperate (getting 100 food points makes a difference), you are probably in pretty poor shape anyways. From andi.vogl at gmx.net Mon Nov 20 20:39:17 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] bugfix: unique maps In-Reply-To: <200011200723.XAA04979@tesla.EECS.Berkeley.EDU> Message-ID: <000001c05364$425b7960$c6a7e23e@kyle> Peter M. wrote: > > I think I looked at this before, and was not able to > > reproduce it. [...] > > I also have NOT noticed this. [...] Ignoring the bug was not exactly the kind of solution I had in mind... =P Here?s how to reproduce it (with current cvs-version): - make a new character - enter one of the perm. apartments (for the first time) - drop some gold to the ground and leave the map - re-enter the apartment: the gold is gone (because the unique map did not get created in the playerdir yet). I?ve already written a bugfix for that problem. It does the following: Every time a player leaves a unique map, there?s a check if that map already exists in the player-dir. If not, the unique map will be saved instantly after the player left. I?m not sure weither this is really the most efficient way to do it, but at least it works fine. I have attached the diff file (server/main) for my bugfix, so if someone got better ideas please tell me. Andreas V. -------------- next part -------------- A non-text attachment was scrubbed... Name: main.c.patch Type: application/octet-stream Size: 1275 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001121/bb9ad28b/main.c.obj From echter at informatik.uni-rostock.de Tue Nov 21 04:51:21 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] Strange behavior? dead objects benig hit? In-Reply-To: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Mon, Nov 20, 2000 at 08:28:02PM -0800 References: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU> Message-ID: <20001121115121.A20810@hokkaido.informatik.uni-rostock.de> On Mon, Nov 20, 2000 at 08:28:02PM -0800, Peter Mardahl wrote: > BUG: get_attack_mode(): freed object Indeed, very serious problem. Even though the checks in get_attack_mode() should prevent the attack code from touching this object, there is still the caller of attack_ob()/hit_player() that is using freed objects. A stack trace is needed to identify the caller. I've no idea how to reproduce this problem, I've never seen this message. > victim (arch cwall_2_1_2, name wall) already dead in hit_player() hit_player() was called with an object that doesn't have FLAG_ALIVE, or that has stats.hp < 0. This is only a debugging message I added recently, the check for dead objects was already there. Nevertheless, it would be quite interesting to know what code tries to damage dead objects. Again, stack trace needed. > I'm getting lots of these sorts of messages. > Curreent CVS snapshot. > > Perhaps we should hold off on a release for a little while? I think we should hold off the release until the "freed object" bug is fixed. This kind of bug can have very nasty effects (segmentation fault, creating objects that are in their own inventory (op->inv loop), random other object corruption), but is easy to fix when a stack trace is known (usually only a missing was_destroyed() check in the caller). -- Jan From lusena at cs.uky.edu Tue Nov 21 18:23:35 2000 From: lusena at cs.uky.edu (Chris Lusena) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] bugfix: unique maps In-Reply-To: <000001c05364$425b7960$c6a7e23e@kyle>; from andi.vogl@gmx.net on Tue, Nov 21, 2000 at 03:39:17AM +0100 References: <200011200723.XAA04979@tesla.EECS.Berkeley.EDU> <000001c05364$425b7960$c6a7e23e@kyle> Message-ID: <20001121192335.I13295@mars.cs.engr.uky.edu> On Tue, Nov 21, 2000 at 03:39:17AM +0100, Andreas Vogl wrote: [snip] > I?ve already written a bugfix for that problem. It does > the following: > Every time a player leaves a unique map, there?s a check > if that map already exists in the player-dir. If not, > the unique map will be saved instantly after the player left. Ok, except just save the map if changed please. There is an old cheat/do yourself in: 1) put items into your apartment, 2) wait until the apartment gets saved, 3) take items out of apartment, 4) save your self, 5) crash server. 6) Items still in apartment and on your person. 7) wash, rinse, repeat. I have benefited and been bitten by this, I'd really like it to go away. > > I?m not sure weither this is really the most efficient > way to do it, but at least it works fine. I have attached the > diff file (server/main) for my bugfix, so if someone got > better ideas please tell me. > > > Andreas V. -- Chris Lusena Office: 762 AH Department of Computer Science Phone: 859-257-3678 773 Anderson Hall Fax: 859-323-1971 University of Kentucky Email: lusena@cs.uky.edu Lexington, KY 40506-0046 U.S.A. http://www.cs.uky.edu/~lusena From pjka at cc.jyu.fi Tue Nov 21 06:06:41 2000 From: pjka at cc.jyu.fi (Pertti Karppinen (OH6KTR)) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] changing WoR (Word of Recall) In-Reply-To: <000401c05367$dbc60ae0$c6a7e23e@kyle>; from andi.vogl@gmx.net on Tue, Nov 21, 2000 at 04:05:07AM +0100 References: <000401c05367$dbc60ae0$c6a7e23e@kyle> Message-ID: <20001121140641.A22837@tukki.jyu.fi> On Tue, Nov 21, 2000 at 04:05:07AM +0100, Andreas Vogl wrote: > I propose to make WoR pointing to the same spot that you > would visit after death - the last-applied savebed. Sounds good. > Advantage: Veeeery easy to do, as well as simple to > understand and to play. Players are 100% > independant from scorn. > Disadv.: In future we must be very careful where to put > savebeds. IF a player manages to get stuck on > a savebed-map he is in real BIG trouble. I see 2 options for this last one. 1) We make damned sure, that every map with savebed in it is working 100%. 2) Make a new spell, that tranports You to Your chosen God's 'main' temple. 'religous retreat' or 'houl yearning' or something like that. -- BSc. Pertti Karppinen |'Bridge Players | Systems Designer, University of Jyvaskyla, Finland | Do | http://www.iki.fi/~pjka/ | Office : +358 14 260 2088 | It | HAM: OH6KTR QTH: KP22UF | Cellular: +358 40 564 0786 | on the Table' | From mtx93 at tzi.de Tue Nov 21 07:26:11 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] Does gcfclient have a maintainer? In-Reply-To: <3A19FBC4.A29EE78C@scruz.net> Message-ID: > > > > for example at this time we a range of very small cmds, following one > > action. > > > > if you hit some, you get (perhaps) > > - a draw info > > - a sound cmd > > and in some cases > > - stats cmd (exp) > > - map cmd > > > > Its only an example. What i mean is, that cf got some more complex > > in the past and more and more features and actions are implemented. > > And which every feature, some is added. > > As I've said before, there is no compelling reason that the > number of commands > that gets sent back and forth need to be reduced. And > personally, I find it > much easier to debug the 4 individual commands than if you had 1 > mega command > that includes all that stuff. And in that mega command, you > really are not > saving that much space, as you still need to have markers to say > if you are > including draw info, stats, sound, etc, and some of those also need legnth > parameters. The compelling reason will come in the future, the game grow and the data we send also. I find the idea, to send the triggered cmds of one action as a batch not so strange. With the meta server and the dx client, we will got some more players, that will bring the some new performance problems. In my opinion the batch question will come faster then we think. Also, there is no "mega command", all what you do is to send the cmds as one package, accessing the socket one time, and use the BATCH cmd as a meta tag, telling the client nothing more than the data are a row of cmds. All what you do is, to assemble the normal cmds from the batch and work through it in the same way you got them as single cmd from the socket. There is no difference in debugging or something else. A fact is, that if you play with sound and you have some lag like i yesterday, the game starts to run creepy because you got the cmds for a action (attacking or opening doors for example) not exactly, means you got a message, after some time the sound, etc. Because a sound need a good timing with your game action, the effect is bad. This will be avoided if you send it in a batch. > > I found some glitches and artifacts how the client works. > > In old times, the client examine the drawinfo for information. > > There are still many places where the windows/gcfclient do it. > > > > A real real bad part which needs a lifting is the way, the client > > get the nrof items and the type of items. Both works with some creepy > > text parsing. > > > The code is still there for legacy reasons. I don't believe the > server will > use the older item command anymore, and always uses the item1 > protocol command > that includes the nrof as a seperate field so the client does not need to > reverse engineer the name. Ah yes, i see, i jump in the false routine. Think i access it when i testing, wrote it down as glitch. > If there are any cases were the server is still using the item > command, that > should be fixed up. It may be getting near time to remove all > the depreciated > commands and code from the protocol and client, but generally, > there has not > been a major reason to do so - they may still provide useful if anyone is > playing on older servers, and the code pretty much works. I aggree, but much better is to rip of this artifact and put the useful code in a oldstuff module, where interested people can use it. There is really much unused and odd stuff in the client, i work through much unused structure parts or even double implemented stuff from older versions. > > > > The type works with a buggy table, identify only 80% of the items. > > Also old items like the wizard cloak and 70% of all non standard weapons > > are identified as type "unknown". Also, gloves for example are > identified as > > type "boot"... I don't wear gloves on my foots most times. > > The table can be easily edited at least for the unix client. > I've generally > tried to fill in missing types. > > Note that for the unix client at least, the item_types table is > just used for > grouping and nothing else. When making up that table, I did not > have a problem > grouping the footware and handware together, since they are > fairly uncommon > items. If its a big deal, it is very easy to change that. > > > For this and for some more it will be useful to make a new version of > > client, include > > the SETUP cmd for what the client wants in which way and include more > > information direct > > in the cmd, like the item type and nrof. > > nrof is already done - see above. > > item type is sort of odd, in that even on the server, I > personally think that > there are many more item types than you might find useful. Also, > one thing the > client does is that the item_types file lets you order where the > items appear in > your inventory, so things like containers are at the top, > followed by weapons, > armor, etc. > > The item numbers that the server uses are not in any meaningful > order. For > example, here is the order if I extract the entries that may > actually appear in > the players inventory: > > #define ROD 3 > #define POTION 5 > #define FOOD 6 > #define POISON 7 > #define BOOK 8 > #define CLOCK 9 > #define ARROW 13 > #define BOW 14 > #define WEAPON 15 > #define ARMOUR 16 > #define SPECIAL_KEY 21 > #define SHIELD 33 > #define HELMET 34 > #define HORN 35 > #define MONEY 36 > #define GRAVESTONE 38 > #define AMULET 39 > > And I'll snip it there. But just for note, WAND is type 109, > which is no where > near rod (#3 up there). > > I personally like my wands and rods stuck near each other in the > inventory. > Likewise, if you look at the above, the special key type is > between the armor > and shields, and gauntlets and boots don't even appear on the list. > > So using the server idea of item numbers if of very limited use > if you want > your items sorted together. Now sure, you could create a mapping > table in the > client that sorts these, but you run into the same problem we > have right now - > new items get added, and so your mapping table is out of date. > > Also, in some cases, the client should not know about the different item > types. For example, a player (client) should not know if the > item type is food > or poison. And in many maps, certain item types are disguised > with the name & > image of another item type. I know that at least one map used a > shovel as a > special key - if you could instantly see that shovel was a > special key, that > would make things less interesting, and in some maps, it may > basically ruin the > quest if you know what the special item happens to be. > > In less than an hour of work, the item_types file for the client > could be made > 100% complete. Of course, as new archetypes are added, it may > get out of date > again, but the same could be true when new item types are added. The food and poison food is a good example. What of course the client should not know is, that one is good food and the other poison. But what it should know is that booth are from type "TYPE_EATABLE". The use of the table is really really bad coding. The names and stuff in there should not be hard coded in any module! They are generated stuff by the map editor. What you do with at runtime generated stuff like "xyz bodypart"? A real new type like a "leg armor" is something real new, but a new helmet type armor should not be identified by name. The type helmet is real, it IS somewhere in the server stuff defined, because the server can determinate from all armor type the correct part type, when you apply a "xxy" helm he automatically can remove the old one. Same for gauntlets, the server knows the difference between shoes and gauntlets. This is, what the client should know because - the player need the info - he will get it automatically when he applys a armor type - Its nonsense that a player should not see/know the difference between a boot and a gauntlet item (except trolls, ok :) Also your shovel example is false. The client knows about all keys. If a item is type key and you have a applied keyring in your inventory, the item is put automatically in from the server! This is somewhat annoying in the noble quest where you find the broken pentagram part or whatever, because you got the message "you got broken..." but you will not find it in your inventory because it is put in your keyring! Cost me a minute to find it and i know 2 newbies who get confused by it very much. Its true what you say, that the way the server handle and using items including the #define you show should be hidden from client and player. But the table is the false way, this information is from the same matter not for internal client use! This can be avoided if we define a CLIENT_TYPE_XX. This the type, the user/client identify the item, and when we make it smart it is the type that the server can force the client to know it as it. I really like my puppy wher eyousee what you have actually applied at the right place. All what the client must now are the this: CLIENT_TYPE_ CLIENT_TYPE_ // perhaps we got different weapon skills in the feature? CLIENT_TYPE_EATABLE CLIENT_TYPE_KEY CLIENT_TYPE_MONEY CLIENT_TYPE_GEM // perhaps same as money CLIENT_TYPE_TOOL // symbol/lockpick/talisman CLIENT_TYPE_BOWS CLIENT_TYPE_MAGICSTAFF ... The real differences are only known by the server like the poison - food. > > > ** Also, i want much more sound infos. I will do some work in > it, because i > > know a friend of > > me, who has do a lot of sounds for a prof. full prize game. He > has a bunch > > of cool sounds for > > a rp game he don't use and when i ask him and can show him some > useful way > > we use it, he will > > give it us for free!! ** > > He has to agree to give us the sounds under the GPL for it to > acceptable, as > this is what the rest of the game is under (or I guess we could make an > alternate sound distribution with a different license). As I > said previously, > sound code in crossfire has really not changed much in a long > while, and is > probably one of the more out of date areas. It should be no problem with it, so lets do some work here in the next time, it will give us great sounds. > > > > What will be very useful when we add more (and more complex) sound > > actions, is a BATCH cmd! > > > > Lets name it BATCH. It works very simple, first value is the > length of the > > batch, > > perhaps next is the number of cmds in the batch (it can avoided > if we count > > the length), > > next the cmd. cmd is still . > > > > With it, we can easy include a snd cmd for more actions like find traps, > > disarm traps > > success/not done/failed and of course color information and > much more cmds. > > I fail to see how the batch command makes any difference. IT is > no different > than just sending a bunch of commands - all you are doing is > encapsulating them > in another layer. Just send a bunch of sound commands. the > result is the same. Just see my comment above. > > > > If we include the new protection code, i strongly prefer to > show the player > > the value. > > Handling it with rod of protection will be a pain in the ass. The player > > MUST see it, > > it will be to confusing. I want die i the game because i do bad > actions, not > > why i get > > tired of zapping a rod or counting values. > > > > Also, for this we can extend the STAT cmd, drop the drawinfo > for protection > > and let the client > > show/info the player. > > I have no problem extending the stat command when we do the > partial resistance > code. I don't see a big reason to drop the drawinfo message. > Sure, you may not > need it, but it doesn't really hurt anything. Especially if the > expiration of > the spell drops your resistance by 10 points - you may not notice > that in the > stat, but you may still want to re-cast that protection spell. No big reason to drop the drawinfo, but when you extend the the stat cmd, it can be generated on client side, you can drop a cmd and safe some bandwidth, so why not? If the client show the stats value, the value can start blinking for 2 seconds in red for example, if it drops, this will show it very nice to the player. Most times, you have extended your protection by spell or potion you do it why you must fight or do some action. This will cause often some messages and will make it hard to read. Also, you are concentrated on map, so you need a fast marker for bad actions like dropping resistance in a fight with a dragon... (jik, nothing killed me more). > It does seem to me that a bit of stuff that perceive self tells > the player > should really be known but there is no other way to really find out. For > example, many races start with some special ability or another > (see in dark, > some level of protection/vulnerability/etc), but there is really > know way of > know that fact. > > Likewise, if you gods gives you something or takes it away, you > would think > that the character should have that knowledge, but once again, > save for perceive > self, there is no way to get that information. > > As time has passed, more information has made it into various > commands (like > skills and statistics). And perceive self seems like it is > generally a spell > that is very seldom used. Is there really anything that perceive > self tells you > that is actually useful that shouldn't be common knowledge (at > least to your > character?) True, for this we need the perceive. I also like not to show the player all of his stats, i like the way to hide some special stuff totaly from him, some hidden but accessible by perceive. But some should show the player. Skills exp/lev and protection are the one i will show the player because most newbies are confused by this hidden information. Also, i know some newbies which wants see the points of the next exp level. This is some stuff for extended info. > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From mtx93 at tzi.de Tue Nov 21 07:34:18 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] Accidents and neglected players In-Reply-To: <3A19FDA4.44F3359B@scruz.net> Message-ID: Hi Why not make it easier? No food dropping if you stand on a safe bed or you automatically fetch a food from it, like a message "you fetch a food from under the bed". There is no need to drop food when you stay on a safe bed in some in, also is not very real do starve 100 times in an inn on your bed. :) You don't fight in an inn, make the floor non magical, so the player can't cheat in an inn. So we can avoid login problems, also if you get a call, simply speak a word or recall and leave the computer, you know you are safe there. MichToen PS: Normally i don't like it to change things food dropping because you leave the "real factor" of a game, but also we must thing about to be "user friendly", and thats is it. > Peter Mardahl wrote: > > > Well, someone proposed no_magic. I agree. However, this doesn't > > address the issue of the guy who leaves his char logged in, and > > his char dies 100x from starvation before he comes back. > > Going back to a sort of old message: > > With the return to last savebed upon death patch, the one thing > I could perhaps > think would be something: > > If the character is about to die, and is standing on their > 'home' savebed, just > save them off and drop the connection to the client > (unfortunately, about to die > could be hard to determine, but perhaps an easier thing would be if the > character dies of starvation on their home savebed, give them 100 > food, save > them off, and drop the connection). > > The 100 food is sort of a bonus, but really not a big deal. I > mainly include > it so the character has enough time to go out and buy/find some > food before they > die again. Presuming that all savebeds are in towns were one can > find food, > that should be enough. > > When I say 100 food, I mean give them 100 food points to their > character, and > not actually any food items in their inventory. So you really > can't abuse it, > and if you are actually that desperate (getting 100 food points makes a > difference), you are probably in pretty poor shape anyways. > From mtx93 at tzi.de Tue Nov 21 12:23:36 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] background sounds Message-ID: Hi I think about some background sounds. I don't like normally music as background sounds, except suckers like diablo or Baldurs Gate. I can stream music/mp3 but for this we need some music artists and they are also as mp3 very long. So, there is one more way exclude midi (i don't like midi). I loop one sound, a wind streaming sound for example. Also, you define 2-4 other sounds, bird crys or rumble for example, which you play at random all few seconds. I think you know the prinzip from many other games. The nice thing is, that you can simulate which a small amount of sounds the whole background for all maps. what we need is, that if you enter a map, the server must sends the number of the background sounds in an own command. I also find it good, if the player gets a map name. If you enter it, you got for example "treasure room", "Scorn City", etc. I have a small text line where i can show it under the map. It will make orientation much more simple. It will be very useful for complex maps and for newbies. For places you don't want tell the player you can send "a unknown place" or something. In all cases, it will give more game/player conversation. So, what about a mapstart command, wich gives the map name and the background sounds. For future extensions, we can add more. MichToen From mwedel at scruz.net Tue Nov 21 23:09:06 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:19 2005 Subject: Protocol refinements, Was Re: [CF-Devel] Does gcfclient have a maintainer? References: Message-ID: <3A1B54F2.9B83D38C@scruz.net> Michael Toennies wrote: > The compelling reason will come in the future, the game grow and the data we > send > also. I find the idea, to send the triggered cmds of one action as a batch > not so > strange. triggered commands may be useful. While I agree the data that the server sends to the client may increase, there will always be a case that the client and server need to know what data they can send to each other. So the addition of a batch command does not help that. > > Also, there is no "mega command", all what you do is to send the cmds as one > package, > accessing the socket one time, and use the BATCH cmd as a meta tag, telling > the client > nothing more than the data are a row of cmds. Which is no different than just sending the individual commands. Encapsulating them in a batch command makes no difference. I don't know why you think it will. What the client & server consider a packet is not the same as the ethernet packet. The os the server is on will combine a bunch of small pieces of data into one physical (ethernet) packet > > All what you do is, to assemble the normal cmds from the batch and work > through it in the same > way you got them as single cmd from the socket. There is no difference in > debugging or something > else. And no difference in bandwidth. You save nothing. You gain an extra level of encapsulation. > > A fact is, that if you play with sound and you have some lag like i > yesterday, the game starts to > run creepy because you got the cmds for a action (attacking or opening doors > for example) not exactly, > means you got a message, after some time the sound, etc. > > Because a sound need a good timing with your game action, the effect is bad. > This will be avoided if > you send it in a batch. Please explain how. Even with batch, the server will still queue up these commands, that get transmitted down the wire when the bandwidth is available. The client still process all data it can when it receives it. The problems I see with the batch (or any attempted refinement): Someplace in the code you need to put a 'start_batch' command for the socket. server then goes and sends commands as it normally would, now getting queued up. Someplace else, you need to have a 'send_batch' function that now transmits all of that. I see oppertunity for someone to forget the start batch or send batch, causing problems. And as said, it improves performance in absolute no way. > > I aggree, but much better is to rip of this artifact and put the useful code > in a oldstuff module, where interested people can use it. There is really > much > unused and odd stuff in the client, i work through much unused structure > parts or > even double implemented stuff from older versions. Crossfire (and the client) is a constantly changing source base. I don't expect that to change immediately. Just the partial resistance will require many changes in various areas. > The food and poison food is a good example. What of course the client should > not know is, that one is good food and the other poison. But what it should > know is that booth are from type "TYPE_EATABLE". Should the client know different scroll types (spell scroll, skill scroll, information scroll?) Those also have different server types. And I am sure there are others. The answer may very well be yes, but there is no easy way to say 'poison should really be sent as type eatable'. But I'll comment on that more down below. > > The use of the table is really really bad coding. The names and stuff in > there should > not be hard coded in any module! They are generated stuff by the map editor. > What you do > with at runtime generated stuff like "xyz bodypart"? I agree it is not ideal. Custom items get sorted to the end of the inventory, which actually is not a bad thing - in many cases, these custom bodyparts are actually fairly, so having them get sorted differently is not bad. Originally, it was envisioned that the client would read in an item_types file at run time, so each user could customize it to their own desire. I see that code never got done. > This can be avoided if we define a CLIENT_TYPE_XX. This the type, the > user/client identify the item, > and when we make it smart it is the type that the server can force the > client to know it as it. Yes - that is the 'ideal' way to do it, but would require updating all the archetypes that the player can pick up. And perhaps that will gone done at some point. That is one of those things - not hard to do, just a lot of work. > No big reason to drop the drawinfo, but when you extend the the stat cmd, > it can be generated on client side, you can drop a cmd and safe some > bandwidth, > so why not? because the amount of bandwidth the drawinfo uses for saying your protection spell has ended is insignificant compared to the big bandwidth hogs (map updates and look window updates?) I mean, your saving 60 bytes of the course of a few minutes. > > If the client show the stats value, the value can start blinking for 2 > seconds in red > for example, if it drops, this will show it very nice to the player. Most > times, you > have extended your protection by spell or potion you do it why you must > fight or do some > action. This will cause often some messages and will make it hard to read. As said, I want do want to change the server and client logic so it can separate these message types. That way, all the attack messages could get shuffled into one window, leaving the other messages (which are more important) in another subwindow. From mwedel at scruz.net Tue Nov 21 23:17:32 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] Strange behavior? dead objects benig hit? References: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU> <20001121115121.A20810@hokkaido.informatik.uni-rostock.de> Message-ID: <3A1B56EC.210134E5@scruz.net> Jan Echternach wrote: > > I'm getting lots of these sorts of messages. > > Curreent CVS snapshot. > > > > Perhaps we should hold off on a release for a little while? > > I think we should hold off the release until the "freed object" bug is > fixed. This kind of bug can have very nasty effects (segmentation > fault, creating objects that are in their own inventory (op->inv loop), > random other object corruption), but is easy to fix when a stack trace > is known (usually only a missing was_destroyed() check in the caller). The main reason I was looking at doing a release so that there would be a good baseline/solid release before doing the partial resistance code. I would rather not have to rebase the partial resistance changes after the that above is figured out. So if you think there may be a quick fix, let me know. Otherwise, I'll just the the partial resistance code sometime soon, and hold off for another official release for quite a while. From andi.vogl at gmx.net Tue Nov 21 20:17:02 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:19 2005 Subject: [CF-Devel] bugfix: unique maps In-Reply-To: <20001121192335.I13295@mars.cs.engr.uky.edu> Message-ID: <000901c0542a$4ffe4f40$4c21993e@kyle> On Wed 22.11.00 Chris L. wrote: > > I?ve already written a bugfix for that problem. It does > > the following: > > Every time a player leaves a unique map, there?s a check > > if that map already exists in the player-dir. If not, > > the unique map will be saved instantly after the player left. > > Ok, except just save the map if changed please. There is an old > cheat/do yourself in: 1) put items into your apartment, > 2) wait until the apartment gets saved, > 3) take items out of apartment, > 4) save your self, > 5) crash server. > 6) Items still in apartment and on your person. > 7) wash, rinse, repeat. > > I have benefited and been bitten by this, I'd really like > it to go away. NO. The problem that you describe has nothing to do with my bugfix. And it has nothing to do with perm. apartments either. You can do it on any map: Save, pass stuff to other character, save other character, crash server. There?s only one way to prevent it: We must whipe out point 5) - "crash server" that is the critical point. Once we got rid of every bloody way to crash the server we?re settled. And this goal is no longer unreachable far away. The last way to willingly crash the server (that I know of) is a buffer overflow when speaking a very long sentence with winclient. I bet this one is easy to fix, but I can?t debug under linux due to lack of winclient. I?d need the help of one of the admins of the online servers... Or maybe someone else knows how to fix it right away? All other obvious crash-bugs have been fixed in CVS as far as I know. Andreas V. From mwedel at scruz.net Tue Nov 21 23:47:52 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] background sounds References: Message-ID: <3A1B5E08.80D39292@scruz.net> Michael Toennies wrote: > > Hi > > I think about some background sounds. I don't like normally music as > background sounds, > except suckers like diablo or Baldurs Gate. I can stream music/mp3 but for > this we need > some music artists and they are also as mp3 very long. > > So, there is one more way exclude midi (i don't like midi). > > I loop one sound, a wind streaming sound for example. Also, you define 2-4 > other > sounds, bird crys or rumble for example, which you play at random all few > seconds. Note that sounds of any type will almost always be done the way they are now - the sounds will be local to the client. So the size of the sounds isn't quite as relevant, since they won't need to come from the server. > what we need is, that if you enter a map, the server must sends the number > of the background > sounds in an own command. If I ever get around to extending the objects, I would like to be able to specify 'ambiant' sounds. So for example, fountains could have an appropriate sounds, rivers same thing. Although, I guess that could get a little annoying - for example, you may want to add an ambiant sound for forest (birds chirping or something), but when you have big stretches of forest, you would then need to deal with lots of ambiant sounds. So perhaps invisible sound objects may be the way to go. In the case of forests, you could sprinkle a few of these objects about. I'm not sure the trustworthyness of sending all sound information to the client when the map is loaded. IF its just things like fountains, probably not a big deal. But I could see background noises attached to some items/places that the mapmaker wants you to be able to hear as you get closer. If the client knows that sound originates from 15,40, that could be an advantage to the player. I don't really like the idea of 'global' background sounds per map - many maps vary widely in terrain and features. > > I also find it good, if the player gets a map name. If you enter it, you got > for example "treasure room", > "Scorn City", etc. I have a small text line where i can show it under the > map. It will make orientation > much more simple. It will be very useful for complex maps and for newbies. > For places you don't want > tell the player you can send "a unknown place" or something. In all cases, > it will give more game/player > conversation. I like the mapname idea. Unfortunately, a lot of maps don't have official map names. From andi.vogl at gmx.net Tue Nov 21 20:34:03 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] changing WoR (Word of Recall) In-Reply-To: <20001121140641.A22837@tukki.jyu.fi> Message-ID: <000a01c0542c$ae6f5540$4c21993e@kyle> On Tue 21.11.00, Pertti K. wrote: > > I propose to make WoR pointing to the same spot that you > > would visit after death - the last-applied savebed. > > Sounds good. > > [...] > > Disadv.: In future we must be very careful where to put > > savebeds. IF a player manages to get stuck on > > a savebed-map he is in real BIG trouble. > > I see 2 options for this last one. > 1) We make damned sure, that every map with savebed in it > is working 100%. I guess this is the easiest, hence best way to go. I?ve already started by removing savebeds from insecure places. We could go even further and make all savebed-inns no_magic. Moreover, most people will probably stick with the savebeds in their appartments (-> Ideal for supply of food/money/potions). This fixes the problem of possible continuous player-killing very neatly. If one gets PKed, one re-awakes in the apartment. No way to get killed a second time. > 2) Make a new spell, that tranports You to Your chosen God's > 'main' temple. 'religous retreat' or 'houl yearning' or > something like that. Pretty complicated: How to define "God?s temple"? How to choose a main temple? etc Andreas V. From andi.vogl at gmx.net Tue Nov 21 11:38:02 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] confirmed: some strangeness going on In-Reply-To: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU> Message-ID: <000101c053e1$ceffee00$4c21993e@kyle> Yes, there?s something odd about the current CVS version. I didn?t see PeterM?s log messages yet, but here?s what I discovered so far: - The spell "poison cloud" is completely broke for some reason. You see the bullet fly but instead of a cloud it emmits only a log-message: "BUG: process_events(): Object without map or inventory is on active list: poison cloud ()" (This did not happen in the CVS of two days ago!) - Two archetypes seem to be missing: poison_fog.arc and flaming_aura_mark.arc. - The spell "invisible" is also broken. But this bug is not new and quite harmless too. Unfortunately, the log messages that PeterM discovered sounds even worse than that: > BUG: get_attack_mode(): freed object > victim (arch cwall_2_1_2, name wall) already dead in hit_player() Uh huh! Peter could you tell me how to verify the bug, causing *this* log message? I think we should definitly clean that mess up before doing the next official release. Andreas V. From mwedel at scruz.net Tue Nov 21 23:56:24 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] Accidents and neglected players References: Message-ID: <3A1B6008.D99E0BBB@scruz.net> Michael Toennies wrote: > So we can avoid login problems, also if you get a call, simply speak a word > or recall and > leave the computer, you know you are safe there. That was the point of dropping the connection and saving the character. If you get drawn away, and die from outside force and are about to die again, just save the character and drop the connection. The player can re-connect with the client. It may be more fair to do this when player food drops to zero and it does the 'you grab bite of food message'. Otherwise, I could see a player that happens to have a lot of food munching it all down, but that player having no way to get back to his system in a reasonable amount of time. From mwedel at scruz.net Wed Nov 22 00:02:39 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] bugfix: unique maps References: <000901c0542a$4ffe4f40$4c21993e@kyle> Message-ID: <3A1B617F.4A1943B8@scruz.net> Andreas Vogl wrote: > There?s only one way to prevent it: We must whipe out point 5) - > "crash server" that is the critical point. Once we got rid of > every bloody way to crash the server we?re settled. Correct. There is no realistic scenario in that crossfire will guarantee data integrity in all cases. We could attempt to do so, but the performance costs would be pretty terrible (for example, if whenever you saved one player, you saved them all, that would make it more difficult to cheat, but saving 15 players on the same tick would likely cause noticable pauses here and there). > > And this goal is no longer unreachable far away. The last way to > willingly crash the server (that I know of) is a buffer overflow > when speaking a very long sentence with winclient. > I bet this one is easy to fix, but I can?t debug under linux > due to lack of winclient. I?d need the help of one of the admins > of the online servers... Or maybe someone else knows how to fix it > right away? I thought I already fixed that. In fact, from the CHANGES file: server/c_chat.c: Add standard banner to top of file. Fix say command so that it does not crash the server if something beyond 256 characters is spoken - extra data is just truncated. MSW 5/22/2000 From andi.vogl at gmx.net Tue Nov 21 12:41:02 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] starving in my bed... Message-ID: <000201c053ea$9bae06a0$4c21993e@kyle> On Tue 21.11.00, Mark W. wrote: > > [...] the issue of the guy who leaves his char logged in, and > > his char dies 100x from starvation before he comes back. > > Going back to a sort of old message: > > With the return to last savebed upon death patch, the one thing > I could perhaps think would be something: > > If the character is about to die, and is standing on their > 'home' savebed, just save them off and drop the connection to > the client (unfortunately, about to die could be hard to determine, > but perhaps an easier thing would be if the character dies of > starvation on their home savebed, give them 100 food, save > them off, and drop the connection). Yeah, the latter is a formidable idea! And easy to code as well. > The 100 food is sort of a bonus, but really not a big deal. > I mainly include it so the character has enough time to go out > and buy/find some food before they die again. Presuming that all > savebeds are in towns were one can find food, that should be enough. > > When I say 100 food, I mean give them 100 food points to their > character, and not actually any food items in their inventory. > So you really can't abuse it, and if you are actually that desperate > (getting 100 food points makes a difference), you are probably in > pretty poor shape anyways. No way to abuse this. You can?t get more than 100 food, as soon as you leave the savebed you need sth to eat again. I think this is gonna be a cool feature so I?ll do it. If someone has any objections please state them now. =) Andreas V. From mwedel at scruz.net Wed Nov 22 00:08:31 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] changing WoR (Word of Recall) References: <000a01c0542c$ae6f5540$4c21993e@kyle> Message-ID: <3A1B62DF.7B44D8E8@scruz.net> Andreas Vogl wrote: > > 2) Make a new spell, that tranports You to Your chosen God's > > 'main' temple. 'religous retreat' or 'houl yearning' or > > something like that. > > Pretty complicated: How to define "God?s temple"? How to choose > a main temple? etc You could add a flag to the altars, such that if you pray over that alter, it updates your WoR location. And only altars in the temples in major cities would have that set. From mtx93 at tzi.de Wed Nov 22 04:56:20 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] bugfix: unique maps In-Reply-To: <000901c0542a$4ffe4f40$4c21993e@kyle> Message-ID: Hi Andreas Yeah, but remember this damn password/teleporter bug in wizard tower for example. it *can* be used for dupe crashin, while is common with 2 persons. I think, we should make a party at MiDS server one night. Let him compile a debug version, which logs all fucking steps we do. Then enter the tower end let teleport and jump us like rabbits. I like to see the log files then. Perhaps we got it in this way. MichToen > On Wed 22.11.00 Chris L. wrote: > > > > I?ve already written a bugfix for that problem. It does > > > the following: > > > Every time a player leaves a unique map, there?s a check > > > if that map already exists in the player-dir. If not, > > > the unique map will be saved instantly after the player left. > > > > Ok, except just save the map if changed please. There is an old > > cheat/do yourself in: 1) put items into your apartment, > > 2) wait until the apartment gets saved, > > 3) take items out of apartment, > > 4) save your self, > > 5) crash server. > > 6) Items still in apartment and on your person. > > 7) wash, rinse, repeat. > > > > I have benefited and been bitten by this, I'd really like > > it to go away. > > NO. The problem that you describe has nothing to do with my > bugfix. And it has nothing to do with perm. apartments either. > You can do it on any map: Save, pass stuff to other character, > save other character, crash server. > > There?s only one way to prevent it: We must whipe out point 5) - > "crash server" that is the critical point. Once we got rid of > every bloody way to crash the server we?re settled. > > And this goal is no longer unreachable far away. The last way to > willingly crash the server (that I know of) is a buffer overflow > when speaking a very long sentence with winclient. > I bet this one is easy to fix, but I can?t debug under linux > due to lack of winclient. I?d need the help of one of the admins > of the online servers... Or maybe someone else knows how to fix it > right away? > All other obvious crash-bugs have been fixed in CVS as far as I know. > > > Andreas V. > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel > From andi.vogl at gmx.net Wed Nov 22 10:08:26 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] memory violation... WAAAH! In-Reply-To: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU> Message-ID: <000001c0549e$740626a0$4c21993e@kyle> On MiDS? CF server (updated to current CVS) we have noticed some serious problems today: Not only that we saw the errormessages that Peter M. pointed out, we also had some archetypes missing. After restarting the CF-server these archetypes were valid again. This can only mean one thing: Serious memory violation! Please everybody, help us to fix these nasty problems. There must be sth real bad going on in the code. I?m sorry that I can?t provide more useful information than this yet, but the bugs appear completely at random, unable to give a verify-howto. Again, please help! Do I have to say that an official release is IMPOSSIBLE until this is fixed? Just imagine what missing locked doors or walls could do... not even to think about other related bugs that might appear. Andreas V. From echter at informatik.uni-rostock.de Wed Nov 22 12:29:44 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] New god_intervention() In-Reply-To: <20001116171733.A25352@hokkaido.informatik.uni-rostock.de>; from echter@informatik.uni-rostock.de on Thu, Nov 16, 2000 at 05:17:33PM +0100 References: <20001108213741.A11475@hokkaido.informatik.uni-rostock.de> <20001109233711.A26401@hokkaido.informatik.uni-rostock.de> <20001116171733.A25352@hokkaido.informatik.uni-rostock.de> Message-ID: <20001122192944.A1630@hokkaido.informatik.uni-rostock.de> Fourth and possibly final version of the patch. It is now tested. I fixed a bug in the new get_holy_archetype() function (returned with indeterminate value instead of NULL when archetype was not found) and a very unimportant bug in summon_avatar() (check for gods without holy servant or avatar wasn't working - you would still get a SIGSEGV; but there are no such gods). I also fixed the new archetypes - the last archetype patch (arch38b) was full of typos. Biggest change in this version is that prayers granted by gods through god_intervention() will be lost when the god is changed, or when the prayer is removed from the current god's treasure list and god_intervention() is called. The map patch changes the last Chaos Lair map: Players will only get the "finger of death" spell, "face of death" will be reserved for the Chaos Lord and for followers of Devourers. I also fixed the vampire on that map (again) - he was sleeping all the time and not toggling the lever. -- Jan -------------- next part -------------- common/treasure.c: Various changes to support several new flags that affect how treasures are created and how they are inserted into objects or put on maps. include/config.h: Increased ARCHTABLE (size of archtype hash table). lib/treasures: Added gods' treasure lists. server/apply.c: do_learn_spell() and do_forget_spell(): New functions for learning and forgetting spells. apply_spellbook() now uses do_learn_spell(). server/c_wiz.c: command_learn_spell(), command_special_prayer and command_forget_spell(): New functions that implement the new "learn_spell", "learn_special_prayer" and "forget_spell" wizard commands. server/disease.c: cure_disease(): Bugfixes: Fixed loop to traverse the whole inventory and not stop after the first disease. Corrected the return value to return true only if a disease was cured. server/disease.c: reduce_symptoms(): Only change speed_left of diseases whose symptoms where actually reduced. Return true only if some symptoms were reduced. server/gods.c: stop_using_item(): Use apply_special() directly and unapply even cursed or damned items. server/gods.c: god_intervention(): Rewrote this basically from scratch, now uses the god's treasure list to determine the effects. server/player.c: give_initial_items(): Use new GT_STARTEQUIP and GT_ONLY_GOOD flags. FLAG_STARTEQUIP is now set by create_treasure(), and we also won't get any cursed items. Don't give players the same spell twice. server/skills.c: pray(): Fixed a typo. server/spell_effect.c: cast_heal(): Fixed return value. Don't freeze the caster if the spell had no effect. server/summon_avatar(): Don't use the god archetype itself as its avatar. Use determine_holy_arch() instead (for both avatars and holy servants). Bugfix: Return immediately when we've found out that the god has no avatar or holy servant, don't continue until SIGSEGV. -------------- next part -------------- A non-text attachment was scrubbed... Name: patch38d.gz Type: application/x-gunzip Size: 16508 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001122/e569e681/patch38d.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: arch38d.gz Type: application/x-gunzip Size: 4938 bytes Desc: not available Url : http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001122/e569e681/arch38d.bin -------------- next part -------------- diff -ru orig/maps-0.95.7-cvs1/Lake_Country/snake_pit/Chaos_lair4 maps-0.95.7-cvs1/Lake_Country/snake_pit/Chaos_lair4 --- orig/maps-0.95.7-cvs1/Lake_Country/snake_pit/Chaos_lair4 Mon Jun 19 14:22:54 2000 +++ maps-0.95.7-cvs1/Lake_Country/snake_pit/Chaos_lair4 Wed Nov 22 19:06:45 2000 @@ -15,6 +15,7 @@ arch vampire speed 0.010000 speed_left -1.340000 +sleep 0 randomitems none end arch blocked @@ -3578,8 +3579,14 @@ msg Death DEATH! DEATH!! endmsg -sp 87 +sp 152 value 20000 +end +arch book +name spellbook covered with even more skulls +sp 87 +invisible 1 +no_drop 1 end arch key2 name fragment-of-chaos From echter at informatik.uni-rostock.de Wed Nov 22 12:51:07 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] memory violation... WAAAH! In-Reply-To: <000001c0549e$740626a0$4c21993e@kyle>; from andi.vogl@gmx.net on Wed, Nov 22, 2000 at 05:08:26PM +0100 References: <200011210428.UAA29028@tesla.EECS.Berkeley.EDU> <000001c0549e$740626a0$4c21993e@kyle> Message-ID: <20001122195107.B1630@hokkaido.informatik.uni-rostock.de> On Wed, Nov 22, 2000 at 05:08:26PM +0100, Andreas Vogl wrote: > I?m sorry that I can?t provide more useful information than > this yet, but the bugs appear completely at random, unable to > give a verify-howto. Again, please help! The best way I know to nail such bugs: Start the server from gdb, do a "break LOG if logLevel == llevError", then play normally until server freezes. However, this requires that somebody who knows how to use gdb is running the server. -- Jan From peterm at tesla.EECS.Berkeley.EDU Wed Nov 22 18:11:07 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] memory violation... WAAAH! In-Reply-To: Your message of "Wed, 22 Nov 2000 17:08:26 +0100." <000001c0549e$740626a0$4c21993e@kyle> Message-ID: <200011230011.QAA10610@tesla.EECS.Berkeley.EDU> > On MiDSī CF server (updated to current CVS) we have noticed > some serious problems today: OS? Current CVS as of what time? Anyway, I tried doing the same things I had done to make crossfire behave funny. I went to the titan map and ran around in it. Nothing. I went to many maps. Nothing. I ran it under both FreeBSD and Linux, and Linux under efence. Nothing. Has anyone had any luck at repeating this problem? PeterM > Not only that we saw the errormessages that Peter M. pointed > out, we also had some archetypes missing. After restarting the > CF-server these archetypes were valid again. > This can only mean one thing: Serious memory violation! > > Please everybody, help us to fix these nasty problems. > There must be sth real bad going on in the code. > > Iīm sorry that I canīt provide more useful information than > this yet, but the bugs appear completely at random, unable to > give a verify-howto. Again, please help! > > Do I have to say that an official release is IMPOSSIBLE until > this is fixed? Just imagine what missing locked doors or > walls could do... not even to think about other related > bugs that might appear. > > > Andreas V. > > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mwedel at scruz.net Thu Nov 23 01:33:48 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:20 2005 Subject: [CF-Devel] bugfix: unique maps References: <000001c05364$425b7960$c6a7e23e@kyle> Message-ID: <3A1CC85C.A0D16F96@scruz.net> I've just checked in a fix for this in CVS. Basically, I modified enter_exit to look for a matching per player unique map that is in memory, and if it finds one, use it. Andreas Vogl wrote: > Here?s how to reproduce it (with current cvs-version): > - make a new character > - enter one of the perm. apartments (for the first time) > - drop some gold to the ground and leave the map > - re-enter the apartment: the gold is gone (because the > unique map did not get created in the playerdir yet). > > I?ve already written a bugfix for that problem. It does > the following: > Every time a player leaves a unique map, there?s a check > if that map already exists in the player-dir. If not, > the unique map will be saved instantly after the player left. > > I?m not sure weither this is really the most efficient > way to do it, but at least it works fine. I have attached the > diff file (server/main) for my bugfix, so if someone got > better ideas please tell me. > > Andreas V. > > -------------------------------------------------------------------------------- > Name: main.c.patch > main.c.patch Type: unspecified type (application/octet-stream) > Encoding: quoted-printable From jbontje at suespammers.org Thu Nov 23 04:15:30 2000 From: jbontje at suespammers.org (Joris Bontje) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] memory violation... WAAAH! In-Reply-To: <200011230011.QAA10610@tesla.EECS.Berkeley.EDU> References: Your message of "Wed, 22 Nov 2000 17:08:26 +0100." <000001c0549e$740626a0$4c21993e@kyle> Message-ID: <3A1CFC52.1273.F65C1@localhost> On 22 Nov 2000, at 16:11, Peter Mardahl wrote: > > On MiDS? CF server (updated to current CVS) we have noticed > > some serious problems today: > > OS? Current CVS as of what time? FreeBSD mids.student.utwente.nl 4.2-RELEASE FreeBSD 4.2- RELEASE #0: Tue Nov 21 10:47:49 CET 2000 mids@mids.student.utwente.nl:/usr/obj/usr/src/sys/MIDS i386 The kind of errors I get: Switching lex buffers Adding friendly object Fool. Adding friendly object Magician. Couldn't find archetype door_look_2 Discarded object 0 - invalid archetype. Adding friendly object Magician. Couldn't find archetype lightningwall_5 Discarded object 1 - invalid archetype. Trying to swap out /pup_land/lone_town/magic before its time. [cut] Couldn't find archetype 0 Discarded object 0 - invalid archetype. Couldn't find archetype 0 Discarded object 0 - invalid archetype. Adding friendly object Magician. Couldn't find archetype 1 Discarded object 1 - invalid archetype. [cut] Couldn't find archetype door_look_1 Couldn't find archetype door_look_2 Couldn't find archetype door_look_2 Couldn't find archetype door_look_1 Couldn't find archetype door_look_2 [cut] Couldn't find archetype weak_wall_1 Discarded object 0 - invalid archetype. Couldn't find archetype weak_wall_1 Discarded object 0 - invalid archetype. Couldn't find archetype weak_wall_1 Discarded object 0 - invalid archetype. Couldn't find archetype weak_wall_2 Couldn't find archetype weak_wall_2 Couldn't find archetype weak_wall_2 etcetera.... (known) archetypes disappearing: 0, 1, door_look_1, door_look_2, lightningwall_5, weak_wall_1, weak_wall_2, weak_wall_4 When the server is fresh (re)started, all those items are visible in the game, but after these messages appear, they are gone. You can walk through places where first was a wall. Joris Bontje --- The suespammers.org mail server is located in California; do not send unsolicited bulk e-mail or unsolicited commercial e-mail to my suespammers.org address From andi.vogl at gmx.net Thu Nov 23 12:38:39 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable Message-ID: <000101c0557c$9d8c57e0$441a993e@kyle> Today I noticed the bug of missing archetypes on my local CF-server on linux! (Using todays CVS 23.11.00, about 16:00 GMT). It also appears on both CF-online-servers that use up-to-date CVS: MiDS' and PeterM's servers (Both using FreeBSD I think). The bug usually takes a while to appear, but then it doesn?t go away until server restart. It always appears on usage of spells, usually common ones like snowstorm or fireball. Considered the fact that the bug first appeared in the last few days, it might be related to the latest spell updates, but that?s only a blind guess. Usually the first archetype to dissapear is door_look_1, after a while it can even make wall-arches vanish (!!!). Crashes don?t seem to happen at least. The current CVS is completely unplayable. Please, especially all authors of recent code-changes, take a second look and try to find out what?s going on. If this bug (assuming it?s only one) cannot be fixed real quick, I suppose that we take out the latest features of CVS - until we reach a sane version again. And then we re-insert them step by step after GOOD testing. Andreas V. From peterm at tesla.EECS.Berkeley.EDU Thu Nov 23 15:03:55 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: Your message of "Thu, 23 Nov 2000 19:38:39 +0100." <000101c0557c$9d8c57e0$441a993e@kyle> Message-ID: <200011232103.NAA08760@tesla.EECS.Berkeley.EDU> > The bug usually takes a while to appear, but then it > doesnīt go away until server restart. > It always appears on usage of spells, usually common > ones like snowstorm or fireball. Considered the fact > that the bug first appeared in the last few days, > it might be related to the latest spell updates, but > thatīs only a blind guess. Hmm. A line-by-line comparison of the code involving fireballs and snowstorm between "before" and "after" my spell updates seemingly reveals that identical code sequences are executed. Whatever the problem is, it is pretty subtle if it is in the spell code. > If this bug (assuming itīs only one) cannot be fixed real > quick, I suppose that we take out the latest features > of CVS - until we reach a sane version again. > And then we re-insert them step by step after GOOD testing. I cannot react to this last comment without anything other than perplexity. What is GOOD testing? Should I test every change for 24 hours of playtime for heisenbugs like this before I commit anything? If so, then I must decline the burden of any further crossfire development. And even if I test everything I can think to for 24 hours, I might not wander into an appropriate map to trigger this apparent heisenbug. Furthermore, the great bulk of the changes I made to the spell stuff aren't even active: they're all new stuff that people can't even use because they're reserved for the Gods balancing to be done. Here are possibly suspicious changes in the spell code: 1) addition of "copy_owner" call on line 1101 of spell_util.c. What this SHOULD do is set the experience object and owner pointers up correctly. And addition of "copy_owner" call on line 1353 of attack.c. 2) Lack of "poison fog" archetype. This SHOULD only have effect if someone casts "poison fog": however, "poison fog" is disabled. Maybe the failed search for this archetype sets up the heisenbug? Reviewing THIS code, I doubt it as well. PeterM From echter at informatik.uni-rostock.de Thu Nov 23 15:49:30 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: <200011232103.NAA08760@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Thu, Nov 23, 2000 at 01:03:55PM -0800 References: <000101c0557c$9d8c57e0$441a993e@kyle> <200011232103.NAA08760@tesla.EECS.Berkeley.EDU> Message-ID: <20001123224930.A14058@hokkaido.informatik.uni-rostock.de> On Thu, Nov 23, 2000 at 01:03:55PM -0800, Peter Mardahl wrote: > Whatever the problem is, it is pretty subtle if it is in > the spell code. I think I've found the bug: FLAG_BERSERK was added and NUM_FLAGS increased, but not all places that use NUM_FLAGS were updated! One place is get_ob_diff(), I don't know if there are others. Please use 'grep' and examine _all_ places - that's the best method to prevent such bugs (and to fix lots of other bugs as a side effect). The effect in get_ob_diff() is that whenever an object's FLAG_ALIVE differs from its archetype's FLAG_ALIVE and the object is written to a temporary map file, an "Object 0" or "Object 1" line is written to the file. When such a map is read back the archetype's name is destroyed. Easiest way to reproduce: Cast a "build lighning wall". But there could also be maps that alter an objects FLAG_ALIVE. > 2) Lack of "poison fog" archetype. This SHOULD only have effect if > someone casts "poison fog": however, "poison fog" is disabled. > Maybe the failed search for this archetype sets up the heisenbug? > Reviewing THIS code, I doubt it as well. Looks harmless, even though it causes an annoying error message that activates the debugger everytime the server is started. -- Jan From andi.vogl at gmx.net Thu Nov 23 16:24:42 2000 From: andi.vogl at gmx.net (Andreas Vogl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: <200011232103.NAA08760@tesla.EECS.Berkeley.EDU> Message-ID: <000001c0559c$2fbdc940$441a993e@kyle> On 23.11.00 Peter M. wrote: > > If this bug (assuming it?s only one) cannot be fixed real > > quick, I suppose that we take out the latest features > > of CVS - until we reach a sane version again. > > And then we re-insert them step by step after GOOD testing. > > I cannot react to this last comment without anything other than > perplexity. What is GOOD testing? Should I test every change > for 24 hours of playtime for heisenbugs like this before I > commit anything? If so, then I must decline the burden of any > further crossfire development. And even if I test everything > I can think to for 24 hours, I might not wander into an appropriate > map to trigger this apparent heisenbug. My recent mail might have looked a bit like I want to blame Peter for doing a bad job with his spell updates. This was definitly NOT my intention! NOOOO! =( I LOVE the new spells and I know that Peter has done lots of testing on them. Furthermore, a bug like this one is damn hard to see. So I don?t want to blame *anyone* for doing anything! The new spells are great and so are all new features. And in fact I have no idea what is really causing the bug right now. So a "bling guess" is probably unappropriate anyways. Moreover, a few bugs here and there are completely okay, no real development is possible without that. As long as we can find and fix them afterwards. My only intention was to find the bug, I spent almost my whole day today, trying to reproduce it. I hope that Jan E. has tracked it down now, what he wrote sounds reasonable to me. PS: The worst thing I ever wanted to happen is Peter M. quitting CF development. He?s doing a great job. Andreas V. From peterm at tesla.EECS.Berkeley.EDU Thu Nov 23 18:52:38 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] Strange problem, possible related to new attack fixes (hit player) Message-ID: <200011240052.QAA03705@tesla.EECS.Berkeley.EDU> I noticed a problem where a SPLINT object from a bomb hit a player and was removed apparently by hit_player, and then another removal attempt was made by check_fired_arch. I checked in a "fix" for this problem, but I think the bug is actually somewhere else than I "fixed" it. See the function below: void check_fired_arch (object *op) { tag_t op_tag = op->count, tmp_tag; object *tmp; int dam; if ( ! blocked (op->map, op->x, op->y)) return; if (op->other_arch) { explode_object (op); return; } for (tmp = get_map_ob (op->map,op->x,op->y); tmp != NULL; tmp = tmp->above) { if (QUERY_FLAG (tmp, FLAG_ALIVE)) { tmp_tag = tmp->count; dam = hit_player (tmp, op->stats.dam, op, op->attacktype); if (was_destroyed (op, op_tag) || ! was_destroyed (tmp, tmp_tag) || (op->stats.dam -= dam) < 0) { if(!QUERY_FLAG(op,FLAG_REMOVED)) { /* line ADDED */ remove_ob (op); free_object(op); return; } } /* line ADDED */ } } } cvs server: Diffing . Index: spell_util.c =================================================================== RCS file: /home/cvs/CVS/crossfire/server/spell_util.c,v retrieving revision 1.33 retrieving revision 1.34 diff -c -r1.33 -r1.34 *** spell_util.c 2000/11/21 18:58:34 1.33 --- spell_util.c 2000/11/24 00:48:56 1.34 *************** *** 1,6 **** /* * static char *rcsid_spell_util_c = ! * "$Id: spell_util.c,v 1.33 2000/11/21 18:58:34 peterm Exp $"; */ /* --- 1,6 ---- /* * static char *rcsid_spell_util_c = ! * "$Id: spell_util.c,v 1.34 2000/11/24 00:48:56 peterm Exp $"; */ /* *************** *** 1720,1728 **** --- 1720,1730 ---- if (was_destroyed (op, op_tag) || ! was_destroyed (tmp, tmp_tag) || (op->stats.dam -= dam) < 0) { + if(!QUERY_FLAG(op,FLAG_REMOVED)) { remove_ob (op); free_object(op); return; + } } } } From peterm at tesla.EECS.Berkeley.EDU Thu Nov 23 19:25:10 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: Your message of "Thu, 23 Nov 2000 22:49:30 +0100." <20001123224930.A14058@hokkaido.informatik.uni-rostock.de> Message-ID: <200011240125.RAA19896@tesla.EECS.Berkeley.EDU> > On Thu, Nov 23, 2000 at 01:03:55PM -0800, Peter Mardahl wrote: > > Whatever the problem is, it is pretty subtle if it is in > > the spell code. > > I think I've found the bug: FLAG_BERSERK was added and NUM_FLAGS > increased, but not all places that use NUM_FLAGS were updated! One > place is get_ob_diff(), I don't know if there are others. Please use > 'grep' and examine _all_ places - that's the best method to prevent > such bugs (and to fix lots of other bugs as a side effect). I looked into setting up this flag properly using the grep method, but there were still some weird issues. I've commented out all the FLAG_BERSERK stuff in the CVS repository. What I tried was: Adding V_BERSERK and FLAG_BERSERK to loader.l and to loader.h. and to the variables arrays in loader.l. We don't need FLAG_BERSERK until the gods-balancing happens, so I'm going to leave it commented out ofr now. PeterM > > 2) Lack of "poison fog" archetype. This SHOULD only have effect if > > someone casts "poison fog": however, "poison fog" is disabled. > > Maybe the failed search for this archetype sets up the heisenbug? > > Reviewing THIS code, I doubt it as well. > > Looks harmless, even though it causes an annoying error message that > activates the debugger everytime the server is started. > > -- > Jan > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From peterm at tesla.EECS.Berkeley.EDU Thu Nov 23 19:58:12 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: Your message of "Thu, 23 Nov 2000 23:24:42 +0100." <000001c0559c$2fbdc940$441a993e@kyle> Message-ID: <200011240158.RAA00799@tesla.EECS.Berkeley.EDU> > Moreover, a few bugs here and there are completely > okay, no real development is possible without that. > As long as we can find and fix them afterwards. Well, as it turned out, your 'blind guess' was correct (well, if Jan's observation pans out). I'm glad that you agree that the standard for putting stuff into CVS isn't absolute perfection. Some problems only turn up when other people test it, or in production beta testing, as on crossfire.csua and mids. Things go quicker if others are testing, because they'll test in ways that the developer might not think of testing. For example, this time I didn't think of running the server long enough to do a server map swap in/swap out. PM From mwedel at scruz.net Fri Nov 24 00:44:19 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] drain ring References: Message-ID: <3A1E0E43.F1FD02D@scruz.net> Michael Toennies wrote: > > Hi > I recognized that the drain ring has a animation, and the client > recieve all animation steps, but it don't get animated. Also > the server don't do it on map. I've added a speed value to the ring in CVS, so it should be animated now. From echter at informatik.uni-rostock.de Fri Nov 24 02:10:34 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] Strange problem, possible related to new attack fixes (hit player) In-Reply-To: <200011240052.QAA03705@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Thu, Nov 23, 2000 at 04:52:38PM -0800 References: <200011240052.QAA03705@tesla.EECS.Berkeley.EDU> Message-ID: <20001124091034.A13939@hokkaido.informatik.uni-rostock.de> On Thu, Nov 23, 2000 at 04:52:38PM -0800, Peter Mardahl wrote: > I checked in a "fix" for this problem, but I think the bug is > actually somewhere else than I "fixed" it. Oops, my bug. And the bug really is in check_fired_arch(). hit_player() is allowed to do about anything. hit_player() can trigger runes, runes can summon monster, monster can pick up stuff, etc. pp. > if (was_destroyed (op, op_tag) || ! was_destroyed (tmp, tmp_tag) ^^^^^^^^^^^^^^^^^^^^^^^^^^ > || (op->stats.dam -= dam) < 0) > { > if(!QUERY_FLAG(op,FLAG_REMOVED)) { /* line ADDED */ > remove_ob (op); ^^^^^^^^^^^^^^^ > free_object(op); > return; > } Broken code (without the QUERY_FLAG) - if 'op' was already destroyed (which means it was already freed), it will be removed and freed again. 'op' may have been reused and therefore not have FLAG_REMOVED, even though it's not the same object anymore. Correct fix would be this: if (was_destroyed (op, op_tag)) return; if ( ! was_destroyed (tmp, tmp_tag) || (op->stats.dam -= dam) < 0) { remove_ob (op); free_object(op); return; } Maybe remove_ob() and free_object() should just print an error message and otherwise ignore objects that are already removed or freed. This would prevent some needless server crashes. -- Jan From echter at informatik.uni-rostock.de Fri Nov 24 02:26:59 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: <200011240125.RAA19896@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Thu, Nov 23, 2000 at 05:25:10PM -0800 References: <20001123224930.A14058@hokkaido.informatik.uni-rostock.de> <200011240125.RAA19896@tesla.EECS.Berkeley.EDU> Message-ID: <20001124092659.B13939@hokkaido.informatik.uni-rostock.de> On Thu, Nov 23, 2000 at 05:25:10PM -0800, Peter Mardahl wrote: > I looked into setting up this flag properly using the grep method, > but there were still some weird issues. > What I tried was: > Adding V_BERSERK and FLAG_BERSERK to loader.l and to loader.h. > and to the variables arrays in loader.l. I've grep'ed for NUM_FLAGS and it seems that the FLAG_BERSERK patch was lacking three things: * entry in flag_links[] (this is one of the three places where NUM_FLAGS is used) * entry in variable_const[] (when adding V_BERSERK to varnrs, NR_OF_VARIABLES is increased autmatically) * extension to lex syntax - something like ^{S} SET_OR_CLEAR_FLAG (op, FLAG_BERSERK, IVAL); -- Jan From peterm at tesla.EECS.Berkeley.EDU Fri Nov 24 02:53:50 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] archetype bug - current cvs unplayable In-Reply-To: Your message of "Fri, 24 Nov 2000 09:26:59 +0100." <20001124092659.B13939@hokkaido.informatik.uni-rostock.de> Message-ID: <200011240853.AAA16038@tesla.EECS.Berkeley.EDU> > > I've grep'ed for NUM_FLAGS and it seems that the FLAG_BERSERK patch was > lacking three things: > > * entry in flag_links[] (this is one of the three places where > NUM_FLAGS is used) > > * entry in variable_const[] (when adding V_BERSERK to varnrs, > NR_OF_VARIABLES is increased autmatically) > > * extension to lex syntax - something like > ^{S} SET_OR_CLEAR_FLAG (op, FLAG_BERSERK, IVAL); Thanks. I got the first 2 but not the 3rd. I'll leave this out, though, until after the release. It is not important for the release. PeterM From peterm at tesla.EECS.Berkeley.EDU Fri Nov 24 12:52:29 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] Hmm, bugs still seem present Message-ID: <200011241852.KAA03424@tesla.EECS.Berkeley.EDU> I made an attempt to remove all traces of FLAG_BERSERK from the CVS repository, but I still see this behavior: BUG: get_attack_mode(): freed object I also see errors about things being attacked when they're already dead, such as fear objects. The "get_attack_mode()" stuff seemed to come up when golems got slaughtered by their maker. PeterM From peterm at tesla.EECS.Berkeley.EDU Fri Nov 24 13:07:21 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] gdb tracing of attack_mode bug: Message-ID: <200011241907.LAA29724@tesla.EECS.Berkeley.EDU> (gdb) p **hitter $2 = {contr = 0x0, next = 0x830fea0, prev = 0x8b60a08, active_next = 0xbfbff57c, active_prev = 0x89f5308, below = 0x893ac78, above = 0x893a798, inv = 0x8c50020, container = 0x0, env = 0x0, more = 0x8b60a08, head = 0x0, map = 0x897e000, count = 286142, refcount = 1176, sk_list = 0x0, name = 0x820314a "electric dragon", title = 0x815d3aa "Ruggilli", race = 0x815edca "dragon", slaying = 0x0, msg = 0x0, x = 10, y = 2, ox = 10, oy = 2, speed = -0.400000006, speed_left = -0.909989595, nrof = 0, face = 0x8153bc4, direction = 8 '\b', facing = 0 '\000', type = 0 '\000', immune = 16440, protected = 0, attacktype = 0, vulnerable = 4, path_attuned = 0, path_repelled = 0, path_denied = 0, material = 0, magic = 0 '\000', thrownthaco = 0 '\000', state = 3 '\003', value = 0, level = 18, last_heal = 25, last_sp = 120, last_grace = 0, last_eat = 0, invisible = 0, armour = 0 '\000', pick_up = 0 '\000', owner = 0x0, enemy = 0x0, arch = 0x8206000, other_arch = 0x0, weight = 200000, carrying = 98090, flags = {2115841, 1048576, 0, 0}, ownercount = 0, randomitems = 0x82b8a50, run_away = 3, chosen_skill = 0x0, exp_obj = 0x0, hide = 0, lights = 0x0, glow_radius = 0, move_status = 0, move_type = 0, weight_limit = 0, can_apply = 0 '\000', will_apply = 0 '\000', animation_id = 145, anim_speed = 0 '\000', last_anim = 28 '\034', stats = {Str = 0 '\000', Dex = 0 '\000', Con = 11 '\013', Wis = 20 '\024', Cha = 0 '\000', Int = 0 '\000', Pow = 32 ' ', wc = -20 'ė', ac = -12 'ô', hp = 3472, maxhp = 3500, sp = 17, maxsp = 100, grace = 0, maxgrace = 0, exp = 70000, food = 0, dam = 25, luck = 0 '\000'}, spellitem = 0x8be0020, expmul = 1} gdb) p *hitter->flags $5 = 2115841 (gdb) p *hitter->flags & 1 $6 = 1 (gdb) p *hitter->flags & 2 $7 = 0 (gdb) p *hitter->flags & 4 $8 = 0 (gdb) p *hitter->flags & 8 $9 = 0 gdb) p *hitter->map $10 = {next = 0x0, where = 0x0, path = "/brittany/Brest/Castle/LargeRoom", '\000' , tmpname = 0x0, reset_time = 975098943, timeout = 0, need_refresh = 0, players = 1, in_memory = 1, encounter = 0, compressed = 0 '\000', map = 0x89b9000, floor = 0x8a7b000, floor2 = 0x8a7f000, map_ob = 0x8985000, difficulty = 12, pending = 0x0, do_los = 1, darkness = 0 '\000', light = 0x8970170, map_object = 0x89c27e8, buttons = 0x82f3190} (gdb) p *target->flags & 1 $13 = 0 (gdb) p *target->flags & 2 $14 = 0 (gdb) p *target->flags & 4 $15 = 4 $16 = {contr = 0x0, next = 0x89df5f0, prev = 0x8c16688, active_next = 0x0, active_prev = 0x0, below = 0x0, above = 0x0, inv = 0x0, container = 0x0, env = 0x0, more = 0x0, head = 0x0, map = 0x897e000, count = 0, refcount = 0, sk_list = 0x0, name = 0x0, title = 0x0, race = 0x0, slaying = 0x0, msg = 0x0, x = 9, y = 2, ox = 9, oy = 2, speed = 0, speed_left = -0.100000024, nrof = 0, face = 0x8154050, direction = 0 '\000', facing = 0 '\000', type = 88 'X', immune = 0, protected = 0, attacktype = 16384, vulnerable = 0, path_attuned = 0, path_repelled = 0, path_denied = 0, material = 0, magic = 0 '\000', thrownthaco = 0 '\000', state = 1 '\001', value = 0, level = 18, last_heal = 0, last_sp = 0, last_grace = 0, last_eat = 0, invisible = 0, armour = 0 '\000', pick_up = 0 '\000', owner = 0x8b60a08, enemy = 0x0, arch = 0x81d8800, other_arch = 0x0, weight = 0, carrying = 0, flags = {67119884, 0, 0, 0}, ownercount = 286143, randomitems = 0x0, run_away = 0, chosen_skill = 0x0, exp_obj = 0x0, hide = 0, lights = 0x0, glow_radius = 0, move_status = 0, move_type = 0, weight_limit = 0, can_apply = 0 '\000', will_apply = 0 '\000', animation_id = 333, anim_speed = 0 '\000', last_anim = 5 '\005', stats = {Str = 0 '\000', Dex = 0 '\000', Con = 0 '\000', Wis = 0 '\000', Cha = 0 '\000', Int = 0 '\000', Pow = 0 '\000', wc = -30 'â', ac = 0 '\000', hp = -2, maxhp = -4905, sp = 8, maxsp = 0, grace = 0, maxgrace = 0, exp = 0, food = 1, dam = 5, luck = 0 '\000'}, spellitem = 0x0, expmul = 1} Hope this is useful to someone. PeterM From peterm at tesla.EECS.Berkeley.EDU Fri Nov 24 14:22:42 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] More error messages (current CVS) Message-ID: <200011242022.MAA14073@tesla.EECS.Berkeley.EDU> UG: get_attack_mode(): freed object BUG: get_attack_mode(): freed object victim (arch fireball, name fireball) already dead in hit_player() victim (arch fireball, name fireball) already dead in hit_player() victim (arch fireball, name fireball) already dead in hit_player() victim (arch fireball, name fireball) already dead in hit_player() victim (arch fireball, name fireball) already dead in hit_player() victim (arch t_boulder, name boulder) already dead in hit_player() victim (arch t_boulder, name boulder) already dead in hit_player() victim (arch t_boulder, name boulder) already dead in hit_player() victim (arch t_boulder, name boulder) already dead in hit_player() From peterm at tesla.EECS.Berkeley.EDU Fri Nov 24 14:41:07 2000 From: peterm at tesla.EECS.Berkeley.EDU (Peter Mardahl) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] gdb tracings of hit player error message: Message-ID: <200011242041.MAA15962@tesla.EECS.Berkeley.EDU> victim (arch woodfloor2, name woodfloor2) already dead in hit_player() (gdb) p *hitter $17 = {contr = 0x0, next = 0x8106df0, prev = 0x830b440, active_next = 0xbfbff57c, active_prev = 0x8e1d3c8, below = 0x894d5f0, above = 0x0, inv = 0x0, container = 0x0, env = 0x0, more = 0x0, head = 0x0, map = 0x8e86000, count = 965447, refcount = 0, sk_list = 0x0, name = 0x816132a "rustmonster", title = 0x0, race = 0x819a58a "animal", slaying = 0x0, msg = 0x0, x = 1, y = 7, ox = 1, oy = 7, speed = -0.5, speed_left = -0.590000033, nrof = 0, face = 0x8157a10, direction = 4 '\004', facing = 0 '\000', type = 0 '\000', immune = 0, protected = 0, attacktype = 64, vulnerable = 4, path_attuned = 0, path_repelled = 0, path_denied = 0, material = 0, magic = 0 '\000', thrownthaco = 0 '\000', state = 1 '\001', value = 0, level = 4, last_heal = 0, last_sp = 0, last_grace = 0, last_eat = 0, invisible = 0, armour = 0 '\000', pick_up = 0 '\000', owner = 0x0, enemy = 0x0, arch = 0x81f0600, other_arch = 0x0, weight = 30000, carrying = 0, flags = {18433, 2, 0, 0}, ownercount = 0, randomitems = 0x0, run_away = 0, chosen_skill = 0x0, exp_obj = 0x0, hide = 0, lights = 0x0, glow_radius = 0, move_status = 0, move_type = 0, weight_limit = 0, can_apply = 0 '\000', will_apply = 0 '\000', animation_id = 606, anim_speed = 0 '\000', last_anim = 155 '\233', stats = {Str = 0 '\000', Dex = 0 '\000', Con = 1 '\001', Wis = 15 '\017', Cha = 0 '\000', Int = 0 '\000', Pow = 0 '\000', wc = -5 'û', ac = -10 'ö', hp = 100, maxhp = 100, sp = 0, maxsp = 0, grace = 0, maxgrace = 0, exp = 300, food = 0, dam = 0, luck = 0 '\000'}, spellitem = 0x0, expmul = 1} (gdb) where #0 hit_player (op=0x8960920, dam=1, hitter=0x89d1bb8, type=64) at attack.c:994 #1 0x8050022 in attack_ob_simple (op=0x8960920, hitter=0x89d1bb8, base_dam=0, base_wc=-5) at attack.c:518 #2 0x80502db in attack_ob (op=0x8960920, hitter=0x89d1bb8) at attack.c:581 #3 0x8071929 in do_skill_attack (tmp=0x8960920, op=0x89d1bb8, string=0x0) at skill_util.c:1430 #4 0x80716ac in skill_attack (tmp=0x8960920, pl=0x89d1bb8, dir=0, string=0x0) at skill_util.c:1317 #5 0x8062c25 in move_monster (op=0x89d1bb8) at monster.c:428 #6 0x808028c in process_object (op=0x89d1bb8) at time.c:944 #7 0x80618f1 in process_events (map=0x0) at main.c:728 #8 0x8061d8d in main (argc=1, argv=0xbfbff728) at main.c:912 #9 0x8049b35 in _start () (gdb) p *op $18 = {contr = 0x0, next = 0x8a9a618, prev = 0x8b35810, active_next = 0x0, active_prev = 0x0, below = 0x0, above = 0x8b35810, inv = 0x0, container = 0x0, env = 0x0, more = 0x0, head = 0x0, map = 0x8e86000, count = 965503, refcount = 0, sk_list = 0x0, name = 0x81b606a "woodfloor2", title = 0x0, race = 0x0, slaying = 0x0, msg = 0x0, x = 2, y = 8, ox = 2, oy = 8, speed = 0, speed_left = -0.100000001, nrof = 0, face = 0x8159e10, direction = 0 '\000', facing = 0 '\000', type = 0 '\000', immune = 0, protected = 0, attacktype = 0, vulnerable = 0, path_attuned = 0, path_repelled = 0, path_denied = 0, material = 0, magic = 0 '\000', thrownthaco = 0 '\000', state = 0 '\000', value = 0, level = 0, last_heal = 0, last_sp = 0, last_grace = 0, last_eat = 0, invisible = 0, armour = 0 '\000', pick_up = 0 '\000', owner = 0x0, enemy = 0x0, arch = 0x81b5e00, other_arch = 0x0, weight = 0, carrying = 0, flags = {256, 2147483648, 0, 0}, ownercount = 0, randomitems = 0x0, run_away = 0, chosen_skill = 0x0, exp_obj = 0x0, hide = 0, lights = 0x0, glow_radius = 0, move_status = 0, move_type = 0, weight_limit = 0, can_apply = 0 '\000', will_apply = 0 '\000', animation_id = 0, anim_speed = 0 '\000', last_anim = 0 '\000', stats = {Str = 0 '\000', Dex = 0 '\000', Con = 0 '\000', Wis = 0 '\000', Cha = 0 '\000', Int = 0 '\000', Pow = 0 '\000', wc = 0 '\000', ac = 0 '\000', hp = 0, maxhp = 0, sp = 0, maxsp = 0, grace = 0, maxgrace = 0, exp = 0, food = 0, dam = 0, luck = 0 '\000'}, spellitem = 0x0, expmul = 1} (gdb) up #5 0x8062c25 in move_monster (op=0x89d1bb8) at monster.c:428 428 (void)skill_attack(enemy,part,0,NULL); (gdb) list 423 (void)attack_ob(enemy,part); 424 #endif 425 part->stats.wc-=tmp; 426 } else 427 #ifdef ALLOW_SKILLS 428 (void)skill_attack(enemy,part,0,NULL); 429 #else 430 (void) attack_ob(enemy,part); 431 #endif 432 } /* if monster is in attack range */ (gdb) p *enemy $19 = {contr = 0x0, next = 0x8a9a618, prev = 0x8b35810, active_next = 0x0, active_prev = 0x0, below = 0x0, above = 0x8b35810, inv = 0x0, container = 0x0, env = 0x0, more = 0x0, head = 0x0, map = 0x8e86000, count = 965503, refcount = 0, sk_list = 0x0, name = 0x81b606a "woodfloor2", title = 0x0, race = 0x0, slaying = 0x0, msg = 0x0, x = 2, y = 8, ox = 2, oy = 8, speed = 0, speed_left = -0.100000001, nrof = 0, face = 0x8159e10, direction = 0 '\000', facing = 0 '\000', type = 0 '\000', immune = 0, protected = 0, attacktype = 0, vulnerable = 0, path_attuned = 0, path_repelled = 0, path_denied = 0, material = 0, magic = 0 '\000', thrownthaco = 0 '\000', state = 0 '\000', value = 0, level = 0, last_heal = 0, last_sp = 0, last_grace = 0, last_eat = 0, invisible = 0, armour = 0 '\000', pick_up = 0 '\000', owner = 0x0, enemy = 0x0, arch = 0x81b5e00, other_arch = 0x0, weight = 0, carrying = 0, flags = {256, 2147483648, 0, 0}, ownercount = 0, randomitems = 0x0, run_away = 0, chosen_skill = 0x0, exp_obj = 0x0, hide = 0, lights = 0x0, glow_radius = 0, move_status = 0, move_type = 0, weight_limit = 0, can_apply = 0 '\000', will_apply = 0 '\000', animation_id = 0, anim_speed = 0 '\000', last_anim = 0 '\000', stats = {Str = 0 '\000', Dex = 0 '\000', Con = 0 '\000', Wis = 0 '\000', Cha = 0 '\000', Int = 0 '\000', Pow = 0 '\000', wc = 0 '\000', ac = 0 '\000', hp = 0, maxhp = 0, sp = 0, maxsp = 0, grace = 0, maxgrace = 0, exp = 0, food = 0, dam = 0, luck = 0 '\000'}, spellitem = 0x0, expmul = 1} Apparently, the monster has decided that a woodfloor is his enemy. PeterM From mwedel at scruz.net Fri Nov 24 22:22:58 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] Strange problem, possible related to new attack fixes (hit player) References: <200011240052.QAA03705@tesla.EECS.Berkeley.EDU> <20001124091034.A13939@hokkaido.informatik.uni-rostock.de> Message-ID: <3A1F3EA2.B5CF9418@scruz.net> Jan Echternach wrote: > Maybe remove_ob() and free_object() should just print an error message > and otherwise ignore objects that are already removed or freed. This > would prevent some needless server crashes. Just to be flippant, you could also prevent even more by putting in lines like: signal(SIGSEGV, SIGIGN); signal(SIGILL, SIGIGN); But that probably isn't the right thing to do. As said, the problem more with referencing such objects is that objects can get re-used. It isn't much a problem with the object that is getting freed by a function further up that used it, but catching the removed and freed objects is useful if some other section of the code is holding onto an object pointer which isn't pointing at the right data and it is attempting to do something else with it. Now it may be reasonable to only abort if the server is compiled with DEBUG. From mtx93 at tzi.de Sat Nov 25 07:16:20 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] gdb tracings of hit player error message: In-Reply-To: <200011242041.MAA15962@tesla.EECS.Berkeley.EDU> Message-ID: > Apparently, the monster has decided that a woodfloor is his > enemy. > They can be dangerous and nasty, most times for feets, so what? :) MichToen From mwedel at scruz.net Sat Nov 25 20:05:56 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:21 2005 Subject: [CF-Devel] MD5 crypt in FreeBSD References: <3A154F36.15447.11DC94E@localhost> <3A163466.5C7F2B38@scruz.net> Message-ID: <3A207004.BCD52474@scruz.net> Mark Wedel wrote: > Does anyone know if we can safely check for -ldes, and if we find that, assume > it is safe/better to use that than normal crypt? I notice my solaris and linux > box don't have libdes, so they would still use crypt. I've put a change into the CVS repository that will use des_crypt if it finds des.h. Hopefully that won't break anything. From elsbernd at dfki.uni-kl.de Sun Nov 26 09:17:34 2000 From: elsbernd at dfki.uni-kl.de (Klaus Elsbernd) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] Map-Bug in 0.95.7 and previous. Message-ID: <200011261518.QAA07605@serv-200.dfki.uni-kl.de> Hello At some time, the transport code changed and so the rawboat langley/pirates/fortship:+1+47 to /langley/town/percy:+6+6 and /langley/pirates/tortola:+23+17 failed. If call match text "tortola", the player will be transported correctly to tortola (raw-boat), but if not, or you only try to apply (the sea), you won't be transported back to /langley/town/percy:+6+6. So, if no word of recall, you will be starving to death. Bis dann Klaus -- "Sure, vi is user friendly. It's just particular about who it makes friends with." ;-) _________________________ Klaus Elsbernd; System Administrator, BOFH | elsbernd@dfki.uni-kl.de Deutsches Forschungsz. f?r K?nstliche Intelligenz | DFKI GmbH, Geb. 57/285 67657 Kaiserslautern; Germany | Tel: (+49) 0631/205-3486 From echter at informatik.uni-rostock.de Sun Nov 26 11:30:39 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] gdb tracing of attack_mode bug: In-Reply-To: <200011241907.LAA29724@tesla.EECS.Berkeley.EDU>; from peterm@tesla.EECS.Berkeley.EDU on Fri, Nov 24, 2000 at 11:07:21AM -0800 References: <200011241907.LAA29724@tesla.EECS.Berkeley.EDU> Message-ID: <20001126183039.A2876@hokkaido.informatik.uni-rostock.de> On Fri, Nov 24, 2000 at 11:07:21AM -0800, Peter Mardahl wrote: > (gdb) p **hitter [electric dragon] > $16 = {contr = 0x0, next = 0x89df5f0, prev = 0x8c16688, active_next = 0x0, > active_prev = 0x0, below = 0x0, above = 0x0, inv = 0x0, container = 0x0, > env = 0x0, more = 0x0, head = 0x0, map = 0x897e000, count = 0, refcount = 0, > sk_list = 0x0, name = 0x0, title = 0x0, race = 0x0, slaying = 0x0, > msg = 0x0, x = 9, y = 2, ox = 9, oy = 2, speed = 0, > speed_left = -0.100000024, nrof = 0, face = 0x8154050, direction = 0 '\000', > facing = 0 '\000', type = 88 'X', immune = 0, protected = 0, ^^^^^^^^^ CONE object > attacktype = 16384, vulnerable = 0, path_attuned = 0, path_repelled = 0, ^^^^^^^^^^^^^^^^^^ fear spell? Looks like the dragon decided to attack an already freed fear cone. I noticed a small problem in get_enemy(): The return npc->enemy = npc->owner->enemy; should be changed to npc->enemy = npc->owner->enemy; in order to verify that the owner has still a valid enemy. Nothing new apart from that. server/monster.c needs a review for missing was_destroyed() checks. Maybe an "enemy_count" should be added to the object structure. Monsters are casting spells and doing a lot of other things and are expecting that the enemy still exists after that. -- Jan From echter at informatik.uni-rostock.de Sun Nov 26 11:43:39 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] Strange problem, possible related to new attack fixes (hit player) In-Reply-To: <3A1F3EA2.B5CF9418@scruz.net>; from mwedel@scruz.net on Fri, Nov 24, 2000 at 08:22:58PM -0800 References: <200011240052.QAA03705@tesla.EECS.Berkeley.EDU> <20001124091034.A13939@hokkaido.informatik.uni-rostock.de> <3A1F3EA2.B5CF9418@scruz.net> Message-ID: <20001126184339.B2876@hokkaido.informatik.uni-rostock.de> On Fri, Nov 24, 2000 at 08:22:58PM -0800, Mark Wedel wrote: > Jan Echternach wrote: > > Maybe remove_ob() and free_object() should just print an error message > > and otherwise ignore objects that are already removed or freed. This > > would prevent some needless server crashes. > Now it may be reasonable to only abort if the server is compiled with DEBUG. I don't need it for debugging because I always have a breakpoint in LOG. Advantages and disadvantages of aborting when removing a removed object: + no further data corruption if the object is still used after remove_ob() - needless server crash if object is freed after remove_ob() I remember only two server crashes from removing removed objects in the lasts months. In both cases, there was a free_object() after remove_ob(). -- Jan From mwedel at scruz.net Sun Nov 26 16:58:01 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] gdb tracing of attack_mode bug: References: <200011241907.LAA29724@tesla.EECS.Berkeley.EDU> <20001126183039.A2876@hokkaido.informatik.uni-rostock.de> Message-ID: <3A219579.A41F76CB@scruz.net> Jan Echternach wrote: > Nothing new apart from that. server/monster.c needs a review for > missing was_destroyed() checks. Maybe an "enemy_count" should be added > to the object structure. Monsters are casting spells and doing a lot > of other things and are expecting that the enemy still exists after > that. I wonder if a more general 'target_count' or 'other_count' might be more useful for cases where we also want to track the count of something other than just enemies. From echter at informatik.uni-rostock.de Mon Nov 27 05:14:17 2000 From: echter at informatik.uni-rostock.de (Jan Echternach) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] gdb tracing of attack_mode bug: In-Reply-To: <3A219579.A41F76CB@scruz.net>; from mwedel@scruz.net on Sun, Nov 26, 2000 at 02:58:01PM -0800 References: <200011241907.LAA29724@tesla.EECS.Berkeley.EDU> <20001126183039.A2876@hokkaido.informatik.uni-rostock.de> <3A219579.A41F76CB@scruz.net> Message-ID: <20001127121417.A9058@hokkaido.informatik.uni-rostock.de> On Sun, Nov 26, 2000 at 02:58:01PM -0800, Mark Wedel wrote: > Jan Echternach wrote: > > missing was_destroyed() checks. Maybe an "enemy_count" should be added > > to the object structure. Monsters are casting spells and doing a lot > I wonder if a more general 'target_count' or 'other_count' might be more useful > for cases where we also want to track the count of something other than just > enemies. The count itself doesn't make much sense without a corresponding member of type 'object *'. You would have to use find_object() every time. Naming it 'enemy_count' also makes it obvious that you can't use 'enemy' without restrictions while 'enemy_count' is used for something different. -- Jan From mtx93 at tzi.de Tue Nov 28 19:35:31 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] Sounds Message-ID: Hi I have some odd sounds effects. At this time, all sounds from 0-22 are effects like new player, hits, deadcry etc. From mwedel at scruz.net Tue Nov 28 23:30:30 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] Sounds References: Message-ID: <3A249476.B11DFFF2@scruz.net> Michael Toennies wrote: > > What about this: > > a signed short16 as sound ID. If it >=0, its a effect like hit, dead, etc. > If it <0, its a sound spell. Look at the code/docs - it already does this. To quote from the protocol file: S->C: sound Informs the client to play a sound. All arguments are binary data. x,y are signed 1 byte values which are offsets from the player. num is the sound number stored as a short (16 bit). (IT is up to client to determine which sound to play based on that.) Since sound numbers seldom change (and in fact, new sounds will have a higher number than the old sounds - old sounds numbers will not change in meaning like what can happen with the images), this should not be much of a problem. type is a 1 byte value which determines sound type. Currently, 0 is normal sound, 1 is spell sound. This may be extended in the future. In the case of the example you posted, all of those sounds generated are spell sounds (as denoted by the type 1) From mtx93 at tzi.de Wed Nov 29 07:21:03 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] Sounds In-Reply-To: Message-ID: Hi Ah, yes. I have put in the sound 2 weeks ago and forget the spell flag. As i rebuild it with new sounds, i skip it and then i wonder about the sound numbers. Btw: how many spells are in game at this moment? Has anyone a idea how we can group then on sound side? Except from fire/ice/lighting spells, which main groups like summon, invoke etc. are from interest and need/should have an identification sound? I want give my friend a list for spell sounds we want. MichToen > Michael Toennies wrote: > > > > What about this: > > > > a signed short16 as sound ID. If it >=0, its a effect like hit, > dead, etc. > > If it <0, its a sound spell. > > Look at the code/docs - it already does this. To quote from the > protocol file: > > S->C: sound > Informs the client to play a sound. All arguments are > binary data. > x,y are signed 1 byte values which are offsets from the player. > num is the sound number stored as a short (16 bit). > (IT is up to client to determine which sound to > play based on that.) Since sound numbers seldom change > (and in fact, > new sounds will have a higher number than the old sounds - old > sounds numbers will not change in meaning like what can > happen with > the images), this should not be much of a problem. > type is a 1 byte value which determines sound type. Currently, 0 > is normal sound, 1 is spell sound. This may be extended in the > future. > > > In the case of the example you posted, all of those sounds > generated are spell > sounds (as denoted by the type 1) > _______________________________________________ > crossfire-devel mailing list > crossfire-devel@lists.real-time.com > https://mailman.real-time.com/mailman/listinfo/crossfire-devel From mtx93 at tzi.de Wed Nov 29 15:39:17 2000 From: mtx93 at tzi.de (Michael Toennies) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] who command Message-ID: Hi There is a fine glitch in the who command. It lists player as in game, where you get before a " leaves" msg and/or a " enters game" message. MichToen From mwedel at scruz.net Thu Nov 30 02:10:43 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] Sounds References: Message-ID: <3A260B83.619BD4B5@scruz.net> Michael Toennies wrote: > Has anyone a idea how we can group then on sound side? > Except from fire/ice/lighting spells, which main groups > like summon, invoke etc. are from interest and need/should > have an identification sound? I'm not sure about spell sounds, although perhaps some better sounds could be find, like: Sound of crackling wood to use when item burns up. Sound of metal on metal or other appropriate sounds to use when gates go up and down, as well as something better than the 'boink' when you pull a lever. Perhaps some beter sounds when things die. The real problem is that the sound support in crossfire is primitative. I would really like to attach sound information to the archetypes, and also have in that information in what cases the sound is supplied. So for example, spellbooks could have an 'apply succeed sound' and a 'apply failure sound' in the archetypes, so the code doesn't have to hard code in all these sounds. Things like fireball may have multiple spells. One for the initial casting, one for when the firebullet explodes into the fireball, and perhaps a third for the the actual fire after the explosion. If anything, I would say the combat sounds are overdone - they get tiring and repetitive pretty darn quickly. Much cooler would be to fill in so you actually get some sounds in times other than combat. Perhaps the fountains make appropriate sounds, and so forth. From mwedel at scruz.net Thu Nov 30 02:13:01 2000 From: mwedel at scruz.net (Mark Wedel) Date: Thu Jan 13 17:59:22 2005 Subject: [CF-Devel] who command References: Message-ID: <3A260C0D.524EFD06@scruz.net> Michael Toennies wrote: > > Hi > > There is a fine glitch in the who command. > It lists player as in game, where you get before a > " leaves" msg and/or a " enters game" message. Note that this should be pretty easy to fix. But it does show 'potentially interested players'. For that matter, the metaserver just counts up the number of player structures in the linked list (this means that at least someone is connected). But if you do a telnet server 13327, it will count as a player in the metaserver stats even though you obviously are not playing. As said, easy to fix (could check a value or two in the player structure to see if we really do have a player). From mwedel at scruznet.com Tue Nov 7 23:27:31 2000 From: mwedel at scruznet.com (Mark Wedel) Date: Thu Jan 13 18:03:51 2005 Subject: [CF List] Re: about retriving old versions References: <20001108040316.195.qmail@web1903.mail.yahoo.com> Message-ID: <3A08E443.3EDA7CF2@scruznet.com> nirmala santhanagopal wrote: > > hello, > > I am using cvs tool in linux for version control for > my project.The cvs tool is working wel for > differences,I want to know how to retrive the old > versions using cvs command,Please mail me about this > query . I believe on checkout you can always use the '-r' option to specify version. But note that is version of the file, not a version of crossfire. I have been adding tags each time I make a crossfire release, so if you check out with a tag value, you will a version as it was for some particular release. There may be other cvs options to check out based on date and other factors. I would look at the cvs man page for them all. From nirmala_gopal at yahoo.com Tue Nov 7 22:03:16 2000 From: nirmala_gopal at yahoo.com (=?iso-8859-1?q?nirmala=20santhanagopal?=) Date: Thu Jan 13 18:03:51 2005 Subject: [CF List] about retriving old versions Message-ID: <20001108040316.195.qmail@web1903.mail.yahoo.com> hello, I am using cvs tool in linux for version control for my project.The cvs tool is working wel for differences,I want to know how to retrive the old versions using cvs command,Please mail me about this query . thank you, regards, nirmala. __________________________________________________ Do You Yahoo!? Thousands of Stores. Millions of Products. All in one Place. http://shopping.yahoo.com/ From leaf at real-time.com Fri Nov 10 16:42:26 2000 From: leaf at real-time.com (Rick Tanner) Date: Thu Jan 13 18:03:51 2005 Subject: [CF List] Help with Solaris 2.7 install (fwd) Message-ID: If anyone can help, please cc: replies to joshuak@nightfire.com since he is not subscribed to the mailing lists. Thanks. ---------- Forwarded message ---------- Date: Fri, 10 Nov 2000 16:37:28 -0600 Reply-To: joshuak@nightfire.com Name: Joshua Kealiher Email Address: joshuak@nightfire.com Comment or Suggestion: I am looking for help in installing the server and client on Sun Solaris 2.7 system. I get an error 127 when I run make on the server. And the client can't find the xpm libraries. From rmani at ti.com Sun Nov 12 21:39:00 2000 From: rmani at ti.com (R Balasubramanian) Date: Thu Jan 13 18:03:51 2005 Subject: [CF List] Re: Help with Solaris 2.7 install (fwd) In-Reply-To: Rick Tanner's message of "Fri, 10 Nov 2000 16:42:26 -0600 (CST)" References: Message-ID: <9k0y9yo7d7v.fsf@ti.com> Hi, I have succesfully built and used crossfire on Solaris 2.5.1 and Solaris 2.6. I got the Xpm libraries and installed them (I heard the default ones on Solaris are not so good). I also used GNU make. Hope this helps, Mani. From leaf at real-time.com Thu Nov 30 17:51:03 2000 From: leaf at real-time.com (Rick Tanner) Date: Thu Jan 13 18:03:51 2005 Subject: [CF List] Website update Message-ID: Hi everyone, A couple of weeks ago I imported the Crossfire website into DreamWeaver to improve ease of maintenance and to implement new features at a later date. Cleaning up the HTML and updating other aspects of the site is taking longer then expected. The result is, changes and updates that are part of the 0.95.8 release will not be viewable on the site for a couple more weeks (hopefully less then that...) Sorry for any inconvenience that this may cause. - Rick Tanner leaf@real-time.com --