MASTER 11/7/96 *Skirmish and cap flag carry over bug. *Speed boots to anti-aircraft flag. *allies reveal fakes Badguy -vs- soviet repair glitch Building one too many harvester. force music on the title page and credit scroll Add mouse dead zone around key buttons *Harvester getting stuck against a unit that is perpetually trying to scatter (stutter rotating). AI base is unit heavy. Should concentrate more on air defenses and selling off old buildings. Attack buildings to discourage from attacking base defenses. *Longbow not going onto pad even if empty. Tanya should laugh when exiting barracks. *If dog drops onto impassable terrain, then fake it into a passable cell instead. *Keep record of previously existing building to use for computer prerequisite checks. *Bias the base center away from the edge of the map. *Add "delay before beginning the first attack" to the rules for ai players. Add difficulty slider to the skirmish mode. Driving over weapons factory door. Give rules control to some of the house check and ai function pairs. Control engineer repair of bridge by rules file. Combine chrono effects into a single event. If near capacity, then build a silo. HouseClass::Attacked is not multiplay friendly Use the return value from the house AI function to regulate the interval between their processing. Build MCV (and go into hunt) when no construction yard left. Credit scroll scraggs title page. Retreat mode with LST *AI units sometimes drive to upper left corner Sneak peek after intro replay. Don't allow more than two allies together (if humans only). Fix the Where_To_Go() function so that it prefers under protected zones and zones that are closest to the enemy. Computer should cause blocking units to move before giving up placing a building. Computer should avoid building against the map edge. Special build emphasis on the zone that gets attacked. Tournament rules: > Countdown timer -- game ends with winner who has higher score. If not counting down, it should count upward. > Display score instead of kills on map display. > Handicap assigned to each player? > Invulnerable harvester option. Will not be automatically fired upon until all refineries destroyed. Also, it cannot overrun infantry until then either. > Allow disabling of ally option. > Ally should be limited to only one other player. Say "Changes allegience to ???" or "Turncoats from ??? to ???" Clicks on unit production (especially infantry) should be queued up (with a number). C&C2: Ideas > Some advantage to the civilian or mutant villages so that they won't likely be destroyed in a multiplayer game. Maybe they plant Tiberium. > Tiberium should spill from a destroyed harvester. > Multiplayer maps should have more than one entrance into the likely starting areas for the players. This is needed to make complete blocking of access to the base very difficult. Audio control slider should have a step rate Can harvester detect a stealth tank on the radar map as long as the stealth tank is not over tiberium? Civilians should run from civilian buildings. When ordering to move to a tree, the units don't move at all. Transport should not scatter. Harvesters should return to refinery instead of scattering. If they are already unloading or heading back to refinery, then they shouldn't scatter at all. Official maps should be brighter color. Detect counterfiet maps. Add KN bits for Num, Scroll, and Caps lock toggle keys. This will give more information to the ToASCII function for proper keyboard conversion. Fire coord for AA guns are off. Draw parachute before drawing attached object. Patrol to waypoint should clear out any prexisting target so the team members wont start to run back to their old target. force bases on if cap flag checked and visa versa. Boats are not giving out-of-range cursor when selecting a target? Make this controllable through the rules.ini file. Buildings are all scanned during every foot::percellprocess as well as any time a building is drawn that is spied. Force attack for mine layer could be "lay mine". Need scenario.Start(), Restart(), Reset() functions to control the campaign start, next mission start, and restart current mission over functions. Break scenario data into two groups. The group that needs to be preserved between scenarios and that which is set by the scenario INI file. Both groups should be saved in the saved game. The IsTanyaDead and SaveTanya should be in there. There should be two copies of the section that is preserved between scenarios. This will allow restarting the scenario. Encrypt the message digest for scenario files. Detect whether scenario is custom or original version when loading? The overlap list could be implemented as a sparse array. Each cell would have a pointer to the overlap list handler. when no overlaps exist, the handler gets deleted. Optimize INI scanning code. Store only CRC if never going to be written back out? Store entry/section CRC values as a sorted array to allow binary search? Use strcmp instead of stricmp? Thief in hunt mode should go after structures. Choose computer to attack based on force comparison? If stronger by certain amount, then attack. If weaker than certain amount, then build. Progress bargraph on game save/load. Longbow shows up for airstrip production? Suggest that these get added to the westwood library: _rotl(), ARRAY_SIZE, min(), max(), abs(), Bound() Put saving/load of Special and Options into save_misc_values and remove from save/load mplayer_values function. Why does SessionClass::Save seem to save the same values that save_mplayer_values and save_misc_values does. Flying debris from an exploding building or vehicle. The UnitToTeleport and TimeQuake variables might need to be save/loaded with the game. Each class should have an equivalent Build_INI_Entry routine. A generic (save all objects) routine could then be written. ...or... Need a INI-Put_String with variable parameters. Add random animation logic for buildings, vessels, and vehicles. If directed to move to the immediately adjacent behind cell, then just back up into it. Anything more distant, rotate to normal orientation. The MPHType seems obsolete. Just a simple "leptons per game frame" speed value seems more appropriate. Crosses line triggers may need special handling in some kind of list. They need to have a cell attached so that when a unit moves, it can quickly determine if it causes one of these trigger types to spring. This is the only trigger type that requires a cell data. Need a more efficient way of detecting when a unit crosses line or enters zone trigger event. Crack the radio messages into separate handler functions e.g., Radio_Run_Away(), Radio_Over_Out() Take close look at findpath logic. Incorporate; > Settle for simple path calc when first starting and distant from destination. > Escilate path searching when blockage occurs. > Reset search aggressiveness when new navcom is assigned. > Use common routine when path is block and "What now?" needs to be answered. Computer ships SHOULD fire on non-combat buildings when in area guard mode. Team AI should have a delay between calls. Hires_Load may be obsolete? Crosses line trigger is causing problems. Check for out of disk space during save. Delete partial save file. V04, V05, V07 have more anim frames. Put INI reading code within the warhead class object. The warhead object will be created by the weapon INI info. It will be named but otherwise undefined. The warhead reading code will look up the warhead info based on the name and then fill in the values. Add override flag so unit name can always be printed over unit? Possibly have full name override for pop up help text as well. Adjust_Threat should only make an adjustment if the unit moves to a new cell, is unlimboed, or limboed. New to Borland 5.0! namespaces mutable bool standard template library kevin_aguilar TOFIX -- fix for Red Alert OLD -- obsolete for Red Alert, but applicable for Tiberiun Sun While moving, scan for targets within range (turret vehicles only) so that firing may occur while moving. Keep track of the amount of damage (rate) received by a building. This is used to determine if the building should be sold if it is taking too much damage. Send attack helicopter to harrass the enemy. Don't consider SAM sites to be weapon equipped when determining retaliation logic. Abort existing production in emergency situations. e.g., when power is low, base is under attack, or no refineries left. Break down AI into request and priority. Then after building list, try to perform all actions that are highest priority without being mutually exclusive. Record the current state of the house. Possible states could be "buildup", "under attack", "idle". The AI will adjust itself depending on the state of the base. When damaged and previous target is outside of range but antagonist is much closer, then attack antagonist. Recuit assistance from any nearby friendly units that are also far from their designated target or are otherwise unoccupied. Hall of fame data to record more information. Histogram of progress? Records the number of wins/losses/reloads/saves, etc. Time they play. Colors on team selection brackets. Build base defense toward last enemy, but as a ring from the center of the base. Build infrastructure away from enemy threat. If low on money also sell of some base defense if there is just too much of it. Setup program crashes in windows 95. Error is "stack overflow on interrupt". MCV not deploying if it starts in correct rotated position. Score timer needs fixing. 33. SCG03EA: Won by capturing his Hand of Nod, and then building engineers from it to capture the rest of the base. When something like that happens, the AI should recall most or all of its forces for defense. Distribute damage applied to refinery to any attached harvester as well. If no more tiberium or no more refinery, then rampage harvester. Fix tree crumbling. Add a hover command to the mission list so that the helicopter can hover (forever). Prevent using the placement cursor to find stealth tanks. Airstrip should animation flashing lights when an aircraft is approaching only. Apply low power damage only when the "need more power" message is played. Click and drag on the radar map? If engineer has its target snatched out from under him, then assign a hunt mission so that it will pick another target (applied to computer non-team only). If hit, then respond even if on hunt. Optimize the update threat function to occur ever cell rather than every time the object is marked up or down. If a building is captured, cause a defend base action. When full of storage, stop the harvester. Don't enter refinery if there is no storage available. If less than 350 credit storage available, pause. Darken "repair" and "sell" if there are no buildings available. If a computer controlled unit enters a transport square, then load it up. Take advantage of archive target for aircraft. Returns to location after attacking. Aircraft dying on ground should have crew survivor. Helicopters puff smoke before crashing. Handles the transport helicopter. After evac, send the helicopter back to the game? Keep track of number of civilians evacutated? Tie a trigger event to this number? Don't reload the SCUD while it is moving. Suspend the reload delay by incrementing the countdown timer. Need accurate mouse tracking so that it is possible to move infantry into the same square as other infantry. Tighter individual infantry AI. Self defence priority. Bringing a wall to its last damage level should be much easier than completely destroying it. This will allow infantry to enter through the holes in a wall more easily than the vehicles would. Need a function that will return the cell number that either the unit is currently at (if it isn't moving) or the one that it will be at the moment is needs to pull more values off of the path list. This function will be used in the findpath draw routine. This is necessary because infantry and vehicles use a different method of movement and path list processing. Add flag so that bullet (or warhead) knows whether to do explosion area effect damage or whether to just damage the target. SAM missiles would just damage the target (maybe APDS as well). Add some function to the facing class that automatically convert the return value to 1/32 or 1/8 values. Misc. strange Watcom errors/quirks > Internal compiler error 57 > Abnormal program termination: Array bounds exception CS:EIP = 2BCDh:000009A6h > Created a 100 meg precompiled header file. > read error on work file: error code = 1 > "const" bitfields show up as 32bit numbers in debugger. > couldn't add a specifier (foobar::) to a friend class declaration > Inline assembly can generate wrong code for parameter setup. > casting doesn't follow precidence rules. > CTRL-C to break out of compile sometimes crashes. Here is an error. Invalid date "" run-time error R6000 - stack overflow > Unable to find carve memory block. > Can't overload inline assembly routines?!?! #pragma doesn't specify parameter type information so that it can resolve properly? > Access Violation abort and register dump when compiling display.cpp WPP386 caused an invalid page fault in module at 0000:4f435c4f. Registers: EAX=8161e314 CS=014f EIP=4f435c4f EFLGS=00010246 EBX=0059f798 SS=0157 ESP=005900f0 EBP=00590110 ECX=00590198 DS=0157 ESI=005901dc FS=0d97 EDX=bff76648 ES=0157 EDI=005901c0 GS=0000 Bytes at CS:EIP: Pass range to bullet constructor. It will use this value to limit the fuel and scatter calculations. Library allocation and input system should route through a global base class pointer. This allows changing some aspect of these system by using simple derived classes. Example: The memory system could keep track of what and why allocations take place. The input system could be intercepted to playback a recorded demo. Etc. Create a standard format for dissemenating technology from a project. This form would have a concise technology synopsis at the begining. This would be followed by greater detail explanations. Create inline versions of Swap_LONG, Reverse_WORD, and Reverse_LONG. Straighten out the ScrollGadget / SliderGadgets. It shouldn't "new" the arrow gadgets, but rather either have them as integral objects or separate them completely and create a special combination class in a similar fashion to the list class. Create a number<->string handler for the library. String data files (blocks) are registered with the handler. All library routines that can take const strings could then also take string numbers. They would use the handler to extract the correct string pointer. Create a utility that loads the palette source pictures and then generates all the morph palette tables. This is a C&C custom utility. Need a smarter team movement logic for the computer so that infantry do not clump into one cell unless absolutely necessary. Create a function that submits a "pending object" to the map I/O handler. This handles setting up the Zone cell, pseudocursor sizes, as well as all the pending pointers. If fire shard lands in the exact sub-cell position of an infantry unit, then it will automatically catch fire. If cell targets were simple object types, then they can exists in a sort of virtual cell existence when specific targeting of a cell is desired. This will allow all target values to be converted into short object pointers. There would be a limit to the number of cells that could be targeted simultaneously. Multiple units targeting the same cell would be allowed. Each pseudo-cell would keep a record of the number of simultaneous targets upon itself. Add a "new" and "delete" function for cells. It would merely return pointer to appropriate spot in the cell array, but does allow the constructor/destructor logic to function as well as allow the possibility of arbitrary sized maps. These cell objects would not be the same as the virtual cell objects used for targeting purposes, although each targeting cell object has a real cell object it corresponds to. Need a utility that will calculate fading and translucent tables from a specified palette. It will create a data file of the created table(s). This utility should be passed a source LBM (for palette file) and a destination filename and the operation to perform. It could also be passed a text file that elaborated the process to perform. Example: [All] ; Options that perform to all colors unless overridden. Percent=70 ; Percent to fade from original color to destination color. [1] ; Process for color table entry #1 in original palette. FadeTo=13 ; Fades to color #13. Percent=70 ; Fades 70% of the way from color 1 to color 13. Uses=240-255 ; Only allowed to pick from these colors as final color. Objects should move into and out of the logic processing list according to what state they are in. A unit that is just sitting and waiting for its timer to count down shouldn't be processed in the regular list like the other units would be. Example: A unit is sitting there with no order so it is out of the normal logic loop. If it gets selected as a target then it must flash. The "isflashing" flag gets set and the object gets placed into the logic list. When the flashing expires, a simple (union?) check of the logic activation bits is performed. If any of the bits are still on, then the object remains in the logic list, otherwise it is removed. A simple countdown timer processor is needed for those cases where the only reason the unit is out of the logic loop is if it is waiting for the next AI command to occur. search for ",[^ \t$]" and " (" and "}\n[ \t]else {" and "for(" and "switch(" and "\*." and "\t\*-" and "return(" ){ and }else{ Separate arming value for each weapon. This will allow weapons to fire at will according to their fire rates. This will also require a What_Weapon_Should_I_Fire_Now() function to help resolve the ambiguous situations. Create a project format style guide for C&C Tiberian Sun. Put summary into some header file. Need very specific question functions for the objects. Wrapper functions (radio messages) coordinate these sub functions to perform tasks.