|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: 1 T
Length: 17890 (0x45e2) Types: TextFile Names: »1.0Buglist«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/1.0Buglist«
==[ All the bugs that fit, we print ]== Version 1.0 Old Empire - circa 1978, decompiled from optimized 11/70 object 1982-3 (honest!). Bugs should be reported to ihnp4!druxn!tsf - Tom Fisher Credit for the game belongs to Peter Langston. I take credit for any bugs remaining in this version. If you are using a version that was modified (in addition to the parametric goodies in empglb.c) since distribution, try to locate the bug and fix it before reporting it. The only things considered bugs are those that appear to change the original intent of the code. Core dumps, meaningless or inaccurate messages, and obvious cheating opportunities are considered UN- intentional. Enhancements, (such as adding a coastwatch command) are not listed here. Items containing "Fix:" are fixed in this release. The others will be fixed later. 1) When bridge head is changed to w, b, or u, the number of supplies (o, s, g, b, or c) is multiplied. Put 50 shells in a bridge head. Change it to a warehouse to get 500 shells. Also, when there is a bridge head on both ends of a span, redesignating just one of the bridge heads drops the span. Fix: desi.c - it loses track of things when hunting around for spans attached to a bridge head and other bridge heads attached to the spans. Fix it so it keeps track of everything as intended. 2) The command line buffer overflows into the BTU variable. This is used to supply yourself with BTUs whenever in need. Fix: prmptrd.c - add check for length 3) Repay cheats the lender; loan is considered repaid when nothing is paid back. This is a good way to start wars. Fix: ledg.c - calculate interest correctly lend.c - fix max loan size coll.c - fix floating point interest and max repa.c - fix floating point interest and max 4) Spy gets info deep within other country's area instead of limiting to just adjacent sectors. Fix: spy.c - initialize chart array completely instead of of leaving some areas subject to whatever was on the stack. 5) If your ship automatically flaks enemy planes in same enemy's harbor, location of enemy's current capital position is revealed. Fix: fly.c - the wu() call should use flakker instead of sect.sct_owned when sending telegram to captain of the target ship. 6) Mov reports 34 civilians when 'v' is done while passing through urban sector with 340 civilians. Fix: mov.c - multiply times tunits in printf 7) When a ship is successfully boarded, it becomes part of the '\0' fleet. It should become part of the ' ' (or null) fleet. Fix: boar.c - set the correct value in the fleet variable 8) Logging in with more than 127 telegrams waiting produces a core dump. Fix: empdis.c - check for negative nat.nat_tgms 9) Last logged in time for deity and visitor not accurate. Fix: empcre.c - join deity's sanctuary with 127 civilians 10) Flying anything off a carrier results in immediate splashdown. Fix: fly.c - initialize bomb weight correctly 11) When bombing ships, fly complains about direction input after bombs hit. Fix: getstri.c - use multiple, rotating buffers to avoid clobbering cp in fly.c 12) When moving more material than a destination sector can hold, excess commodity is destroyed rather than returned as stated. Fix: mov.c - Fix up fcnt to be accurate if it doesn't all fit. 13) Attack causes core dump (11/70 version) when iot instruction hit. Fix: flush.c - avoid using supplied output functions. Use standard USG C library instead. 14) Number of characters in telegram file as reported by nation command not accurate. Fix: nati.c - use proper structure for fstat. 15) Compiler errors in empglb.c Fix: This got fixed with all the changes to the basic structures in empdef.h while porting the game to the Amdahl UTS and 3b systems. 16) Production sometimes goes negative. Results in negative civilians, gold bars, etc. Very elusive. Suspect max127() or update(). 17) Signals SIGHUP, SIGINT, SIGQUIT not handled at all. This stuff was more or less ignored during the decompilation process. Sorry. 18) Country report heading "time" should be BTU ? 19) Spelling error "capital" in desi.c Fix: No change. Spelling is correct! Speller needs to read a few chapters out of the dictionary. 20) Goofing up add command as deity by entering "XXXXX" when asked for country number results in "Welcome back to shell...." and wipes out the deity in the nation file. Fix: If a non-number is entered when asked for a country number, the number is taken to be 0 !! Add a check, in add.c, to see if the result is valid (0 < number < MAXNOC). 21) When country is joined and first two-sector allocation is diagonal, the welcome message still claims you have 0,0 and 0,1. 22) cen #1 ?des=x&& produces "'&es' -- meaningless condition?" Fix: In snxtsct(), print out the condition argument instead of the working buffer, buf, when an error is detected. Now it will print out: "'des=x&&'? -- meaningless condition?". 23) Shells landing in the sea report damage to the sea sector. Should be SPLASH!! Fix: This only happened when firing from a fort. Fixed by refreshing the sector buffer (getsect(vx, vy, UP_NONE)) right before checking if victim sector is sanctuary or sea. 24) Mobility goes negative in sector where crash landing occurs. 25) Nav'ing ships at 2,2 causes your ships at 34,2 to move also ? This is in a 64,64 world. This is caused by [xy]wrap() routines mishandling the range check. Needs new algorithm. 26) World of size other than 64,64 never tested after decompilation. There are probably hardcoded 2**6 or 64 references somewhere. Sorry. 27) World is subject to "continental drift" or "Atlantis Syndrome". Sectors get changed to water, mountains, or wilderness in an apparently random manner. In at least one such disaster, damaged sectors were identical to the sectors immediately to the west. It appeared that the sector buffer had the x-1,y sector data when the putsect(x,y) was done. Fix: Not known. But for now, change update.c to return 0 immediately when lst_up == 0. Original routine set lst_up to curup, returned 1, which caused putsect to be invoked. Putsect would detect the uninhabited case and set lst_up back to 0. This change substantially reduces the number of putsects on uninhabited sectors and presumably cuts down the bug exposure. Also change getsect.c to detect impending damage to sector, and on this condition, CORE DUMP. Change assa.c and atta.c to set lst_up to curup when taking over a sector. 28) Telegrams get screwed up. It appears to be placing data from initial- data section in the telegram buffer. Suspect this happens when more than 511 characters are in the message or when there is concurrent activity in the telegram file. 29) You get a core dump if you enter numbers that are greater than +127 or -128 when doing a spy command. E.g. spy -156:-14,-25,-23 dumps memory. This is because sargs doesn't check for reasonable values on return from atoip(). Suspect that a lot of other commands will also behave this way. 30) Mobility in submarines can go positive on the 13th torpedo. Fix: Put check in to make sure that mobility stays negative (-120). 31) "Because of containerization ..." message printed when dropping off commodity in the same sector it started from. Fix: Before printing message, check to see if hx,hy are the same as sx,sy. If so, don't print. 32) A memory fault occurs when executing the "upd" command. Fix: Memory fault was in the xytoa() routine. It was being passed only two out of three arguments when update() was trying to send the PLAGUE telegram to the victim country. Supply the missing third argument and declare char *xytoa(). All changes are in update.c. 33) "n citizens died of PLAGUE in x,y" bulletin has wrong coordinates. This bulletin is sent when some other country does an update of the world, causing plague to break out or kill citizens in another country. The infected country can't find out where the PLAGUE is. Fix: In update.c correct the third argument to xytoa() in the call to wu() which sends the bulletin. 34) Victim ships don't fire back properly. Freighters will fire back up to 127 shells in one blast if the attacker is in the same sector. The fleet is never checked in returning fire. Only ships in the same fleet as the victim ship are supposed to fire back. All ships that are able to fire back, do so. Instead of quitting when they have sunk the attacker, they all take a shot at the bubbles. Fix: Make freighters impotent, check the fleet, and stop firing back as soon as the attacking ship is sunk. Send a telegram to the defender indicating which ship was sunk. All changes are in fire.c . 35) Shells landing in the ocean cause a bulletin to be sent to the Deity. Fix: Put a check to inhibit bulletin in fire.c. 36) Treaties aren't checked properly. You can fire at a ship and not violate an active treaty against such mischief. If you fire at land, and you have a treaty against firing on ships, you will be guilty of violating a treaty. Fix: Straighten out program flow to perform checks in the right order in fire.c. 37) You can fire more than 1 gun from a tender. This little feature makes the tender roughly 5 times more awesome than a battleship ! You can get 50% damage on a battleship in one shot. Fix: Put check in landgun.c to limit guns to one for a tender. 38) If a fort fires on a ship, and ships in the same fleet return fire, the bulletin to the defender says fire was returned on "ship at x,y". It should be "sector x,y". Fix: Use "alors" instead of "vlors" to determine whether attacker is attacking from land or sea in fire.c. 39) Defending forts don't return fire as documented. If you fire on a fort, that fort should return fire if its able. Furthermore, if that fort is defended by another fort, the defending fort should also clobber the attacking item. Of course the target must be in range, shells and guns must be available, etc. This double defense doesn't appear to be 100% functional. Fix: Pass float to tfact() instead of integer. Passing integer caused defending forts to have a range of 0 in fire.c. 40) The "short round" calculation for firing shells is in error. If firing north or west, the shell sometimes goes the whole distance instead of falling short. Fix: Force integer truncation by casting to short in fire.c. 41) Spelling error when flying. "Barometer @620; seas to rough to fly". Fix: fly.c - Fix fmt "...seas too rough to fly". 42) Planes will catch flak from ships that have been sunk (owned by the Deity), and also from ships from the same country as the planes. The first case happens when entering a sector that has sunken ships with shells and guns still aboard. The second case happens if you accidently bomb your own ship. If there are any of your ships in that same sector, they will send up flak instead of regarding it as an accident (or training mission). Fix: fly.c, flakcheck() - Add check to inhibit flak from same country or Deity. 43) You get the message "0 citizens died of PLAGUE...". Notifying the country monarch that nothing happened seems superfluous. Fix: No Change. Although nobody died, the message is notification that the plague state of the sector changed. This is valuable information. The message could read "All citizens survived the PLAGUE...", but this would be fixing something that ain't broke. 44) It is possible to bomb a Deity-owned ship. Ships owned by the Deity should not be detectable. Fix: fly.c - When bombing, a check is made to see if the victim ship is under the plane. Add a check to disallow bombing a ship owned by the Deity. 45) No information is given about ships when flying over and "viewing" sector containing ships. Fix: fly.c - Activate previously unreachable code segment. If ship is owned by same country as plane, ship details are given. If ship is foreign, two things happen: 1) the ship type and ship number (but not country) are given to the pilot, and 2) a telegram is sent to flagship's owner "2 country #5 planes buzzed ship #123". Now you can find out a submarine's ship number one more way (besides sonar and look), but not its country. And now you have one more chance for a successful landing when you try to land on a carrier and forget the carrier's ship number. 46) When crash landing planes with bombs into ships or sectors, sometimes no damage is done. Fix: fly.c - In the case where all the planes blew up, there was a missing putsect() and putship() to update the sector or ship. Thus, the sector or ship would not be updated with all the damage done by the exploding bombs. With this fixed, Kamikazi attacks are much more effective. 47) In mtch.c, the stmtch() function has a built-in assumption that pointers are 4 bytes long. Fix: Use a variety of casting operations to get the pointer arithmetic to come up with the right answer. Even lint buys it, honest !! 48) If sectors are granted to the Deity, and then the Deity grants those sectors to a country, the timestamp of a sector is left at zero. The sector will never be updated after that. The granting operation should set the timestamp to curup. Fix: In gran.c set sect.sct_lstup = curup before doing the doing the putsect. 49) Since the fixes to the "fire" command, shelling land owned by the Deity doesn't do any damage to that sector. Fix: In fire.c, a check is made to see if the victim sector is owned by the Deity or the attacking country. In that case, no check is made to see if a defending fort can fire back -- it just returns. The fix is to write the victim sector out (possibly with damage from the shell) before returning. 50) This code doesn't work on a Amdahl UTS UNIX system. Fix: Most of the problems stem from the fact that in the original code, characters were used to hold negative values. This doesn't work out on the UTS system since characters are unsigned. Change all the basic structures (gulp!) in empdef.h to replace all characters with possible negative values with shorts. Change all the subroutines, commands, and empglb.c that have knowledge of the position of these characters, -- and run lint on the whole thing to get rid of all complaints. Whew! Also - get rid of the superet() function that happens to have knowledge of the C stack frame layout. Change all functions that called superet() to achieve the functionality a different way. 51) The code that was ported to the Amdahl UTS system doesn't work on the 3b. There are two problems: 1) chan.c won't compile because it can't find the "N_NAME_CHANGE" symbol, and 2) it won't load because it can't find the _doprnt() symbol. Fix: Change the symbol "N_NAME_CHANGE" in chan.c to "N_NAME_CHNG" to match the header file. The 3b was looking at more characters. The 3b libc.a doesn't have the portable version of _doprnt(). It uses the optimized version (assembly language) called __doprnt(). This all stems from a highly questionable choice made during decompilation & integration testing -- to use the _doprnt() routine directly, rather than indirectly through printf or fprintf. This short-cut backfired on the 3b. Sorry. So OK we have to bite the big bullet here: Change all pr(), prfmt(), and pr(fmt()) calls to printf(). Change all fmt() calls to sprintf(fmtbuf,...) calls, and position the sprintf call just before the function needing the formatted goodies in fmtbuf. Change all function calls that used fmt() in the calling parameters to use fmtbuf instead. Get rid of explicit fmtlen references in tele.c. Comment out most of pr.c, leaving only the global fmtbuf[]. To get performance back to what it was with the original functions, get rid of setbuf(stdout,(char *)NULL) in empdis.c, and insert a fflush(stdout) in prmptrd.c, chkok.c, and cleared.c . So now we're a little more portable, I think. Neat.