12005-06-12 22:02 Eric McDonald <eric_mcdonald@users.sourceforge.net> 2 3 Fix create check, so that some games will work properly again. 4 * actions.c (could_create): Allow creation with 0 CP to occur. 5 6 Fix bug with oproles not being unassigned when units change side. 7 * unit.c (change_unit_side): Release operational role of unit 8 from old side. 9 10 Fix bug with construction from Tkconq UI. 11 * tkcmd.c (aux_build2): Help ensure that we are not trying to build 12 in an invalid or incorrect transport. 13 14 Improve occs-on-completion feature. 15 * actions.c (make_unit_complete): Add incomplete occs with 0 CP 16 instead of 1 CP. 17 * init.c (check_occs_on_completion): No longer check for cycles 18 with incomplete units that only need 1 CP to be complete. 19 20 Polish up the Default game some more. 21 * standard.g (variant density2): Rename to 'density1' and turn it 22 on by default. 23 242005-06-10 02:05 Eric McDonald <eric_mcdonald@users.sourceforge.net> 25 26 Add SF Battles Testbed to 'bitrot' archive. 27 * battles-test.g: Add to archive. 28 * game.dir: Add "battles-test" entry. 29 302005-06-08 03:01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 31 32 Add occs-on-completion feature. 33 (Requested by Elijah and myself.) 34 * table.def (uu_complete_occs_on_completion): New TableUU, 35 'complete-occs-on-completion'. 36 (uu_incomplete_occs_on_completion): New TableUU, 37 'incomplete-occs-on-completion'. 38 * refman.texi (complete-occs-on-completion): New entry. 39 (incomplete-occs-on-completion): New entry. 40 * actions.c (make_unit_complete): Add occs-on-completion 41 functionality. 42 * init.c (check_occs_on_completion): Look for cycles in 43 occs-on-completion graphs and produce an init error if any found. 44 (check_game_validity): Call 'check_occs_on_completion'. 45 46 Bring docs up-to-date. 47 * refman.texi (constructor-absorbed-by): New entry. 48 49 Polish Default game a little bit. 50 * standard.g (variant model1): Rename. 51 (variant model1doctrine): Rename. 52 (density1): Remove. 53 * stdunit.g: Remove creation-related tables, since they are no 54 longer used. 55 56 Remove StarFleet Battles test from games lib. 57 * battle-test.g: Delete. 58 592005-06-07 02:38 Eric McDonald <eric_mcdonald@users.sourceforge.net> 60 61 Fix colonizer-doesn't-garrision-anymore bug. 62 (I knowingly created this bug with the intent of making a new feature 63 to fix it. This patch contains the new feature.) 64 * table.def (uu_constructor_absorbed_by): New TableUU, 65 'constructor-absorbed-by'. 66 * actions.c (do_create_common_2): Only absorb creator into creation 67 if 'uu_constructor_absorbed_by' is set. 68 (do_build_action): Only absorb builder into completed unit 69 if 'uu_constructor_absorbed_by' is set. 70 * 3rd-age.g (constructor-absorbed-by): New table. 71 * advances.g: Likewise. 72 * bolodd2.g: Likewise. 73 * bolodd3.g: Likewise. 74 * civ2.g: Likewise. 75 * solar.g: Likewise. 76 * time.g: Likewise. 77 78 Add test for merge "action" to AI. 79 * aiunit.cc (can_create_in): Check whether colonizer can merge 80 into colonists or not. 81 822005-06-07 00:17 Eric McDonald <eric_mcdonald@users.sourceforge.net> 83 84 Fix crashing bug in skelconq. 85 (Reported by an anonymous user.) 86 * skelconq.c (main): Only check command-line args for auto-tester 87 invocation, if there are command-line args. (I could have sworn 88 that this bug had been reported and fixed before.) 89 902005-06-06 02:50 Eric McDonald <eric_mcdonald@users.sourceforge.net> 91 92 Merge from 'MPT_EMCDONALD_AI_6' to 'MPT_EMCDONALD_AI_7'. 93 Many non-AI-related changes included in this merge. 94 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 95 Branch can continue using this file in top-level, but we wish to 96 stow it away in 'changelogs' dir in the trunk. 97 982005-05-01 13:08 Eric McDonald <eric_mcdonald@users.sourceforge.net> 99 100 Fixes to Opal Heroes. 101 (From Elijah.) 102 * opal-heroes.g 103 1042005-05-01 01:40 Eric McDonald <eric_mcdonald@users.sourceforge.net> 105 106 New make targets. 107 * Makefile.in (bz2dist): New target. Creates a .tar.bz2 dist of 108 the latest CVS sources. 109 (lzmadist): New target. Creates a .7z (7-Zip LZMA) dist of the 110 latest CVS sources. 111 112 Make some Sdlconq-related config changes. 113 * configure.in: Comment out tests for Freetype or ParaGUI. 114 * configure: Regenerated from 'configure.in'. 115 * sdl/Makefile.in: Use SDL compiler and linker flags directly 116 from the SDL variables rather than from the ParaGUI variables. 117 * sdlconq.h: Ifdef out ParaGUI includes. 118 1192005-04-30 23:20 Eric McDonald <eric_mcdonald@users.sourceforge.net> 120 121 Merge from 'MPT_EMCDONALD_AI_5' to 'MPT_EMCDONALD_AI_6'. 122 Many non-AI-related changes included in this merge. 123 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 124 Branch can continue using this file in top-level, but we wish to 125 stow it away in 'changelogs' dir in the trunk. 126 1272005-04-19 02:13 Eric McDonald <eric_mcdonald@users.sourceforge.net> 128 129 Fix compilation with optimization flags set. 130 (Bug reported by David Ronis. Thanks David.) 131 * unit.c (could_be_on): Remove 'inline' inidicator. 132 1332005-04-16 02:34 Eric McDonald <eric_mcdonald@users.sourceforge.net> 134 135 Updated image from Elijah. 136 * battles1.gif 137 1382005-04-16 01:13 Eric McDonald <eric_mcdonald@users.sourceforge.net> 139 140 Merge from 'MPT_EMCDONALD_AI_4' to 'MPT_EMCDONALD_AI_5'. 141 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 142 Branch can continue using this file in top-level, but we wish to 143 stow it away in 'changelogs' dir in the trunk. 144 1452005-04-09 16:03 Eric McDonald <eric_mcdonald@users.sourceforge.net> 146 147 Help the AI consider the new 'detonate-with-attack' uprop. 148 * ai.c (offensive_worth): Consider automatic detonations with 149 attack in addition to explicit detonation actions. 150 1512005-04-09 05:25 Eric McDonald <eric_mcdonald@users.sourceforge.net> 152 153 Vastly improve AI performance. 154 * plan.c (plan_offense): Free up any goals that have been met 155 or cannot be met. Give 1/5 chance for replan and 4/5 chance for 156 reserve if nothing was able to be done in the given plan. (This 157 may be need to be adjusted. Also, mobile units should be given 158 the opportunity to shift theaters once plan-like logic is on 159 AI side.) 160 (plan_offense_support): Likewise. 161 (plan_defense): Likewise. 162 (plan_explore): Likewise. 163 (plan_explorer_support): Likewise. 164 (plan_colonizer): Likewise. 165 (plan_colonization_support): Likewise. 166 (plan_improve): Likewise. 167 (execute_plan): Reduce cap on per-turn executions of a plan from 168 1000 to 200. 169 * run.c (move_one_unit_multiple): Restore old logic structure for 170 dealing with ACP-indep units. This makes sure that ACP-indep units 171 return 0, whether or not they can build. 172 1732005-04-06 02:16 Eric McDonald <eric_mcdonald@users.sourceforge.net> 174 175 New features: enhance unit combat experience and side treasuries 176 depending on combat outcomes. 177 (Patch from Elijah Meeks; modified by me.) 178 * table.def (uu_cxp_per_destroy): New table, 'cxp-per-destroy'. 179 (um_treasury_gain_per_destroy): New table, 180 'treasury-gain-per-destroy'. 181 (um_treasury_gain_per_create): New table, 182 'treasury-gain-per-create'. 183 (um_treasury_gain_per_capture): New table, 184 'treasury-gain-per-capture'. 185 (um_treasury_loss_per_destroyed): New table, 186 'treasury-loss-per-destroyed'. 187 (um_treasury_loss_per_create): New table, 188 'treasury-loss-per-create'. 189 (um_treasury_loss_per_captured): New table, 190 'treasury-loss-per-captured'. 191 * utype.def (u_detonate_with_attack): New uprop, 192 'detonate-with-attack'. 193 * refman.texi (treasury-gain-per-create): New entry. Not yet 194 implemented. 195 (treasury-loss-per-create): New entry. Not yet implemented. 196 (cxp-per-destroy): New entry. 197 (treasury-gain-per-destroy): New entry. 198 (treasury-loss-per-destroyed): New entry. 199 (treasury-gain-per-capture): New entry. 200 (treasury-loss-per-captured): New entry. 201 (detonate-on-attack): New entry. 202 * combat.c (maybe_hit_unit): Add support for detonation upon 203 melee attack. 204 (hit_unit): Add support for treasury bonuses and penalties as a 205 result of unit destruction. Also add support for attacker gaining 206 combat experience as a result of destroying another unit. 207 (capture_unit): Add support for treasury bonueses and penalties 208 as a result of unit capture. 209 2102005-04-05 01:51 Eric McDonald <eric_mcdonald@users.sourceforge.net> 211 212 Merge from 'MPT_EMCDONALD_AI_3' to 'MPT_EMCDONALD_AI_4'. 213 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 214 Branch can continue using this file in top-level, but we wish to 215 stow it away in 'changelogs' dir in the trunk. 216 2172005-04-01 02:17 Eric McDonald <eric_mcdonald@users.sourceforge.net> 218 219 Merge from 'MPT_EMCDONALD_AI_2' to 'MPT_EMCDONALD_AI_3'. 220 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 221 Branch can continue using this file in top-level, but we wish to 222 stow it away in 'changelogs' dir in the trunk. 223 2242005-03-29 Matthew Skala <mskala@ansuz.sooke.bc.ca> 225 226 Fix crashing bug when no isometric image nor tile has been defined 227 for a terrain type. 228 * imf.c (best_image_in_range): As a last resort, try to make a flat 229 colour when there's no tile nor scaling candidate. 230 2312005-03-28 Eric McDonald <eric_mcdonald@users.sourceforge.net> 232 233 Add support for developing with Dev-C++ on Windows. 234 * pkg/README_devcpp_w32.rtf: New documentation file. 235 * pkg/devcpp_w32_SFX.exe: New Win32 self-extractor program. 236 2372005-03-28 Eric McDonald <eric_mcdonald@users.sourceforge.net> 238 239 Merge from 'MPT_EMCDONALD_AI_1' to 'MPT_EMCDONALD_AI_2'. 240 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 241 Branch can continue using this file in top-level, but we wish to 242 stow it away in 'changelogs' dir in the trunk. 243 2442005-03-21 Eric McDonald <eric_mcdonald@users.sourceforge.net> 245 246 Merge from root of 'BRANCH_EMCDONALD_AI' to 'MPT_EMCDONALD_AI_1'. 247 * changelogs/ChangeLog-EMCDONALD_AI: Move from top-level dir. 248 Branch can continue using this file in top-level, but we wish to 249 stow it away in 'changelogs' dir in the trunk. 250 2512005-03-21 Eric McDonald <eric_mcdonald@users.sourceforge.net> 252 253 Merge from 'MPT_MSKALA_SUPPLY_2' to 'MPT_MSKALA_SUPPLY_3'. 254 * changelogs/ChangeLog-MSKALA_SUPPLY: Move from top-level dir. 255 Branch can continue using this file in top-level, but we wish to 256 stow it away in 'changelogs' dir in the trunk. 257 2582005-03-14 Eric McDonald <eric_mcdonald@users.sourceforge.net> 259 260 Merge from 'MPT_MSKALA_SUPPLY_1' to 'MPT_MSKALA_SUPPLY_2'. 261 * changelogs/ChangeLog-MSKALA_SUPPLY: Move from top-level dir. 262 Branch can continue using this file in top-level, but we wish to 263 stow it away in 'changelogs' dir in the trunk. 264 2652005-03-12 Eric McDonald <eric_mcdonald@users.sourceforge.net> 266 267 Fix crashing bug with restored games that have only one side. 268 * cmdline.c (set_players_from_options): Do not attempt to access 269 the 'next' member of a NULL player. 270 271 Partially fix a bug with the scaling of connections. 272 (Bug reported by Matthew.) 273 * imf.c (scale_image): Copy over 'isconnection' and other fields 274 from original image to scaled image. (Note: The bug is still not 275 fixed, but at least now the behavior is consistent whether grid 276 is on or not. Also, the SDL interface now correctly displays the 277 scaled image (as opposed to drawing nothing as it would have 278 before this fix), and so it would not appear to be a problem with 279 the interface-indep code. The remaining problem could be in the 280 'tkimg' that corresponds to the generic Image.) 281 282 Fix crashing bugs with uviews that have no associated images. 283 * ui.c (can_use_oversized_img): Return FALSE if the uview has 284 no IMF. 285 * sdlmap.cc (draw_unit_image): Do not attempt to draw image 286 effects or decorations if the image is NULL. 287 * tkmap.c (draw_unit_image): Likewise. 288 2892005-03-08 Eric McDonald <eric_mcdonald@users.sourceforge.net> 290 291 Fix isometric drawing of connections on Windows. 292 (Bug reported by Elijah.) 293 * tkmap.c (draw_connections_iso): Align "mask" with image so that 294 connections do not appear to float. 295 2962005-03-06 Eric McDonald <eric_mcdonald@users.sourceforge.net> 297 298 Make Windows installer install doc files with '.html' extension 299 rather '.htm' extension. 300 * xconq.nsi.in: Do not rename files from '.html' to '.htm'. 301 302 Updates from Elijah. 303 * battles1.gif, dg_abyss.gif, awls-rules.g, battles.g, conquest.g, 304 opal-heroes.g, opal-rules.g, opal.g, u-opal.g, u-val-beach-2.g, 305 u-val-beach.g, valhalla-beach.g, valhalla.g: Update. 306 3072005-03-05 Eric McDonald <eric_mcdonald@users.sourceforge.net> 308 309 Continue building up AI analysis of scorekeepers. 310 * aiscore.h (AI_SKANode_UpropInt): Replace 'uprop_int' member with 311 'upropname' member. 312 (AI_SKANode_UpropInt::construct): Add 3 parameters. 313 (AI_SKANode_UpropInt::merge_or_insert_into_list): New prototype. 314 (AI_SKAnalysis): Many new members. 315 * aiscore.cc (AI_SKANode_UpropInt::init): Use uprop name instead 316 of getter function. 317 (AI_SKANode_UpropInt::construct): Add 3 parameters to constructor 318 for initializing the side-and-utypes table, and for setting the 319 uprop name. 320 (AI_SKANode_UpropInt::copy_to): Use uprop name instead of getter 321 function. 322 (AI_SKANode_UpropInt::merge_or_insert_into_list): New static 323 function. Add a new 'AI_SKANode_UpropInt' if no existing one matches 324 its upropname or if the list if NULL. Else, merge the side-and-utype 325 tables between new node and existing node. 326 (AI_SKAnalysis::init): Properly init all members. 327 (AI_SKAnalysis::copy_to): Properly deep copy all members. 328 (AI_SKAnalysis::destroy): Properly dealloc all members. 329 (analyze_sk_sum_uprop_test): Implement. 330 3312005-03-04 Eric McDonald <eric_mcdonald@users.sourceforge.net> 332 333 Fix bug in the reporting of the nearest unit under mouse cursor. 334 (This fix is a bit hackish. It will hopefully be improved during 335 the development of the formal UI API.) 336 * ui.h (find_uview_at_pixel): New prototype. 337 (find_uview_at_pixel): New prototype. 338 * ui.c (find_uview_at_pixel): New function. Recursively check 339 occ uviews to see if any are at pixel. If not, then check uview 340 itself to see if it is at pixel. 341 (find_uview_at_pixel): New function. Check all members of a uview 342 stack to if any are at pixel. 343 (nearest_unit_view): Call 'find_uview_at_pixel' instead of 344 'find_unit_view_at'. 345 * sdlmap.cc (x_nearest_unit): Call 'nearest_unit_view' and then 346 return associated unit. Ifdef out code that attempts to do 347 duplicate 'nearest_unit'. 348 * tkmap.c (x_nearest_unit): Likewise. 349 3502005-03-01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 351 352 Fix bug in automatic repair materials consumption. 353 (I woke up embarassed by it this morning.) 354 * run2.c (auto_repair_unit): Do not consume any materials until 355 all materials checks have passed. 356 3572005-03-01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 358 359 Make sure that 'consumption-per-repair' is applied during 360 auto-repair. 361 (Bug reported by Matthew.) 362 * run2.c (auto_repair_unit): Check to see if any material 363 consumed while repairing is sufficient for the repair to take 364 place. If yes, then consume the correct amount of that material 365 if the consumption requirement is > 0. (Note: ACP-indep/automatic 366 repair should be handled through the regular action code in the 367 same way that automatic upgrades are handled through the change- 368 type code.) 369 3702005-03-01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 371 372 Attempt a fix to a transport entry bug. 373 (Bug reported by Matthew.) 374 * move.c (total_entry_cost): If movement is within same cell, then 375 do not charge a cell departure cost. However, a cell entry cost 376 may still be charged; this allows a game designer to simulate 377 a charge for an unit moving from one transport to another within 378 the cell. (These changes should not affect existing games.) 379 3802005-02-28 Eric McDonald <eric_mcdonald@users.sourceforge.net> 381 382 Do some housecleaning. 383 * score.c (eval_sk_form): Delete old ifdeffed out version. 384 (sum_property): Likewise. 385 (eval_sk_test): Likewise. 386 3872005-02-28 Eric McDonald <eric_mcdonald@users.sourceforge.net> 388 389 Continue building the AI's scorekeeper analysis. 390 * aiscore.h (struct AI_SKAnalysis): Many new members. 391 (analyze_sk_arith_gt_test): New prototype. 392 (analyze_sk_arith_ge_test): Likewise. 393 (analyze_sk_arith_lt_test): Likewise. 394 (analyze_sk_arith_le_test): Likewise. 395 (analyze_sk_arith_ne_test): Likewise. 396 (analyze_sk_arith_eq_test): Likewise. 397 (analyze_sk_bool_and_test): Likewise. 398 (analyze_sk_bool_or_test): Likewise. 399 * aiscore.cc (AI_SKAnalysis::init): Initialize more new fields. 400 (AI_SKAnalysis:;destroy): Free dynamic arrays. 401 (AI_SKAnalysis::search_test_ops_for): New member function. 402 Search the stack/list of test ops. 403 (analyze_sk_sum_uprop_test): Make parameter list conform to 404 draft 2 framework. (Still need to implement.) 405 (analyze_sk_turn_test): Rewrite according to draft 2 framework. 406 (analyze_sk_score_test): Rewrite according to draft 2 framework. 407 (analyze_sk_arith_op_test): Implement. Analyze arithmetic 408 operators forms in scorekeeper. 409 (analyze_sk_arith_gt_test): New function. Analyze '>' forms in 410 scorekeeper. 411 (analyze_sk_artih_ge_test): New function. Analyze '>=' forms in 412 scorekeeper. 413 (analyze_sk_arith_lt_test): New function. Analyze '<' forms in 414 scorekeeper. 415 (analyze_sk_arith_le_test): New function. Analyze '<=' forms in 416 scorekeeper. 417 (analyze_sk_arith_ne_test): New function. Analyze '/=' forms in 418 scorekeeper. 419 (analyze_sk_arith_eq_test): New function. Analyze '=' forms in 420 scorekeeper. 421 (analyze_sk_arith_comp_test): Finish implementing. Analyze 422 arithmetic comparison forms in scorekeeper. 423 4242005-02-27 Eric McDonald <eric_mcdonald@users.sourceforge.net> 425 426 Provide unimplemented 'free-acp' feature. 427 ("Unimplementedness" reported by Matthew.) 428 * actions.c (has_enough_acp): Add 'free-acp' to current ACP when 429 checking action's ACP debt. 430 * refman.texi (free-acp): Rewrite entry for clarity. 431 4322005-02-26 Eric McDonald <eric_mcdonald@users.sourceforge.net> 433 434 Fix bug which caused combat experience and morale to be recycled 435 from a previous dead unit. 436 (Cxp bug reported by Elijah.) 437 * unit.c (create_unit): Zero combat experience and morale. 438 4392005-02-25 Eric McDonald <eric_mcdonald@users.sourceforge.net> 440 441 Properly fix Texinfo sources. 442 * refman.texi (backdrop-ignore-doctrine): Use the 'code' keyword 443 to wrap the name in the definition. 444 4452005-02-25 Eric McDonald <eric_mcdonald@users.sourceforge.net> 446 447 Fix bug in Texinfo sources so that they compile again. 448 * refman.texi (backdrop-ignore-doctrine): Remove stray "in-length" 449 in front of definition name. 450 4512005-02-23 Eric McDonald <eric_mcdonald@users.sourceforge.net> 452 453 Add 'economy.c' from 'BRANCH_MSKALA_SUPPLY'. I forgot to remove 454 its sticky tag before committing the merge. 455 * economy.c: New file. 456 4572005-02-23 Eric McDonald <eric_mcdonald@users.sourceforge.net> 458 459 Merge from root of 'BRANCH_MSKALA_SUPPLY' to 460 'MPT_MSKALA_SUPPLY_1'. 461 * changelogs/ChangeLog-MSKALA_SUPPLY: Move from top-level dir. 462 Branch can continue using this file in top-level, but we wish to 463 stow it away in 'changelogs' dir in the trunk. 464 4652005-02-23 Eric McDonald <eric_mcdonald@users.sourceforge.net> 466 467 Fix freezing on some versions of multithreaded Tcl. 468 * tkamin.c (ui_mainloop): Block on 'Tcl_DoOneEvent'. 469 4702005-02-22 Eric McDonald <eric_mcdonald@users.sourceforge.net> 471 472 Continue building up the AI's scorekeeper analysis. 473 (Second draft. Much cleaner. Getting fairly close to the point 474 where things can be hooked in.) 475 * ai.c (create_ai_sk_analysis): Delete. No longer needed. 476 * ai.h (struct a_ai_sk_analysis): Transplant to 'aiscore.h' with 477 major rewrite. 478 (AI_SKA_*): Transplant these macros to 'aiscore.h'. 479 (AI_SKT_*): Likewise. 480 (AI_SKT_ARITH_COMPARISONS): Transplant to 'aiscore.h'. 481 (AI_SKT_ARITH_OPERATIONS): Likewise. 482 * mplayer.c (analyze_sk_turn_test): Transplant to 'aiscore.cc'. 483 (analyze_sk_score_test): Likewise. 484 (analyze_sk_sum_uprop_test): Likewise. 485 (analyze_sk_test): Transplant most parts to 'aiscore.cc'. Ifdef 486 out rest, awaiting transplant. 487 (analyze_sk_action): Transplant to 'aiscore.cc'. 488 (analyze_scorekeeper): Transplant to 'aiscore.cc'. 489 * aiscore.h: New header file. Fully "Doxgenated" documentation 490 included. 491 (enum AI_SKANKind): Kinds of AI scorekeeper analysis nodes. 492 (struct AI_SKANode): Abstract base struct for scorekeeper analysis 493 nodes. 494 (struct AI_SKANode_UpropInt): Public subclass of 'AI_SKANode'. 495 Scorekeeper analysis node for integer uprops with side/utype filters. 496 (struct AI_SKANode_TestOp): Public subclass of 'AI_SKANode'. 497 Scorekeeper analysis node for test operators. 498 (struct AI_SKAnalysis): Transplant from 'ai.h' with major 499 rewrite. 500 (AI_SK_*): Macros related to general properties of a scorekeeper 501 analysis. 502 (AI_SKA_*): Transplant from 'ai.h'. 503 (AI_SKT_*): Likewise. 504 (analyze_sk_turn_test): Function prototype. 505 (analyze_sk_score_test): Likewise. 506 (analyze_sk_sum_uprop_test): Likewise. 507 (analyze_sk_artih_op_test): Likewise. 508 (analyze_sk_arith_comp_test): Likewise. 509 (analyze_sk_bool_comp_test): Likewise. 510 (analyze_sk_when_test): Likewise. 511 (analyze_sk_always_true_test): Likewise. 512 (analyze_sk_test): Likewise. 513 (analyze_sk_if_action): Likewise. 514 (analyze_sk_action): Likewise. 515 (analyze_scorekeeper): Likewise. 516 * aiscore.cc: New implementation file. Fully "Doxygenated" 517 documenation included. 518 (AI_SKANode::init): Static function. Initializer. 519 (AI_SKANode::copy_to): Member function. Deep copier. 520 (AI_SKANode_UpropInt::init): Static function. Initializer. 521 (AI_SKANode_UpropInt::construct): Static function. 'xmalloc'-using 522 "constructor". (Note: We are not yet in a position to intercept 523 a 'bad_alloc' object should one be thrown. Also, 'xmalloc' tracks 524 memory allocation stats for us. 'new' does not.) 525 (AI_SKANode_UpropInt::copy_to): Member function. Deep copier. 526 (AI_SKANode_UpropInt::clone): Member function. "Copy constructor". 527 (AI_SKANode_UpropInt::clone_list): Member function. List 528 "copy constructor". 529 (AI_SKANode_UpropInt::destroy): Static function. "Destructor". 530 (AI_SKANode_UpropInt::destroy_list): Static function. List 531 "destructor". 532 (AI_SKANode_TestOp::init): Static function. Initializer. 533 (AI_SKANode_TestOp::construct): Static function. 'xmalloc'-using 534 "constructor". 535 (AI_SKANode_TestOp::copy_to): Member function. Deep copier. 536 (AI_SKANode_TestOp::clone): Member function. "Copy constructor". 537 (AI_SKANode_TestOp::clone_list): Member function. List 538 "copy constructor". 539 (AI_SKANode_TestOp::destroy): Static function. "Destructor". 540 (AI_SKANode_TestOp::destroy_list): Static function. List 541 "destructor". 542 (AI_SKAnalysis::init): Static function. Initializer. 543 (AI_SKAnalysis::construct): Static function. "Constructor". 544 (AI_SKAnalysis::copy_to): Member function. Deep copier. 545 (AI_SKAnalysis::clone): Member function. "Copy constructor". 546 (AI_SKAnalysis::destroy): Static function. "Destructor". 547 (AI_SKAnalysis::push_test_op): Member function. Push an operator 548 onto the stack of test operators. 549 (AI_SKAnalysis::pop_test_op): Member function. Pop an operator 550 from the stack of test operators. 551 (analyze_sk_turn_test): Transplant from 'mplayer.c'. (Needs to 552 be rewritten for the new "draft 2" framework.) 553 (analyze_sk_score_test): Likewise. 554 (analyze_sk_sum_uprop_test); Likewise. 555 (analyze_sk_arith_op_test): Analyze arithmetic operator forms. 556 (Needs to be implemented.) 557 (analyze_sk_arith_comp_test): Analyze arithmetic comparison forms. 558 (Needs to be implemented.) 559 (analyze_sk_bool_or_test): Analyze boolean 'or' form. 560 (analyze_sk_bool_and_test): Analyze boolean 'and' form. 561 (analyze_sk_bool_comp_test): Analyze boolean comparison forms. 562 (analyze_sk_when_test): Analyze "when" conditions. (Needs to 563 be implemented.) 564 (analyze_sk_always_true_test): Analyze actions/outcomes in light 565 of a test always yielding true. 566 (analyze_sk_test): Transplant from 'mplayer.c'. Major rewrite. 567 (analyze_sk_if_action): Analyze 'if' forms. 568 (analyze_sk_action): Transplant from 'mplayer.c'. Major rewrite. 569 (analyze_scorekeeper): Transplant from 'mplayer.c'. Minor rewrite. 570 5712005-02-20 Eric McDonald <eric_mcdonald@users.sourceforge.net> 572 573 Continue building up the AI's scorekeeper analysis. 574 (Note that I will likely be moving this mass of new code to a 575 separate, new file or two.) 576 (Also note that this is the first draft. We will likely need to 577 handle disjoint sets of utypes and whatnot in the future. We will 578 also probably want to make things more accurate and less like 579 guesswork by passing additonal analysis info up and down the 580 parse tree.) 581 * ai.h (AI_SKAnalysis): New fields for tracking more quantities of 582 interest. (This will probably be reworked soon.) 583 (AI_SKActionType): Delete. Replace with individual power-of-2 584 macros. 585 (AI_SKTestType): Likewise. 586 (AI_SKT_ARITH_COMPARISONS): Inclusive-or of all arithmetic 587 comparison flags. 588 (AI_SKT_ARITH_OPERATIONS): Inclusive-or of all arithmetic 589 operation flags. 590 * mplayer.c (analyze_sk_turn_test): New analyzer for handling 591 actions related to a test on the 'turn' keyword. 592 (analyze_sk_score_test): New analyzer for handling actions 593 related to a test on the 'score' keyword. 594 (analyze_sk_sum_uprop_test): New analyzer for handling actions 595 related to a test on the 'sum-uprop' keyword. (Need to finish 596 implementing.) 597 (analyze_sk_test): Fill out. Handle all sorts of things based on 598 action flags. Plenty of recursive analysis into subforms. 599 (Need to break this function up. It is a monster.) 600 (analyze_sk_action): Tweak a few things as far as giving arguments 601 is concerned. 602 (analyze_scorekeeper): Tweak the giving of arguments so that the 603 "master test" object is 't'. 604 6052005-02-19 Eric McDonald <eric_mcdonald@users.sourceforge.net> 606 607 Improve documentation wrt construction consuming from treasury. 608 * refman.texi (takes-from-treasury): Mention how this works when 609 an unit has storage capacity for a material and when it doesn't. 610 6112005-02-19 Eric McDonald <eric_mcdonald@users.sourceforge.net> 612 613 Improve wrt the sun position calculation. 614 * refman.texi (axial-tilt): Mention how this affects the sun's 615 initial position. 616 (initial-year-part): Likewise. 617 (initial-day-part): Likewise. 618 * run2.c (compute_sun): Remove some ifdeffed out code. Simplify the 619 latitudinal correction. Account for 'initial-year-part'. 620 6212005-02-19 Eric McDonald <eric_mcdonald@users.sourceforge.net> 622 623 Fix long-standing issue with not being able to add values lists 624 as properties to each element of types lists. 625 (Complaint made by Lincoln Peters. This has also bothered me for 626 ages. Don't know why I didn't address it sooner.) 627 * lisp.h (is_quoted_lisp): New prototype. 628 * lisp.c (is_quoted_lisp): New function. Is the GDL object a 629 quoted one? 630 * read.c (add_properties): Do not eval quoted GDL objects. 631 (add_to_utypes): Only process a values list if it is unquoted, 632 otherwise treat it like an atom after unwrapping it from 'quote'. 633 (add_to_mtypes): Likewise. 634 (add_to_ttypes): Likewise. 635 (add_to_atypes): Likewise. 636 637 Quoting the 'possible-sides' list has not been needed since an earlier 638 fix to the boolean expression evaluator, IIRC. Now that the new 639 quoted list property handling is in place, it is important to 640 demand that the 'possible-sides' list is unquoted. Therefore, fix 641 games in the library where this is an issue. 642 * cave2.g: Remove quote in front of boolean expression form. 643 * lhsunit.g: Likewise. 644 * logunit.g: Likewise. 645 * postmodern.g: Likewise. 646 * russian-rev.g: Likewise. 647 * stdunit.g: Likewise. 648 649 Add new IMF for a purely blank image. 650 (Thanks to Simon Cox for this contribution.) 651 * imf.dir (blank): Find in 'province.imf'. 652 * province.imf: New file. Defines a purely blank image. 653 6542005-02-19 Eric McDonald <eric_mcdonald@users.sourceforge.net> 655 656 Fix bug with potential colonizers falling into the passive plan 657 because they cannot yet create anything that can create them. 658 (Bug reported by Elijah.) 659 * ai.h (assign_to_colonize): Return int instead of nothing. 660 * ai.c (assign_to_colonize): Return int indicating whether 661 assignment was successful or not. Do not assign passive plan upon 662 failure. 663 * iplayer.c (iplayer_decide_plan): Only return if a colonization 664 plan was successfully assigned. 665 * mplayer.c (mplayer_decide_plan): Likewise. 666 6672005-02-15 Eric McDonald <eric_mcdonald@users.sourceforge.net> 668 669 Fix bug that prevented death-by-detonation from having the 670 'wrecked-type-if-killed' table apply. 671 (Bug reported by Elijah.) 672 * kernel.h (reckon_damage_around): Take additional parameter. 673 * combat.c (reckon_damage_around): Take additional parameter for 674 the detonating unit. Set the static variable 'tmp_unit_detonator' 675 to the detonating unit. (Note: This should be replaced with the 676 parambox stuff.) 677 (reckon_damage_here): Use the 'tmp_unit_detonator' variable 678 when calling 'damage_unit'. 679 (do_detonate_action): Call 'reckon_damage_around' with the 680 detonating unit as the new argument. 681 * move.c (detonate_on_approach_around): Likewise. 682 * run2.c (run_detonation_accidents): Likewise. 683 684 Lay foundation for scorekeeper analysis by AI. 685 * ai.h (struct a_strategy): Add 'sk_analyses' slot. 686 (struct a_ai_sk_analysis): New struct for AI scorekeeper record. 687 Typedef to 'AI_SKAnalysis'. 688 (enum a_ai_sk_action_type): New enum for AI scorekeeper analysis. 689 Typedef to 'AI_SKActionType'. 690 (enum a_ai_sk_test_type): New enum for AI scorekeeper analysis. 691 Typedef to 'AI_SKTestType'. 692 (create_ai_sk_analysis): New prototype. 693 * ai.c (create_ai_sk_analysis): New function. Create and initialize 694 a new scorekeeper analysis record for an AI. 695 * mplayer.c (analyze_the_game): Make the AI still try even if no 696 scorekeepers apply to it. 697 (analyze_sk_test): New function. Analyze a scorekeeper test 698 on behalf of the AI, and fill out a scorekeeper analysis according 699 to what is learned from the test and the action flags. 700 [Still needs to filled out.] 701 (analyze_sk_action): New function. Analyze a scorekeeper action 702 on behalf of the AI, and set action flags accordingly. 703 (analyze_scorekeeper): New function. Analyze a scorekeeper on 704 behalf of the AI. 705 (determine_subgoals): A few tweaks which are likely to replaced 706 once the new scorekeeper analysis functionality is hooked in. 707 * score.h (should_try_to_win): Delete prototype. No longer used. 708 * score.c (should_try_to_win): Delete function. No longer used. 709 710 Fix bug in scorekeeper parsing. 711 * score.c (eval_sk_form): Properly handle else clause of 'if' 712 keyword. 713 714 Fix bug in documenation of 'change-type' action. 715 (Bug reported by Simon Cox.) 716 * refman.texi (material-to-change-type): Rewrite so that the 717 correct unit is indicated. 718 7192005-02-14 Eric McDonald <eric_mcdonald@users.sourceforge.net> 720 721 Fix crashing bug in unit view code. 722 (Bug reported by Elijah.) 723 * side.c (see_cell): Make sure that we do not attempt to mistake 724 an unit view that is not new. 725 726 Fix small calculation error in solar yearlong latitude correction. 727 * run2.c (compute_sun): Latitude cells should be computed out of 728 1/4 circumference not 1/2. 729 7302005-02-13 Eric McDonald <eric_mcdonald@users.sourceforge.net> 731 732 Add documentation for the 'vision-bend' replacement. 733 * refman.texi (Line of Sight): Remove entry for 'vision-bend'. 734 Replace with 'can-see-behind'. 735 7362005-02-13 Eric McDonald <eric_mcdonald@users.sourceforge.net> 737 738 Fix bug in ACP-indep construction. 739 (Bug reported by Matthew.) 740 * run.c (run_construction): If an unit is out of some material 741 and has built on the unit that turn, then report this as a 742 problem and cease attempting to build. (If the builder later gets 743 more of the necessary supply, then building can be resumed.) Also, 744 fix another bug that I found while working on Matthew's bug: 745 materials are consumed before it is certain that the build action 746 succeeds. To fix this, we simply move the consumption of any 747 materials to after the action, and only consume if it was 748 successful. 749 750 (Note: The ACP-indep construction code in its present form is a 751 pile of crap. It is in need of a serious rewrite.) 752 7532005-02-13 Eric McDonald <eric_mcdonald@users.sourceforge.net> 754 755 Fix oddity with the 'vision-bend' uprop. 756 (Oddity reported by Matthew Skala.) 757 * utype.def (u_vision_bend): Rename to 'u_can_see_behind', 758 'can-see-behind'. 759 * help.c (describe_utype): Use 'u_can_see_behind' instead of 760 'u_vision_bend'. 761 * side.c (init_view): Likewise. 762 (cover_area_1): Likewise. 763 * battles.g, beirut.g, bolodd2.g, bolodd3.g, cav.g, cave2.g, 764 colonizer.g, gettysburg.g, metz-1994.g, panzer.g, pgu.g, 765 solar.g, space.g: Replace 'vision-bend' with 'can-see-behind'. 766 7672005-02-12 Eric McDonald <eric_mcdonald@users.sourceforge.net> 768 769 Fix bugs in calculation of sunlit regions. 770 (Bug report from Lincoln Peters.) 771 * run2.c (compute_sun): Make sure that the sun position wraps in 772 the x direction. There was a problem with the sun going off map in 773 that direction, which should never happen. Also, ifdef out wacky 774 sun y position calculation. Make new sun y position calc based on 775 yearlength rather than daylength; use triangle wave approx to 776 sine wave. 777 7782005-02-12 Eric McDonald <eric_mcdonald@users.sourceforge.net> 779 780 One last mod to 'transfer-parts'. 781 * table.def (uu_can_transfer_parts): Change default from true to 782 false, since the default for 'u_acp_to_transfer_parts' was 0 when 783 0 prevented the action from occuring. This does not appear to 784 affect existing games, since Napoleon is the only one that 785 actually uses parts. (Voyages and WWII Pacific - Division Level 786 declare some units as having parts but apparently do not use the 787 parts in the parts transfer context.) 788 7892005-02-12 Eric McDonald <eric_mcdonald@users.sourceforge.net> 790 791 Modify transfer parts action some more. 792 * table.def (uu_transfer_parts): Rename to 'uu_can_transfer_parts_to', 793 'can-transfer-parts-to'. 794 * actions.c (check_transfer_part_action): Use 795 'can-transfer_parts_to' instead of old table name. Remove 796 restriction that the action must require ACP. 797 * napoleon.g (transfer-parts): Use 'can-transfer-parts-to' instead 798 of old name. 799 800 Relax the "ACP left" check. 801 * actions.c (has_acp_left): If the action does not require ACP, 802 then we don't care if the actor has ACP. (Note: This may cause bugs. 803 I ran a few test games and didn't see any problems, but that 804 doesn't mean that there aren't any.) 805 806 Update documentation. 807 * refman.texi (Scorekeeper Examples): Polish a few examples. 808 (Transfer Parts Action): Document 'can-transfer-parts-to', and 809 update other parts of this documentation. 810 8112005-02-11 Eric McDonald <eric_mcdonald@users.sourceforge.net> 812 813 Fix bug with the 'transfer-part' action. 814 (Bug report from Lincoln Peters.) 815 * table.def (uu_transfer_parts): New TableUU, 'transfer-parts', 816 which determines which units can transfer parts to one another. 817 True by default, for backward compatibility. 818 * actions.c (check_transfer_part_action): If the target unit is 819 not NULL, then verify that is of type that is compatible with the 820 donor unit. Also, check if the target unit can even have parts. 821 If not, then it should not be a recipient? Maybe. For now, this 822 is true, probably until someone complains that he/she would like to 823 be able to reinforce a non-partitioned unit from a partitioned one. 824 * napoleon.g (transfer-parts): New table. Restrict part transfers 825 to units of the same type since the parts take different amounts of 826 CP to produce and they are militarily dissimilar. 827 8282005-02-10 Eric McDonald <eric_mcdonald@users.sourceforge.net> 829 830 Fix bug with 'see-always' units not being seen when terrain is 831 known. 832 (Bug report from ksbrace00 and Elijah Meeks.) 833 * side.c (side_sees_unit): Test to see if the unit is always seen 834 and if it is on known terrain. 835 (side_sees_image): Likewise. 836 (see_cell): Remove some old ifdeffed out code. 837 8382005-02-07 Matthew Skala <mskala@ansuz.sooke.bc.ca> 839 840 Fix bug in adjacent-terrain-border and adjacent-terrain-connection. 841 * mkterr.c (fix_adjacent_terrain): Don't delete borders/connections 842 from layers that don't already exist and so force layer creation. 843 8442005-02-07 Eric McDonald <eric_mcdonald@users.sourceforge.net> 845 846 Updates from Elijah's families of games. 847 (Thanks Elijah.) 848 * battles1.gif: Update. 849 * u-val-beach-2.g: New support file for Valhalla Beach. 850 * u-val-beach.g: Update. 851 * awls-rules.g: Update. 852 * valhalla.g: Update. 853 * korea-2006.g: Update. 854 * valhalla-beach.g: Update. Includes a 2-player variant. 855 856 New solar system terrain generator, star namer, and images. 857 (Thanks Matthew.) 858 * solar.g: Solar system generator. 859 * ng-star.g: Name generator for various celestial objects. 860 * solar.gif: New "space" images. 861 * thinline.gif: Solar system orbit connectors. 862 8632005-02-07 Eric McDonald <eric_mcdonald@users.sourceforge.net> 864 865 Finish scorekeeper improvements (for now). 866 * refman.texi (Scorekeepers): Clean up various sections. Add more 867 examples. Document new 'score' keyword. 868 * keyword.def (K_SCORE): New keyword, 'score'. 869 * score.h (sum_property): Delete prototype. 870 (sum_uprop): New prototype. 871 * score.c (sum_uprop): New function. Sums an uprop over all of 872 specified utypes. 873 (eval_sk_test): Hook in support for 'K_SUM_UPROP' and 'K_SCORE'. 874 (eval_sk_form): Hook in support for 'K_SET_SCORE', 875 'K_ADD_SCORE', 'K_WIN', 'K_LOSE', and 'K_END'. 876 (sum_property): Ifdef out. 877 878 New util function for flagging an array of utypes based on a GDL 879 object. 880 * kernel.h (fill_utype_array_from_lisp): New prototype. 881 * unit.c (fill_utype_array_from_lsip): New function. 882 8832005-02-06 Matthew Skala <mskala@ansuz.sooke.bc.ca> 884 885 Automated generation of connections based on adjacent terrain. 886 * table.def (adjacent-terrain-connection): New table. 887 (adjacent-terrain-connection-chance): New table. 888 * refman.texi (Terrain Compatibility): Document new tables. 889 * mkterr.c (fix_adjacent_terrain): Implement new feature. 890 8912005-02-06 Eric McDonald <eric_mcdonald@users.sourceforge.net> 892 893 More scorekeeper improvements. 894 * refman.texi (Language Syntax): Add new menu nodes and subsections 895 for "Arithmetic Comparisons" and "Boolean Comparisons". Change 896 "Arithmetic Expressions" to "Arithmetic Operations". Document 'not', 897 'and', 'or', '=', '/=', '<', '<=', '>', and '>=' in the new 898 subsections. 899 (Scorekeepers): Various corrections and rearrangements of the 900 text. New entry for 'keep-score'. Rename 'initial' to 901 'initial-score'. Rename 'sum' to 'sum-uprop'. Rename 'set' to 902 'set-score'. Rename 'add' to 'add-score'. Remove boolean and 903 arithmetic comparison functions from list of scorekeeper functions 904 since they are now generic. Add new example showing how 905 arithmetic operation and comparison may be used in a "when 906 expression". 907 * keyword.def: Sort things pertaining to advanced units into their 908 proper slots; I shouldn't have had to do this, but apparently the 909 implementer of that feature was too lazy to do so. 910 (K_ADD_SCORE): New GDL keyword, 'add-score'. 911 (K_INITIAL): Change to 'K_INITIAL_SCORE', 'initial-score'. 912 (K_SET_SCORE): New GDL keyword, 'set-score'. 913 (K_SUM): Change to 'K_SUM_UPROP', 'sum-uprop'. 914 * score.h (struct a_scorekeeper): Add 'keepscore' field. 915 * mplayer.c (determine_subgoals): Replace 'K_SUM' with 916 'K_SUM_UPROP'. 917 * nlang.c (side_score_desc): Return an empty buffer when the 918 scorekeeper is not keeping numeric score. 919 * read.c (interp_scorekeeper): Repalce 'K_INITIAL' with 920 'K_INITIAL_SCORE'. Handle 'K_KEEP_SCORE' case. 921 * score.c (create_scorekeeper): Change initial score value from 922 the forbidden '-10001' to '0'. Set the 'keepscore' field to 923 'TRUE' by default. 924 (init_scores): Only increment the number of scorekeepers if the 925 the scorekeeper is flagged as keeping score. 926 * write.c (write_scorekeepers): Handle 'K_KEEP_SCORE' case. Change 927 default value of 'K_INITIAL_SCORE' from '-10001' to '0'. 928 * tkmain.c (update_side_score_display): Only get a scorekeeper 929 description and display if a numeric score is being kept. 930 9312005-02-05 Eric McDonald <eric_mcdonald@users.sourceforge.net> 932 933 Hoist boolean and arithmetic comparison keywords out of 934 scorekeeper logic into general GDL evaluator. 935 * lisp.h (eval_boolean_expression): New prototype. 936 (eval_arithmetic_comparison_expression): New prototype. 937 * lisp.c (eval): Handle cases for 'K_NOT', 'K_AND', 'K_OR', 938 'K_EQ', 'K_NE', 'K_LT', 'K_LE', 'K_GT', and 'K_GE'. Dispatch 939 boolean comparisons to 'eval_boolean_expression' function. 940 Dispatch arithmetic comparisons to 941 'eval_arithmetic_comparison_expression' function. 942 (eval_boolean_expression): New function. Evaluates 'not', 'and', 943 and 'or' keywords. 944 (eval_arithmetic_comparison_expression): New function. 945 Evaluates '=', '/=', '<', '<=', '>', and '>=' keywords. 946 947 Ensure that GDL bool constants always match the value of the macros 948 we use in hacking. 949 * read.c (init_predefined_symbols): Set the value of the 'K_FALSE' 950 symbol to 'FALSE' rather than 0. Set the value of the 'K_TRUE' 951 symbol to 'TRUE' rather than 1. 952 953 Rearchitect scorekeeper logic to walk the expression tree and 954 expand any scorekeeper specific keywords, and then run the general 955 GDL evaluator on the tree afterwords. 956 * score.h (eval_sk_test): Replace old prototype with one that 957 returns 'Obj *' instead of 'int'. 958 (eval_sk_form): Likewise. 959 * score.c (generate_effective_sk_whomask): Check the scorekeeper 960 test result against 'nil' instead of 'FALSE'. 961 (eval_sk_test): Rewrite. 962 (eval_sk_form): Likewise. 963 9642005-01-30 Eric McDonald <eric_mcdonald@users.sourceforge.net> 965 966 Restore the 'u_size_min' and 'u_size_max' properties. 967 * run.c (run_population): Put code segments back in proper order. 968 Restore checks against 'u_size_min' and 'u_size_max'. 969 * utype.def (u_size_min): New property (restored, actually), 970 'size-min'. 971 (u_size_max): New property (restored), 'size_max'. 972 9732005-01-30 Eric McDonald <eric_mcdonald@users.sourceforge.net> 974 975 Fix bug in ACP-indep construction. 976 (Reported by Matthew.) 977 * run.c (run_construction): Invalidate the just-executed action 978 so that it cannot be run again. The bug was that a create action 979 would be run, and then, in the next loop pass, it would be 980 determined that there was not enough materials to re-execute the 981 task, and a goto the end of the function would take place. The 982 recently executed action (custom execution, instead of through 983 normal machinery) would still be considered a valid next action. 984 Next time the function was called, the create action would then 985 be re-executed. (Note: this _crap_ code must be cleaned up; it is 986 ridiculous both in its spaghetti layout and in its demented logic; 987 it should be reconciled with the regular build code as much as 988 possible. Also, this alternate consumption 989 ('unit-consumption-per-cp') for ACP-indep units is a bad idea; I 990 see no reason why the regular 'consumption-per-build' cannot be used 991 for ACP-indep units; that consumption calculation actually is done 992 on a per-CP basis. Having two competing tables is a Bad Idea.) 993 994 Fix obscure bug with AI-controlled sides not finishing their turns. 995 * run.c (move_one_unit_multiple): Ifdef out what appears to be a 996 premature break if the unit is AI-controlled and might have done 997 something last past. Under special circumstances, if this code is 998 left in, it can cause a premature return with the indication that 999 something was done, when, in fact, nothing was done. 1000 1001 Add a short circuit to one of the ACP-indep construction util 1002 functions. 1003 * unit.c (incomplete_build_target): If the creator/builder has a 1004 valid creation ID, then just use the unit from that ID. 1005 10062005-01-24 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1007 1008 Further improvements to scorekeepers. 1009 * refman.texi: New section, "Scorekeeper Examples". Updates on 1010 the current status of the various scorekeeper properties and 1011 forms. 1012 * keyword.def (K_TURN): New keyword, 'turn'. 1013 * score.c (generate_effective_sk_whomask): New function. Generate 1014 an effective whomask based on whether the scorekeeper can run 1015 at the current time for the given side. Handles various 'when' 1016 conditions. 1017 (check_post_turn_scorekeeper): Use the effective whomask to 1018 determine which sides to run the scorekeeper on. (Note that this 1019 has no effect on the 'last-side-wins' and 'last-alliance-wins' 1020 scorekeepers at this time.) 1021 (eval_sk_form): Return current turn number for 'K_TURN'. 1022 * side.c (fn_test_side_in_sideclass): Fix bug that caused only 1023 the first element of a side-and-sideclass list to be evaluated. 1024 10252005-01-23 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1026 1027 Generate sidemask for 'known-to' property of scorekeepers. 1028 * init.c (finalize_scorekeepers): Generate sidemask from 1029 'known-to' in a manner identical to 'applies-to'. 1030 * score.c (create_scorekeeper): Initialize 'knowntomask' 1031 field of scorekeeper to 'ALLSIDES'. 1032 1033 Improve sideclass membership tester to handle side ID numbers and 1034 mixed lists of side ID numbers and sideclasses. 1035 * side.c (fn_test_side_in_sideclass) 1036 1037 Use the new sideclass membership tester to check whether an unit 1038 can belong on a given side. 1039 * unit.c (test_class_membership): Delete function. 1040 (tmpside_classtest): Delete static variable. 1041 (type_allowed_on_side): Evaluate "possible sides" list with 1042 'fn_test_side_in_sideclass' rather than 'test_class_membership'. 1043 10442005-01-23 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1045 1046 Unimplement 'last-regular-side-wins' as separate scorekeeper. 1047 Instead, just make the 'applies-to' property meaningful. 1048 (Sometimes I can be so shortsighted....) 1049 * keyword.def (K_LAST_REGULAR_SIDE_WINS): Delete GDL keyword. 1050 * help.c (describe_scorekeepers): Remove references to 1051 'K_LAST_REGULAR_SIDE_WINS'. 1052 * mplayer.c (determine_subgoals): Likewise. 1053 * nlang.c (side_score_desc): Likewise. 1054 * score.c (check_post_turn_scores): Likewise. 1055 (eval_sk_form): Likewise. 1056 (eval_sk_last_side_wins): Likewise. Honor scorekeeper's 'applies-to' 1057 mask. 1058 (eval_sk_last_alliance_wins): Honor scorekeeper's 'applies-to' mask. 1059 * init.c (finalize_scorekeepers): New function. Finish filling out 1060 any parts of the scorekeepers that need to be filled out. 1061 (calculate_globals): Call 'finalize_scorekeepers'. This seems to be 1062 the best place because it is before the start of the game but after 1063 everything has been read in. 1064 1065 Another implementation of Lisp boolean evaluator that uses 1066 parameter boxes. 1067 * lisp.h (eval_boolean_expression): New prototype. 1068 * lisp.c (eval_boolean_expression): New function. Pass a parambox to 1069 predicate function. 1070 * side.h (fn_test_side_in_sideclass): New prototype. 1071 * side.c (fn_test_side_in_sideclass): New function. Check if a 1072 given side's sideclass matches a given sideclass. 1073 1074 New parambox for sides. 1075 * parambox.h (PBOX_TYPE_SIDE): New enum constant. 1076 * side.h (struct ParamBoxSide): New parambox. 1077 10782005-01-22 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1079 1080 Implement new scorekeeper, 'last-regular-side-wins'. 1081 (NOTE: Still needs to be tested.) 1082 * keyword.def (K_LAST_REGULAR_SIDE_WINS): New GDL keyword. 1083 * help.c (describe_scorekeepers): Add description of new scorekeeper. 1084 * mplayer.c (determine_subgoals): Consider the new scorekeeper. 1085 * nlang.c (side_score_desc): Describe new scorekeeper. 1086 * read.c (interp_variant_defns): Increase length of default variants 1087 list. 1088 * score.c (check_post_turn_scores): Handle new scorekeeper. 1089 (eval_sk_form): Handle new scorekeeper. 1090 (eval_sk_last_side_wins): Handle new scorekeeper. 1091 10922005-01-22 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1093 1094 Fix crashing bug in ACP-indep construction. 1095 (Bug report from Matthew Skala.) 1096 * run.c (run_construction): If unit has no plan, then do not attempt 1097 to run constuction, and do not attempt to pay for construction. This 1098 can happen if the 'time.g' upgrade mechanism is used. 1099 11002005-01-17 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1101 1102 Add Elijah's Valhalla family of games to the games library. 1103 * game.dir: Add Valhalla and Valhalla Beach. 1104 11052005-01-17 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1106 1107 Fix bug in games where all unit see chances were the default (100%). 1108 * side.c (compute_see_chances): Calculate 'max_see_chance_range' 1109 independently of whether or not any see chance is not the default. 1110 (see_cell): Always roll the dice whether or not we have a 1111 perfect see chance against something, because other modifiers such 1112 as terrain visibility and night effects must be considered. 1113 11142005-01-16 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1115 1116 Fix bug in unit view flushing that caused 'see-always' uviews to 1117 be flushed. 1118 * side.c (see_cell): Do not remove aged uviews if the 1119 corresponding type is a "see always" unit. 1120 1121 Fix network sync errors and long timeouts. 1122 * tp.c (receive_data): Restore Hans' ack hack for the time being. 1123 Apparently, he was on to something, even though I still wonder if 1124 this truly addresses the underlying problem and if it is the best to 1125 go about it. 1126 (send_packet): Restore the timeout code to only apply to the master, 1127 and not the other peers. 1128 1129 Fix >2 networked AI's from immediately falling out of sync on 1130 localhost. (Note that they still eventually fall out of sync; I 1131 still wonder if there are not more timing issues lurking in the 1132 noxious Tkconq/networking combination.) (Also note that setting the 1133 AI player after setup will cause desync almost immediately.) 1134 * tkmain.c (check_network): Apply the delay hack on localhost for 1135 all setup stages, and not just specific ones. 1136 11372005-01-16 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1138 1139 Fix bug in setup of some games with more than one remote player. 1140 * init.c (make_trial_assignments): Initialize a number of sides 1141 equal to the max of 'numremotes' and 'g_sides_min', and not just 1142 'g_sides_min'. The bug came about because the default 'g_sides_min' 1143 is 2, but if more than 2 peers were participating in a game that 1144 used the default min, then 'numsides' and 'numtotsides' counts 1145 would come up short, which would cause problems later on, such as 1146 when players were being processed, because 'numplayers' would have 1147 the correct count. 1148 11492005-01-16 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1150 1151 Fix bug with unit views in "see all" mode. 1152 * ui.c (xform_unit_view): Always start from beginning of uvstack when 1153 counting position. Never start at the position of the uview in 1154 question. 1155 1156 Fix SDL interface to actually set the main viewport's "show all" 1157 flag so that units can be seen when the "see all" variant is in 1158 effect or when designing. 1159 * sdlmain.cc (set_show_all): Fill out empty function. Toggle the 1160 flag on the main viewport of the map of the screen. 1161 1162 Fix the SDL interface just like the Tcl/Tk interface regarding the 1163 showing of uviews in designer mode. 1164 * sdlmap.cc (draw_uviews_in_cell, draw_unit_view_and_occs, 1165 draw_current): Handle master uviews as well as side uviews. 1166 11672005-01-15 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1168 1169 New family of games, Valhalla, from Elijah Meeks. 1170 * valhalla.g: New game module file. 1171 * valhalla-beach.g: New game module file. Cool scenario for 1172 Valhalla. 1173 * t-val-beach.g: Aux module for Valhalla Beach. 1174 * u-val-beach.g: Likewise. 1175 * korea.gif: Update. 1176 * battles1.gif: Update. 1177 1178 Fix bug with unit views in designer mode. 1179 (Bug reported by Elijah.) 1180 * side.h (for_all_uvstack): New macro. Iterates through an uvstack, 1181 starting from the given uview. Can handle both master and side 1182 uvstacks. 1183 (query_uvstack_from_unit): New prototype. 1184 (query_uvstack_at): New prototype. 1185 * side.c (unit_view_next): Handle a NULL side as an indicator of a 1186 master uview. 1187 (find_unit_view): Likewise. 1188 (query_uvstack_from_unit): New function. Get an uvstack from a 1189 given unit, updating the master views, if necessary. 1190 (query_uvstack_at): New function. Get an uvstack from the first 1191 unit at a given location. 1192 (fill_out_uview): New function. Fill out an uview, whether it is a 1193 master uview or a side uview. 1194 (update_master_uview): New function. Initialize a master uview if 1195 it is uninitialized. Fill out the master uview with most recent 1196 information from the unit. Update the uview's links to other master 1197 uviews, updating those views as well. 1198 (add_unit_view): Call 'fill_out_uview' to fill out the uview. 1199 * unit.c (create_unit): Set the 'uview' field of an unit to NULL. 1200 * tcltk/tkmap.c (draw_uviews_in_cell): Handle master uviews as well 1201 as side uviews. 1202 (draw_unit_view_and_occs): Handle master uviews as well as side 1203 uviews. 1204 (draw_current): Handle master uview as well as side uview. 1205 1206 Fix bug with overwatch in designer mode. 1207 (Bug reported by Elijah.) 1208 * kernel.h, init.c (suppress_reactions): New global variable in 'Xconq' 1209 namespace. 1210 * side.c (all_see_occupy): Do not invoke overwatch, if 1211 'suppress_reactions' is set. 1212 (xform_unit_view): Allow NULL sides, but check to make sure that 1213 designer mode is in effect. Handle master uviews as appropriate. 1214 * unit.c (designer_create_unit): Set 'suppress_reactions' to TRUE 1215 before doing any shuffling. Reset the flag after the shuffling. 1216 (designer_teleport): Likewise. 1217 1218 Continue fixing uview lookups to match new uview code. 1219 * side.c (find_unit_or_occ_view): Handle master uviews. 1220 12212005-01-09 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1222 1223 Make sure DLL's needed for ParaGUI are included by installer. 1224 * pkg/xconq.nsi.in: Add 'freetype6.dll' and 'zlib1.dll' to files in 1225 manifest for SDL interface. 1226 12272005-01-08 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1228 1229 Improve AI handling of transports. 1230 (Patch from Brian Dunn with minor mods by me.) 1231 * ai.c (ai_go_after_victim): If victim seeker is a transport, is 1232 empty, and is better defensively than offensively, then don't 1233 bother looking for victims. 1234 1235 Do not apply hex masks to borders. 1236 (Patch from Matthew Skala.) 1237 * imf.c (add_scaled_image): Do not consider borders for hex masking. 1238 (make_image_from_file_image): Likewise. 1239 1240 Networking fixes/improvements. 1241 * kpublic.h (broadcast_randstate): New prototype. 1242 * tp.c (broadcast_randstate): New function. Broadcast a randstate 1243 value. 1244 (send_packet): For now, create a run error no matter master or 1245 peer gets too tired of waiting for an ack. (This solution is not 1246 ideal, and needs to be revisted.) 1247 (receive_data): Comment out Hans' "fix" for packets that 1248 arrive while we are waiting for an ack. The "fix" is dubious, and 1249 does not improve overall stability/synchronization apparently. 1250 * tkmain.c (hndl_network_timer): New 'Tcl_TimerToken' var. Used for 1251 tracking the timer handler so that it can be deleted when no longer 1252 needed (i.e., when 'net_run_game' passes are being scheduled). 1253 (check_network): Check to see the network timer should be reloaded. 1254 If not, then do not set up a new timer. 1255 (sync_randstate): Flush queues, broadcast randstate, and flush 1256 queues again. 1257 (launch_game): Delete any network timer scheduled to fire by using 1258 the most recent 'hndl_network_timer'. We delete the timer when it is 1259 no longer needed to cut down on extraneous event handling, and to 1260 make sure that its queue flushing is not causing any undesired side 1261 effects in the operation of the network code. Also, do not execute 1262 a 'net_run_game' pass at the end of this function; it seems to be 1263 premature and not all state is correctly initialized. It causes the 1264 first few turns to be skipped when they should not, and this 1265 results in immediate sync errors since the peers do not skip those 1266 turns. 1267 1268 Attempt to make the AI a little bit better at building things with 1269 mobile units. 1270 * plan.c (plan_defense): Disable 1 in 5 chance for construction. 1271 Always try to constuct when nothing better to do. 1272 1273 Stabilize unit views so that they are again updated on a per-turn 1274 granularity, except in cases where transport/occupant status or 1275 position has changed. (In the long run, we would like to have 1276 more flexible granularity, ranging from per-seeing to 1277 per-every-view-older-than-n-days.) 1278 (Thanks to Robert Goulding for helping confirm the unstable views 1279 issue.) 1280 * side.c (see_cell): Do not blast unit views which have not 1281 changed this turn. 1282 1283 Fix some occupant/transport display glitches, and improve occupant 1284 visibility. 1285 * ui.c (max_uviews_in_rect): Do not report 0 uviews if rect is less 1286 than 32 px wide. Let the interface decide how to handle this. 1287 * sdlmap.cc, tkmap.c (draw_current): If occ less than 16 px wide, 1288 boost its width to that of the first transport in chain that is >= 1289 16 px wide. If isometric view, boost width to that of top transport 1290 in chain. 1291 (draw_unit_view_and_occs): If transport >= 16 px wide, but < 32 px 1292 wide, then draw grouping box around just the unshrunken transport 1293 image. 1294 12952005-01-06 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1296 1297 Fix compilation errors on some older systems. 1298 (Bug reported by Brian Dunn.) 1299 * conq.h: Remove the 'iostream' include. 1300 * sdl/sdlpreconq.h: New file. Contains includes of anything 1301 that must come before 'config.h' in the SDL interface implementation 1302 files. 1303 * sdl/Makefile.in (SDL_H): Add 'sdlpreconq.h' to the list. 1304 * sdl/sdlcltbl.cc, sdl/sdlcmd.cc, sdl/sdlimf.cc, sdl/sdlinit.cc, 1305 sdl/sdlmac.cc, sdl/sdlmain.cc, sdl/sdlmap.cc, sdl/sdlscreen.cc, 1306 sdl/sdluact.cc, sdl/sdlunix.cc, sdl/sdlwin32.cc: Include 1307 'sdlpreconq.h'. 1308 1309 Get rid of unused Mac resource file. 1310 * sdl/sdlmac.r: Delete file. 1311 13122005-01-05 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1313 1314 Fix unit reach bug. (Reported by Lincoln Peters.) 1315 * unit.c (change_unit_type): No longer just consider the case of 1316 a non-advanced type becoming an advanced type. In the case of an 1317 advanced type changing into another advanced type, the unit reach 1318 (and possibly other advanced props) need to considered. 1319 13202005-01-04 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1321 1322 Add profiling support to Xconq configurator options. 1323 * configure.in (enable-profiling): New command line switch. 1324 * misc/runbuild.sh: Take advantage of new switch if desired. 1325 1326 Fix bug when testing networking on 'localhost' in certain X11 1327 environements. 1328 * socket.c (host_is_localhost): New global variable in 'Xconq' 1329 namespace. 1330 (open_remote_connection): Set 'host_is_localhost' to true, if 1331 name of remote host is 'localhost'. 1332 * tkmain.c (check_network): Call 'run_ui_idler' before processing 1333 network stuff. Sleep for 1000 ms times RID - 1 of peer, if peer is on 1334 'localhost' along with master. 1335 1336 More tweaking of Tkconq CPU usage. 1337 * tkconq.tcl (run_game_cmd): Schedule the next run of 'run_game_cmd' 1338 to be the interval output from 'run_game'. 1339 * tkmain.c (tk_run_game): Set non-idle interval return value to 1. 1340 Set idle interval retun value to 50. 1341 (ui_mainloop): Set event wait timeout to 1000 ms. 1342 1343 Fix crashing bug in Tkconq help window display. (Reported by 1344 Lincoln Peters.) 1345 * tkmain.c (tk_help_goto): Get rid of static 'tclbuf'. Replace with 1346 obstack. Grow obstack rather than performing a sprintf into a static 1347 buf. The buf cannot be truncated with 'snprintf' since all parts our 1348 crucial. The crash was coming from an overflow in the static buf; 1349 this was not noticed until now because no game had been large 1350 enough to push the limits. 1351 13522005-01-02 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1353 1354 Reactivated feature: unit and uview stack ordering. 1355 Bug fix: cycles in uview lists. 1356 Also some cleanup from earlier uview/vision hacking. 1357 * side.c (is_at_correct_uvstack_position): New function. Compares 1358 an out-of-stack uview to an in-stack one to see if the out-of-stack 1359 one could be spliced in before the in-stack one. 1360 (add_uview_to_uvstack): New function. Splices an uview into a 1361 transport uview's occ stack. 1362 (add_unit_view): Call 'add_uview_to_uvstack' instead of containing 1363 that bulk of code in the function. Fix bug whereby occupant views 1364 were being incorrectly altered after creation. 1365 (add_unit_view_raw): Call 'is_at_correct_uvstack_position' to help 1366 ascertain the correct position of the uview being spliced into the 1367 list for a given cell coord hash. 1368 (test_for_successful_viewer): Delete function. No longer needed or 1369 used. 1370 (test_for_possible_viewer): Likewise. 1371 (tmpunittosee): Delete variable. No longer needed or used. 1372 (tmpseer): Likewise. 1373 * unit.c (is_at_correct_ustack_position): New function. Compares 1374 an out-of-stack unit to an in-stack one to see if the out-of-stack 1375 one could be spliced in before the in-stack one. 1376 (add_unit_to_ustack): Renamed from 'add_unit_to_stack'. 1377 (add_unit_to_ustack): New function. Splices an unit into a 1378 transport's occ stack. 1379 (remove_unit_from_ustack): Renamed from 'remove_unit_from_stack'. 1380 (enter_transport): Call 'add_unit_to_ustack' instead of keeping 1381 the equivalent code in the function. 1382 * unit.h (a_unit): Add an unit view pointer to struct. This is for 1383 keeping track of a master uview associated with the unit. The master 1384 uview concept is born of the need to represent the unit when an 1385 interface is on 'show_all' mode (such as when deisigning). This 1386 concept will hopefully be implemented soon. 1387 13882005-01-01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1389 1390 New feature: zone-of-overwatch (ZOO) and overwatch firing. 1391 (Almost local midnight... I still have more breathing room than last 1392 year though. That commit made it in with 18 seconds to spare.) 1393 * doc/refman.texi (zoo-range): New entry. 1394 (zoo-range-min): New entry. 1395 (acp-for-overwatch): New entry. 1396 * side.c (namespace Xconq): New variables: 'any_overwatch_cache', 1397 'any_overwatch_chances', 'overwatch_against_range_max', 1398 'overwatch_against_range_min'. 1399 (compute_overwatch_cache): New function. Sets up a cache of some 1400 useful overwatch-related values the first time it is needed. 1401 (can_overwatch): New function. Checks to see if an unit can 1402 perform overwatch fire against another unit. 1403 (try_overwatch_from): New function. Checks to see if any units 1404 (including occs) in a stack at a given location can perform 1405 overwatch fire against a given unit. 1406 (try_overwatch_against): New function. Checks to see if any 1407 units can perform overwatch fire against a given unit. 1408 (occupy_see_all): If any overwatch is available at all and 1409 available against the current unit type, then attempt to get some 1410 overwatch fire against the unit. 1411 * table.def (uu_acp_overwatch): New GDL table. How much extra ACP 1412 does an unit get to perform overwatch fire against another unit? 1413 (uu_zoo_range); New GDL table. Out to how far can an unit 1414 extend a ZOO against another unit? 1415 (uu_zoo_range_min): New GDL table. How close can an unit extend 1416 a ZOO against another unit? 1417 14182005-01-01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1419 1420 Fix date problem with configuration scripts. 1421 * configure.in: Change the year format field for the date 1422 command from 'G' to 'Y'. 'G' still thinks it's 2004 in Greenwich. 1423 * misc/runconfig.sh: Likewise. 1424 1425 Fix bug in overrun action. (Thanks to Elijah for reporting this bug.) 1426 * combat.c (do_overrun_action): Use 'check_fire_at_action' instead 1427 of the rather lame 'can_fire' function to check if the attacker can 1428 fire upon the defender. Likewise, use 'check_attack_action' instead 1429 of 'can_attack'. 1430 14312005-01-01 Eric McDonald <eric_mcdonald@users.sourceforge.net> 1432 1433 Happy New Year. 1434 1435 Rotate 2004 changelog out to the 'changelogs' dir. 1436 * ChangeLog-2004: New file. 1437 * ChangeLog: Refresh for the new year. 1438 1439 Make SDL interface compile including ParaGUI headers. 1440 * config.h: Include 'iostream' before the C stdio headers. 1441 * sdlconq.h: Remove ifdef (0) from around ParaGUI headers. 1442 1443 Hack around a palette colors bug so that emblems show up correctly 1444 in SDL interface. (Bug reported by Elijah Meeks.) 1445 * imf.c (blacken_masked_area): Test to see if UL corner matches 1446 LL and UR corners in terms of color. If not, then replace the LR 1447 corner's palette entry with the mask color. 1448