My apologies for the length of the message, but I figured I'd be thorough. I've been trying to add dual-wield code, and ended up causing segv crashes. I went back to the code before I started this, and did it step by step, testing each change. I finally narrowed it down to something related to adding the eq slot. The changes I'm listing below are the ONLY changes made between the stable and unstable code. The crash occurs on the death of a mob, and appears that the followers list for the victim is getting messed up. My guess is some sort of OOB error, but I'm clueless where it is. My thought is I'm missing something in adding the eq slot. Can anyone point out if I have please? structs.h -------------- #define WEAR_WRIST_L 15 #define WEAR_WIELD 16 #define WEAR_HOLD 17 + #define WEAR_WIELD_S 18 + ! #define NUM_WEARS 19 /* This must be the # of eq positions!! */ ------------- constants.c ------------- "<worn around wrist> ", ! "<primary weapon> ", ! "<held> ", + "<secondary weapon> " }; ------------- "Worn around left wrist", ! "Wielded primary", "Held", + "Wielded secondary", "\n" }; ------------- At this point I've simply added the eq slot..I have not added the code for actually wielding. But the changes above seem to be causing my problems. I am open to the fact that this simply uncovered a problem that already exists--but I might as well try the most obvious thing. The gdb backtrace: ------------- Core was generated by `bin/circle -q 4000'. Program terminated with signal 11, Segmentation fault. #0 0x804b95e in perform_act (orig=0x80a49db "objs", ch=0x8258940, obj=0x0, vict_obj=0x82580b8, to=0x82ac8a8) at comm.c:1827 1827 CHECK_NULL(vict_obj, PERS((struct char_data *) vict_obj, to)); (gdb) back #0 0x804b95e in perform_act (orig=0x80a49db "objs", ch=0x8258940, obj=0x0, vict_obj=0x82580b8, to=0x82ac8a8) at comm.c:1827 #1 0x804c01a in act (str=0x80a49c7 " follow $N.", hide_invisible=1, ch=0x8258940, obj=0x0, vict_obj=0x82580b8, type=3) at comm.c:1948 #2 0x8081ce1 in stop_follower (ch=0x8258940) at utils.c:331 #3 0x8081d6a in add_follower (ch=0x8258940, leader=0x8258940) at utils.c:366 #4 0x806d288 in extract_char (ch=0x8258940) at handler.c:842 #5 0x806a9ca in die (ch=0x8258940) at fight.c:332 #6 0x806aa01 in perform_group_gain (ch=0x8258940, base=5038, victim=0x8258940) at fight.c:346 #7 0x806b7f0 in hit (ch=0x82ac8a8, victim=0x8258940, type=5038) at fight.c:796 #8 0x806badd in perform_violence () at fight.c:898 #9 0x806bc1c in perform_violence () at fight.c:957 #10 0x804a26a in heartbeat (pulse=600) at comm.c:767 #11 0x804a1e1 in game_loop (mother_desc=3) at comm.c:741 #12 0x80496b9 in init_game (port=4000) at comm.c:288 #13 0x8049646 in main (argc=3, argv=0xbffffd7c) at comm.c:256 ------------- Thanks, Brad Hartin PS: I long since wrote the code for wielding and the use of the skill, and they worked just fine--until the mob died. Sign +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST