smq@ssyx.ucsc.edu (Robert Chansky) (05/26/89)
There is a bug in Galactic Bloodshed. It's a major one that I can't seem to find. I am running a game with 30 people on ucscb.ucsc.edu, and a few turns into it one person's planet, for some reason, got written over someone else's. The map of the affected planet looks like this: (sector map file position 6944) 000000000011111111112222222222333333333 Sects owned: 45 012345678901234567890123456789012345678 Aliens: 4 0 ##-####.xx##########.####-####-.##---##| Combat readiness: 1 1 -.#.#..xxxx.%#.---^^-##....-#--...##.--| Compatibility: 98.00 2 ..#..xx%xx%%%%%^.--^-##..-.--^^.-.#-...| 3 ..#..%V%%%-.%.----.--#.....-..-...#...^| Resource stockpile:296 4 --^^^^^%%^^^??^-^^-??--^-??-^^-%^^^^^-^| Fuel stockpile: 262 5 ^^....%%%%%.%---.-.-..-.--...........-.| Destruct cap: 79 6 ......xx%%%%%%%..------.--......-....-.| Total Population: 10060 (12442) 7 .-...xxXXX..%...-..---..-^.............| 8 ........xx...#...#--.....-...#.........| 9 #...##-.xX.###.###^-....##...##.##.##.#| 10 ##.##-##x.-###.######.############.####| as you can see something seems to have happened across it's middle there. The errant map corresponds to this other planet: (owned by another player) (sector map position 8184) 000000 Sects owned: 7 012345 Aliens:(none) 0 ^--^^^| Combat readiness: 5 1 ^^%%^^| Compatibility: 88.00(TOXIC) 2 ^XX^-^| 3 ^-xX--| Resource stockpile:67 4 ^-XX-^| Fuel stockpile: 22 5 ^-%^^^| Destruct cap: 0 6 ^^-^^^| Total Population: 206 (20) the sector map position for this planet (asteroid, actually) has been rewritten onto the first planet's map. Somehow the map position integer got changed during the time it was doing a turn, and since this is never changed in the programming it's a memory error. It strikes me as a coincidence that the new sector map could be in perfect alignment with the old (there are 8 bytes to a sector, so if the file pointer really was randomized, it seems to me, it would have a 1/8 chance of being in alignment). What I want to know is this: Is there a debugger that can trace memory locations so I can find out what's causing this problem? We have dbx, but it does a rather poor job of tracing, and can't do this kind of trace at all. What I'd really like is a C interpreter that actually does some array bounds checking of some sort. Does anyone know how I can get something that does this?