463 lines
18 KiB
Plaintext
463 lines
18 KiB
Plaintext
![]() |
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.
|