mirror of
https://github.com/electronicarts/CnC_Red_Alert.git
synced 2025-12-15 15:11:39 -05:00
Initial commit of Command & Conquer Red Alert source code.
This commit is contained in:
463
CODE/TODO.TXT
Normal file
463
CODE/TODO.TXT
Normal file
@@ -0,0 +1,463 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user