diff --git a/README.md b/README.md index 5982e3d..69e1118 100644 --- a/README.md +++ b/README.md @@ -60,13 +60,18 @@ Changes in v1.1.0-alpha: * "audit ac" command for immortals (formerly "acaudit"), allowing for further audit commands in the future * Minor score output change to only show quest status while on a quest, PC/NPC name, sdesc, and current ldesc * Added ability to reroll initial stats if they are not to player's liking, and undo reroll if needed + * Removed alignment from game - no more GOOD/EVIL flags and restrictions on items/shops Features to be implemented in the next few releases: +* Updated door code so that it can be closed/locked/saved with rsave code +* SECTOR/ROOM type changes to make terrain movement easier or more difficult * Subclass selection to personalize character further * Combat is slowed down so it isn't over in < 15 seconds (unless you're far outmatched) * Mounts added to help with long trips * Wagons added to help with caravans +* BUILDING object type created to allow enter/leave +* Updated BUILDING object type so that it can be damaged and no longer enterable (but someone can leave at cost to health) * Plantlife introduced * Updated lockpicking skill * Trap as a skill - one focused on city and one focused on desert @@ -81,7 +86,7 @@ Features to be implemented in the next few releases: * Haggling and bartering system * New calendar and moon cycles * Heat based on time of day increases/decreases, changing hunger/thirst levels -* Sandstorms limiting visibility +* Weather updates and sandstorms limiting visibility * Shaded rooms providing bonuses to regeneration * Criminal system for cities and jails * Basic Psionics diff --git a/doc/building.txt b/doc/building.txt index 13001c7..0d5f26c 100644 --- a/doc/building.txt +++ b/doc/building.txt @@ -632,7 +632,7 @@ The format of a mobile is: ~ ~ - + {type-specific information; see below for details} Virtual Number This number is critical; it is the identity of the mobile within @@ -687,9 +687,9 @@ L) NPC Flags : ISNPC its hit points. If the WIMPY bit is set in conjunction with any of the forms of the AGGRESSIVE bit, the mob will only attack mobs that are unconscious (sleeping or incapacitated). -9) AGGR_EVIL Mob will attack players that are evil-aligned. -10) AGGR_GOOD Mob will attack players that are good-aligned. -11) AGGR_NEU Mob will attack players that are neutrally aligned. +9) RESERVED Not used. +10) RESERVED Not used. +11) RESERVED Not used. 12) MEMORY Mob will remember players that initiate attacks on it, and will attack that player if it ever runs into him again. 13) HELPER The mob will attack any player it sees in the room that is @@ -710,7 +710,7 @@ following values: M) AFF Flags : NOBITS 1) BLIND Mob is blind. 2) INVIS Mob is invisible. -3) DET-ALIGN NOT USED. +3) RESERVED NOT USED. 4) DET-INVIS Mob can see invisible characters and objects. 5) DET-MAGIC Mob is sensitive to magical presence. 6) SENSE-LIFE Mob can sense hidden life. @@ -721,23 +721,17 @@ M) AFF Flags : NOBITS 10) CURSE Mob is cursed. 11) INFRA Mob can see in dark. 12) POISON Reserved for internal use. Do not set. -13) PROT-EVIL Mob is protected from evil characters. -14) PROT-GOOD Mob is protected from good characters. +13) RESERVED NOT USED. +14) RESERVED NOT USED. 15) SLEEP Reserved for internal use. Do not set. 16) NO_TRACK Mob cannot be tracked. -17) UNUSED Unused (room for future expansion). -18) UNUSED Unused (room for future expansion). +17) FLY Mob is flying. +18) SCUBA Mob can breathe underwater. 19) SNEAK Mob can move quietly without room being informed. 20) HIDE Mob is hidden; can only be seen with sense life. -21) UNUSED Unused (room for future expansion). +21) SCAN Actively scanning for hidden threats. 22) CHARM Reserved for internal use. Do not set. -Alignment A number from -1000 to 1000 representing the mob’s initial alignment. - --1000.....-350 Evil - -349......349 Neutral - 350.....1000 Good - Type Flag This flag is a single letter which indicates what type of mobile is currently being defined, and controls what information tbaMUD expects to find next (i.e., in the file from the current point to the end of the current @@ -748,7 +742,7 @@ Standard tbaMUD supports two types of mobiles: S (for Simple), and E (for Enhanc 4.2 Type S Mobiles For type S mobs, the type-specific information should be in the following format: - S + S @@ -840,13 +834,13 @@ A beastly fido is mucking through the garbage looking for food here. The fido is a small dog that has a foul smell and pieces of rotted meat hanging around his teeth. ~ -65738 0 0 0 65536 0 0 0 -200 S +65738 0 0 0 65536 0 0 0 0 S 1 20 9 0d0+10 1d2+0 10 100 8 8 1 -This is mobile vnum 3062. The Fido has mob and affect flags set and has an -initial alignment of -200. After the S flag we see that the Fido is level 1, +This is mobile vnum 3062. The Fido has mob and affect flags set and has a +reserved value of 0. After the S flag we see that the Fido is level 1, has a THAC0 of 20, an Armor Class of 9, 0d0+10 hit points (10 hitpoints), and will do 1d2 hit points of bare hand damage per round. The Fido has 10 coins and 100 experience points, has a load position and default position of @@ -865,7 +859,7 @@ literal letter Emust then come after all E-specs to signal the end of the mob. The format of an E mobile is as follows: - E + E @@ -886,7 +880,7 @@ A beastly fido is mucking through the garbage looking for food here. The fido is a small dog that has a foul smell and pieces of rotted meat hanging around his teeth. ~ -65738 0 0 0 65536 0 0 0 -200 E +65738 0 0 0 65536 0 0 0 0 E 1 20 9 0d0+10 1d2+0 10 100 8 8 1 @@ -1026,16 +1020,16 @@ but has no substantive effect otherwise. The flags have the following values: 1) GLOW Item is glowing (cosmetic). 2) HUM Item is humming (cosmetic). -3) UNUSED Reserved (unused). +3) RESERVED Reserved (unused). 4) NODONATE Item cannot be donated. 5) NOINVIS Item cannot be made invisible. 6) INVISIBLE Item is invisible. 7) MAGIC Item has a magical aura and cannot be enchanted. 8) NODROP Item is cursed and cannot be removed or dropped. 9) BLESS Item is blessed (cosmetic). -10) ANTI_GOOD Item cannot be used by good-aligned characters. -11) ANTI_EVIL Item cannot be used by evil-aligned characters. -12) ANTI_NEUTRAL Item cannot be used by neutral align characters. +10) RESERVED Not used. +11) RESERVED Not used. +12) RESERVED Not used. 13) ANTI_MAGIC_USER Item cannot be used by the Mage class. 14) ANTI_CLERIC Item cannot be used by the Cleric class. 15) ANTI_THIEF Item cannot be used by the Thief class. @@ -1611,16 +1605,16 @@ monty-haul campaigns. Shop Keeper Mobile Number Virtual number of the shopkeeper mobile. With Who Bitvector A bitvector (see section 2.4 on ‘Using Bitvectors’) used to -designate certain alignments or classes that the shop will not trade with, with +designate certain classes that the shop will not trade with, with the following values: E) No Trade With : NOBITS - Designates certain alignments or classes that the shop will not trade with: + Designates certain classes that the shop will not trade with: - 1) Good 2) Evil - 3) Neutral 4) Magic User - 5) Cleric 6) Thief - 7) Warrior + 1) Sorceror 2) Cleric + 3) Rogue 4) Fighter + 5) Barbarian 6) Ranger + 7) Bard 8) Druid Shop Room 1...Shop Room n The virtual numbers the mobile must be in for the shop to be effective. (So transferred shopkeepers can’t sell in the desert). @@ -1737,15 +1731,16 @@ Shop Keeper Mobile Number Virtual number of the shopkeeper mobile. With Who Bitvector A bitvector (see section ‘Using Bitvectors’) used to designate certain -alignments or classes that the shop will not trade with, with the following +classes that the shop will not trade with, with the following values: -1 a NOGOOD Keeper won’t trade with positively-aligned players. -2 b NOEVIL Keeper won’t trade with evilly-aligned players. -4 c NONEUTRAL Keeper won’t trade with neutrally-aligned players. -8 d NOMAGIC_USER Keeper won’t trade with the Mage class. +8 d NOSORCEROR Keeper won’t trade with the Sorceror class. 16 e NOCLERIC Keeper won’t trade with the Cleric class. -32 f NOTHIEF Keeper won’t trade with the Thief class. -64 g NOWARRIOR Keeper won’t trade with the Warrior class. +32 f NOROGUE Keeper won’t trade with the Rogue class. +64 g NOFIGHTER Keeper won’t trade with the Fighter class. +128 h NOBARBARIAN Keeper won’t trade with the Barbarian class. +256 i NORANGER Keeper won’t trade with the Ranger class. +512 j NOBARD Keeper won’t trade with the Bard class. +1024 k NODRUID Keeper won’t trade with the Druid class. Shop Room Number The virtual number the mobile must be in for the shop to be effective. (So @@ -1848,18 +1843,18 @@ particular MUD. Check with your implementor for details. 7) charm person 8) chill touch 9) clone 10) color spray 11) control weather 12) create food 13) create water 14) cure blind 15) cure critic -16) cure light 17) curse 18) detect alignment +16) cure light 17) curse 18) reserved 19) detect invisibility 20) detect magic 21) detect poison -22) dispel evil 23) earthquake 24) enchant weapon +22) reserved 23) earthquake 24) enchant weapon 25) energy drain 26) fireball 27) harm 28) heal 29) invisibility 30) lightning bolt 31) locate object 32) magic missile 33) poison -34) protection from evil 35) remove curse 36) sanctuary +34) reserved 35) remove curse 36) sanctuary 37) shocking grasp 38) sleep 39) strength -40) summon 41) !UNUSED! 42) word of recall +40) summon 41) !RESERVED! 42) word of recall 43) remove poison 44) sense life 45) animate dead -46) dispel good 47) group armor 48) group heal -49) !UNUSED! 50) infravision 51) waterwalk +46) reserved 47) group armor 48) group heal +49) !RESERVED! 50) infravision 51) waterwalk B Item Values for Drink Containers diff --git a/doc/coding.txt b/doc/coding.txt index 6f4613b..6b50241 100644 --- a/doc/coding.txt +++ b/doc/coding.txt @@ -813,7 +813,7 @@ equips it to the character for the specified location. unequip_char() does the opposite; it removes the object from the character’s equipment list and returns it as a free-floating object. The object being unequipped must be placed elsewhere or destroyed. Note that some objects may not be equipped by characters of certain -classes and/or alignments. +classes. void obj_to_char (struct obj_data *object, struct char_data *ch) @@ -1427,9 +1427,9 @@ search it for "ITEM_x (extra bits)". Add a string giving a short name for the ne ITEM_ANTI_xxx flag, in the appropriate order, before the "\n" entry near the bottom. -The shops have a similar "don’t trade" setup, so search shop.hfor "TRADE_NOGOOD" +The shops have a similar "don’t trade" setup, so search shop.h for "TRADE_NOSORCEROR" to add a new TRADE_NOxxx item to the list for the class to be added. Below that -(near "NOTRADE_GOOD"), a line will need to be added for each new class so the ’no +(near "NOTRADE_SORCEROR"), a line will need to be added for each new class so the ’no trade’ status of a shop can be tested for the class. With the definitions in shop.h, the shop code in shop.c can then be modified to diff --git a/doc/msgedit.txt b/doc/msgedit.txt index cd1ae8c..c96a98d 100644 --- a/doc/msgedit.txt +++ b/doc/msgedit.txt @@ -16,11 +16,11 @@ Message List: 0 ) [5 ] 1, burning hands 30) [314] 2, Unknown 1 ) [6 ] 1, call lightning 31) [399] 2, Unknown 2 ) [8 ] 1, chill touch 32) [33 ] 1, poison -3 ) [10 ] 1, color spray 33) [202] 1, !UNUSED! -4 ) [22 ] 1, dispel evil 34) [203] 1, !UNUSED! -5 ) [23 ] 1, earthquake 35) [204] 1, !UNUSED! -6 ) [25 ] 1, energy drain 36) [205] 1, !UNUSED! -7 ) [26 ] 1, fireball 37) [206] 1, !UNUSED! +3 ) [10 ] 1, color spray 33) [202] 1, !RESERVED! +4 ) [22 ] 1, dispel 34) [203] 1, !RESERVED! +5 ) [23 ] 1, earthquake 35) [204] 1, !RESERVED! +6 ) [25 ] 1, energy drain 36) [205] 1, !RESERVED! +7 ) [26 ] 1, fireball 37) [206] 1, !RESERVED! ========================================= diff --git a/doc/syserr.txt b/doc/syserr.txt index 35318a7..361335d 100644 --- a/doc/syserr.txt +++ b/doc/syserr.txt @@ -9,17 +9,16 @@ rumble@tbamud.com -- Rumble 1. Errant Rooms (show error command) 2. SYSERR: Object # (oedit-s-desc) doesn't have drink type as last alias. -3. SYSERR: Mob # both Aggressive and Aggressive_to_Alignment. -4. SYSERR: Object # (oedit-s-desc) has out of range level #. -5. SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644). +3. SYSERR: Object # (oedit-s-desc) has out of range level #. +4. SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644). SYSERR: Object # (oedit-s-desc) has out of range level #2147483647. -6. SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #. -7. SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3). -8. Char is already equipped: (medit-s-desc), (oedit-s-desc) -9. SYSERR: Attempt to assign spec to non-existant mob # -10. No associated object exists when attempting to create a board [vnum #]. -11. SYSERR: Mob using >'((ch)-)player_specials.... -12: SYSERR: Object # (keyword) is type NOTE and has extra description with +5. SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #. +6. SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3). +7. Char is already equipped: (medit-s-desc), (oedit-s-desc) +8. SYSERR: Attempt to assign spec to non-existant mob # +9. No associated object exists when attempting to create a board [vnum #]. +10. SYSERR: Mob using >'((ch)-)player_specials.... +11. SYSERR: Object # (keyword) is type NOTE and has extra description with same name (keyword) 1: Errant Rooms @@ -44,30 +43,23 @@ the drink aliases). i.e. a shot of whisky should have the namelist: whisky shot whisky a cup of slime mold juice namelist should be: juice cup slime juice -3: SYSERR: Mob # both Aggressive and Aggressive_to_Alignment. - - Another harmless error. If your mob is aggressive there is no need to also -make it aggressive to certain alignments since AGGR means it will attack any -player it can see. Choose to make it aggressive to an alignment or aggressive -to all. - -4: SYSERR: Object # (oedit-s-desc) has out of range level #. +3: SYSERR: Object # (oedit-s-desc) has out of range level #. A simple one. Limit spell levels to the levels available, on tbaMUD that would be 1-34. -5: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644). +4: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644). SYSERR: Object # (oedit-s-desc) has out of range level #2147483647. These are really annoying. This happens on older versions of CircleMUD when you use numbers larger than necessary. This will actually crash many older versions of CircleMUD. Just do not do it. Use realistic numbers. -6: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #. +5: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #. There is no spell zero. Either select a spell or put -1 for none. -7: SYSERR: Object # (oedit-s-desc) contains (#) more than maximum (#). +6: SYSERR: Object # (oedit-s-desc) contains (#) more than maximum (#). When making a drink container you will set how much it initially contains on creation and the max it can hold if a player were to fill it. Common sense @@ -75,24 +67,24 @@ tells us that you can not create a container that initially holds more than the max you set. To simplify the max must always be greater than or equal to the initial amount. -8: Char is already equipped: (medit-s-desc), (oedit-s-desc) +7: Char is already equipped: (medit-s-desc), (oedit-s-desc) This happens when someone tries to equip a mob with one or more object in a single location. HELP ZEDIT-EQUIP for all the possible object equipping locations. All you have to do to fix this is pick a different equip location that is not used. -9: SYSERR: Attempt to assign spec to non-existant mob # +8: SYSERR: Attempt to assign spec to non-existant mob # To get rid of this "grep # spec_assign.c" and remove this assignment. -10: No associated object exists when attempting to create a board [vnum #]. +9: No associated object exists when attempting to create a board [vnum #]. You need to delete this board from lib/etc/boards/ and modify boards.c and boards.h. Again "grep #" *.[ch] to search for this vnum in all of your .c and .h files to remove the reference. -11: SYSERR: Mob using >'((ch)-)player_specials.... +10: SYSERR: Mob using >'((ch)-)player_specials.... Players and mobs (NPC's) share many of the same data fields, but not all. So when a mob tries to access player data it gives a SYSERR like this: @@ -110,7 +102,7 @@ know this is confusing, but just copy the example below. The changed line now will not just check for a flag, instead it will check if it is a player (not an NPC) and it is flagged then continue. -12: SYSERR: Object # (keyword) is type NOTE and has extra description with +11: SYSERR: Object # (keyword) is type NOTE and has extra description with same name (keyword) Object type NOTE is meant to be written on using the action-description. So if diff --git a/lib/text/help/help.hlp b/lib/text/help/help.hlp index 5d90e7a..c04f09d 100644 --- a/lib/text/help/help.hlp +++ b/lib/text/help/help.hlp @@ -474,7 +474,7 @@ set one of these: P) Perm Affects: @cNOBITS@n 1) BLIND DO NOT USE. 2) INVIS The wearer becomes invisible. -3) DET-ALIGN The wearer detects alignments. +3) RESERVED DO NOT USE. 4) DET-INVIS The wearer sees invisible objects and players. 5) DET-MAGIC The wearer sees a magic flag on magical objects. 6) SENSE-LIFE The wearer sees hidden mobs/players. @@ -484,15 +484,15 @@ P) Perm Affects: @cNOBITS@n 10) CURSE DO NOT USE. 11) INFRA The wearer sees in the dark. 12) POISON The wearer is poisoned. -13) PROT-EVIL The wearer is protected from evil. -14) PROT-GOOD The wearer is protected from good. +13) RESERVED DO NOT USE. +14) RESERVED DO NOT USE. 15) SLEEP DO NOT USE. 16) NO_TRACK DO NOT USE. 17) FLYING The wearer can travel through room sector type IN FLIGHT. 18) SCUBA The wearer can travel through room sector type UNDERWATER. 19) SNEAK DO NOT USE. 20) HIDE DO NOT USE. -21) UNUSED DO NOT USE. +21) SCAN Actively scanning for hidden threats. 22) CHARM DO NOT USE. #2 @@ -572,45 +572,6 @@ I would type "all 13" to list everything in zone 13. I use this to check what people have done with their zone. See also: ^, RUMBLE-ALIASES -#0 -ALIGNMENT GOOD NEUTRAL EVIL %ACTOR.ALIGN% %ALIGN% %ALIGNMENT% - - Different characters and mobs have different alignments depending upon their -way of life. Because of this, they may be aggressive or friendly depending on -the mix. Some objects cannot be used by certain alignments. For mobs alignment -ranges from: - - -1000 to -350 Evil - -350 to 350 Neutral - 350 to 1000 Good - -See also: ALIGNMENTS -#2 -ALIGNMENTS - - Many good areas stick to a defined level range, such as 10-20 or 25-30. Do -not try and make your new area cover the entire range of levels. Every area -should have its moment in the sun. Conversely, it would be nice if there were -something really unique and challenging to do at every stage in a characters -history. Your area might be the most successful if you can gear it for a range -of levels that people believe is otherwise boring or neglected. - You should always try to match your mobiles to the area and the players you -want to play there. For example, you should make the mobs in the area a -similar level to the players you want to play there since a level X warrior -should be able to kill a level X mobile if the warrior is at full health. Also, -the quality of objects or mobiles should be matched with their level. - Will your area be mostly good, neutral, or evil. If it is mostly good or -mostly evil, is it strongly good or evil or just weakly aligned? In any case -try not to make your area completely homogenous (equal). In neutral -communities there is going to be some evil and good elements, and likewise with -other communities. To some extent this goes along with the question about zone -level, consider what seem to be "gaps" among the zones in the world as far as -good or evil aligned areas for a particular level range, and try to fill those -needs. Everyone's first tendency is to make extremists--The ultimate evil hell -area, or the blindingly good paladin fortress. Keep in mind that there are -many layers in between, and these are often more interesting. - -See also: ALIGN #2 ANIMATE-DEAD @@ -1650,7 +1611,6 @@ Excluding the subfield () returns the value. Adding a subfield adjusts it. cha/con/dex/int - Checks the stat. @RHELP TRIG-STAT@n. Subfield adjusts. str/wis() () is a subfield and allows a change to the variable. alias - The list of aliases of the mob or the player name. -align() - The actor's alignment @RHELP ALIGN@n. Subfield adjusts. affect() - Checks the actor for the affect. @RHELP AFFECT@n armor - Checks the actor's armor class. canbeseen - Checks if the the mob can see the actor. @RHELP CANBESEEN@n @@ -2366,18 +2326,6 @@ detach obj sword 1300 - You guessed it - same as above. detach sword all - detach all triggers from the sword. See also: ATTACH, TRIG-DETACH, TRIG-ATTACH, OLC, TRIGEDIT, TSTAT, STAT, ROOMFLAGS -#2 -DETECT-ALIGNMENT - -Usage : cast 'detect alignment' -Accumulative: Yes (Duration) -Duration : 12 hours + level -Level : Cleric level 4. - -Allows the caster to detect the alignment of those around them. -Evil will show as a red aura, good in a blue aura. - -See also: "DETECT INVISIBILITY" #0 DETECT-INVISIBILITY @@ -2530,38 +2478,6 @@ when done type /fi to format with indent. See also: TEXT-EDITOR -#2 -DISPEL-EVIL - -Usage : cast 'dispel evil' -Accumulative: - -Duration : Instantaneous -Level : Cleric level 14. -Save : Special - -This spell will only affect evil creatures. An evil person of level -equal or less than caster will suffer 100 damage points. - -If the victim is higher level than caster, the spell will inflict -(caster_level)d4 damage points, saving throw versus half damage. - -See also: DISPEL-GOOD -#0 -DISPEL-GOOD - -Usage : cast 'dispel good' -Accumulative: - -Duration : Instantaneous -Level : Cleric level 14. -Save : Special - -This spell will only affect good creatures. A good person of level -equal or less than caster will suffer 100 damage points. - -If the victim is higher level than caster, the spell will inflict -(caster_level)d4 damage points, saving throw versus half damage. - -See also: DISPEL-EVIL #0 DISPLAYS PROMPTS HIT-PNT-DISPLAY @@ -2825,30 +2741,23 @@ of CircleMUD expect it first). i.e. a shot of whisky should have the keyword: whisky shot whisky a cup of slime mold juice keyword should be: juice cup slime juice -3: SYSERR: Mob #5 both Aggressive and Aggressive_to_Alignment. - - Another harmless error. If your mob is aggressive there is no need to also -make it aggressive to certain alignments since AGGR means it will attack any -player it can see. Choose to make it aggressive to an alignment or aggressive -to all. - -4: SYSERR: Object # (oedit-s-desc) has out of range level #. +3: SYSERR: Object # (oedit-s-desc) has out of range level #. A simple one. Limit spell levels to the levels available, on TBA that would be 1-30. -5: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644). +4: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644). SYSERR: Object # (oedit-s-desc) has out of range level #2147483647. These are really annoying. This happens when you use numbers larger than necessary. This will actually crash many older versions of CircleMUD. Just do not do it. Use realistic numbers. -6: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #. +5: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #. There is no spell zero. Either select a spell or put -1 for none. -7: SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3). +6: SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3). When making a drink container you will set how much it initially contains on creation and the max it can hold if a player were to fill it. Common sense @@ -2930,7 +2839,7 @@ Objects : 42 Triggers : 129 Theme : Its purpose, hack & slash, quest, rescue princess, kill ogre... Completion : When do you expect to finish it, how is the progress going? -Notes : Such things as zone alignment, economy, quests, special mobs and +Notes : Such things as zone economy, quests, special mobs and objs, and anything else I should know about your zone. What makes it unique? @@ -2985,8 +2894,8 @@ right. Parenthesis can be used to create priority. | | | (if actor age is not equal to 1) | < | less than | if %actor.dex% < 16 | | | (if actor dexterity is less than 16) -| > | greater than | if %actor.align% > 349 -| | | (if actor alignment is greater than 349) +| > | greater than | if %actor.level% > 30 +| | | (if actor level is greater than 30) | <= | less than or equal | if %actor.exp% <= 2 | | | (if actor experience is less than or equal to 1) | >= | greater than or equal | if %actor.mana% >= 1 @@ -4852,7 +4761,7 @@ MEDIT-AFF-FLAGS AFFECTIONS AFFECTS M) AFF Flags : @cNOBITS@n 1) BLIND Mob is blind. 2) INVIS Mob is invisible. -3) DET-ALIGN NOT USED. +3) RESERVED NOT USED. 4) DET-INVIS Mob can see invisible characters and objects. 5) DET-MAGIC Mob is sensitive to magical presence. 6) SENSE-LIFE Mob can sense hidden life. @@ -4863,15 +4772,15 @@ M) AFF Flags : @cNOBITS@n 10) CURSE Mob is cursed. 11) INFRA Mob can see in dark. 12) POISON Reserved for internal use. Do not set. -13) PROT-EVIL Mob is protected from evil characters. -14) PROT-GOOD Mob is protected from good characters. +13) RESERVED NOT USED. +14) RESERVED NOT USED. 15) SLEEP Reserved for internal use. Do not set. 16) NO_TRACK Mob cannot be tracked. 17) FLY Mob is flying. 18) SCUBA Mob can breathe underwater. 19) SNEAK Mob can move quietly without room being informed. 20) HIDE Mob is hidden; can only be seen with sense life. -21) UNUSED Unused (room for future expansion). +21) SCAN Actively scanning for hidden threats. 22) CHARM Reserved for internal use. Do not set. See also: INVIS, MEDIT-NPC-FLAGS, DG_AFFECT, TRIG-AFFECT @@ -4903,20 +4812,9 @@ should be one of the following numbers: 5) bludgeon #2 -MEDIT-EXPERIENCE MEDIT-XP MEDIT-ALIGNMENT +MEDIT-EXPERIENCE MEDIT-XP -(B) Exp Points: [ 115600] (E) Alignment: [ 1000] - -Alignment -A number from -1000 to 1000 representing the mobs initial alignment. - -Evil -1000 to -350 -Neutral -349 to 349 -Good 350 to 1000 - -The alignment of a mobile is determined entirely by you, depending on -the type of area you are creating. The alignment can be from -1000 -(extremely evil) to +1000 (divinely good). +(B) Exp Points: [ 115600] Experience is simply the number of experience points the mobile is born with. This is not the exact number of experience points the player will get @@ -5019,7 +4917,7 @@ X) Delete Mob @RHELP MEDIT-DELETE@n Q) Quit Enter choice : #2 -MEDIT-NPC-FLAGS MEDIT-FLAGS SPEC STAYZONE AGGRESSIVE AGGR_GOOD AGGR_NEU AGGR_EVIL STAY-ZONE STAY_ZONE SCAVENGER NPCFLAGS NPC-FLAGS MOBFLAGS MOB-FLAGS SENTINEL AWARE NOCHARM MOB-NPC NPC_FLAGS HELPER +MEDIT-NPC-FLAGS MEDIT-FLAGS SPEC STAYZONE AGGRESSIVE STAY-ZONE STAY_ZONE SCAVENGER NPCFLAGS NPC-FLAGS MOBFLAGS MOB-FLAGS SENTINEL AWARE NOCHARM MOB-NPC NPC_FLAGS HELPER NPC stands for non-player-character (mob) @@ -5042,9 +4940,9 @@ L) NPC Flags : @cISNPC@n its hit points. If the WIMPY bit is set in conjunction with any of the forms of the AGGRESSIVE bit, the mob will only attack mobs that are unconscious (sleeping or incapacitated). -8) AGGR_EVIL Mob will attack players that are evil-aligned. -9) AGGR_GOOD Mob will attack players that are good-aligned. -10) AGGR_NEU Mob will attack players that are neutrally aligned. +8) RESERVED Not used. +9) RESERVED Not used. +10) RESERVED Not used. 11) MEMORY Mob will remember players that initiate attacks on it, and will attack that player if it ever runs into him again. 12) HELPER The mob will attack any player it sees in the room that is @@ -5332,7 +5230,7 @@ MOBILE-FORMATS MOB-FORMATS MOB-FILES ~ ~ - + @@ -5382,11 +5280,11 @@ Message List: 0 ) [5 ] 1, burning hands 30) [314] 2, Unknown 1 ) [6 ] 1, call lightning 31) [399] 2, Unknown 2 ) [8 ] 1, chill touch 32) [33 ] 1, poison -3 ) [10 ] 1, color spray 33) [202] 1, !UNUSED! -4 ) [22 ] 1, dispel evil 34) [203] 1, !UNUSED! -5 ) [23 ] 1, earthquake 35) [204] 1, !UNUSED! -6 ) [25 ] 1, energy drain 36) [205] 1, !UNUSED! -7 ) [26 ] 1, fireball 37) [206] 1, !UNUSED! +3 ) [10 ] 1, color spray 33) [202] 1, !RESERVED! +4 ) [22 ] 1, dispel 34) [203] 1, !RESERVED! +5 ) [23 ] 1, earthquake 35) [204] 1, !RESERVED! +6 ) [25 ] 1, energy drain 36) [205] 1, !RESERVED! +7 ) [26 ] 1, fireball 37) [206] 1, !RESERVED! ========================================= MSG #, SKILL NUMBER, NUMBER OF ENTRIES, NAME (if applicable) 0 ) [5 ] 1, burning hands @@ -5901,9 +5799,9 @@ OEDIT-EXTRA-FLAGS OEDIT-FLAGS OBJECT-FLAGS OBJECTFLAGS GLOW HUM NODROP NO_DROP O 7) MAGIC Item has a magical aura and cannot be enchanted. 8) NODROP Item is cursed and cannot be removed or dropped. 9) BLESS Item is blessed (cosmetic). -10) ANTI_GOOD Item cannot be used by good-aligned characters. -11) ANTI_EVIL Item cannot be used by evil-aligned characters. -12) ANTI_NEUTRAL Item cannot be used by neutral align characters. +10) RESERVED Not used. +11) RESERVED Not used. +12) RESERVED Not used. 13) ANTI_MAGIC_USER Item cannot be used by the Mage class. 14) ANTI_CLERIC Item cannot be used by the Cleric class. 15) ANTI_THIEF Item cannot be used by the Thief class. @@ -6516,7 +6414,7 @@ this method is that if you accidentally wipe out your work on the MUD you will have a ready backup. Be careful cutting and pasting to the MUD; if you send too much text at once you will be disconnected. -See also: WORK, CARTOGRAPHY, LOCATION, THEME, PLOT, SIZE, ALIGN, BIAS +See also: WORK, CARTOGRAPHY, LOCATION, THEME, PLOT, SIZE, BIAS #2 PLAYER-SHOPS PLAYER-OWNED-SHOPS @@ -7079,7 +6977,7 @@ what it takes to properly plan out your first zone. It is extremely important that you put some forethought into what you will be creating. Remember, zones are built for others to play. Be sure to make it something a player will enjoy. A zone proposal consists of an informal MUDmail to your Head Builder. It should -contain: the location, level, alignment, theme, plot, size, and any other +contain: the location, level, theme, plot, size, and any other important notes about the zone. Detailed descriptions and help files are available in the hallways starting from room 14 and 15. @@ -7089,15 +6987,6 @@ deadlines, so take the time to give your zone character. Required Reading: @RHELP PLANNING, HELP STYLISTICS@n See also: EXAMPLE-PROPOSAL -#2 -PROTECTION-FROM-EVIL PROT-EVIL - -Usage : cast 'protection from evil' [self] -Accumulative: Yes (Duration) -Duration : 24 hours -Level : Cleric level 8. - -The meaning of this spell is not yet fully defined. #0 PURGE DESTROY UNLOAD DELETE-MOBILE DISINTEGRATE DECOMPOSE CLEANUP @@ -8396,12 +8285,12 @@ Enter choice : SEDIT-TRADE E) No Trade With : @cNOBITS@n - Designates certain alignments or classes that the shop will not trade with: + Designates certain classes that the shop will not trade with: - 1) Good 2) Evil - 3) Neutral 4) Magic User - 5) Cleric 6) Thief - 7) Warrior + 1) Sorceror 2) Cleric + 3) Rogue 4) Fighter + 5) Barbarian 6) Ranger + 7) Bard 8) Druid Currently will not trade with: @cNOBITS@n Enter choice (-1 for none): @@ -8700,11 +8589,11 @@ The following room flags can be selected: 16) * - DO NOT USE. Breadth-first search mark used by track and hunt. 17) WORLDMAP - DO NOT USE. World Map style maps. -Never set UNUSED or DO NOT USE bits, if you find them anywhere. If you +Never set RESERVED or DO NOT USE bits, if you find them anywhere. If you do not know what a flag does, DO NOT SET IT! This requires repeating since it is so often ignored: - @YIf a flag says UNUSED; DO NOT SET IT. If you do not know what it does; DO NOT SET IT!@n + @YIf a flag says RESERVED; DO NOT SET IT. If you do not know what it does; DO NOT SET IT!@n See Also: TOGGLE #2 @@ -8973,18 +8862,18 @@ SPELLS 7) charm person 8) chill touch 9) clone 10) color spray 11) control weather 12) create food 13) create water 14) cure blind 15) cure critic -16) cure light 17) curse 18) detect alignment +16) cure light 17) curse 18) reserved 19) detect invisibility 20) detect magic 21) detect poison -22) dispel evil 23) earthquake 24) enchant weapon +22) reserved 23) earthquake 24) enchant weapon 25) energy drain 26) fireball 27) harm 28) heal 29) invisibility 30) lightning bolt 31) locate object 32) magic missile 33) poison -34) protection from evil 35) remove curse 36) sanctuary +34) reserved 35) remove curse 36) sanctuary 37) shocking grasp 38) sleep 39) strength -40) summon 41) !UNUSED! 42) word of recall +40) summon 41) !RESERVED! 42) word of recall 43) remove poison 44) sense life 45) animate dead -46) dispel good 47) group armor 48) group heal -49) !UNUSED! 50) infravision 51) waterwalk +46) reserved 47) group armor 48) group heal +49) !RESERVED! 50) infravision 51) waterwalk 52) identify #2 @@ -8997,13 +8886,13 @@ SPELLS MAGICS SPELLBOOKS TOMBS SPELL-LEVELS SPELLS-STOCK SPELLLIST | Detect Magic 2 | Create Food 2 | | Chill Touch 3 | Create Water 2 | | Infravision 3 | Detect Poison 3 | -| Invisibility 4 | Detect Alignment 4 | +| Invisibility 4 | Reserved 4 | | Armor 4 | Cure Blind 4 | | Burning Hands 5 | Bless 5 | | Locate Object 6 | Detect Invisibility 6 | | Strength 6 | Blindness 6 | | Shocking Grasp 7 | Infravision 7 | -| Sleep 8 | Protection from Evil 8 | +| Sleep 8 | Reserved 8 | | Lightning Bolt 9 | Poison 8 | | Blindness 9 | Group Armor 9 | | Detect Poison 10 | Cure Crit 9 | @@ -9013,8 +8902,8 @@ SPELLS MAGICS SPELLBOOKS TOMBS SPELL-LEVELS SPELLS-STOCK SPELLLIST | Poison 14 | Word of Recall 12 | | Fireball 15 | Earthquake 12 | | Charm 16 | Darkness 13 | -| Identify 20 | Dispel Evil 14 | -| Enchant Weapon 26 | Dispel Good 14 | +| Identify 20 | Reserved 14 | +| Enchant Weapon 26 | Reserved 14 | | Clone 30 | Sanctuary 15 | | | Call Lightning 15 | | | Heal 16 | diff --git a/src/act.informative.c b/src/act.informative.c index 121594d..957ff6b 100644 --- a/src/act.informative.c +++ b/src/act.informative.c @@ -574,13 +574,6 @@ static void list_one_char(struct char_data *i, struct char_data *ch) if (AFF_FLAGGED(i, AFF_INVISIBLE)) send_to_char(ch, "*"); - if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) { - if (IS_EVIL(i)) - send_to_char(ch, "(Red Aura) "); - else if (IS_GOOD(i)) - send_to_char(ch, "(Blue Aura) "); - } - send_to_char(ch, "%s", i->player.long_descr); if (AFF_FLAGGED(i, AFF_SANCTUARY)) @@ -596,13 +589,6 @@ static void list_one_char(struct char_data *i, struct char_data *ch) if (AFF_FLAGGED(i, AFF_INVISIBLE)) send_to_char(ch, "*"); - if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) { - if (IS_EVIL(i)) - send_to_char(ch, "(Red Aura) "); - else if (IS_GOOD(i)) - send_to_char(ch, "(Blue Aura) "); - } - send_to_char(ch, "%s", i->player.long_descr); if (AFF_FLAGGED(i, AFF_SANCTUARY)) @@ -661,13 +647,6 @@ static void list_one_char(struct char_data *i, struct char_data *ch) send_to_char(ch, " is here struggling with thin air."); } - if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) { - if (IS_EVIL(i)) - send_to_char(ch, " (Red Aura)"); - else if (IS_GOOD(i)) - send_to_char(ch, " (Blue Aura)"); - } - send_to_char(ch, "\r\n"); if (AFF_FLAGGED(i, AFF_SANCTUARY)) diff --git a/src/act.wizard.c b/src/act.wizard.c index 2e950f9..67d6b70 100644 --- a/src/act.wizard.c +++ b/src/act.wizard.c @@ -3564,9 +3564,8 @@ ACMD(do_show) send_to_char(ch, "Player: %-12s (%s) [%2d %s]\r\n", GET_NAME(vict), genders[(int) GET_SEX(vict)], GET_LEVEL(vict), CLASS_ABBR(vict)); - send_to_char(ch, "Coins: %-8d Bal: %-8d Exp: %-8d Align: %-5d\r\n", - GET_COINS(vict), GET_BANK_COINS(vict), GET_EXP(vict), - GET_ALIGNMENT(vict)); + send_to_char(ch, "Coins: %-8d Bal: %-8d Exp: %-8d\r\n", + GET_COINS(vict), GET_BANK_COINS(vict), GET_EXP(vict)); send_to_char(ch, "Started: %-25.25s Last: %-25.25s\r\n", buf1, buf2); send_to_char(ch, "Played: %dh %dm\r\n", (int) (vict->player.time.played / 3600), @@ -3761,9 +3760,8 @@ static struct set_struct { { "ac", LVL_BUILDER, BOTH, NUMBER }, /* 0 */ { "afk", LVL_BUILDER, PC, BINARY }, /* 1 */ { "age", LVL_GOD, BOTH, NUMBER }, - { "align", LVL_BUILDER, BOTH, NUMBER }, { "bank", LVL_BUILDER, PC, NUMBER }, - { "brief", LVL_GOD, PC, BINARY }, /* 5 */ + { "brief", LVL_GOD, PC, BINARY }, /* 4 */ { "cha", LVL_BUILDER, BOTH, NUMBER }, { "class", LVL_BUILDER, BOTH, MISC }, { "color", LVL_GOD, PC, BINARY }, @@ -3772,20 +3770,20 @@ static struct set_struct { { "dex", LVL_BUILDER, BOTH, NUMBER }, { "drunk", LVL_BUILDER, BOTH, MISC }, { "exp", LVL_GOD, BOTH, NUMBER }, - { "frozen", LVL_GRGOD, PC, BINARY }, /* 14 */ + { "frozen", LVL_GRGOD, PC, BINARY }, /* 13 */ { "coins", LVL_BUILDER, BOTH, NUMBER }, { "height", LVL_BUILDER, BOTH, NUMBER }, { "hitpoints", LVL_BUILDER, BOTH, NUMBER }, - { "hunger", LVL_BUILDER, BOTH, MISC }, /* 18 */ + { "hunger", LVL_BUILDER, BOTH, MISC }, /* 17 */ { "int", LVL_BUILDER, BOTH, NUMBER }, { "invis", LVL_GOD, PC, NUMBER }, { "invstart", LVL_BUILDER, PC, BINARY }, - { "level", LVL_GRGOD, BOTH, NUMBER }, /* 22 */ + { "level", LVL_GRGOD, BOTH, NUMBER }, /* 21 */ { "loadroom", LVL_BUILDER, PC, MISC }, { "mana", LVL_BUILDER, BOTH, NUMBER }, { "maxhit", LVL_BUILDER, BOTH, NUMBER }, { "maxmana", LVL_BUILDER, BOTH, NUMBER }, - { "maxstam", LVL_BUILDER, BOTH, NUMBER }, /* 27 */ + { "maxstam", LVL_BUILDER, BOTH, NUMBER }, /* 26 */ { "name", LVL_IMMORT, PC, MISC }, { "nodelete", LVL_GOD, PC, BINARY }, { "nohassle", LVL_GOD, PC, BINARY }, @@ -3797,18 +3795,18 @@ static struct set_struct { { "poofout", LVL_IMMORT, PC, MISC }, { "quest", LVL_GOD, PC, BINARY }, { "room", LVL_BUILDER, BOTH, NUMBER }, - { "screenwidth", LVL_GOD, PC, NUMBER }, /* 39 */ + { "screenwidth", LVL_GOD, PC, NUMBER }, /* 38 */ { "sex", LVL_GOD, BOTH, MISC }, { "showvnums", LVL_BUILDER, PC, BINARY }, { "siteok", LVL_GOD, PC, BINARY }, { "skill", LVL_GOD, BOTH, NUMBER }, - { "stam", LVL_BUILDER, BOTH, NUMBER }, /* 44 */ + { "stam", LVL_BUILDER, BOTH, NUMBER }, /* 43 */ { "str", LVL_BUILDER, BOTH, NUMBER }, { "thirst", LVL_BUILDER, BOTH, MISC }, { "variable", LVL_GRGOD, PC, MISC }, { "weight", LVL_BUILDER, BOTH, NUMBER }, { "wis", LVL_BUILDER, BOTH, NUMBER }, - { "questpoints", LVL_GOD, PC, NUMBER }, /* 50 */ + { "questpoints", LVL_GOD, PC, NUMBER }, /* 49 */ { "questhistory", LVL_GOD, PC, NUMBER }, { "species", LVL_BUILDER, BOTH, MISC }, { "\n", 0, BOTH, MISC } @@ -3870,17 +3868,13 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c GET_ROLEPLAY_AGE(vict) = LIMIT(value, MIN_CHAR_AGE, MAX_CHAR_AGE); GET_ROLEPLAY_AGE_YEAR(vict) = time_info.year; break; - case 3: /* align */ - GET_ALIGNMENT(vict) = RANGE(-1000, 1000); - affect_total(vict); - break; - case 4: /* bank */ + case 3: /* bank */ GET_BANK_COINS(vict) = RANGE(0, 100000000); break; - case 5: /* brief */ + case 4: /* brief */ SET_OR_REMOVE(PRF_FLAGS(vict), PRF_BRIEF); break; - case 6: /* cha */ + case 5: /* cha */ if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD) RANGE(3, 25); else @@ -3888,18 +3882,18 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c vict->real_abils.cha = value; affect_total(vict); break; - case 7: /* class */ + case 6: /* class */ if ((i = parse_class(*val_arg)) == CLASS_UNDEFINED) { send_to_char(ch, "That is not a class.\r\n"); return (0); } GET_CLASS(vict) = i; break; - case 8: /* color */ + case 7: /* color */ SET_OR_REMOVE(PRF_FLAGS(vict), (PRF_COLOR_1)); SET_OR_REMOVE(PRF_FLAGS(vict), (PRF_COLOR_2)); break; - case 9: /* con */ + case 8: /* con */ if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD) RANGE(3, 25); else @@ -3907,10 +3901,10 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c vict->real_abils.con = value; affect_total(vict); break; - case 10: /* delete */ + case 9: /* delete */ SET_OR_REMOVE(PLR_FLAGS(vict), PLR_DELETED); break; - case 11: /* dex */ + case 10: /* dex */ if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD) RANGE(3, 25); else @@ -3918,7 +3912,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c vict->real_abils.dex = value; affect_total(vict); break; - case 12: /* drunk */ + case 11: /* drunk */ if (!str_cmp(val_arg, "off")) { GET_COND(vict, DRUNK) = -1; send_to_char(ch, "%s's drunkenness is now off.\r\n", GET_NAME(vict)); @@ -3932,17 +3926,17 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c return (0); } break; - case 13: /* exp */ + case 12: /* exp */ vict->points.exp = RANGE(0, 50000000); break; - case 14: /* frozen */ + case 13: /* frozen */ if (ch == vict && on) { send_to_char(ch, "Better not -- could be a long winter!\r\n"); return (0); } SET_OR_REMOVE(PLR_FLAGS(vict), PLR_FROZEN); break; - case 15: { /* coins */ + case 14: { /* coins */ struct obj_data *coin_obj; int i; @@ -3978,15 +3972,15 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c send_to_char(ch, "Ok.\r\n"); return (1); } - case 16: /* height */ + case 15: /* height */ GET_HEIGHT(vict) = value; affect_total(vict); break; - case 17: /* hit */ + case 16: /* hit */ vict->points.hit = RANGE(-9, vict->points.max_hit); affect_total(vict); break; - case 18: /* hunger */ + case 17: /* hunger */ if (!str_cmp(val_arg, "off")) { GET_COND(vict, HUNGER) = -1; send_to_char(ch, "%s's hunger is now off.\r\n", GET_NAME(vict)); @@ -4000,7 +3994,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c return (0); } break; - case 19: /* int */ + case 18: /* int */ if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD) RANGE(3, 25); else @@ -4008,17 +4002,17 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c vict->real_abils.intel = value; affect_total(vict); break; - case 20: /* invis */ + case 19: /* invis */ if (GET_LEVEL(ch) < LVL_IMPL && ch != vict) { send_to_char(ch, "You aren't godly enough for that!\r\n"); return (0); } GET_INVIS_LEV(vict) = RANGE(0, GET_LEVEL(vict)); break; - case 21: /* invistart */ + case 20: /* invistart */ SET_OR_REMOVE(PLR_FLAGS(vict), PLR_INVSTART); break; - case 22: /* level */ + case 21: /* level */ if ((!IS_NPC(vict) && value > GET_LEVEL(ch)) || value > LVL_IMPL) { send_to_char(ch, "You can't do that.\r\n"); return (0); @@ -4026,7 +4020,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c RANGE(1, LVL_IMPL); vict->player.level = value; break; - case 23: /* loadroom */ + case 22: /* loadroom */ if (!str_cmp(val_arg, "off")) { REMOVE_BIT_AR(PLR_FLAGS(vict), PLR_LOADROOM); } else if (is_number(val_arg)) { @@ -4044,23 +4038,23 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c return (0); } break; - case 24: /* mana */ + case 23: /* mana */ vict->points.mana = RANGE(0, vict->points.max_mana); affect_total(vict); break; - case 25: /* maxhit */ + case 24: /* maxhit */ vict->points.max_hit = RANGE(1, 5000); affect_total(vict); break; - case 26: /* maxmana */ + case 25: /* maxmana */ vict->points.max_mana = RANGE(1, 5000); affect_total(vict); break; - case 27: /* maxstam */ + case 26: /* maxstam */ vict->points.max_stamina = RANGE(1, 5000); affect_total(vict); break; - case 28: /* name */ + case 27: /* name */ if (ch != vict && GET_LEVEL(ch) < LVL_IMPL) { send_to_char(ch, "Only Imps can change the name of other players.\r\n"); return (0); @@ -4070,24 +4064,24 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c return (0); } break; - case 29: /* nodelete */ + case 28: /* nodelete */ SET_OR_REMOVE(PLR_FLAGS(vict), PLR_NODELETE); break; - case 30: /* nohassle */ + case 29: /* nohassle */ if (GET_LEVEL(ch) < LVL_GOD && ch != vict) { send_to_char(ch, "You aren't godly enough for that!\r\n"); return (0); } SET_OR_REMOVE(PRF_FLAGS(vict), PRF_NOHASSLE); break; - case 31: /* nosummon */ + case 30: /* nosummon */ SET_OR_REMOVE(PRF_FLAGS(vict), PRF_SUMMONABLE); send_to_char(ch, "Nosummon %s for %s.\r\n", ONOFF(!on), GET_NAME(vict)); break; - case 32: /* nowiz */ + case 31: /* nowiz */ SET_OR_REMOVE(PLR_FLAGS(vict), PLR_NOWIZLIST); break; - case 33: /* olc */ + case 32: /* olc */ if (is_abbrev(val_arg, "socials") || is_abbrev(val_arg, "actions") || is_abbrev(val_arg, "aedit")) GET_OLC_ZONE(vict) = AEDIT_PERMISSION; else if (is_abbrev(val_arg, "hedit") || is_abbrev(val_arg, "help")) @@ -4102,7 +4096,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c } else GET_OLC_ZONE(vict) = atoi(val_arg); break; - case 34: /* password */ + case 33: /* password */ if (GET_LEVEL(vict) >= LVL_GRGOD) { send_to_char(ch, "You cannot change that.\r\n"); return (0); @@ -4111,7 +4105,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c *(GET_PASSWD(vict) + MAX_PWD_LENGTH) = '\0'; send_to_char(ch, "Password changed to '%s'.\r\n", val_arg); break; - case 35: /* poofin */ + case 34: /* poofin */ if ((vict == ch) || (GET_LEVEL(ch) == LVL_IMPL)) { skip_spaces(&val_arg); parse_at(val_arg); @@ -4125,7 +4119,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c POOFIN(vict) = strdup(val_arg); } break; - case 36: /* poofout */ + case 35: /* poofout */ if ((vict == ch) || (GET_LEVEL(ch) == LVL_IMPL)) { skip_spaces(&val_arg); parse_at(val_arg); @@ -4139,10 +4133,10 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c POOFOUT(vict) = strdup(val_arg); } break; - case 37: /* quest */ + case 36: /* quest */ SET_OR_REMOVE(PRF_FLAGS(vict), PRF_QUEST); break; - case 38: /* room */ + case 37: /* room */ if ((rnum = real_room(value)) == NOWHERE) { send_to_char(ch, "No room exists with that number.\r\n"); return (0); @@ -4151,23 +4145,23 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c char_from_room(vict); char_to_room(vict, rnum); break; - case 39: /* screenwidth */ + case 38: /* screenwidth */ GET_SCREEN_WIDTH(vict) = RANGE(40, 200); break; - case 40: /* sex */ + case 39: /* sex */ if ((i = search_block(val_arg, genders, FALSE)) < 0) { send_to_char(ch, "Must be 'male', 'female', or 'neutral'.\r\n"); return (0); } GET_SEX(vict) = i; break; - case 41: /* showvnums */ + case 40: /* showvnums */ SET_OR_REMOVE(PRF_FLAGS(vict), PRF_SHOWVNUMS); break; - case 42: /* siteok */ + case 41: /* siteok */ SET_OR_REMOVE(PLR_FLAGS(vict), PLR_SITEOK); break; - case 43: /* skills/spells */ + case 42: /* skills/spells */ { char local_buf[MAX_INPUT_LENGTH], *value_arg, *name_end; char skill_name[MAX_INPUT_LENGTH]; @@ -4252,12 +4246,12 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c } break; - case 44: /* stam */ + case 43: /* stam */ vict->points.stamina = RANGE(0, vict->points.max_stamina); affect_total(vict); break; - case 45: /* str */ + case 44: /* str */ if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD) RANGE(3, 25); else @@ -4265,7 +4259,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c vict->real_abils.str = value; affect_total(vict); break; - case 46: /* thirst */ + case 45: /* thirst */ if (!str_cmp(val_arg, "off")) { GET_COND(vict, THIRST) = -1; send_to_char(ch, "%s's thirst is now off.\r\n", GET_NAME(vict)); @@ -4279,13 +4273,13 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c return (0); } break; - case 47: /* variable */ + case 46: /* variable */ return perform_set_dg_var(ch, vict, val_arg); - case 48: /* weight */ + case 47: /* weight */ GET_WEIGHT(vict) = value; affect_total(vict); break; - case 49: /* wis */ + case 48: /* wis */ if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD) RANGE(3, 25); else @@ -4293,10 +4287,10 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c vict->real_abils.wis = value; affect_total(vict); break; - case 50: /* questpoints */ + case 49: /* questpoints */ GET_QUESTPOINTS(vict) = RANGE(0, 100000000); break; - case 51: /* questhistory */ + case 50: /* questhistory */ qvnum = atoi(val_arg); if (real_quest(qvnum) == NOTHING) { send_to_char(ch, "That quest doesn't exist.\r\n"); @@ -4313,7 +4307,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c } break; } - case 52: /* species */ + case 51: /* species */ if ((i = parse_species(val_arg)) == SPECIES_UNDEFINED) { send_to_char(ch, "That is not a species.\r\n"); return (0); @@ -4718,10 +4712,6 @@ ACMD (do_zcheck) "- No unarmed combat proficiency set (add skill or weapon)\r\n"); } - if (MOB_FLAGGED(mob, MOB_AGGRESSIVE) && (MOB_FLAGGED(mob, MOB_AGGR_GOOD) || MOB_FLAGGED(mob, MOB_AGGR_EVIL) || MOB_FLAGGED(mob, MOB_AGGR_NEUTRAL)) && (found=1)) - len += snprintf(buf + len, sizeof(buf) - len, - "- Both aggresive and agressive to align.\r\n"); - if (GET_EXP(mob)>MAX_EXP_ALLOWED && (found=1)) len += snprintf(buf + len, sizeof(buf) - len, "- Has %d experience (limit: %d)\r\n", diff --git a/src/constants.c b/src/constants.c index 59de100..4a2d915 100644 --- a/src/constants.c +++ b/src/constants.c @@ -228,9 +228,9 @@ const char *action_bits[] = { "AGGR", "STAY-ZONE", "WIMPY", - "AGGR_EVIL", - "AGGR_GOOD", - "AGGR_NEUTRAL", + "RESERVED", + "RESERVED", + "RESERVED", "MEMORY", "HELPER", "NO_CHARM", @@ -299,8 +299,8 @@ const char *affected_bits[] = "CURSE", "INFRA", "POISON", - "PROT-EVIL", - "PROT-GOOD", + "RESERVED", + "RESERVED", "SLEEP", "NO_TRACK", "FLY", @@ -485,9 +485,9 @@ const char *extra_bits[] = { "MAGIC", "NO_DROP", "BLESS", - "ANTI_GOOD", - "ANTI_EVIL", - "ANTI_NEUTRAL", + "RESERVED", + "RESERVED", + "RESERVED", "ANTI_SORCEROR", "ANTI_CLERIC", "ANTI_ROGUE", diff --git a/src/db.c b/src/db.c index 9a5c124..506aef4 100644 --- a/src/db.c +++ b/src/db.c @@ -1902,13 +1902,6 @@ void parse_mobile(FILE *mob_f, int nr) REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_CHARM); REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_POISON); REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_SLEEP); - if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_GOOD)) - REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_GOOD); - if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_NEUTRAL)) - REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_NEUTRAL); - if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_EVIL)) - REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_EVIL); - check_bitvector_names(AFF_FLAGS(mob_proto + i)[0], affected_bits_count, buf2, "mobile affect"); /* This is necessary, since if we have conventional world files, &letter is diff --git a/src/fight.c b/src/fight.c index 0f9b384..ba9357b 100644 --- a/src/fight.c +++ b/src/fight.c @@ -57,7 +57,6 @@ static struct char_data *next_combat_list = NULL; static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim); static void dam_message(int dam, struct char_data *ch, struct char_data *victim, int w_type); static void make_corpse(struct char_data *ch); -static void change_alignment(struct char_data *ch, struct char_data *victim); static void group_gain(struct char_data *ch, struct char_data *victim); static void solo_gain(struct char_data *ch, struct char_data *victim); /** @todo refactor this function name */ @@ -281,14 +280,6 @@ static void make_corpse(struct char_data *ch) obj_to_room(corpse, IN_ROOM(ch)); } -/* When ch kills victim */ -static void change_alignment(struct char_data *ch, struct char_data *victim) -{ - /* new alignment change algorithm: if you kill a monster with alignment A, - * you move 1/16th of the way to having alignment -A. Simple and fast. */ - GET_ALIGNMENT(ch) += (-GET_ALIGNMENT(victim) - GET_ALIGNMENT(ch)) / 16; -} - void death_cry(struct char_data *ch) { int door; @@ -354,11 +345,9 @@ void die(struct char_data * ch, struct char_data * killer) static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim) { - int share; - - share = MIN(CONFIG_MAX_EXP_GAIN, MAX(1, base)); - - change_alignment(ch, victim); + (void)ch; + (void)base; + (void)victim; } static void group_gain(struct char_data *ch, struct char_data *victim) @@ -400,8 +389,6 @@ static void solo_gain(struct char_data *ch, struct char_data *victim) exp += MAX(0, (exp * MIN(8, (GET_LEVEL(victim) - GET_LEVEL(ch)))) / 8); exp = MAX(exp, 1); - - change_alignment(ch, victim); } static char *replace_string(const char *str, const char *weapon_singular, const char *weapon_plural) diff --git a/src/handler.c b/src/handler.c index 25d7749..314dba7 100644 --- a/src/handler.c +++ b/src/handler.c @@ -525,17 +525,6 @@ static int apply_ac(struct char_data *ch, int eq_pos) return (factor * GET_OBJ_VAL(GET_EQ(ch, eq_pos), 0)); } -int invalid_align(struct char_data *ch, struct obj_data *obj) -{ - if (OBJ_FLAGGED(obj, ITEM_ANTI_EVIL) && IS_EVIL(ch)) - return TRUE; - if (OBJ_FLAGGED(obj, ITEM_ANTI_GOOD) && IS_GOOD(ch)) - return TRUE; - if (OBJ_FLAGGED(obj, ITEM_ANTI_NEUTRAL) && IS_NEUTRAL(ch)) - return TRUE; - return FALSE; -} - void equip_char(struct char_data *ch, struct obj_data *obj, int pos) { int j; @@ -558,7 +547,7 @@ void equip_char(struct char_data *ch, struct obj_data *obj, int pos) log("SYSERR: EQUIP: Obj is in_room when equip."); return; } - if (invalid_align(ch, obj) || invalid_class(ch, obj)) { + if (invalid_class(ch, obj)) { act("You are zapped by $p and instantly let go of it.", FALSE, ch, obj, 0, TO_CHAR); act("$n is zapped by $p and instantly lets go of it.", FALSE, ch, obj, 0, TO_ROOM); /* Changed to drop in inventory instead of the ground. */ diff --git a/src/handler.h b/src/handler.h index 5ae73bf..9dfa986 100644 --- a/src/handler.h +++ b/src/handler.h @@ -40,7 +40,6 @@ void obj_from_char(struct obj_data *object); void equip_char(struct char_data *ch, struct obj_data *obj, int pos); struct obj_data *unequip_char(struct char_data *ch, int pos); -int invalid_align(struct char_data *ch, struct obj_data *obj); void obj_to_room(struct obj_data *object, room_rnum room); void obj_from_room(struct obj_data *object); diff --git a/src/magic.c b/src/magic.c index 8eae632..9ca8389 100644 --- a/src/magic.c +++ b/src/magic.c @@ -237,23 +237,9 @@ int mag_damage(int level, struct char_data *ch, struct char_data *victim, /* Mostly clerics */ case SPELL_DISPEL_EVIL: dam = dice(6, 8) + 6; - if (IS_EVIL(ch)) { - victim = ch; - dam = GET_HIT(ch) - 1; - } else if (IS_GOOD(victim)) { - act("The gods protect $N.", FALSE, ch, 0, victim, TO_CHAR); - return (0); - } break; case SPELL_DISPEL_GOOD: dam = dice(6, 8) + 6; - if (IS_GOOD(ch)) { - victim = ch; - dam = GET_HIT(ch) - 1; - } else if (IS_EVIL(victim)) { - act("The gods protect $N.", FALSE, ch, 0, victim, TO_CHAR); - return (0); - } break; @@ -461,13 +447,6 @@ void mag_affects(int level, struct char_data *ch, struct char_data *victim, to_room = "$n gets violently ill!"; break; - case SPELL_PROT_FROM_EVIL: - af[0].duration = 24; - SET_BIT_AR(af[0].bitvector, AFF_PROTECT_EVIL); - accum_duration = TRUE; - to_vict = "You feel invulnerable!"; - break; - case SPELL_SANCTUARY: af[0].duration = 4; SET_BIT_AR(af[0].bitvector, AFF_SANCTUARY); diff --git a/src/mobact.c b/src/mobact.c index 1696cdd..2e38d39 100644 --- a/src/mobact.c +++ b/src/mobact.c @@ -99,10 +99,7 @@ void mobile_activity(void) if (MOB_FLAGGED(ch, MOB_WIMPY) && AWAKE(vict)) continue; - if (MOB_FLAGGED(ch, MOB_AGGRESSIVE ) || - (MOB_FLAGGED(ch, MOB_AGGR_EVIL ) && IS_EVIL(vict)) || - (MOB_FLAGGED(ch, MOB_AGGR_NEUTRAL) && IS_NEUTRAL(vict)) || - (MOB_FLAGGED(ch, MOB_AGGR_GOOD ) && IS_GOOD(vict))) { + if (MOB_FLAGGED(ch, MOB_AGGRESSIVE)) { /* Can a master successfully control the charmed monster? */ if (aggressive_mob_on_a_leash(ch, ch->master, vict)) @@ -267,4 +264,3 @@ static bool aggressive_mob_on_a_leash(struct char_data *slave, struct char_data /* So sorry, now you're a player killer... Tsk tsk. */ return (FALSE); } - diff --git a/src/objsave.c b/src/objsave.c index e3800e9..5bc10a6 100644 --- a/src/objsave.c +++ b/src/objsave.c @@ -226,9 +226,7 @@ static void auto_equip(struct char_data *ch, struct obj_data *obj, int location) if (location > 0) { /* Wearable. */ if (!GET_EQ(ch,j)) { - /* Check the characters's alignment to prevent them from being zapped - * through the auto-equipping. */ - if (invalid_align(ch, obj) || invalid_class(ch, obj)) + if (invalid_class(ch, obj)) location = LOC_INVENTORY; else equip_char(ch, obj, j); diff --git a/src/pfdefaults.h b/src/pfdefaults.h index 27bf28e..5463e92 100644 --- a/src/pfdefaults.h +++ b/src/pfdefaults.h @@ -19,7 +19,6 @@ #define PFDEF_LEVEL 0 #define PFDEF_HEIGHT 0 #define PFDEF_WEIGHT 0 -#define PFDEF_ALIGNMENT 0 #define PFDEF_PLRFLAGS 0 #define PFDEF_AFFFLAGS 0 #define PFDEF_SAVETHROW 0 diff --git a/src/players.c b/src/players.c index b149aaf..eace528 100644 --- a/src/players.c +++ b/src/players.c @@ -276,7 +276,6 @@ int load_char(const char *name, struct char_data *ch) GET_WEIGHT(ch) = PFDEF_WEIGHT; GET_ROLEPLAY_AGE(ch) = 0; GET_ROLEPLAY_AGE_YEAR(ch) = 0; - GET_ALIGNMENT(ch) = PFDEF_ALIGNMENT; for (i = 0; i < NUM_OF_SAVING_THROWS; i++) GET_SAVE(ch, i) = PFDEF_SAVETHROW; GET_LOADROOM(ch) = PFDEF_LOADROOM; @@ -361,7 +360,6 @@ int load_char(const char *name, struct char_data *ch) AFF_FLAGS(ch)[0] = asciiflag_conv(line); } if (!strcmp(tag, "Affs")) load_affects(fl, ch); - else if (!strcmp(tag, "Alin")) GET_ALIGNMENT(ch) = atoi(line); else if (!strcmp(tag, "Alis")) read_aliases_ascii(fl, ch, atoi(line)); break; @@ -696,7 +694,6 @@ void save_char(struct char_data * ch) if (GET_HOST(ch)) fprintf(fl, "Host: %s\n", GET_HOST(ch)); if (GET_HEIGHT(ch) != PFDEF_HEIGHT) fprintf(fl, "Hite: %d\n", GET_HEIGHT(ch)); if (GET_WEIGHT(ch) != PFDEF_WEIGHT) fprintf(fl, "Wate: %d\n", GET_WEIGHT(ch)); - if (GET_ALIGNMENT(ch) != PFDEF_ALIGNMENT) fprintf(fl, "Alin: %d\n", GET_ALIGNMENT(ch)); sprintascii(bits, PLR_FLAGS(ch)[0]); diff --git a/src/sedit.c b/src/sedit.c index d38e502..3f48d36 100644 --- a/src/sedit.c +++ b/src/sedit.c @@ -31,6 +31,7 @@ static void sedit_shop_flags_menu(struct descriptor_data *d); static void sedit_no_trade_menu(struct descriptor_data *d); static void sedit_types_menu(struct descriptor_data *d); static void sedit_disp_menu(struct descriptor_data *d); +static void format_notrade_classes(bitvector_t flags, char *out, size_t outsz); void sedit_save_internally(struct descriptor_data *d) @@ -44,6 +45,34 @@ static void sedit_save_to_disk(int num) save_shops(num); } +static void format_notrade_classes(bitvector_t flags, char *out, size_t outsz) +{ + size_t len = 0; + int i, found = 0; + + if (!out || outsz == 0) + return; + + out[0] = '\0'; + + for (i = TRADE_CLASS_START; i < NUM_TRADERS; i++) { + if (IS_SET(flags, 1 << i)) { + int n = snprintf(out + len, outsz - len, "%s%s", found ? " " : "", trade_letters[i]); + + if (n < 0 || (size_t)n >= outsz - len) { + out[outsz - 1] = '\0'; + return; + } + + len += (size_t)n; + found = 1; + } + } + + if (!found) + strlcpy(out, "NOBITS", outsz); +} + /* utility functions */ ACMD(do_oasis_sedit) { @@ -346,11 +375,12 @@ static void sedit_no_trade_menu(struct descriptor_data *d) get_char_colors(d->character); clear_screen(d); - for (i = 0; i < NUM_TRADERS; i++) { - write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, trade_letters[i], + for (i = 0; i < NUM_TRADE_CLASSES; i++) { + write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, + trade_letters[TRADE_CLASS_START + i], !(++count % 2) ? "\r\n" : ""); } - sprintbit(S_NOTRADE(OLC_SHOP(d)), trade_letters, bits, sizeof(bits)); + format_notrade_classes(S_NOTRADE(OLC_SHOP(d)), bits, sizeof(bits)); write_to_output(d, "\r\nCurrently won't trade with: %s%s%s\r\n" "Enter choice : ", cyn, bits, nrm); OLC_MODE(d) = SEDIT_NOTRADE; @@ -382,7 +412,7 @@ static void sedit_disp_menu(struct descriptor_data *d) get_char_colors(d->character); clear_screen(d); - sprintbit(S_NOTRADE(shop), trade_letters, buf1, sizeof(buf1)); + format_notrade_classes(S_NOTRADE(shop), buf1, sizeof(buf1)); sprintbit(S_BITVECTOR(shop), shop_bits, buf2, sizeof(buf2)); write_to_output(d, "-- Shop Number : [%s%d%s]\r\n" @@ -756,8 +786,8 @@ void sedit_parse(struct descriptor_data *d, char *arg) } break; case SEDIT_NOTRADE: - if ((i = LIMIT(atoi(arg), 0, NUM_TRADERS)) > 0) { - TOGGLE_BIT(S_NOTRADE(OLC_SHOP(d)), 1 << (i - 1)); + if ((i = LIMIT(atoi(arg), 0, NUM_TRADE_CLASSES)) > 0) { + TOGGLE_BIT(S_NOTRADE(OLC_SHOP(d)), 1 << (TRADE_CLASS_START + i - 1)); sedit_no_trade_menu(d); return; } diff --git a/src/shop.c b/src/shop.c index 1be4ac5..44dd985 100644 --- a/src/shop.c +++ b/src/shop.c @@ -29,9 +29,9 @@ /* Global variables definitions used externally */ /* Constant list for printing out who we sell to */ const char *trade_letters[] = { - "Good", /* First, the alignment based ones */ - "Evil", - "Neutral", + "RESERVED1", + "RESERVED2", + "RESERVED3", "Sorceror", /* Then the class based ones */ "Cleric", "Rogue", @@ -119,13 +119,6 @@ static int is_ok_char(struct char_data *keeper, struct char_data *ch, int shop_n if (IS_GOD(ch)) return (TRUE); - if ((IS_GOOD(ch) && NOTRADE_GOOD(shop_nr)) || - (IS_EVIL(ch) && NOTRADE_EVIL(shop_nr)) || - (IS_NEUTRAL(ch) && NOTRADE_NEUTRAL(shop_nr))) { - snprintf(buf, sizeof(buf), "%s %s", GET_NAME(ch), MSG_NO_SELL_ALIGN); - do_tell(keeper, buf, cmd_tell, 0); - return (FALSE); - } if (IS_NPC(ch)) return (TRUE); @@ -1361,7 +1354,7 @@ void assign_the_shopkeepers(void) static char *customer_string(int shop_nr, int detailed) { - int sindex = 0, flag = 1, nlen; + int sindex = TRADE_CLASS_START, flag = (1 << TRADE_CLASS_START), nlen; size_t len = 0; static char buf[256]; @@ -1433,7 +1426,7 @@ static void list_all_shops(struct char_data *ch) static void list_detailed_shop(struct char_data *ch, int shop_nr) { struct char_data *k; - int sindex, column, flag = 1, found = 0; + int sindex, column, flag = (1 << TRADE_CLASS_START), found = 0; /* char *ptrsave; */ send_to_char(ch, "Vnum: [%5d], Rnum: [%5d]\r\n", SHOP_NUM(shop_nr), shop_nr + 1); @@ -1484,7 +1477,7 @@ static void list_detailed_shop(struct char_data *ch, int shop_nr) /* send_to_char(ch, "Customers: %s\r\n", (ptrsave = customer_string(shop_nr, TRUE)) ? ptrsave : "None"); */ send_to_char(ch, "Customers: "); column = 12; /* ^^^ strlen ^^^ */ - for (sindex = 0; *trade_letters[sindex] != '\n'; sindex++) { + for (sindex = TRADE_CLASS_START; *trade_letters[sindex] != '\n'; sindex++) { char buf1[128]; int linelen; diff --git a/src/shop.h b/src/shop.h index cc4e8d9..4ea8c7a 100644 --- a/src/shop.h +++ b/src/shop.h @@ -74,9 +74,9 @@ struct shop_data { #define LIST_ROOM 2 /* Whom will we not trade with (bitvector for SHOP_TRADE_WITH()) */ -#define TRADE_NOGOOD (1 << 0) -#define TRADE_NOEVIL (1 << 1) -#define TRADE_NONEUTRAL (1 << 2) +#define TRADE_RESERVED1 (1 << 0) +#define TRADE_RESERVED2 (1 << 1) +#define TRADE_RESERVED3 (1 << 2) #define TRADE_NOSORCEROR (1 << 3) #define TRADE_NOCLERIC (1 << 4) #define TRADE_NOROGUE (1 << 5) @@ -87,6 +87,9 @@ struct shop_data { #define TRADE_NODRUID (1 << 10) /** Total number of trade types */ #define NUM_TRADERS 11 +#define TRADE_RESERVED_COUNT 3 +#define TRADE_CLASS_START TRADE_RESERVED_COUNT +#define NUM_TRADE_CLASSES (NUM_TRADERS - TRADE_RESERVED_COUNT) struct stack_data { int data[100]; @@ -123,9 +126,6 @@ struct stack_data { #define SHOP_SELLPROFIT(i) (shop_index[(i)].profit_sell) #define SHOP_FUNC(i) (shop_index[(i)].func) -#define NOTRADE_GOOD(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOGOOD)) -#define NOTRADE_EVIL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOEVIL)) -#define NOTRADE_NEUTRAL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NONEUTRAL)) #define NOTRADE_SORCEROR(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOSORCEROR)) #define NOTRADE_CLERIC(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOCLERIC)) #define NOTRADE_ROGUE(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOROGUE)) @@ -153,7 +153,6 @@ struct stack_data { #define MSG_CLOSED_FOR_DAY "Sorry, come back tomorrow." #define MSG_NO_STEAL_HERE "$n is a bloody thief!" #define MSG_NO_SEE_CHAR "I don't trade with someone I can't see!" -#define MSG_NO_SELL_ALIGN "Get out of here before I call the guards!" #define MSG_NO_SELL_CLASS "We don't serve your kind here!" #define MSG_NO_USED_WANDSTAFF "I don't buy used up wands or staves!" #define MSG_CANT_KILL_KEEPER "Get out of here before I call the guards!" diff --git a/src/spec_procs.c b/src/spec_procs.c index 7f3d80e..9ad4d2a 100644 --- a/src/spec_procs.c +++ b/src/spec_procs.c @@ -319,13 +319,6 @@ SPECIAL(sorceror) if (GET_LEVEL(ch) > 7 && rand_number(0, 8) == 0) cast_spell(ch, vict, NULL, SPELL_BLINDNESS); - if (GET_LEVEL(ch) > 12 && rand_number(0, 12) == 0) { - if (IS_EVIL(ch)) - cast_spell(ch, vict, NULL, SPELL_ENERGY_DRAIN); - else if (IS_GOOD(ch)) - cast_spell(ch, vict, NULL, SPELL_DISPEL_EVIL); - } - if (rand_number(0, 4)) return (TRUE); diff --git a/src/spells.c b/src/spells.c index 30b5aa2..7bdcda1 100644 --- a/src/spells.c +++ b/src/spells.c @@ -388,14 +388,7 @@ ASPELL(spell_enchant_weapon) obj->affected[1].location = APPLY_PROFICIENCY; obj->affected[1].modifier = 1 + (level >= 20); - if (IS_GOOD(ch)) { - SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_ANTI_EVIL); - act("$p glows blue.", FALSE, ch, obj, 0, TO_CHAR); - } else if (IS_EVIL(ch)) { - SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_ANTI_GOOD); - act("$p glows red.", FALSE, ch, obj, 0, TO_CHAR); - } else - act("$p glows yellow.", FALSE, ch, obj, 0, TO_CHAR); + act("$p glows yellow.", FALSE, ch, obj, 0, TO_CHAR); } ASPELL(spell_detect_poison) diff --git a/src/structs.h b/src/structs.h index 7d753b4..22473cd 100644 --- a/src/structs.h +++ b/src/structs.h @@ -255,9 +255,9 @@ #define MOB_AGGRESSIVE 5 /**< Mob auto-attacks everybody nearby */ #define MOB_STAY_ZONE 6 /**< Mob shouldn't wander out of zone */ #define MOB_WIMPY 7 /**< Mob flees if severely injured */ -#define MOB_AGGR_EVIL 8 /**< Auto-attack any evil PC's */ -#define MOB_AGGR_GOOD 9 /**< Auto-attack any good PC's */ -#define MOB_AGGR_NEUTRAL 10 /**< Auto-attack any neutral PC's */ +#define MOB_AGGR_RESERVED1 8 /**< Reserved (unused) */ +#define MOB_AGGR_RESERVED2 9 /**< Reserved (unused) */ +#define MOB_AGGR_RESERVED3 10 /**< Reserved (unused) */ #define MOB_MEMORY 11 /**< remember attackers if attacked */ #define MOB_HELPER 12 /**< attack PCs fighting other NPCs */ #define MOB_NOCHARM 13 /**< Mob can't be charmed */ @@ -321,8 +321,8 @@ #define AFF_CURSE 10 /**< Char is cursed */ #define AFF_INFRAVISION 11 /**< Char can see in dark */ #define AFF_POISON 12 /**< (R) Char is poisoned */ -#define AFF_PROTECT_EVIL 13 /**< Char protected from evil */ -#define AFF_PROTECT_GOOD 14 /**< Char protected from good */ +#define AFF_RESERVED13 13 /**< Reserved (unused) */ +#define AFF_RESERVED14 14 /**< Reserved (unused) */ #define AFF_SLEEP 15 /**< (R) Char magically asleep */ #define AFF_NOTRACK 16 /**< Char can't be tracked */ #define AFF_FLYING 17 /**< Char is flying */ @@ -474,9 +474,9 @@ #define ITEM_MAGIC 6 /**< Item is magical */ #define ITEM_NODROP 7 /**< Item is cursed: can't drop */ #define ITEM_BLESS 8 /**< Item is blessed */ -#define ITEM_ANTI_GOOD 9 /**< Not usable by good people */ -#define ITEM_ANTI_EVIL 10 /**< Not usable by evil people */ -#define ITEM_ANTI_NEUTRAL 11 /**< Not usable by neutral people */ +#define ITEM_RESERVED9 9 /**< Reserved (unused) */ +#define ITEM_RESERVED10 10 /**< Reserved (unused) */ +#define ITEM_RESERVED11 11 /**< Reserved (unused) */ #define ITEM_ANTI_SORCEROR 12 /**< Not usable by sorcerors */ #define ITEM_ANTI_CLERIC 13 /**< Not usable by clerics */ #define ITEM_ANTI_ROGUE 14 /**< Not usable by rogues */ diff --git a/src/util/plrtoascii.c b/src/util/plrtoascii.c index daeb277..398cb72 100755 --- a/src/util/plrtoascii.c +++ b/src/util/plrtoascii.c @@ -59,7 +59,7 @@ struct char_point_data_plrtoascii { * in player_special_data. */ struct char_special_data_saved_plrtoascii { - int alignment; /* +-1000 for alignments */ + int alignment; long idnum; /* player's idnum; -1 for mobiles */ long /*bitvector_t*/ act; /* act flag for NPC's; player flag for PC's */ @@ -212,8 +212,6 @@ void convert(char *filename) /* char_special_data_saved */ csds = &(player.char_specials_saved); - if (csds->alignment != PFDEF_ALIGNMENT) - fprintf(outfile, "Alin: %d\n", csds->alignment); fprintf(outfile, "Id : %d\n", (int)csds->idnum); if (csds->act != PFDEF_PLRFLAGS) fprintf(outfile, "Act : %d\n", (int)csds->act); diff --git a/src/utils.h b/src/utils.h index 2fd607d..49a3b74 100644 --- a/src/utils.h +++ b/src/utils.h @@ -749,13 +749,6 @@ do \ #define CAN_SEE_IN_DARK(ch) \ (AFF_FLAGGED(ch, AFF_INFRAVISION) || (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_HOLYLIGHT))) -/** Defines if ch is good. */ -#define IS_GOOD(ch) (GET_ALIGNMENT(ch) >= 350) -/** Defines if ch is evil. */ -#define IS_EVIL(ch) (GET_ALIGNMENT(ch) <= -350) -/** Defines if ch is neither good nor evil. */ -#define IS_NEUTRAL(ch) (!IS_GOOD(ch) && !IS_EVIL(ch)) - /** Old wait state function. * @deprecated Use GET_WAIT_STATE */ #define WAIT_STATE(ch, cycle) do { GET_WAIT_STATE(ch) = (cycle); } while(0)