CnC_Red_Alert/CODE/TODO.TXT

463 lines
18 KiB
Plaintext
Raw Permalink Normal View History

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 <unknown> 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.