├── README.md ├── audio ├── sounds │ ├── button.ogg │ ├── construction.ogg │ ├── machine_gun-0.ogg │ ├── machine_gun-1.ogg │ ├── sell.ogg │ ├── tank-fire-0.ogg │ ├── tank-fire-1.ogg │ ├── tank-fire-2.ogg │ └── tank-fire-3.ogg ├── talk │ ├── acknowledged.ogg │ ├── affirmative.ogg │ ├── awaiting_orders.ogg │ ├── moving_out.ogg │ ├── over_and_out.ogg │ ├── ready_and_waiting.ogg │ ├── reporting.ogg │ ├── right_away.ogg │ ├── unit_reporting.ogg │ ├── vehicle_reporting.ogg │ └── yes_sir.ogg └── voice │ ├── building.ogg │ ├── building_in_progress.ogg │ ├── cancelled.ogg │ ├── cannot_deploy_here.ogg │ ├── construction_complete.ogg │ ├── insufficient_funds.ogg │ ├── low_power.ogg │ ├── mission_accomplished.ogg │ ├── mission_failure.ogg │ ├── new_construction_options.ogg │ ├── not_ready.ogg │ ├── on_hold.ogg │ ├── reinforcements_have_arrived.ogg │ └── unit_ready.ogg ├── debug.html ├── images ├── blank-blank.gif ├── blank-pointer.cur ├── buildings │ ├── advanced-power-plant-sprite-sheet.png │ ├── barracks-sprite-sheet.png │ ├── bib-sprite-sheet.png │ ├── bib │ │ ├── bib-2.gif │ │ ├── bib-3.gif │ │ └── bib-4.gif │ ├── construction-yard-sprite-sheet.png │ ├── hand-of-nod-sprite-sheet.png │ ├── power-plant-sprite-sheet.png │ ├── refinery-sprite-sheet.png │ ├── tiberium-silo-sprite-sheet.png │ └── weapons-factory-sprite-sheet.png ├── bullets │ └── 120mm.png ├── cursors.png ├── cursors │ ├── blank.cur │ ├── blank.gif │ └── invisible.cur ├── htitle.jpeg ├── loading.gif ├── logo.jpg ├── maps │ └── gdi │ │ └── map01.jpeg ├── sidebar │ ├── buttons │ │ ├── hmap 000.png │ │ ├── hmap 001.png │ │ ├── hmap 002.png │ │ ├── hrepair 000.png │ │ ├── hsell 000.png │ │ ├── hstripdn0.png │ │ ├── hstripdn1.png │ │ ├── hstripup0.png │ │ ├── hstripup1.png │ │ ├── repair-pressed.png │ │ └── sell-pressed.png │ ├── cnc-2.ttf │ ├── cnc.ttf │ ├── hold.png │ ├── icons-sprite-sheet.png │ ├── icons │ │ ├── advanced-communication-tower-icon.png │ │ ├── advanced-guard-tower-icon.png │ │ ├── advanced-power-plant-icon.png │ │ ├── air-strike-icon.png │ │ ├── airstrip-icon.png │ │ ├── apache-icon.png │ │ ├── apc-icon.png │ │ ├── artillery-icon.png │ │ ├── barbed-wire-icon.png │ │ ├── barracks-icon.png │ │ ├── chain-link-icon.png │ │ ├── chem-warrior-icon.png │ │ ├── commando-icon.png │ │ ├── communications-tower-icon.png │ │ ├── concrete-wall-icon.png │ │ ├── engineer-icon.png │ │ ├── flame-tank-icon.png │ │ ├── flamethrower-icon.png │ │ ├── grenadier-icon.png │ │ ├── guard-tower-icon.png │ │ ├── gunboat-icon.png │ │ ├── hand-of-nod-icon.png │ │ ├── harvester-icon.png │ │ ├── helipad-icon.png │ │ ├── hover-craft-icon.png │ │ ├── ion-cannon-icon.png │ │ ├── jeep-icon.png │ │ ├── light-tank-icon.png │ │ ├── mammoth-tank-icon.png │ │ ├── mcv-icon.png │ │ ├── medium-tank-icon.png │ │ ├── minigunner-icon.png │ │ ├── msamicnh.png │ │ ├── nod-buggy-icon.png │ │ ├── nuclear-strike-icon.png │ │ ├── obelisk-icon.png │ │ ├── orca-icon.png │ │ ├── power-plant-icon.png │ │ ├── recon-bike-icon.png │ │ ├── refinery-icon.png │ │ ├── repair-facility-icon.png │ │ ├── rocket_soldier-icon.png │ │ ├── sam-site-icon.png │ │ ├── sandbags-icon.png │ │ ├── ssm-launcher-icon.png │ │ ├── stealth-tank-icon.png │ │ ├── support-aircraft-icon.png │ │ ├── temple-of-nod-icon.png │ │ ├── tiberium-silo-icon.png │ │ ├── transport-icon.png │ │ ├── turret-icon.png │ │ ├── weapons-factory-icon.png │ │ └── wooden-fence-icon.png │ ├── message_box.jpg │ ├── placement-red.gif │ ├── placement-white.gif │ ├── power │ │ ├── power_bar_green.png │ │ ├── power_bar_orange.png │ │ ├── power_bar_red.png │ │ ├── power_indicator.png │ │ └── power_indicator2.png │ ├── primary.png │ ├── radar │ │ ├── gdi │ │ │ ├── radar 000.png │ │ │ ├── radar 001.png │ │ │ ├── radar 002.png │ │ │ ├── radar 003.png │ │ │ ├── radar 004.png │ │ │ ├── radar 005.png │ │ │ ├── radar 006.png │ │ │ ├── radar 007.png │ │ │ ├── radar 008.png │ │ │ ├── radar 009.png │ │ │ ├── radar 010.png │ │ │ ├── radar 011.png │ │ │ ├── radar 012.png │ │ │ ├── radar 013.png │ │ │ ├── radar 014.png │ │ │ ├── radar 015.png │ │ │ ├── radar 016.png │ │ │ ├── radar 017.png │ │ │ ├── radar 018.png │ │ │ ├── radar 019.png │ │ │ ├── radar 020.png │ │ │ ├── radar 021.png │ │ │ ├── radar 022.png │ │ │ ├── radar 023.png │ │ │ ├── radar 024.png │ │ │ ├── radar 025.png │ │ │ ├── radar 026.png │ │ │ ├── radar 027.png │ │ │ ├── radar 028.png │ │ │ ├── radar 029.png │ │ │ ├── radar 030.png │ │ │ ├── radar 031.png │ │ │ ├── radar 032.png │ │ │ ├── radar 033.png │ │ │ ├── radar 034.png │ │ │ ├── radar 035.png │ │ │ ├── radar 036.png │ │ │ ├── radar 037.png │ │ │ ├── radar 038.png │ │ │ ├── radar 039.png │ │ │ ├── radar 040.png │ │ │ ├── radar 041.png │ │ │ └── radar 042.png │ │ └── nod │ │ │ ├── radar 000.png │ │ │ ├── radar 001.png │ │ │ ├── radar 002.png │ │ │ ├── radar 003.png │ │ │ ├── radar 004.png │ │ │ ├── radar 005.png │ │ │ ├── radar 006.png │ │ │ ├── radar 007.png │ │ │ ├── radar 008.png │ │ │ ├── radar 009.png │ │ │ ├── radar 010.png │ │ │ ├── radar 011.png │ │ │ ├── radar 012.png │ │ │ ├── radar 013.png │ │ │ ├── radar 014.png │ │ │ ├── radar 015.png │ │ │ ├── radar 016.png │ │ │ ├── radar 017.png │ │ │ ├── radar 018.png │ │ │ ├── radar 019.png │ │ │ ├── radar 020.png │ │ │ ├── radar 021.png │ │ │ ├── radar 022.png │ │ │ ├── radar 023.png │ │ │ ├── radar 024.png │ │ │ ├── radar 025.png │ │ │ ├── radar 026.png │ │ │ ├── radar 027.png │ │ │ ├── radar 028.png │ │ │ ├── radar 029.png │ │ │ ├── radar 030.png │ │ │ ├── radar 031.png │ │ │ ├── radar 032.png │ │ │ ├── radar 033.png │ │ │ ├── radar 034.png │ │ │ ├── radar 035.png │ │ │ ├── radar 036.png │ │ │ ├── radar 037.png │ │ │ ├── radar 038.png │ │ │ ├── radar 039.png │ │ │ ├── radar 040.png │ │ │ ├── radar 041.png │ │ │ └── radar 042.png │ ├── ready.png │ ├── repair-big.png │ ├── repair-small.png │ ├── select 000.png │ ├── select 001.png │ ├── sidebar.png │ ├── tabs.png │ └── trans2.gif ├── tiles │ └── temperate │ │ ├── tiberium-sprite-sheet.png │ │ ├── tree-sprite-sheet.png │ │ └── trees-sprite-sheet.png ├── turrets │ ├── guard-tower-sprite-sheet.png │ └── gun-turret-sprite-sheet.png └── units │ └── vehicles │ ├── harvester-sprite-sheet.png │ ├── light-tank-sprite-sheet.png │ └── mcv-sprite-sheet.png ├── index.html └── js ├── --no-seqs ├── cnc-old.js ├── cnc-v0.1.js ├── cnc-v0.2.js ├── cnc-v0.2b.js ├── cnc-v0.3.js ├── cnc-v0.31.js ├── cnc-v0.3b ├── cnc-v0.3b.js ├── cnc-v0.3c.js ├── cnc-v0.3d.js ├── cnc.js ├── jquery.js └── jquery.min.js /README.md: -------------------------------------------------------------------------------- 1 | Command & Conquer - HTML5 2 | ============================= 3 | 4 | ## About 5 | 6 | This is a recreation of the original Command and Conquer, Real Time Strategy game entirely in HTML5 and Javascript. 7 | 8 | This project is only intended as a technical proof of concept to demonstrate the basic working elements of an RTS game in HTML5. No commercial use is intended. All images and sounds used are from C&C - Tiberian Dawn and are property of the original game creators. 9 | 10 | This game works best on Google Chrome or Mozilla Firefox. The images can take a little while to load so please be patient. 11 | 12 | ## Notes & Demo URL 13 | 14 | You can find a working demo of this project on http://www.adityaravishankar.com/projects/games/command-and-conquer-demo/ 15 | 16 | Details and notes about the development of the project are available on my website at http://www.adityaravishankar.com/2011/11/command-and-conquer-programming-an-rts-game-in-html5-and-javascript/ 17 | 18 | NOTE: The source code shared here is from the earlier demo version of the project. This version is no longer being developed and the code is being shared so others can learn from it. 19 | 20 | ## Newer Version & Updates 21 | 22 | A more recent version of the project is available here. http://www.adityaravishankar.com/projects/games/command-and-conquer/ 23 | 24 | This version is a complete rewrite of the earlier demo shared on github. 25 | 26 | The new version has more levels from the original game, more units, explosions, effects and background music. Multiplayer support is also being tested using Node.js & nowjs. 27 | 28 | [Demo Video](http://www.youtube.com/watch?v=HTZCMxNtloQ) 29 | 30 | This new version is NOT open source. It is still free to play. 31 | 32 | News, updates, screenshots, videos and invites to beta releases are available on the [C&C HTML5 Facebook page](http://www.facebook.com/CommandConquerHtml5) 33 | -------------------------------------------------------------------------------- /audio/sounds/button.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/button.ogg -------------------------------------------------------------------------------- /audio/sounds/construction.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/construction.ogg -------------------------------------------------------------------------------- /audio/sounds/machine_gun-0.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/machine_gun-0.ogg -------------------------------------------------------------------------------- /audio/sounds/machine_gun-1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/machine_gun-1.ogg -------------------------------------------------------------------------------- /audio/sounds/sell.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/sell.ogg -------------------------------------------------------------------------------- /audio/sounds/tank-fire-0.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/tank-fire-0.ogg -------------------------------------------------------------------------------- /audio/sounds/tank-fire-1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/tank-fire-1.ogg -------------------------------------------------------------------------------- /audio/sounds/tank-fire-2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/tank-fire-2.ogg -------------------------------------------------------------------------------- /audio/sounds/tank-fire-3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/sounds/tank-fire-3.ogg -------------------------------------------------------------------------------- /audio/talk/acknowledged.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/acknowledged.ogg -------------------------------------------------------------------------------- /audio/talk/affirmative.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/affirmative.ogg -------------------------------------------------------------------------------- /audio/talk/awaiting_orders.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/awaiting_orders.ogg -------------------------------------------------------------------------------- /audio/talk/moving_out.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/moving_out.ogg -------------------------------------------------------------------------------- /audio/talk/over_and_out.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/over_and_out.ogg -------------------------------------------------------------------------------- /audio/talk/ready_and_waiting.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/ready_and_waiting.ogg -------------------------------------------------------------------------------- /audio/talk/reporting.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/reporting.ogg -------------------------------------------------------------------------------- /audio/talk/right_away.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/right_away.ogg -------------------------------------------------------------------------------- /audio/talk/unit_reporting.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/unit_reporting.ogg -------------------------------------------------------------------------------- /audio/talk/vehicle_reporting.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/vehicle_reporting.ogg -------------------------------------------------------------------------------- /audio/talk/yes_sir.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/talk/yes_sir.ogg -------------------------------------------------------------------------------- /audio/voice/building.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/building.ogg -------------------------------------------------------------------------------- /audio/voice/building_in_progress.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/building_in_progress.ogg -------------------------------------------------------------------------------- /audio/voice/cancelled.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/cancelled.ogg -------------------------------------------------------------------------------- /audio/voice/cannot_deploy_here.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/cannot_deploy_here.ogg -------------------------------------------------------------------------------- /audio/voice/construction_complete.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/construction_complete.ogg -------------------------------------------------------------------------------- /audio/voice/insufficient_funds.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/insufficient_funds.ogg -------------------------------------------------------------------------------- /audio/voice/low_power.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/low_power.ogg -------------------------------------------------------------------------------- /audio/voice/mission_accomplished.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/mission_accomplished.ogg -------------------------------------------------------------------------------- /audio/voice/mission_failure.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/mission_failure.ogg -------------------------------------------------------------------------------- /audio/voice/new_construction_options.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/new_construction_options.ogg -------------------------------------------------------------------------------- /audio/voice/not_ready.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/not_ready.ogg -------------------------------------------------------------------------------- /audio/voice/on_hold.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/on_hold.ogg -------------------------------------------------------------------------------- /audio/voice/reinforcements_have_arrived.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/reinforcements_have_arrived.ogg -------------------------------------------------------------------------------- /audio/voice/unit_ready.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/audio/voice/unit_ready.ogg -------------------------------------------------------------------------------- /debug.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Command and Conquer - Tiberian Dawn - HTML5 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 18 | 19 | 20 | 89 | 90 |
91 | Command and Conquer 92 |

C&C - HTML5 v0.3 by Aditya Ravi Shankar 93 |

94 |
95 | Debugging off. 96 |
97 |
98 |
99 | 100 | Your browser does not support the HTML5 Canvas feature. This game uses new HTML5 features and will only work on the latest versions of Firefox, Safari or Chrome (and maybe Internet Explorer 9). 101 | 102 | 103 |
104 | 105 |
106 |
107 | 108 | 109 |
110 |

Updates: 111 |

137 |

138 |

Controls: 139 |

162 |

163 | 164 |

DISCLAIMER: This project is only intended as a technical proof of concept to demonstrate the basic working elements of an RTS game in HTML5. No commercial use is intended. All images and sounds used are from C&C - Tiberian Dawn and are property of the original game creators.

165 | 166 |
167 | 168 |
169 | 170 |
171 |
172 | 180 | 181 | 184 |
185 |
186 | 194 | 197 |
198 |
199 | 207 | 210 |
211 |
212 | 213 | 214 | 215 | -------------------------------------------------------------------------------- /images/blank-blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/blank-blank.gif -------------------------------------------------------------------------------- /images/blank-pointer.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/blank-pointer.cur -------------------------------------------------------------------------------- /images/buildings/advanced-power-plant-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/advanced-power-plant-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/barracks-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/barracks-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/bib-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/bib-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/bib/bib-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/bib/bib-2.gif -------------------------------------------------------------------------------- /images/buildings/bib/bib-3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/bib/bib-3.gif -------------------------------------------------------------------------------- /images/buildings/bib/bib-4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/bib/bib-4.gif -------------------------------------------------------------------------------- /images/buildings/construction-yard-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/construction-yard-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/hand-of-nod-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/hand-of-nod-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/power-plant-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/power-plant-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/refinery-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/refinery-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/tiberium-silo-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/tiberium-silo-sprite-sheet.png -------------------------------------------------------------------------------- /images/buildings/weapons-factory-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/buildings/weapons-factory-sprite-sheet.png -------------------------------------------------------------------------------- /images/bullets/120mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/bullets/120mm.png -------------------------------------------------------------------------------- /images/cursors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/cursors.png -------------------------------------------------------------------------------- /images/cursors/blank.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/cursors/blank.cur -------------------------------------------------------------------------------- /images/cursors/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/cursors/blank.gif -------------------------------------------------------------------------------- /images/cursors/invisible.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/cursors/invisible.cur -------------------------------------------------------------------------------- /images/htitle.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/htitle.jpeg -------------------------------------------------------------------------------- /images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/loading.gif -------------------------------------------------------------------------------- /images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/logo.jpg -------------------------------------------------------------------------------- /images/maps/gdi/map01.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/maps/gdi/map01.jpeg -------------------------------------------------------------------------------- /images/sidebar/buttons/hmap 000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hmap 000.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hmap 001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hmap 001.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hmap 002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hmap 002.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hrepair 000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hrepair 000.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hsell 000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hsell 000.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hstripdn0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hstripdn0.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hstripdn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hstripdn1.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hstripup0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hstripup0.png -------------------------------------------------------------------------------- /images/sidebar/buttons/hstripup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/hstripup1.png -------------------------------------------------------------------------------- /images/sidebar/buttons/repair-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/repair-pressed.png -------------------------------------------------------------------------------- /images/sidebar/buttons/sell-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/buttons/sell-pressed.png -------------------------------------------------------------------------------- /images/sidebar/cnc-2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/cnc-2.ttf -------------------------------------------------------------------------------- /images/sidebar/cnc.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/cnc.ttf -------------------------------------------------------------------------------- /images/sidebar/hold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/hold.png -------------------------------------------------------------------------------- /images/sidebar/icons-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons-sprite-sheet.png -------------------------------------------------------------------------------- /images/sidebar/icons/advanced-communication-tower-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/advanced-communication-tower-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/advanced-guard-tower-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/advanced-guard-tower-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/advanced-power-plant-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/advanced-power-plant-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/air-strike-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/air-strike-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/airstrip-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/airstrip-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/apache-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/apache-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/apc-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/apc-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/artillery-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/artillery-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/barbed-wire-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/barbed-wire-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/barracks-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/barracks-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/chain-link-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/chain-link-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/chem-warrior-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/chem-warrior-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/commando-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/commando-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/communications-tower-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/communications-tower-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/concrete-wall-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/concrete-wall-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/engineer-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/engineer-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/flame-tank-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/flame-tank-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/flamethrower-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/flamethrower-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/grenadier-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/grenadier-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/guard-tower-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/guard-tower-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/gunboat-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/gunboat-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/hand-of-nod-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/hand-of-nod-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/harvester-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/harvester-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/helipad-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/helipad-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/hover-craft-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/hover-craft-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/ion-cannon-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/ion-cannon-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/jeep-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/jeep-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/light-tank-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/light-tank-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/mammoth-tank-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/mammoth-tank-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/mcv-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/mcv-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/medium-tank-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/medium-tank-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/minigunner-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/minigunner-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/msamicnh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/msamicnh.png -------------------------------------------------------------------------------- /images/sidebar/icons/nod-buggy-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/nod-buggy-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/nuclear-strike-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/nuclear-strike-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/obelisk-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/obelisk-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/orca-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/orca-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/power-plant-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/power-plant-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/recon-bike-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/recon-bike-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/refinery-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/refinery-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/repair-facility-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/repair-facility-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/rocket_soldier-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/rocket_soldier-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/sam-site-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/sam-site-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/sandbags-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/sandbags-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/ssm-launcher-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/ssm-launcher-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/stealth-tank-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/stealth-tank-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/support-aircraft-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/support-aircraft-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/temple-of-nod-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/temple-of-nod-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/tiberium-silo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/tiberium-silo-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/transport-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/transport-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/turret-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/turret-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/weapons-factory-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/weapons-factory-icon.png -------------------------------------------------------------------------------- /images/sidebar/icons/wooden-fence-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/icons/wooden-fence-icon.png -------------------------------------------------------------------------------- /images/sidebar/message_box.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/message_box.jpg -------------------------------------------------------------------------------- /images/sidebar/placement-red.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/placement-red.gif -------------------------------------------------------------------------------- /images/sidebar/placement-white.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/placement-white.gif -------------------------------------------------------------------------------- /images/sidebar/power/power_bar_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/power/power_bar_green.png -------------------------------------------------------------------------------- /images/sidebar/power/power_bar_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/power/power_bar_orange.png -------------------------------------------------------------------------------- /images/sidebar/power/power_bar_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/power/power_bar_red.png -------------------------------------------------------------------------------- /images/sidebar/power/power_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/power/power_indicator.png -------------------------------------------------------------------------------- /images/sidebar/power/power_indicator2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/power/power_indicator2.png -------------------------------------------------------------------------------- /images/sidebar/primary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/primary.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 000.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 001.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 002.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 003.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 004.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 005.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 006.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 007.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 008.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 009.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 010.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 011.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 012.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 013.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 014.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 015.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 016.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 017.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 018.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 019.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 020.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 021.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 022.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 023.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 024.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 025.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 026.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 027.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 028.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 029.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 030.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 031.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 032.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 033.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 034.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 035.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 036.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 037.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 038.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 039.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 040.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 041.png -------------------------------------------------------------------------------- /images/sidebar/radar/gdi/radar 042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/gdi/radar 042.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 000.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 001.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 002.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 003.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 004.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 005.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 006.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 007.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 008.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 009.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 010.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 011.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 012.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 013.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 014.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 015.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 016.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 017.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 018.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 019.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 020.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 021.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 022.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 023.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 024.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 025.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 026.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 027.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 028.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 029.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 030.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 031.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 032.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 033.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 034.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 035.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 036.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 037.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 038.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 039.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 040.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 041.png -------------------------------------------------------------------------------- /images/sidebar/radar/nod/radar 042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/radar/nod/radar 042.png -------------------------------------------------------------------------------- /images/sidebar/ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/ready.png -------------------------------------------------------------------------------- /images/sidebar/repair-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/repair-big.png -------------------------------------------------------------------------------- /images/sidebar/repair-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/repair-small.png -------------------------------------------------------------------------------- /images/sidebar/select 000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/select 000.png -------------------------------------------------------------------------------- /images/sidebar/select 001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/select 001.png -------------------------------------------------------------------------------- /images/sidebar/sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/sidebar.png -------------------------------------------------------------------------------- /images/sidebar/tabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/tabs.png -------------------------------------------------------------------------------- /images/sidebar/trans2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/sidebar/trans2.gif -------------------------------------------------------------------------------- /images/tiles/temperate/tiberium-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/tiles/temperate/tiberium-sprite-sheet.png -------------------------------------------------------------------------------- /images/tiles/temperate/tree-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/tiles/temperate/tree-sprite-sheet.png -------------------------------------------------------------------------------- /images/tiles/temperate/trees-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/tiles/temperate/trees-sprite-sheet.png -------------------------------------------------------------------------------- /images/turrets/guard-tower-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/turrets/guard-tower-sprite-sheet.png -------------------------------------------------------------------------------- /images/turrets/gun-turret-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/turrets/gun-turret-sprite-sheet.png -------------------------------------------------------------------------------- /images/units/vehicles/harvester-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/units/vehicles/harvester-sprite-sheet.png -------------------------------------------------------------------------------- /images/units/vehicles/light-tank-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/units/vehicles/light-tank-sprite-sheet.png -------------------------------------------------------------------------------- /images/units/vehicles/mcv-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adityaravishankar/command-and-conquer/44eb28bcd48df3a6560398b91d4cb6572c351712/images/units/vehicles/mcv-sprite-sheet.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Command and Conquer - Tiberian Dawn - HTML5 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 82 | 83 | 84 | 85 | 87 | 88 | 89 | 99 | 100 | 101 |
102 | Command and Conquer 103 |

C&C - HTML5 v0.3d by Aditya Ravi Shankar 104 |

105 | 106 | 107 |

This is a recreation of the original Command and Conquer, Real Time Strategy game entirely in HTML5 and Javascript.

108 |

This page works best on Google Chrome or Mozilla Firefox. The images can take a little while to load so please be patient.

109 | 110 |

This is still a work in progress. Any comments or feedback (including bugs), is appreciated. I intend to develop this game further - improving the AI, pathfinding (See improved pathfinding demo here), adding more units and levels. If you are interested in helping out with this effort (even by just testing the game and giving feedback), please let me know.

111 |

BUGS and ISSUES:
Please report bugs on the github issues page or in the comments section below. https://github.com/adityaravishankar/command-and-conquer/issues

112 | 113 |

If you liked this demo, please let me know by clicking on the Like button below and leaving me a comment. Please share this page with your friends so that they can see it too.

114 |

You can read more about the development of this game on my blog. You can also check out some of the other games I have written or read some of my game programming articles.

115 | My goal is to take this game as far as possible - Add more units, optimize the code, add better AI and multiplayer games. You would be able to come to this page, find a random partner and start playing!!

116 | Several developers have volunteered to help with this effort. I am grateful to everyone who came forward to help. 117 |

If you enjoyed playing this game and would like to support the continued development of the game with donations/contributions, please use the donate button below. Every little bit would help.
118 |
119 |
120 | 121 | 123 | 124 | 125 |
126 |
127 | NOTE: Donations help me pay for hosting (which I currently pay for out of my own pocket). While welcome and appreciated, donations are not necessary to play this game.

This game will always be free for everyone to enjoy. 128 | 129 |

130 |
131 |
132 | 139 |
140 |
141 | 142 |
143 |   144 | 145 | 146 | 147 | 148 |
149 |   150 | 151 | 152 | 153 |
154 | 155 | 156 | 157 |
158 |
159 |
160 | 161 | Your browser does not support the HTML5 Canvas feature. This game uses new HTML5 features and will only work on the latest versions of Firefox, Safari or Chrome (and maybe Internet Explorer 9). 162 | 163 | 164 |
165 | 166 |
167 |
168 |

169 |
170 | Debugging off. 171 |
172 |
173 |

Updates: 174 |

220 |

221 |

Controls: 222 |

245 |

246 | 247 |

DISCLAIMER: This project is only intended as a technical proof of concept to demonstrate the basic working elements of an RTS game in HTML5. No commercial use is intended. All images and sounds used are from C&C - Tiberian Dawn and are property of the original game creators.

248 | 249 |
250 | 251 |
252 | 253 |
254 |
255 | 263 | 264 | 267 |
268 |
269 | 277 | 280 |
281 |
282 | 290 | 293 |
294 |
295 | 296 | 297 | 298 | 299 | -------------------------------------------------------------------------------- /js/cnc-v0.1.js: -------------------------------------------------------------------------------- 1 | $(function(){function p(a){var b=this;this.loaded=!1;var c=new Image;return c.src="images/"+a,this.preloadCount++,$(c).bind("load",function(){b.loadedCount++,b.loadedCount==b.preloadCount&&(b.loaded=!0)}),c}function q(a,b,c){c||(c=".png");var d=[];for(var e=0;e.7?this.life="healthy":a>.4?this.life="damaged":this.life="ultra-damaged"}function s(){if(this.selected){b.strokeStyle="white";var a=5,c=this.x*d.gridSize+d.viewportAdjustX+this.pixelOffsetX,f=this.y*d.gridSize+d.viewportAdjustY+this.pixelOffsetY,g=c+this.pixelLeft,h=f+this.pixelTop,i=g+this.pixelWidth,j=h+this.pixelHeight;b.beginPath(),b.moveTo(g,h+a),b.lineTo(g,h),b.lineTo(g+a,h),b.moveTo(i-a,h),b.lineTo(i,h),b.lineTo(i,h+a),b.moveTo(i,j-a),b.lineTo(i,j),b.lineTo(i-a,j),b.moveTo(g+a,j),b.lineTo(g,j),b.lineTo(g,j-a),b.stroke(),this.getLife(),b.beginPath(),b.rect(g,h-a-2,this.pixelWidth*this.health/this.hitPoints,a),this.life=="healthy"?b.fillStyle="lightgreen":this.life=="damaged"?b.fillStyle="yellow":b.fillStyle="red",b.fill(),b.beginPath(),b.strokeStyle="black",b.rect(g,h-a-2,this.pixelWidth,a),b.stroke(),this.primaryBuilding&&b.drawImage(e.primaryBuildingImage,(g+i-e.primaryBuildingImage.width)/2,j-e.primaryBuildingImage.height)}}function t(a,b){var c=this.x*d.gridSize+this.pixelOffsetX,e=this.y*d.gridSize+this.pixelOffsetY,f=c+this.pixelLeft,g=e+this.pixelTop,h=f+this.pixelWidth,i=g+this.pixelHeight;return ah||bi?!1:!0}function u(a){var b=[];a||(a=this);for(var c=d.units.length-1;c>=0;c--){var e=d.units[c];e.team!=a.team&&Math.pow(e.x-a.x,2)+Math.pow(e.y-a.y,2)<=Math.pow(a.sight,2)&&b.push(e)}for(var c=d.buildings.length-1;c>=0;c--){var e=d.buildings[c];e.team!=a.team&&Math.pow(e.x+e.gridWidth/2-a.x,2)+Math.pow(e.y+e.gridHeight/2-a.y,2)<=Math.pow(a.sight,2)&&b.push(e)}for(var c=d.turrets.length-1;c>=0;c--){var e=d.turrets[c];e.team!=a.team&&Math.pow(e.x+e.gridWidth/2-a.x,2)+Math.pow(e.y+e.gridHeight/2-a.y,2)<=Math.pow(a.sight,2)&&b.push(e)}return b}function v(a,c){var e=d.obstructionGrid;e[c[1]][c[0]]=0;var f=C(e,a,c,"Euclidean");if(f.length>1&&d.debugMode)for(k=0;k=0;q--)l==p[q].gdi[0]&&m==p[q].gdi[1]&&n==p[q].gdi[2]&&(i.data[k*4+0]=p[q].nod[0],i.data[k*4+1]=p[q].nod[1],i.data[k*4+2]=p[q].nod[2])}m==255&&n<100&&(i.data[k*4]=0,i.data[k*4+1]=0,i.data[k*4+2]=0)}y.globalCompositeOperation="source-over",y.putImageData(i,0,0),y.globalCompositeOperation="destination-atop",y.drawImage(a,0,0),b.drawImage(x,0,0,g,h,c,d,g,h)}function A(a,b,c){c||(c=32),b||(b=this);var d=a.y-b.y,e=a.x-b.x;b.type=="turret"&&(d-=.5,e-=.5);var f=c/2+Math.round(Math.atan2(e,d)*c/(2*Math.PI));return f<0&&(f+=c),f>=c&&(f-=c),f}function B(a,b){var c=!0,d=a[0];while(c&&a.length>2){var e=a[2];if(Math.abs(e.y-d.y)>Math.abs(e.x-d.x)){var f=(e.x-d.x)/(e.y-d.y),g=.2*(e.y-d.y)/Math.abs(e.y-d.y),h=g,i={x:d.x+h*f,y:d.y+h};while(c&&Math.abs(i.y-e.y)>.3)b[Math.floor(i.y)][Math.floor(i.x)]>0&&(c=!1),h+=g,i={x:d.x+h*f,y:d.y+h}}else{var f=(e.y-d.y)/(e.x-d.x),j=.2*(e.x-d.x)/Math.abs(e.x-d.x),k=j,i={x:d.x+k,y:d.y+f*k};while(c&&Math.abs(i.x-e.x)>=.3)b[Math.floor(i.y)][Math.floor(i.x)]>0&&(c=!1),k+=j,i={x:d.x+k,y:d.y+f*k}}c&&a.splice(1,1)}}var a=$("#canvas")[0],b=a.getContext("2d"),c={x:0,y:0,gridX:0,gridY:0,gameX:0,gameY:0,insideCanvas:!1,panDirection:"",panningThreshold:48,panningVelocity:24,handlePanning:function(){var a="";c.insideCanvas&&(c.y>d.viewportTop+c.panningThreshold||c.yd.viewportTop+d.viewportHeight?(d.viewportDeltaY=0,a+=""):(d.viewportDeltaY=c.panningVelocity,a+="_bottom"):(d.viewportDeltaY=-c.panningVelocity,a+="_top"),c.x>=c.panningThreshold||c.yd.viewportTop+d.viewportHeight?c.x<=d.screenWidth-c.panningThreshold||c.yd.viewportTop+d.viewportHeight?(d.viewportDeltaX=0,a+=""):(d.viewportDeltaX=c.panningVelocity,a+="_right"):(d.viewportDeltaX=-c.panningVelocity,a+="_left"));if(d.viewportX+d.viewportDeltaX<0||d.viewportX+d.viewportDeltaX+d.screenWidth>d.currentLevel.mapImage.width)d.viewportDeltaX=0;if(d.viewportY+d.viewportDeltaY<0||d.viewportY+d.viewportDeltaY+d.viewportHeight>d.currentLevel.mapImage.height)d.viewportDeltaY=0;a!=""&&(d.viewportDeltaX==0&&d.viewportDeltaY==0?a="no_pan"+a:a="pan"+a),c.panDirection=a,d.viewportX+=d.viewportDeltaX,d.viewportY+=d.viewportDeltaY,c.gameX=c.x+d.viewportX-d.viewportLeft,c.gameY=c.y+d.viewportY-d.viewportTop,d.viewportAdjustX=d.viewportLeft-d.viewportX,d.viewportAdjustY=d.viewportTop-d.viewportY},cursorLoop:0,drawCursor:function(){if(!this.insideCanvas)return;this.cursorLoop++,this.cursorLoop>=this.cursor.cursorSpeed*this.cursor.images.length&&(this.cursorLoop=0);if(this.dragSelect){var a=Math.min(this.gameX,this.dragX),c=Math.min(this.gameY,this.dragY),e=Math.abs(this.gameX-this.dragX),f=Math.abs(this.gameY-this.dragY);b.strokeStyle="white",b.strokeRect(a+d.viewportAdjustX,c+d.viewportAdjustY,e,f)}var g=this.cursor.images[Math.floor(this.cursorLoop/this.cursor.cursorSpeed)];b.drawImage(g,this.x-this.cursor.x,this.y-this.cursor.y)},checkOverObject:function(){this.overObject=null;for(var a=d.units.length-1;a>=0;a--)if(d.units[a].underPoint&&d.units[a].underPoint(this.gameX,this.gameY)){this.overObject=d.units[a];break}for(var a=d.buildings.length-1;a>=0;a--)if(d.buildings[a].underPoint(this.gameX,this.gameY)){this.overObject=d.buildings[a];break}for(var a=d.turrets.length-1;a>=0;a--)if(d.turrets[a].underPoint(this.gameX,this.gameY)){this.overObject=d.turrets[a];break}return this.overObject},draw:function(){this.cursor=this.cursors["default"];var a=this.checkOverObject();if(this.y>=d.viewportTop&&this.y<=d.viewportTop+d.viewportHeight)if(e.deployMode){var b=f.types[e.deployBuilding],g=$.extend([],b.gridShape);g.push(g[g.length-1]);for(var h=0;h0?this.cursor=this.cursors.attack:a.selected?a.name=="mcv"&&(this.cursor=this.cursors.build_command):this.cursor=this.cursors.select:this.panDirection&&this.panDirection!=""?this.cursor=this.cursors[this.panDirection]:d.selectedAttackers.length>0&&(d.obstructionGrid[c.gridY]&&d.obstructionGrid[c.gridY][c.gridX]==1?this.cursor=this.cursors.no_move:this.cursor=this.cursors.move);this.insideCanvas&&this.drawCursor()},click:function(a,b){c.y<=d.viewportTop&&c.y>d.viewportTop-15?(c.x<0||c.x>=160)&&(c.x<320||c.x>=480)&&c.x>=480&&c.x<640&&(e.visible=!e.visible):c.y>=d.viewportTop&&c.y<=d.viewportTop+d.viewportHeight&&(e.visible&&c.x>e.left?e.click(a,b):d.click(a,b))},listenEvents:function(){$("#canvas").mousemove(function(a){var b=$("#canvas").offset();c.x=a.pageX-b.left,c.y=a.pageY-b.top,c.gridX=Math.floor(c.gameX/d.gridSize),c.gridY=Math.floor(c.gameY/d.gridSize);if(c.buttonPressed){if(Math.abs(c.dragX-c.gameX)>5||Math.abs(c.dragY-c.gameY)>5)c.dragSelect=!0}else c.dragSelect=!1}),$("#canvas").click(function(a){return c.click(a,!1),c.dragSelect=!1,!1}),$("#canvas").mousedown(function(a){return a.which==1&&(c.buttonPressed=!0,c.dragX=c.gameX,c.dragY=c.gameY,a.preventDefault()),!1}),$("#canvas").bind("contextmenu",function(a){return c.click(a,!0),!1}),$("#canvas").mouseup(function(a){if(a.which==1){if(c.dragSelect){a.shiftKey||d.clearSelection();var b=Math.min(c.gameX,c.dragX),e=Math.min(c.gameY,c.dragY),f=Math.max(c.gameX,c.dragX),g=Math.max(c.gameY,c.dragY);for(var h=d.units.length-1;h>=0;h--){var i=d.units[h];!i.selected&&i.team==d.currentLevel.team&&b<=i.x*d.gridSize&&f>=i.x*d.gridSize&&e<=i.y*d.gridSize&&g>=i.y*d.gridSize&&d.selectItem(i)}}c.buttonPressed=!1}return!1}),$("#canvas").mouseleave(function(a){c.insideCanvas=!1}),$("#canvas").mouseenter(function(a){c.buttonPressed=!1,c.insideCanvas=!0})},loaded:!1,preloadCount:0,loadedCount:0,preloadImage:p,loadImageArray:q,cursors:{},loadCursor:function(a,b,c,d,e){!b&&!c&&(b=0,c=0),e||(e=1);var f;d?f=this.loadImageArray("cursors/"+a,d,".gif"):f=[this.preloadImage("cursors/"+a+".gif")],this.cursors[a]={x:b,y:c,name:a,images:f,cursorSpeed:e}},loadAllCursors:function(){c.loadCursor("default"),c.loadCursor("no_default"),c.loadCursor("move",15,12),c.loadCursor("no_move",15,12),c.loadCursor("pan_top",15,0),c.loadCursor("pan_top_right",30,0),c.loadCursor("pan_right",30,12),c.loadCursor("pan_bottom_right",30,24),c.loadCursor("pan_bottom",15,24),c.loadCursor("pan_bottom_left",0,24),c.loadCursor("pan_left",0,12),c.loadCursor("pan_top_left",0,0),c.loadCursor("no_pan_top",15,0),c.loadCursor("no_pan_top_right",30,0),c.loadCursor("no_pan_right",30,12),c.loadCursor("no_pan_bottom_right",30,24),c.loadCursor("no_pan_bottom",15,24),c.loadCursor("no_pan_bottom_left",0,24),c.loadCursor("no_pan_left",0,12),c.loadCursor("no_pan_top_left",0,0),c.loadCursor("no_repair",15,0),c.loadCursor("no_sell",15,12),c.loadCursor("build_command",15,12,8),c.loadCursor("sell",15,12,24),c.loadCursor("repair",15,0,24),c.loadCursor("attack",15,12,8),c.loadCursor("big_detonate",15,12,3),c.loadCursor("detonate",15,12,3),c.loadCursor("load_vehicle",15,12,3),c.loadCursor("select",15,12,6,2)}},d={screenWidth:a.width,screenHeight:a.height,viewportTop:35,viewportLeft:0,viewportX:0,viewportY:0,viewportDeltaX:0,viewportDeltaY:0,gridSize:24,animationLoop:null,animationTimeout:50,debugMode:!1,speedAdjustmentFactor:.2,setViewport:function(){b.beginPath(),this.viewportWidth=e.visible?this.screenWidth-e.width:this.screenWidth,this.viewportHeight=480,b.rect(this.viewportLeft,this.viewportTop,this.viewportWidth-this.viewportLeft,this.viewportHeight),b.clip()},drawMap:function(){c.handlePanning(),b.drawImage(this.currentLevel.mapImage,this.viewportX,this.viewportY,this.viewportWidth,this.viewportHeight,this.viewportLeft,this.viewportTop,this.viewportWidth,this.viewportHeight),d.obstructionGrid=[];for(var a=0;a=0;f--){var g=this.buildings[f];for(var a=0;a=0;f--)d.obstructionGrid[this.turrets[f].y][this.turrets[f].x]=1;for(var f=this.units.length-1;f>=0;f--){var h=this.units[f];if(!h.moving){if(h.orders&&h.orders.type!="guard")break;var e=h.x,a=h.y,i=h.collisionRadius/d.gridSize;d.obstructionGrid[Math.floor(a)][Math.floor(e)]=1,d.obstructionGrid[Math.floor(a-i)][Math.floor(e-i)]=1,d.obstructionGrid[Math.floor(a-i)][Math.floor(e+i)]=1,d.obstructionGrid[Math.floor(a+i)][Math.floor(e-i)]=1,d.obstructionGrid[Math.floor(a+i)][Math.floor(e+i)]=1}}for(var f=this.overlay.length-1;f>=0;f--){var j=this.overlay[f];j.name=="tree"?d.obstructionGrid[j.y][j.x]=1:j.name=="trees"&&(d.obstructionGrid[j.y][j.x]=1,d.obstructionGrid[j.y][j.x+1]=1)}},highlightGrid:function(a,c,e,f,g){var h=d.gridSize;g&&$(g).is("img")?b.drawImage(g,a*h+d.viewportAdjustX,c*h+d.viewportAdjustY,e*h,f*h):(g?b.fillStyle=g:b.fillStyle="rgba(225,225,225,0.5)",b.fillRect(a*h+d.viewportAdjustX,c*h+d.viewportAdjustY,e*h,f*h))},drawGrid:function(){var a=d.gridSize,c=d.currentLevel.mapImage.width,e=d.currentLevel.mapImage.height,f=d.viewportX,g=d.viewportY,h=c/a,i=e/a;b.beginPath(),b.strokeStyle="rgba(30,0,0,.6)";for(var j=0;j=0;j--)for(var k=d.obstructionGrid[j].length-1;k>=0;k--)d.obstructionGrid[j][k]==1&&d.highlightGrid(k,j,1,1,"rgba(100,0,0,0.5)")},units:[],buildings:[],turrets:[],overlay:[],bullets:[],fireBullet:function(a){a.x=a.x-.5*Math.sin(a.angle),a.y=a.y-.5*Math.cos(a.angle),a.range=a.range-.5,this.bullets.push(a),setTimeout(function(){a.source.bulletFiring=!1},a.source.reloadTime)},drawBullets:function(){for(var a=this.bullets.length-1;a>=0;a--){var c=this.bullets[a];c.speed=5,c.range=c.range-.1*c.speed,c.x=c.x-.1*c.speed*Math.sin(c.angle),c.y=c.y-.1*c.speed*Math.cos(c.angle);var e=c.x*d.gridSize,f=c.y*d.gridSize;if(!c.dead){var g;for(var h=d.units.length-1;h>=0;h--)if(d.units[h].underPoint&&d.units[h].underPoint(e,f)&&d.units[h].team!=c.source.team){g=d.units[h];break}for(var h=d.buildings.length-1;h>=0;h--)if(d.buildings[h].underPoint(e,f)){g=d.buildings[h];break}for(var h=d.turrets.length-1;h>=0;h--)if(d.turrets[h].underPoint(e,f)){g=d.turrets[h];break}g&&(c.dead=!0,g.health=g.health-Math.floor((c.damage?c.damage:10)+10*Math.random()),g.health<0&&(g.status="destroy")),b.fillStyle="red",b.fillRect(e+d.viewportAdjustX,f+d.viewportAdjustY,2,2)}c.range<=0&&this.bullets.splice(a,1)}},drawObjects:function(){var a=[];for(var b=this.buildings.length-1;b>=0;b--)this.buildings[b].status=="destroy"&&this.buildings.splice(b,1);for(var b=this.units.length-1;b>=0;b--)this.units[b].status=="destroy"&&this.units.splice(b,1);for(var b=this.turrets.length-1;b>=0;b--)this.turrets[b].status=="destroy"&&this.turrets.splice(b,1);$.merge(a,this.units),$.merge(a,this.buildings),$.merge(a,this.overlay),$.merge(a,this.turrets),a.sort(function(a,b){return b.y-a.y});for(var b=a.length-1;b>=0;b--)a[b].draw()},moveObjects:function(){for(var a=this.units.length-1;a>=0;a--)this.units[a].processOrders&&this.units[a].processOrders(),this.units[a].move();for(var a=this.turrets.length-1;a>=0;a--)this.turrets[a].processOrders&&this.turrets[a].processOrders(),this.turrets[a].move()},showDebugger:function(){var a=function(a){var b="
    ";for(key in a)if(a.hasOwnProperty(key)){var c=a[key];if(typeof c!="function"||c===null)typeof c=="object"?(b+="
  • "+key+" : ",c instanceof HTMLImageElement?b+=c.src.replace(/^.+images\//,""):c instanceof Array?b+="Array["+c.length+"]":b+="Object"):b+="
  • "+key+" : "+c+"
  • "}return b+="
",b},b="";b+="Level",b+=a(n),b+="Mouse",b+=a(c),d.selectedItems.length==1&&(b+="Selected Item",b+=a(d.selectedItems[0])),b+="Game",b+=a(d),b+="Sidebar",b+=a(e),b+="Vehicles",b+=a(h),b+="Buildings",b+=a(f),b+="Infantry",b+=a(g),$("#debugger").html(b)},animate:function(){d.debugMode&&d.showDebugger();if(!n.loaded||!e.loaded||!h.loaded||!g.loaded||!f.loaded){b.clearRect(0,0,a.width,a.height);return}b.save(),e.draw(),d.setViewport(),d.drawMap(),d.debugMode&&d.drawGrid(),d.moveObjects(),d.drawObjects(),d.drawBullets(),w.draw(),b.restore(),d.drawMessage(),c.draw()},messageVisible:!0,messageHeadingVisible:!0,messageText:"\nCreate a base by deploying your MCV. Build a power plant and weapons factory.\n\nUse your tanks to get rid of all enemy presence in the area.",drawMessage:function(){if(!this.messageVisible)return;b.drawImage(e.messageBox,d.viewportLeft+22,d.viewportTop+150),this.messageHeadingVisible||(b.fillStyle="black",b.fillRect(265,198,120,20)),b.fillStyle="green",b.font='16px "Command and Conquer"';var a=this.messageText.split("\n");for(var c=0;c=0;h--)item=d.units[h],item.team==d.currentLevel.team?a.push(item):f.push(item);for(var h=d.buildings.length-1;h>=0;h--)item=d.buildings[h],item.team==d.currentLevel.team?b.push(item):e.push(item);for(var h=d.turrets.length-1;h>=0;h--)item=d.turrets[h],item.team==d.currentLevel.team?c.push(item):g.push(item);a.length==0&&b.length==0&&(o.play("mission_failure"),d.end()),g.length==0&&e.length==0&&f.length==0&&(o.play("mission_accomplished"),d.end())},selectedItems:[],selectedAttackers:[],clearSelection:function(){for(var a=this.selectedItems.length-1;a>=0;a--)this.selectedItems[a].selected=0,this.selectedItems.splice(a,1);this.selectedAttackers=[]},selectItem:function(a){a.selected=!0,this.selectedItems.push(a),a.type!="building"&&a.team==d.currentLevel.team&&(this.selectedAttackers.push(a),o.play(a.type+"_select"))},click:function(a,b){if(!(!d.messageVisible||c.x<290||c.x>350||c.y<310||c.y>325)){d.messageVisible=!1;return}var f=c.checkOverObject();if(b){this.clearSelection(),e.repairMode=!1,e.deployMode=!1,e.sellMode=!1;return}if(e.repairMode)!f||f.team!=d.currentLevel.team||f.type!="building"&&f.type!="turret"||f.life>=f.hitPoints;else if(e.deployMode)e.finishDeployingBuilding();else if(e.sellMode)f&&f.team==d.currentLevel.team&&(f.type=="building"||f.type=="turret")&&(f.status="sell",o.play("sell"),e.cash+=f.cost/2);else if(!b&&!c.dragSelect)if(f)if(d.selectedAttackers.length==1&&f.selected)f.name=="mcv"&&(this.clearSelection(),f.orders={type:"build"});else if(f.team==d.currentLevel.team)a.shiftKey||this.clearSelection(),this.selectItem(f);else if(d.selectedAttackers.length>0)for(var g=d.selectedAttackers.length-1;g>=0;g--)d.selectedAttackers[g].primaryWeapon&&(d.selectedAttackers[g].orders={type:"attack",target:f},o.play(d.selectedAttackers[g].type+"_move"));else a.shiftKey||this.clearSelection(),this.selectItem(f);else if(d.selectedAttackers.length>0)if(!d.obstructionGrid[c.gridY]||d.obstructionGrid[c.gridY][c.gridX]!=1)for(var g=d.selectedAttackers.length-1;g>=0;g--)d.selectedAttackers[g].orders={type:"move",to:{x:c.gridX,y:c.gridY}},o.play(d.selectedAttackers[g].type+"_move")},start:function(){c.loadAllCursors(),o.loadAll(),m.loadAll(),this.currentLevel=n.load("gdi1"),this.overlay=this.currentLevel.overlay,e.load(),c.listenEvents(),w.init(),d.viewportX=96,d.viewportY=264,e.visible=!1,this.turrets.push(j.add({name:"gun-turret",x:8,y:6,turretDirection:16,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:9,y:3,turretDirection:16,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:7,y:5,turretDirection:16,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:8,y:2,turretDirection:16,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:16,y:25,turretDirection:24,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:13,y:26,turretDirection:24,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:11,y:23,turretDirection:18,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:10,y:24,turretDirection:20,team:"nod"})),this.turrets.push(j.add({name:"gun-turret",x:9,y:25,turretDirection:24,team:"nod"})),this.buildings.push(f.add({name:"construction-yard",x:1,y:14,team:"nod"})),this.units.push(h.add({name:"light-tank",x:7,y:6,team:"nod",orders:{type:"patrol",from:{x:9,y:24},to:{x:12,y:8}}})),this.units.push(h.add({name:"light-tank",x:2,y:20,team:"nod",orders:{type:"patrol",from:{x:2,y:5},to:{x:6,y:20}}})),this.units.push(h.add({name:"light-tank",x:5,y:10,team:"nod",orders:{type:"patrol",from:{x:17,y:12},to:{x:22,y:2}}})),this.units.push(h.add({name:"light-tank",x:2,y:2,team:"nod",orders:{type:"patrol",from:{x:25,y:5},to:{x:17,y:25}}})),this.units.push(h.add({name:"mcv",x:23,y:23,moveDirection:0})),this.units.push(h.add({name:"light-tank",x:22,y:25,moveDirection:0})),this.units.push(h.add({name:"light-tank",x:24,y:25,moveDirection:0})),this.units.push(g.add({name:"minigunner",x:27,y:12,team:"nod"})),this.units.push(g.add({name:"minigunner",x:28,y:12,team:"nod"})),this.animationLoop=setInterval(this.animate,this.animationTimeout),this.statusLoop=setInterval(d.missionStatus,3e3)},end:function(){clearInterval(this.statusLoop),e.visible=!1,d.displayMessage("Thank you for trying this demo.This is still a work in progress. \nAny comments, feedback (including bugs), and advice is appreciated.\n\nIf you liked this demo, please share this page with all your friends. ")}},e={loaded:!0,preloadCount:0,loadedCount:0,preloadImage:p,tabsImage:null,width:160,visible:!0,cash:0,finishDeployingBuilding:function(){for(var a=0;a=0;a--)this.leftButtons[a].status="";e.deployBuilding=null},finishDeployingUnit:function(a){var b;for(var c=0;c=0;c--)this.rightButtons[c].dependency[0]==a.dependency[0]&&(this.rightButtons[c].status="");e.deployBuilding=null},click:function(a,b){var d=c.y-this.top,f=c.x;if(d<146||d>160)if(d<455||d>480){if(d>=165&&d<=455){var g=0;for(var h=0;h<6;h++)if(d>=165+h*48&&d<=165+h*48+48){g=h;break}var i,j,k;f<500||f>564?f>=570&&f<=634&&(i="right",j=this.rightButtonOffset+g,k=this.rightButtons):(i="left",j=this.leftButtonOffset+g,k=this.leftButtons);if(k&&k.length>j){var l=k[j];if(l.status==""&&!b)if(l.cost>e.cash)o.play("insufficient_funds");else{for(var h=k.length-1;h>=0;h--)k[h].dependency[0]==l.dependency[0]&&(k[h].status="disabled");l.status="building",l.counter=0,l.spent=l.cost,o.play("building")}else if(l.status=="building"&&!b)o.play("not_ready");else if(l.status=="building"&&b)l.status="hold",o.play("on_hold");else if(l.status=="hold"&&!b)l.status="building",o.play("building");else if(l.status=="hold"&&b){l.status="",o.play("cancelled");for(var h=k.length-1;h>=0;h--)k[h].status=""}else l.status=="ready"&&!b?l.type=="building"&&(e.deployMode=!0,this.repairMode=this.sellMode=this.mapMode=!1,e.deployBuilding=l.name):l.status=="disabled"&&o.play("building_in_progress")}}}else f<500||f>530?f<532||f>562?f<570||f>600?f>=602&&f<=632&&this.rightButtonOffset+60&&(this.rightButtonOffset--,o.play("button")):this.leftButtonOffset+60&&(this.leftButtonOffset--,o.play("button"));else f<485||f>530?f<538||f>582?f>=590&&f<=635&&(this.mapMode=!this.mapMode,this.repairMode=this.sellMode=this.deployMode=!1):(this.sellMode=!this.sellMode,this.repairMode=this.mapMode=this.deployMode=!1):(this.repairMode=!this.repairMode,this.sellMode=this.mapMode=this.deployMode=!1)},allButtons:[],leftButtons:[],rightButtons:[],checkDependency:function(){for(var a=0;a=0;f--){var g=!1,h=b.dependency[f];for(var i=d.buildings.length-1;i>=0;i--){var j=d.buildings[i];if(j.name==h&&j.status!="build"&&j.life!="ultra-damaged"&&j.team==d.currentLevel.team){g=!0;break}}if(!g){c=!1;break}}if(b.type=="building"){var k=!1,l;for(var f=this.leftButtons.length-1;f>=0;f--)if(this.leftButtons[f].name==b.name){k=!0,l=f;break}if(c&&!k)this.leftButtons.push(b),b.status="",b.counter=0,b.speed=this.buildSpeedMultiplier/b.cost,o.play("new_construction_options"),e.visible=!0;else if(k&&!c){if(this.leftButtons[l].status=="building"||this.leftButtons[l].status=="hold"||this.leftButtons[l].status=="ready")for(var f=this.leftButtons.length-1;f>=0;f--)this.leftButtons[f].status="";this.leftButtons.splice(l,1)}}else if(b.type=="infantry"||b.type=="vehicle"){var k=!1,l;for(var f=this.rightButtons.length-1;f>=0;f--)if(this.rightButtons[f].name==b.name){k=!0,l=f;break}if(c&&!k)this.rightButtons.push(b),b.status="",b.counter=0,b.speed=this.buildSpeedMultiplier/b.cost,o.play("new_construction_options");else if(k&&!c){if(this.rightButtons[l].status=="building"||this.rightButtons[l].status=="hold"||this.rightButtons[l].status=="ready")for(var f=this.rightButtons.length-1;f>=0;f--)this.rightButtons[f].dependency[0]==this.rightButtons[l].dependency[0]&&(this.rightButtons[f].status="");this.rightButtons.splice(l,1)}}}},load:function(){this.tabsImage=this.preloadImage("sidebar/tabs.png"),this.sidebarImage=this.preloadImage("sidebar/sidebar.png"),this.primaryBuildingImage=this.preloadImage("sidebar/primary.png"),this.readyImage=this.preloadImage("sidebar/ready.png"),this.holdImage=this.preloadImage("sidebar/hold.png"),this.placementWhiteImage=this.preloadImage("sidebar/placement-white.gif"),this.placementRedImage=this.preloadImage("sidebar/placement-red.gif"),this.powerIndicator=this.preloadImage("sidebar/power/power_indicator2.png"),this.messageBox=this.preloadImage("sidebar/message_box.jpg"),this.top=d.viewportTop-2,this.left=a.width-this.width;var b=[{name:"power-plant",type:"building",cost:300,dependency:["construction-yard"]},{name:"barracks",type:"building",cost:300,dependency:["construction-yard","power-plant"]},{name:"weapons-factory",type:"building",cost:300,dependency:["construction-yard","power-plant"]},{name:"minigunner",type:"infantry",cost:100,dependency:["barracks"]},{name:"light-tank",type:"vehicle",cost:600,dependency:["weapons-factory"]}];this.allButtons=[];for(var c=0;c99){this.cash-=e.spent,e.status="ready";if(a=="left")o.play("construction_complete");else if(e.type=="infantry"||e.type=="vehicle")o.play("unit_ready"),this.finishDeployingUnit(e)}}},powerOut:0,powerIn:0,lowPowerMode:!1,powerScale:4,checkPower:function(){var a=this.left,c=this.top+160,e=320,f=20;this.powerOut=0,this.powerIn=0;for(var g=d.buildings.length-1;g>=0;g--){var h=d.buildings[g];h.powerIn&&h.team==d.currentLevel.team&&(this.powerIn+=h.powerIn),h.powerOut&&h.team==d.currentLevel.team&&(this.powerOut+=h.powerOut)}var i="rgba(174,52,28,0.7)",j="rgba(250,100,0,0.6)",k="rgba(84,252,84,0.3)";this.powerOut/this.powerIn<1.1?this.powerOut/this.powerIn<1?this.powerOut6?6:this.leftButtons.length;for(var e=0;e6?6:this.rightButtons.length;for(var e=0;e0&&this.status!="build"&&this.status!="sell"&&z(c[0],d.gridSize*this.x+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type);var e=this.imageArray[imageCategory];this.animationIndex||(this.animationIndex=0);if(e.length>Math.floor(this.animationIndex/this.animationSpeed)){var f=e[Math.floor(this.animationIndex/this.animationSpeed 2 | )];this.status=="sell"&&(f=e[e.length-1-Math.floor(this.animationIndex/this.animationSpeed)]),this.currentImage=f,z(f,this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}this.animationIndex++,this.animationIndex/this.animationSpeed>=e.length&&(this.animationIndex=0,this.status=="build"||this.status=="construct"?this.status="":this.status=="sell"&&(this.status="destroy")),this.drawSelection()},load:function(a){var b=this.buildingDetails[a],c={};c.defaults={type:"building",draw:f.draw,underPoint:t,drawSelection:s,getLife:r,animationSpeed:2,status:"",health:b.hitPoints,gridHeight:b.gridShape.length,gridWidth:b.gridShape[0].length,pixelHeight:b.gridShape.length*d.gridSize,pixelWidth:b.gridShape[0].length*d.gridSize,bibImage:this.preloadImage("buildings/bib/bib-"+b.gridShape[0].length+".gif"),pixelOffsetX:0,pixelOffsetY:0,pixelTop:0,pixelLeft:0},c.imageArray=[];for(var e=b.imagesToLoad.length-1;e>=0;e--){var g=b.imagesToLoad[e].count,h=b.imagesToLoad[e].name;c.imageArray[h]=this.loadImageArray("buildings/"+a+"/"+a+"-"+h,g,".gif")}$.extend(c,b),this.types[a]=c},add:function(a){var b={};b.team=d.currentLevel.team;var c=a.name;return $.extend(b,this.types[c].defaults),$.extend(b,this.types[c]),$.extend(b,a),b}},g={types:[],infantryDetails:{minigunner:{name:"minigunner",label:"Minigunner",speed:8,cost:100,sight:1,hitPoints:50,collisionRadius:5,imagesToLoad:[{name:"stand",count:1,directionCount:8},{name:"walk",count:6,directionCount:8},{name:"fire",count:8,directionCount:8}]}},preloadImage:p,loadImageArray:q,preloadCount:0,loadedCount:0,collision:function(a){if(this==a)return!1;var b=Math.pow(this.x-a.x,2)+Math.pow(this.y-a.y,2),c=Math.pow((this.collisionRadius+a.collisionRadius)/d.gridSize,2);return b<=c},load:function(a){var b=this.infantryDetails[a],c={};c.defaults={type:"infantry",draw:this.draw,drawSelection:s,underPoint:t,collision:this.collision,move:this.move,getLife:r,status:"stand",animationSpeed:4,health:b.hitPoints,pixelOffsetX:-25,pixelOffsetY:-19.5,pixelWidth:16,pixelHeight:16,pixelTop:6,pixelLeft:16},c.imageArray=[];for(var d=b.imagesToLoad.length-1;d>=0;d--){var e=b.imagesToLoad[d].count,f=b.imagesToLoad[d].directionCount,g=b.imagesToLoad[d].name,h=[];for(var i=0;i=a.length&&(this.animationIndex=0);var b=a[Math.floor(this.animationIndex/this.animationSpeed)],c=this.x*d.gridSize+d.viewportAdjustX+this.pixelOffsetX,e=this.y*d.gridSize+d.viewportAdjustY+this.pixelOffsetY;z(b,c,e,this.team,this.type),this.drawSelection()},add:function(a){var b={},c=a.name;return b.moveDirection=0,b.animationIndex=0,b.team=d.currentLevel.team,$.extend(b,this.types[c].defaults),$.extend(b,this.types[c]),$.extend(b,a),b},move:function(){this.speedCounter||(this.speedCounter=0),this.speedCounter++;var a=this.moveDirection/8*2*Math.PI;this.status=="walk"&&(this.x=this.x-.005*this.speed*Math.sin(a),this.y=this.y-.005*this.speed*Math.cos(a)),this.speedCounter>=7&&(this.speedCounter=0,this.moveDirection=Math.floor(this.moveDirection+Math.round((Math.random()-.5)*10)*1/10),this.moveDirection>7?this.moveDirection=0:this.moveDirection<0&&(this.moveDirection=7),this.status=Math.random()>.7?"fire":Math.random()>.7?"stand":"walk")}},h={types:[],vehicleDetails:{mcv:{name:"mcv",label:"Mobile Construction Vehicle",turnSpeed:5,speed:12,cost:5e3,hitPoints:200,sight:2,moveImageCount:32,pixelWidth:48,pixelHeight:48,pixelOffsetX:-24,pixelOffsetY:-24,collisionRadius:12},"light-tank":{name:"light-tank",label:"Light Tank",turnSpeed:5,speed:18,cost:600,sight:3,hitPoints:300,primaryWeapon:9,reloadTime:2e3,moveImageCount:32,turretImageCount:32,pixelWidth:24,pixelHeight:24,pixelOffsetX:-12,pixelOffsetY:-12,collisionRadius:6},jeep:{name:"jeep",label:"Hum-Vee",turnSpeed:10,speed:30,cost:400,sight:2,hitPoints:150,primaryWeapon:16,moveImageCount:32,turretImageCount:32,pixelWidth:24,pixelHeight:24,pixelOffsetX:-12,pixelOffsetY:-12,collisionRadius:6}},preloadImage:p,loadImageArray:q,preloadCount:0,loadedCount:0,collision:function(a){if(this==a)return!1;var b=Math.pow(this.x-a.x,2)+Math.pow(this.y-a.y,2),c=Math.pow((this.collisionRadius+a.collisionRadius)/d.gridSize,2);return b<=c},load:function(a){var b=this.vehicleDetails[a],c={};c.defaults={type:"vehicle",draw:this.draw,drawSelection:s,underPoint:t,processOrders:this.processOrders,move:this.move,collision:this.collision,getLife:r,animationSpeed:4,health:b.hitPoints,pixelLeft:0,pixelTop:0,pixelOffsetX:0,pixelOffsetY:0,moveDirection:0,turretDirection:0},!b.moveImages&&b.moveImageCount&&(c.moveImages=this.loadImageArray("units/vehicles/"+b.name+"/"+b.name,b.moveImageCount,".gif")),!b.turretImages&&b.turretImageCount&&(c.turretImages=this.loadImageArray("units/vehicles/"+b.name+"/"+b.name+"-turret",b.turretImageCount,".gif")),$.extend(c,b),this.types[a]=c},draw:function(){var a=this.moveImages[Math.floor(this.moveDirection)],c=this.x*d.gridSize+this.pixelOffsetX+d.viewportAdjustX,e=this.y*d.gridSize+this.pixelOffsetY+d.viewportAdjustY;z(a,c,e,this.team,this.name=="mcv"?"mcv":this.type);if(this.turretImageCount){var f=this.turretImages[Math.floor(this.turretDirection)];b.drawImage,z(f,c,e,this.team,this.type)}this.drawSelection(),d.debugMode&&(b.beginPath(),b.arc(this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.collisionRadius,0,Math.PI*2),b.stroke())},processOrders:function(){this.orders||(this.orders={type:"guard"});if(this.orders.type=="move"){var a=[Math.floor(this.x),Math.floor(this.y)],b=[this.orders.to.x,this.orders.to.y],c=v(a,b);this.instructions=[];if(c.length>1){var e=A(c[1],c[0],32);this.moveDirection!=e&&this.instructions.push({type:"turn",toDirection:e}),this.turretDirection!=e&&this.instructions.push({type:"aim",toDirection:e}),this.instructions.push({type:"move",distance:1})}else this.orders={type:"guard"}}else if(this.orders.type=="patrol"){var g=u(this);if(g.length>0){var h=g[0];this.orders={type:"attack",target:h};return}var a=[Math.floor(this.x),Math.floor(this.y)],b=[this.orders.to.x,this.orders.to.y],c=v(a,b);this.instructions=[];if(c.length>1){var e=A(c[1],c[0],32);this.moveDirection!=e&&this.instructions.push({type:"turn",toDirection:e}),this.turretDirection!=e&&this.instructions.push({type:"aim",toDirection:e}),this.instructions.push({type:"move",distance:1})}else this.orders={type:"patrol",to:this.orders.from,from:this.orders.to}}else if(this.orders.type=="protect"||this.orders.type=="attack"){this.instructions=[];if(this.orders.target.status=="destroy"){this.orders={type:"guard"};return}var a=[Math.floor(this.x),Math.floor(this.y)],i=this.orders.target.x,j=this.orders.target.y;this.orders.target.type=="turret"&&(i+=this.orders.target.pixelWidth/(2*d.gridSize),j+=this.orders.target.pixelHeight/(2*d.gridSize)),this.orders.target.type=="building"&&(i+=this.orders.target.gridWidth/2,j+=this.orders.target.gridHeight);var b=[Math.floor(i),Math.floor(j)],c=v(a,b);if(Math.pow(i-this.x,2)+Math.pow(j-this.y,2)1){var e=A(c[1],c[0],32);this.moveDirection!=e&&this.instructions.push({type:"turn",toDirection:e});var k=A({x:i,y:j},this,32);this.turretDirection!=k&&this.instructions.push({type:"aim",toDirection:k}),this.instructions.push({type:"move",distance:1})}}else if(this.orders.type=="build")this.moveDirection!=15?this.instructions.push({type:"turn",toDirection:15}):(this.status="destroy",o.play("construction"),d.buildings.push(f.add({name:"construction-yard",x:Math.floor(this.x)-1,y:Math.floor(this.y)-1,status:"build"})));else if(this.orders.type=="guard"){var g=u(this);if(g.length>0){var h=g[0];this.orders={type:"attack",target:h}}}},move:function(){this.moving=!1,this.attacking=!1,this.instructions||(this.instructions=[]);if(this.instructions.length==0)return;for(var a=0;athis.moveDirection&&b.toDirection-this.moveDirection<16||b.toDirection16?(this.moveDirection=this.moveDirection+this.turnSpeed*.1,(this.moveDirection-b.toDirection)*(this.moveDirection+this.turnSpeed*.1-b.toDirection)<=0&&(this.moveDirection=b.toDirection)):(this.moveDirection=this.moveDirection-this.turnSpeed*.1,(this.moveDirection-b.toDirection)*(this.moveDirection-this.turnSpeed*.1-b.toDirection)<=0&&(this.moveDirection=b.toDirection)),this.moveDirection>31?this.moveDirection=0:this.moveDirection<0&&(this.moveDirection=31));if(b.type=="move"){if(b.distance<=0){b.type="done";return}this.moving=!0;var c=this.speed*d.speedAdjustmentFactor/d.gridSize;b.distance-=c;var e=this.moveDirection/32*2*Math.PI;this.x=this.x-c*Math.sin(e),this.y=this.y-c*Math.cos(e),this.colliding=!1;for(var f=d.units.length-1;f>=0;f--)if(d.units[f].collision(this)){this.colliding=!0;break}this.colliding&&(this.x=this.x+c*Math.sin(e),this.y=this.y+c*Math.cos(e),this.moving=!1)}b.type=="aim"&&(b.toDirection==this.turretDirection&&(b.type="done"),b.toDirection>this.turretDirection&&b.toDirection-this.turretDirection<16||b.toDirection16?(this.turretDirection=this.turretDirection+this.turnSpeed*.1,(this.turretDirection-b.toDirection)*(this.turretDirection+this.turnSpeed*.1-b.toDirection)<=0&&(this.turretDirection=b.toDirection)):(this.turretDirection=this.turretDirection-this.turnSpeed*.1,(this.turretDirection-b.toDirection)*(this.turretDirection-this.turnSpeed*.1-b.toDirection)<=0&&(this.turretDirection=b.toDirection)),this.turretDirection>31?this.turretDirection=0:this.turretDirection<0&&(this.turretDirection=31));if(b.type=="fire"&&!this.bulletFiring){o.play("tank_fire"),this.bulletFiring=!0;var e=this.turretDirection/32*2*Math.PI;d.fireBullet({x:this.x,y:this.y,angle:e,range:this.sight,source:this})}}},add:function(a){var b={},c=a.name;return b.team=d.currentLevel.team,$.extend(b,this.types[c].defaults),$.extend(b,this.types[c]),$.extend(b,a),b}},j={types:[],turretDetails:{"gun-turret":{name:"gun-turret",label:"Gun Turret",powerIn:20,primaryWeapon:12,cost:600,hitPoints:200,sight:5,turnSpeed:5,reloadTime:1500,pixelWidth:24,pixelHeight:24,buildImageCount:20,turretImageCount:32,pixelOffsetX:-12,pixelOffsetY:-12,pixelTop:12,pixelLeft:12}},preloadImage:p,loadImageArray:q,preloadCount:0,loadedCount:0,load:function(a){var b=this.turretDetails[a],c={};c.defaults={type:"turret",status:"",draw:this.draw,drawSelection:s,processOrders:this.processOrders,underPoint:t,move:this.move,getLife:r,animationSpeed:4,health:b.hitPoints,pixelLeft:0,pixelTop:0,pixelOffsetX:0,pixelOffsetY:0,turretDirection:0},c.imageArray=[],c.imageArray.build=this.loadImageArray("turrets/"+b.name+"/"+b.name+"-build",b.buildImageCount,".gif"),c.imageArray.healthy=this.loadImageArray("turrets/"+b.name+"/"+b.name+"-healthy",b.turretImageCount,".gif"),c.imageArray.damaged=this.loadImageArray("turrets/"+b.name+"/"+b.name+"-damaged",b.turretImageCount,".gif"),$.extend(c,b),this.types[a]=c},draw:function(){var a=this.getLife();this.status=="build"||this.status=="sell"?imageCategory="build":this.status==""&&(imageCategory=this.life,this.life=="ultra-damaged"&&(imageCategory="damaged"));var b=this.imageArray[imageCategory];this.animationIndex||(this.animationIndex=0);if(this.status==""){var c=b[Math.floor(this.turretDirection)];z(c,this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}else{if(b.length>Math.floor(this.animationIndex/this.animationSpeed)){var c=b[Math.floor(this.animationIndex/this.animationSpeed)];this.status=="sell"&&(c=b[b.length-1-Math.floor(this.animationIndex/this.animationSpeed)]),this.currentImage=c,z(c,this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}this.animationIndex++,this.animationIndex/this.animationSpeed>=b.length&&(this.animationIndex=0,this.status=="build"||this.status=="construct"?this.status="":this.status=="sell"&&this.status=="destroy")}this.drawSelection()},processOrders:function(){this.orders||(this.orders={type:"guard"});if(this.orders.type=="attack"){this.instructions=[];if(this.orders.target.status=="destroy"){this.orders={type:"guard"};return}var a=[Math.floor(this.x),Math.floor(this.y)],b=this.orders.target.x,c=this.orders.target.y;this.orders.target.type=="turret"&&(b+=this.orders.target.pixelWidth/(2*d.gridSize),c+=this.orders.target.pixelHeight/(2*d.gridSize)),this.orders.target.type=="building"&&(b+=this.orders.target.gridWidth/2,c+=this.orders.target.gridHeight);if(Math.pow(b-this.x,2)+Math.pow(c-this.y,2)0){var g=f[0];this.orders={type:"attack",target:g}}}},move:function(){this.instructions||(this.instructions=[]);if(this.instructions.length==0)return;for(var a=0;athis.turretDirection&&b.toDirection-this.turretDirection<16||b.toDirection16?(this.turretDirection=this.turretDirection+this.turnSpeed*.1,(this.turretDirection-b.toDirection)*(this.turretDirection+this.turnSpeed*.1-b.toDirection)<=0&&(this.turretDirection=b.toDirection)):(this.turretDirection=this.turretDirection-this.turnSpeed*.1,(this.turretDirection-b.toDirection)*(this.turretDirection-this.turnSpeed*.1-b.toDirection)<=0&&(this.turretDirection=b.toDirection)),this.turretDirection>31?this.turretDirection=0:this.turretDirection<0&&(this.turretDirection=31));if(b.type=="fire"&&!this.bulletFiring){o.play("tank_fire"),this.bulletFiring=!0;var c=this.turretDirection/32*2*Math.PI;d.fireBullet({x:this.x+.5,y:this.y+.5,angle:c,range:this.sight,source:this,damage:10})}}},add:function(a){var b={},c=a.name;return b.team=d.currentLevel.team,$.extend(b,this.types[c].defaults),$.extend(b,this.types[c]),$.extend(b,a),b}},l={types:[],load:function(a){var b={name:a}},add:function(a){$.extend(a,this.types[name])}},m={types:[],overlayDetails:{tiberium:{name:"tiberium",count:2,stageCount:12,gridOffsetX:0,gridOffsetY:0},tree:{name:"tree",count:1,stageCount:10,gridOffsetX:0,gridOffsetY:-1},trees:{name:"trees",count:1,stageCount:10,gridOffsetX:0,gridOffsetY:-1}},load:function(a){var b={name:a,draw:this.draw},c=this.overlayDetails[a],d=[];for(i=0;i=0;d--)h.load(this.levelDetails[a].items[item][d]);if(item=="buildings")for(var d=c.items[item].length-1;d>=0;d--)f.load(c.items[item][d]);if(item=="infantry")for(var d=c.items[item].length-1;d>=0;d--)g.load(c.items[item][d]);if(item=="turrets")for(var d=c.items[item].length-1;d>=0;d--)j.load(c.items[item][d])}var i=new Array,k=new Array;for(var l=0;l=0;d--){var o=c.terrain[d];for(var n=o.x1;n<=o.x2;n++)for(var l=o.y1;l<=o.y2;l++)i[l][n]=1,k[l][n]=o.type}var p=[];for(var d=c.overlay.length-1;d>=0;d--)p.push(m.add(c.overlay[d]));return b.mapGrid=k,b.obstructionGrid=i,b.overlay=p,e.cash=c.startingCash,b}},o={sound_list:[],loaded:!0,load:function(a,b){var c=new Audio("audio/"+b+"/"+a+".ogg");return c.load(),c},play:function(a,b){var c=this.sound_list[a];if(c.length==1)c[0].play();else{var d=Math.floor(c.length*Math.random());c[d].play()}},loadAll:function(){this.sound_list.building_in_progress=[this.load("building_in_progress","voice")],this.sound_list.insufficient_funds=[this.load("insufficient_funds","voice")],this.sound_list.building=[this.load("building","voice")],this.sound_list.on_hold=[this.load("on_hold","voice")],this.sound_list.cancelled=[this.load("cancelled","voice")],this.sound_list.cannot_deploy_here=[this.load("cannot_deploy_here","voice")],this.sound_list.new_construction_options=[this.load("new_construction_options","voice")],this.sound_list.construction_complete=[this.load("construction_complete","voice")],this.sound_list.not_ready=[this.load("not_ready","voice")],this.sound_list.reinforcements_have_arrived=[this.load("reinforcements_have_arrived","voice")],this.sound_list.low_power=[this.load("low_power","voice")],this.sound_list.unit_ready=[this.load("unit_ready","voice")],this.sound_list.mission_accomplished=[this.load("mission_accomplished","voice")],this.sound_list.mission_failure=[this.load("mission_failure","voice")],this.sound_list.construction=[this.load("construction","sounds")],this.sound_list.crumble=[this.load("crumble","sounds")],this.sound_list.sell=[this.load("sell","sounds")],this.sound_list.button=[this.load("button","sounds")],this.sound_list.clock=[this.load("clock","sounds")],this.sound_list.machine_gun=[this.load("machine_gun-0","sounds"),this.load("machine_gun-1","sounds")],this.sound_list.tank_fire=[this.load("tank-fire-0","sounds"),this.load("tank-fire-1","sounds"),this.load("tank-fire-2","sounds"),this.load("tank-fire-3","sounds")],this.sound_list.vehicle_select=[this.load("ready_and_waiting","talk"),this.load("vehicle_reporting","talk"),this.load("awaiting_orders","talk")],this.sound_list.vehicle_move=[this.load("affirmative","talk"),this.load("moving_out","talk"),this.load("acknowledged","talk"),this.load("over_and_out","talk")],this.sound_list.infantry_select=[this.load("reporting","talk"),this.load("unit_reporting","talk"),this.load("awaiting_orders","talk")],this.sound_list.infantry_move=[this.load("affirmative","talk"),this.load("yes_sir","talk"),this.load("acknowledged","talk"),this.load("right_away","talk")]}},w={fogCanvas:document.createElement("canvas"),canvasWidth:128,canvasHeight:128,init:function(){this.fogContext=this.fogCanvas.getContext("2d"),this.fogContext.fillStyle="rgba(0,0,0,1)",this.fogContext.fillRect(0,0,this.canvasWidth,this.canvasHeight)},draw:function(){var a=this.fogCanvas,c=this.fogContext,e=d.currentLevel.mapImage;c.save(),c.scale(this.canvasWidth/e.width,this.canvasHeight/e.height),c.fillStyle="rgba(200,200,200,1)";for(var f=d.units.length-1;f>=0;f--){var g=d.units[f];if(g.team==d.currentLevel.team||g.bulletFiring)c.beginPath(),c.globalCompositeOperation="destination-out",c.arc((Math.floor(g.x)+.5)*d.gridSize,(Math.floor(g.y)+.5)*d.gridSize,(g.sight+.5)*d.gridSize,0,2*Math.PI,!1),c.fill()}for(var f=d.buildings.length-1;f>=0;f--){var h=d.buildings[f];h.team==d.currentLevel.team&&(c.beginPath(),c.globalCompositeOperation="destination-out",c.arc(Math.floor(h.x)*d.gridSize+h.pixelWidth/2,Math.floor(h.y)*d.gridSize+h.pixelHeight/2,h.sight*d.gridSize,0,2*Math.PI,!1),c.fill())}for(var f=d.turrets.length-1;f>=0;f--){var i=d.turrets[f];if(i.team==d.currentLevel.team||i.bulletFiring)c.beginPath(),c.globalCompositeOperation="destination-out",c.arc(Math.floor(i.x)*d.gridSize+i.pixelWidth/2,Math.floor(i.y)*d.gridSize+i.pixelHeight/2,i.sight*d.gridSize,0,2*Math.PI,!1),c.fill()}c.restore(),b.drawImage(this.fogCanvas,0+d.viewportX*this.canvasWidth/e.width,0+d.viewportY*this.canvasHeight/e.height,d.viewportWidth*this.canvasWidth/e.width,d.viewportHeight*this.canvasHeight/e.height,d.viewportLeft,d.viewportTop,d.viewportWidth,d.viewportHeight)}},x=document.createElement("canvas"),y=x.getContext("2d"),C=function(){function a(a,b,c,d,e,f,g,h,i,j,k,l,m){return a&&(c&&!i[e][g]&&(l[m++]={x:g,y:e}),d&&!i[e][h]&&(l[m++]={x:h,y:e})),b&&(c&&!i[f][g]&&(l[m++]={x:g,y:f}),d&&!i[f][h]&&(l[m++]={x:h,y:f})),l}function b(a,b,c,d,e,f,g,h,i,j,k,l,m){return a=e>-1,b=f-1,c&&(a&&!i[e][g]&&(l[m++]={x:g,y:e}),b&&!i[f][g]&&(l[m++]={x:g,y:f})),d&&(a&&!i[e][h]&&(l[m++]={x:h,y:e}),b&&!i[f][h]&&(l[m++]={x:h,y:f})),l}function c(a,b,c,d,e,f,g,h,i,j,k,l,m){return l}function d(a,b,c,d,e,f){var g=c-1,h=c+1,i=b+1,j=b-1,k=g>-1&&!d[g][b],l=h-1&&!d[c][j],o=[],p=0;return k&&(o[p++]={x:b,y:g}),m&&(o[p++]={x:i,y:c}),l&&(o[p++]={x:b,y:h}),n&&(o[p++]={x:j,y:c}),a(k,l,m,n,g,h,i,j,d,e,f,o,p)}function e(a,b,c,d){return d(c(a.x-b.x),c(a.y-b.y))}function f(a,b,c,d){var e=a.x-b.x,f=a.y-b.y;return d(e*e+f*f)}function g(a,b,c,d){return c(a.x-b.x)+c(a.y-b.y)}function h(h,i,j,k){var l=h[0].length,m=h.length,n=l*m,o=Math.abs,p=Math.max,q={},r=[],s=[{x:i[0],y:i[1],f:0,g:0,v:i[0]+i[1]*l}],t=1,u,v,w,x,y,z,A,B,C;j={x:j[0],y:j[1],v:j[0]+j[1]*l};switch(k){case"Diagonal":w=a;case"DiagonalFree":v=e;break;case"Euclidean":w=a;case"EuclideanFree":p=Math.sqrt,v=f;break;default:v=g,w=c}w||(w=b);do{z=n,A=0;for(x=0;x.7){this.life="healthy"}else if(a>.4){this.life="damaged"}else{this.life="ultra-damaged"}}function s(){if(this.selected){b.strokeStyle="white";var a=5;var c=this.x*d.gridSize+d.viewportAdjustX+this.pixelOffsetX;var f=this.y*d.gridSize+d.viewportAdjustY+this.pixelOffsetY;var g=c+this.pixelLeft;var h=f+this.pixelTop;var i=g+this.pixelWidth;var j=h+this.pixelHeight;b.beginPath();b.moveTo(g,h+a);b.lineTo(g,h);b.lineTo(g+a,h);b.moveTo(i-a,h);b.lineTo(i,h);b.lineTo(i,h+a);b.moveTo(i,j-a);b.lineTo(i,j);b.lineTo(i-a,j);b.moveTo(g+a,j);b.lineTo(g,j);b.lineTo(g,j-a);b.stroke();this.getLife();b.beginPath();b.rect(g,h-a-2,this.pixelWidth*this.health/this.hitPoints,a);if(this.life=="healthy"){b.fillStyle="lightgreen"}else if(this.life=="damaged"){b.fillStyle="yellow"}else{b.fillStyle="red"}b.fill();b.beginPath();b.strokeStyle="black";b.rect(g,h-a-2,this.pixelWidth,a);b.stroke();if(this.primaryBuilding){b.drawImage(e.primaryBuildingImage,(g+i-e.primaryBuildingImage.width)/2,j-e.primaryBuildingImage.height)}}}function t(a,b){var c=this.x*d.gridSize+this.pixelOffsetX;var e=this.y*d.gridSize+this.pixelOffsetY;var f=c+this.pixelLeft;var g=e+this.pixelTop;var h=f+this.pixelWidth;var i=g+this.pixelHeight;if(a>=f&&a<=h&&b>=g&&b<=i){return true}return false}function u(a,b){if(!b)b=0;var c=[];if(!a){a=this}for(var e=d.units.length-1;e>=0;e--){var f=d.units[e];if(f.team!=a.team&&Math.pow(f.x-a.x,2)+Math.pow(f.y-a.y,2)<=Math.pow(a.sight+b,2)){c.push(f)}}for(var e=d.buildings.length-1;e>=0;e--){var f=d.buildings[e];if(f.team!=a.team&&Math.pow(f.x+f.gridWidth/2-a.x,2)+Math.pow(f.y+f.gridHeight/2-a.y,2)<=Math.pow(a.sight+b,2)){c.push(f)}}for(var e=d.turrets.length-1;e>=0;e--){var f=d.turrets[e];if(f.team!=a.team&&Math.pow(f.x+f.gridWidth/2-a.x,2)+Math.pow(f.y+f.gridHeight/2-a.y,2)<=Math.pow(a.sight+b,2)){c.push(f)}}return c}function v(a,c){var e=d.obstructionGrid;try{e[c[1]][c[0]]=0;e[a[1]][a[0]]=0}catch(f){return[]}var g=E(e,a,c,"Euclidean");if(g.length>1&&d.debugMode){for(k=0;k=0;q--){if(l==p[q].gdi[0]&&m==p[q].gdi[1]&&n==p[q].gdi[2]){i.data[k*4+0]=p[q].nod[0];i.data[k*4+1]=p[q].nod[1];i.data[k*4+2]=p[q].nod[2]}}}if(m==255&&n<100){i.data[k*4]=0;i.data[k*4+1]=0;i.data[k*4+2]=0}}y.globalCompositeOperation="source-over";y.putImageData(i,0,0);y.globalCompositeOperation="destination-atop";y.drawImage(a,0,0);b.drawImage(x,0,0,g,h,c,d,g,h)}function A(a,b,c){a=Math.floor(a);b=Math.floor(b);if(a>=c/2){a=a-c}if(b>=c/2){b=b-c}diff=b-a;if(diff<-c/2){diff+=c}if(diff>c/2){diff-=c}return diff}function B(a,b,c){a=Math.round(a)+b;if(a>c-1){a-=c}if(a<0){a+=c}return a}function C(a,b,c){if(!c){c=32}if(!b){b=this}var d=a.y-b.y;var e=a.x-b.x;if(b.type=="turret"){d=d-.5;e=e-.5}var f=c/2+Math.round(Math.atan2(e,d)*c/(2*Math.PI));if(f<0){f+=c}if(f>=c){f-=c}return f}function D(a,b){var c=true;var d=a[0];while(c&&a.length>2){var e=a[2];if(Math.abs(e.y-d.y)>Math.abs(e.x-d.x)){var f=(e.x-d.x)/(e.y-d.y);var g=.2*(e.y-d.y)/Math.abs(e.y-d.y);var h=g;var i={x:d.x+h*f,y:d.y+h};while(c&&Math.abs(i.y-e.y)>.3){if(b[Math.floor(i.y)][Math.floor(i.x)]>0){c=false}h+=g;i={x:d.x+h*f,y:d.y+h}}}else{var f=(e.y-d.y)/(e.x-d.x);var j=.2*(e.x-d.x)/Math.abs(e.x-d.x);var k=j;var i={x:d.x+k,y:d.y+f*k};while(c&&Math.abs(i.x-e.x)>=.3){if(b[Math.floor(i.y)][Math.floor(i.x)]>0){c=false}k+=j;i={x:d.x+k,y:d.y+f*k}}}if(c){a.splice(1,1)}}}var a=$("#canvas")[0];var b=a.getContext("2d");var c={x:0,y:0,gridX:0,gridY:0,gameX:0,gameY:0,insideCanvas:false,panDirection:"",panningThreshold:48,panningVelocity:24,handlePanning:function(){var a="";if(c.insideCanvas){if(c.y<=d.viewportTop+c.panningThreshold&&c.y>=d.viewportTop){d.viewportDeltaY=-c.panningVelocity;a+="_top"}else if(c.y>=d.viewportTop+d.viewportHeight-c.panningThreshold&&c.y<=d.viewportTop+d.viewportHeight){d.viewportDeltaY=c.panningVelocity;a+="_bottom"}else{d.viewportDeltaY=0;a+=""}if(c.x=d.viewportTop&&c.y<=d.viewportTop+d.viewportHeight){d.viewportDeltaX=-c.panningVelocity;a+="_left"}else if(c.x>d.screenWidth-c.panningThreshold&&c.y>=d.viewportTop&&c.y<=d.viewportTop+d.viewportHeight){d.viewportDeltaX=c.panningVelocity;a+="_right"}else{d.viewportDeltaX=0;a+=""}}if(d.viewportX+d.viewportDeltaX<0||d.viewportX+d.viewportDeltaX+d.screenWidth>d.currentLevel.mapImage.width){d.viewportDeltaX=0}if(d.viewportY+d.viewportDeltaY<0||d.viewportY+d.viewportDeltaY+d.viewportHeight>d.currentLevel.mapImage.height){d.viewportDeltaY=0}if(a!=""){if(d.viewportDeltaX==0&&d.viewportDeltaY==0){a="no_pan"+a}else{a="pan"+a}}c.panDirection=a;d.viewportX+=d.viewportDeltaX;d.viewportY+=d.viewportDeltaY;c.gameX=c.x+d.viewportX-d.viewportLeft;c.gameY=c.y+d.viewportY-d.viewportTop;d.viewportAdjustX=d.viewportLeft-d.viewportX;d.viewportAdjustY=d.viewportTop-d.viewportY},cursorLoop:0,drawCursor:function(){if(!this.insideCanvas){return}this.cursorLoop++;if(this.cursorLoop>=this.cursor.cursorSpeed*this.cursor.images.length){this.cursorLoop=0}if(this.dragSelect){var a=Math.min(this.gameX,this.dragX);var c=Math.min(this.gameY,this.dragY);var e=Math.abs(this.gameX-this.dragX);var f=Math.abs(this.gameY-this.dragY);b.strokeStyle="white";b.strokeRect(a+d.viewportAdjustX,c+d.viewportAdjustY,e,f)}var g=this.cursor.images[Math.floor(this.cursorLoop/this.cursor.cursorSpeed)];b.drawImage(g,this.x-this.cursor.x,this.y-this.cursor.y)},checkOverObject:function(){this.overObject=null;for(var a=d.units.length-1;a>=0;a--){if(d.units[a].underPoint&&d.units[a].underPoint(this.gameX,this.gameY)){this.overObject=d.units[a];break}}for(var a=d.buildings.length-1;a>=0;a--){if(d.buildings[a].underPoint(this.gameX,this.gameY)){this.overObject=d.buildings[a];break}}for(var a=d.turrets.length-1;a>=0;a--){if(d.turrets[a].underPoint(this.gameX,this.gameY)){this.overObject=d.turrets[a];break}}return this.overObject},draw:function(){this.cursor=this.cursors["default"];var a=this.checkOverObject();if(this.yd.viewportTop+d.viewportHeight){}else if(e.deployMode){var b=f.types[e.deployBuilding];var g=$.extend([],b.gridShape);g.push(g[g.length-1]);for(var h=0;he.left){}else if(this.dragSelect){this.cursor=this.cursors["default"]}else if(a){if(a.team!=d.currentLevel.team&&d.selectedAttackers.length>0){this.cursor=this.cursors["attack"]}else if(a.selected){if(a.name=="mcv"){this.cursor=this.cursors["build_command"]}}else{this.cursor=this.cursors["select"]}}else if(this.panDirection&&this.panDirection!=""){this.cursor=this.cursors[this.panDirection]}else if(d.selectedAttackers.length>0){if(d.obstructionGrid[c.gridY]&&d.obstructionGrid[c.gridY][c.gridX]==1){this.cursor=this.cursors["no_move"]}else{this.cursor=this.cursors["move"]}}if(this.insideCanvas){this.drawCursor()}},click:function(a,b){if(c.y<=d.viewportTop&&c.y>d.viewportTop-15){if(c.x>=0&&c.x<160){}else if(c.x>=320&&c.x<480){}else if(c.x>=480&&c.x<640){e.visible=!e.visible}}else if(c.y>=d.viewportTop&&c.y<=d.viewportTop+d.viewportHeight){if(e.visible&&c.x>e.left){e.click(a,b)}else{d.click(a,b)}}},listenEvents:function(){$("#canvas").mousemove(function(a){var b=$("#canvas").offset();c.x=a.pageX-b.left;c.y=a.pageY-b.top;c.gridX=Math.floor(c.gameX/d.gridSize);c.gridY=Math.floor(c.gameY/d.gridSize);if(c.buttonPressed){if(Math.abs(c.dragX-c.gameX)>5||Math.abs(c.dragY-c.gameY)>5){c.dragSelect=true}}else{c.dragSelect=false}});$("#canvas").click(function(a){c.click(a,false);c.dragSelect=false;return false});$("#canvas").mousedown(function(a){if(a.which==1){c.buttonPressed=true;c.dragX=c.gameX;c.dragY=c.gameY;a.preventDefault()}return false});$("#canvas").bind("contextmenu",function(a){c.click(a,true);return false});$("#canvas").mouseup(function(a){if(a.which==1){if(c.dragSelect){if(!a.shiftKey){d.clearSelection()}var b=Math.min(c.gameX,c.dragX);var e=Math.min(c.gameY,c.dragY);var f=Math.max(c.gameX,c.dragX);var g=Math.max(c.gameY,c.dragY);for(var h=d.units.length-1;h>=0;h--){var i=d.units[h];if(!i.selected&&i.team==d.currentLevel.team&&b<=i.x*d.gridSize&&f>=i.x*d.gridSize&&e<=i.y*d.gridSize&&g>=i.y*d.gridSize){d.selectItem(i)}}}c.buttonPressed=false}return false});$("#canvas").mouseleave(function(a){c.insideCanvas=false});$("#canvas").mouseenter(function(a){c.buttonPressed=false;c.insideCanvas=true})},loaded:false,preloadCount:0,loadedCount:0,preloadImage:p,loadImageArray:q,cursors:{},loadCursor:function(a,b,c,d,e){if(!b&&!c){b=0;c=0}if(!e){e=1}var f;if(d){f=this.loadImageArray("cursors/"+a,d,".gif")}else{f=[this.preloadImage("cursors/"+a+".gif")]}this.cursors[a]={x:b,y:c,name:a,images:f,cursorSpeed:e}},loadAllCursors:function(){c.loadCursor("default");c.loadCursor("no_default");c.loadCursor("move",15,12);c.loadCursor("no_move",15,12);c.loadCursor("pan_top",15,0);c.loadCursor("pan_top_right",30,0);c.loadCursor("pan_right",30,12);c.loadCursor("pan_bottom_right",30,24);c.loadCursor("pan_bottom",15,24);c.loadCursor("pan_bottom_left",0,24);c.loadCursor("pan_left",0,12);c.loadCursor("pan_top_left",0,0);c.loadCursor("no_pan_top",15,0);c.loadCursor("no_pan_top_right",30,0);c.loadCursor("no_pan_right",30,12);c.loadCursor("no_pan_bottom_right",30,24);c.loadCursor("no_pan_bottom",15,24);c.loadCursor("no_pan_bottom_left",0,24);c.loadCursor("no_pan_left",0,12);c.loadCursor("no_pan_top_left",0,0);c.loadCursor("no_repair",15,0);c.loadCursor("no_sell",15,12);c.loadCursor("build_command",15,12,8);c.loadCursor("sell",15,12,24);c.loadCursor("repair",15,0,24);c.loadCursor("attack",15,12,8);c.loadCursor("big_detonate",15,12,3);c.loadCursor("detonate",15,12,3);c.loadCursor("load_vehicle",15,12,3);c.loadCursor("select",15,12,6,2)}};var d={screenWidth:a.width,screenHeight:a.height,viewportTop:35,viewportLeft:0,viewportX:0,viewportY:0,viewportDeltaX:0,viewportDeltaY:0,gridSize:24,animationLoop:null,animationTimeout:50,debugMode:false,speedAdjustmentFactor:.2,setViewport:function(){b.beginPath();this.viewportWidth=e.visible?this.screenWidth-e.width:this.screenWidth;this.viewportHeight=480;b.rect(this.viewportLeft,this.viewportTop,this.viewportWidth-this.viewportLeft,this.viewportHeight);b.clip()},drawMap:function(){c.handlePanning();b.drawImage(this.currentLevel.mapImage,this.viewportX,this.viewportY,this.viewportWidth,this.viewportHeight,this.viewportLeft,this.viewportTop,this.viewportWidth,this.viewportHeight);d.obstructionGrid=[];for(var a=0;a=0;f--){var g=this.buildings[f];for(var a=0;a=0;f--){d.obstructionGrid[this.turrets[f].y][this.turrets[f].x]=1}for(var f=this.units.length-1;f>=0;f--){var h=this.units[f];if(!h.moving){if(h.orders&&h.orders.type!="guard"){break}}}for(var f=this.overlay.length-1;f>=0;f--){var i=this.overlay[f];if(i.name=="tree"){d.obstructionGrid[i.y][i.x]=1}else if(i.name=="trees"){d.obstructionGrid[i.y][i.x]=1;d.obstructionGrid[i.y][i.x+1]=1}}},highlightGrid:function(a,c,e,f,g){var h=d.gridSize;if(g&&$(g).is("img")){b.drawImage(g,a*h+d.viewportAdjustX,c*h+d.viewportAdjustY,e*h,f*h)}else{if(g){b.fillStyle=g}else{b.fillStyle="rgba(225,225,225,0.5)"}b.fillRect(a*h+d.viewportAdjustX,c*h+d.viewportAdjustY,e*h,f*h)}},drawGrid:function(){var a=d.gridSize;var c=d.currentLevel.mapImage.width;var e=d.currentLevel.mapImage.height;var f=d.viewportX;var g=d.viewportY;var h=c/a;var i=e/a;b.beginPath();b.strokeStyle="rgba(30,0,0,.6)";for(var j=0;j=0;j--){for(var k=d.obstructionGrid[j].length-1;k>=0;k--){if(d.obstructionGrid[j][k]==1){d.highlightGrid(k,j,1,1,"rgba(100,0,0,0.5)")}}}},units:[],buildings:[],turrets:[],overlay:[],bullets:[],fireBullet:function(a){a.x=a.x-.5*Math.sin(a.angle);a.y=a.y-.5*Math.cos(a.angle);a.range=a.range-.5;this.bullets.push(a);setTimeout(function(){a.source.bulletFiring=false},a.source.reloadTime)},drawBullets:function(){for(var a=this.bullets.length-1;a>=0;a--){var c=this.bullets[a];c.speed=5;c.range=c.range-.1*c.speed;c.x=c.x-.1*c.speed*Math.sin(c.angle);c.y=c.y-.1*c.speed*Math.cos(c.angle);var e=c.x*d.gridSize;var f=c.y*d.gridSize;if(!c.dead){var g;for(var h=d.units.length-1;h>=0;h--){if(d.units[h].underPoint&&d.units[h].underPoint(e,f)&&d.units[h].team!=c.source.team){g=d.units[h];break}}for(var h=d.buildings.length-1;h>=0;h--){if(d.buildings[h].underPoint(e,f)){g=d.buildings[h];break}}for(var h=d.turrets.length-1;h>=0;h--){if(d.turrets[h].underPoint(e,f)){g=d.turrets[h];break}}if(g){c.dead=true;g.health=g.health-Math.floor((c.damage?c.damage:10)+10*Math.random());if(g.health<0){g.status="destroy"}}b.fillStyle="red";b.fillRect(e+d.viewportAdjustX,f+d.viewportAdjustY,2,2)}if(c.range<=0){this.bullets.splice(a,1)}}},drawObjects:function(){var a=[];for(var b=this.buildings.length-1;b>=0;b--){if(this.buildings[b].status=="destroy"){this.buildings.splice(b,1)}}for(var b=this.units.length-1;b>=0;b--){if(this.units[b].status=="destroy"){this.units.splice(b,1)}}for(var b=this.turrets.length-1;b>=0;b--){if(this.turrets[b].status=="destroy"){this.turrets.splice(b,1)}}$.merge(a,this.units);$.merge(a,this.buildings);$.merge(a,this.overlay);$.merge(a,this.turrets);a.sort(function(a,b){return b.y-a.y});for(var b=a.length-1;b>=0;b--){a[b].draw()}},moveObjects:function(){for(var a=this.units.length-1;a>=0;a--){if(this.units[a].processOrders){this.units[a].processOrders()}this.units[a].move()}for(var a=this.turrets.length-1;a>=0;a--){if(this.turrets[a].processOrders){this.turrets[a].processOrders()}this.turrets[a].move()}},showDebugger:function(){var a=function(a){var b="
    ";for(key in a){if(a.hasOwnProperty(key)){var c=a[key];if(typeof c!="function"||c===null){if(typeof c=="object"){b+="
  • "+key+" : ";if(c instanceof HTMLImageElement){b+=c.src.replace(/^.+images\//,"")}else if(c instanceof Array){b+="Array["+c.length+"]"}else{b+="Object"}}else{b+="
  • "+key+" : "+c+"
  • "}}}}b+="
";return b};var b="";b+="Level";b+=a(n);b+="Mouse";b+=a(c);if(d.selectedItems.length==1){b+="Selected Item";b+=a(d.selectedItems[0])}b+="Game";b+=a(d);b+="Sidebar";b+=a(e);b+="Vehicles";b+=a(h);b+="Buildings";b+=a(f);b+="Infantry";b+=a(g);$("#debugger").html(b)},animate:function(){if(d.debugMode){d.showDebugger()}if(!n.loaded||!e.loaded||!h.loaded||!g.loaded||!f.loaded){b.clearRect(0,0,a.width,a.height);return}b.save();e.draw();d.setViewport();d.drawMap();if(d.debugMode){d.drawGrid()}d.moveObjects();d.drawObjects();d.drawBullets();if(!d.debugMode){w.draw()}b.restore();d.drawMessage();c.draw()},messageVisible:true,messageHeadingVisible:true,messageText:"\nCreate a base by deploying your MCV. Build a power plant and weapons factory.\n\nUse your tanks to get rid of all enemy presence in the area.",drawMessage:function(){if(!this.messageVisible){return}b.drawImage(e.messageBox,d.viewportLeft+22,d.viewportTop+150);if(!this.messageHeadingVisible){b.fillStyle="black";b.fillRect(265,198,120,20)}b.fillStyle="green";b.font='16px "Command and Conquer"';var a=this.messageText.split("\n");for(var c=0;c=0;h--){item=d.units[h];if(item.team==d.currentLevel.team){a.push(item)}else{f.push(item)}}for(var h=d.buildings.length-1;h>=0;h--){item=d.buildings[h];if(item.team==d.currentLevel.team){b.push(item)}else{e.push(item)}}for(var h=d.turrets.length-1;h>=0;h--){item=d.turrets[h];if(item.team==d.currentLevel.team){c.push(item)}else{g.push(item)}}if(a.length==0&&b.length==0){o.play("mission_failure");d.end()}if(g.length==0&&e.length==0&&f.length==0){o.play("mission_accomplished");d.end()}},selectedItems:[],selectedAttackers:[],clearSelection:function(){for(var a=this.selectedItems.length-1;a>=0;a--){this.selectedItems[a].selected=0;this.selectedItems.splice(a,1)}this.selectedAttackers=[]},selectItem:function(a){a.selected=true;this.selectedItems.push(a);if(a.type!="building"&&a.team==d.currentLevel.team){this.selectedAttackers.push(a);o.play(a.type+"_select")}},click:function(a,b){if(d.messageVisible){if(c.x>=290&&c.x<=350&&c.y>=310&&c.y<=325){d.messageVisible=false;return}}var f=c.checkOverObject();if(b){this.clearSelection();e.repairMode=false;e.deployMode=false;e.sellMode=false;return}if(e.repairMode){if(f&&f.team==d.currentLevel.team&&(f.type=="building"||f.type=="turret")&&f.life0){for(var g=d.selectedAttackers.length-1;g>=0;g--){if(d.selectedAttackers[g].primaryWeapon){d.selectedAttackers[g].orders={type:"attack",target:f};o.play(d.selectedAttackers[g].type+"_move")}}}else{if(!a.shiftKey){this.clearSelection()}this.selectItem(f)}}else{if(d.selectedAttackers.length>0){if(d.obstructionGrid[c.gridY]&&d.obstructionGrid[c.gridY][c.gridX]==1){}else{for(var g=d.selectedAttackers.length-1;g>=0;g--){d.selectedAttackers[g].orders={type:"move",to:{x:c.gridX,y:c.gridY}};o.play(d.selectedAttackers[g].type+"_move")}}}}}},start:function(){c.loadAllCursors();o.loadAll();m.loadAll();this.currentLevel=n.load("gdi1");this.overlay=this.currentLevel.overlay;e.load();c.listenEvents();w.init();d.viewportX=96;d.viewportY=264;e.visible=false;this.turrets.push(j.add({name:"gun-turret",x:8,y:6,turretDirection:16,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:9,y:3,turretDirection:16,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:7,y:5,turretDirection:16,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:8,y:2,turretDirection:16,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:16,y:25,turretDirection:24,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:13,y:26,turretDirection:24,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:11,y:23,turretDirection:18,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:10,y:24,turretDirection:20,team:"nod"}));this.turrets.push(j.add({name:"gun-turret",x:9,y:25,turretDirection:24,team:"nod"}));this.buildings.push(f.add({name:"construction-yard",x:1,y:14,team:"nod"}));this.units.push(h.add({name:"light-tank",x:7,y:6,team:"nod",orders:{type:"patrol",from:{x:9,y:24},to:{x:12,y:8}}}));this.units.push(h.add({name:"light-tank",x:2,y:20,team:"nod",orders:{type:"patrol",from:{x:2,y:5},to:{x:6,y:20}}}));this.units.push(h.add({name:"light-tank",x:5,y:10,team:"nod",orders:{type:"patrol",from:{x:17,y:12},to:{x:22,y:2}}}));this.units.push(h.add({name:"light-tank",x:2,y:2,team:"nod",orders:{type:"patrol",from:{x:25,y:5},to:{x:17,y:25}}}));this.units.push(h.add({name:"light-tank",x:4,y:23,team:"nod",orders:{type:"patrol",from:{x:4,y:23},to:{x:22,y:25}}}));this.units.push(h.add({name:"light-tank",x:2,y:10,team:"nod",orders:{type:"protect",target:d.units[0]}}));this.units.push(h.add({name:"mcv",x:23,y:23,moveDirection:0}));this.units.push(h.add({name:"light-tank",x:22,y:25,moveDirection:0}));this.units.push(h.add({name:"light-tank",x:24,y:25,moveDirection:0}));this.animationLoop=setInterval(this.animate,this.animationTimeout);this.statusLoop=setInterval(d.missionStatus,3e3)},end:function(){clearInterval(this.statusLoop);e.visible=false;d.displayMessage("Thank you for trying this demo."+"This is still a work in progress. \nAny comments, feedback (including bugs), and advice is appreciated.\n\nIf you liked this demo, please share this page with all your friends. ")}};var e={loaded:true,preloadCount:0,loadedCount:0,preloadImage:p,tabsImage:null,width:160,visible:true,cash:0,finishDeployingBuilding:function(){for(var a=0;a=0;a--){this.leftButtons[a].status=""}e.deployBuilding=null},finishDeployingUnit:function(a){var b;for(var c=0;c=0;c--){if(this.rightButtons[c].dependency[0]==a.dependency[0]){this.rightButtons[c].status=""}}e.deployBuilding=null},click:function(a,b){var d=c.y-this.top;var f=c.x;if(d>=146&&d<=160){if(f>=485&&f<=530){this.repairMode=!this.repairMode;this.sellMode=this.mapMode=this.deployMode=false}else if(f>=538&&f<=582){this.sellMode=!this.sellMode;this.repairMode=this.mapMode=this.deployMode=false}else if(f>=590&&f<=635){this.mapMode=!this.mapMode;this.repairMode=this.sellMode=this.deployMode=false}}else if(d>=455&&d<=480){if(f>=500&&f<=530){if(this.leftButtonOffset>0){this.leftButtonOffset--;o.play("button")}}else if(f>=532&&f<=562){if(this.leftButtonOffset+6=570&&f<=600){if(this.rightButtonOffset>0){this.rightButtonOffset--;o.play("button")}}else if(f>=602&&f<=632){if(this.rightButtonOffset+6=165&&d<=455){var g=0;for(var h=0;h<6;h++){if(d>=165+h*48&&d<=165+h*48+48){g=h;break}}var i,j,k;if(f>=500&&f<=564){i="left";j=this.leftButtonOffset+g;k=this.leftButtons}else if(f>=570&&f<=634){i="right";j=this.rightButtonOffset+g;k=this.rightButtons}if(k&&k.length>j){var l=k[j];if(l.status==""&&!b){if(l.cost<=e.cash){for(var h=k.length-1;h>=0;h--){if(k[h].dependency[0]==l.dependency[0]){k[h].status="disabled"}}l.status="building";l.counter=0;l.spent=l.cost;o.play("building")}else{o.play("insufficient_funds")}}else if(l.status=="building"&&!b){o.play("not_ready")}else if(l.status=="building"&&b){l.status="hold";o.play("on_hold")}else if(l.status=="hold"&&!b){l.status="building";o.play("building")}else if(l.status=="hold"&&b){l.status="";o.play("cancelled");for(var h=k.length-1;h>=0;h--){k[h].status=""}}else if(l.status=="ready"&&!b){if(l.type=="building"){e.deployMode=true;this.repairMode=this.sellMode=this.mapMode=false;e.deployBuilding=l.name}}else if(l.status=="disabled"){o.play("building_in_progress")}}}},allButtons:[],leftButtons:[],rightButtons:[],checkDependency:function(){for(var a=0;a=0;f--){var g=false;var h=b.dependency[f];for(var i=d.buildings.length-1;i>=0;i--){var j=d.buildings[i];if(j.name==h&&j.status!="build"&&j.life!="ultra-damaged"&&j.team==d.currentLevel.team){g=true;break}}if(!g){c=false;break}}if(b.type=="building"){var k=false;var l;for(var f=this.leftButtons.length-1;f>=0;f--){if(this.leftButtons[f].name==b.name){k=true;l=f;break}else{}}if(c&&!k){this.leftButtons.push(b);b.status="";b.counter=0;b.speed=this.buildSpeedMultiplier/b.cost;o.play("new_construction_options");e.visible=true}else if(k&&!c){if(this.leftButtons[l].status=="building"||this.leftButtons[l].status=="hold"||this.leftButtons[l].status=="ready"){for(var f=this.leftButtons.length-1;f>=0;f--){this.leftButtons[f].status=""}}this.leftButtons.splice(l,1)}}else if(b.type=="infantry"||b.type=="vehicle"){var k=false;var l;for(var f=this.rightButtons.length-1;f>=0;f--){if(this.rightButtons[f].name==b.name){k=true;l=f;break}}if(c&&!k){this.rightButtons.push(b);b.status="";b.counter=0;b.speed=this.buildSpeedMultiplier/b.cost;o.play("new_construction_options")}else if(k&&!c){if(this.rightButtons[l].status=="building"||this.rightButtons[l].status=="hold"||this.rightButtons[l].status=="ready"){for(var f=this.rightButtons.length-1;f>=0;f--){if(this.rightButtons[f].dependency[0]==this.rightButtons[l].dependency[0])this.rightButtons[f].status=""}}this.rightButtons.splice(l,1)}}}},load:function(){this.tabsImage=this.preloadImage("sidebar/tabs.png");this.sidebarImage=this.preloadImage("sidebar/sidebar.png");this.primaryBuildingImage=this.preloadImage("sidebar/primary.png");this.readyImage=this.preloadImage("sidebar/ready.png");this.holdImage=this.preloadImage("sidebar/hold.png");this.placementWhiteImage=this.preloadImage("sidebar/placement-white.gif");this.placementRedImage=this.preloadImage("sidebar/placement-red.gif");this.powerIndicator=this.preloadImage("sidebar/power/power_indicator2.png");this.messageBox=this.preloadImage("sidebar/message_box.jpg");this.top=d.viewportTop-2;this.left=a.width-this.width;var b=[{name:"power-plant",type:"building",cost:300,dependency:["construction-yard"]},{name:"barracks",type:"building",cost:300,dependency:["construction-yard","power-plant"]},{name:"weapons-factory",type:"building",cost:300,dependency:["construction-yard","power-plant"]},{name:"minigunner",type:"infantry",cost:100,dependency:["barracks"]},{name:"light-tank",type:"vehicle",cost:600,dependency:["weapons-factory"]}];this.allButtons=[];for(var c=0;c99){this.cash-=e.spent;e.status="ready";if(a=="left"){o.play("construction_complete")}else{if(e.type=="infantry"||e.type=="vehicle"){o.play("unit_ready");this.finishDeployingUnit(e)}}}}},powerOut:0,powerIn:0,lowPowerMode:false,powerScale:4,checkPower:function(){var a=this.left;var c=this.top+160;var e=320;var f=20;this.powerOut=0;this.powerIn=0;for(var g=d.buildings.length-1;g>=0;g--){var h=d.buildings[g];if(h.powerIn&&h.team==d.currentLevel.team){this.powerIn+=h.powerIn}if(h.powerOut&&h.team==d.currentLevel.team){this.powerOut+=h.powerOut}}var i="rgba(174,52,28,0.7)";var j="rgba(250,100,0,0.6)";var k="rgba(84,252,84,0.3)";if(this.powerOut/this.powerIn>=1.1){b.fillStyle=k;this.lowPowerMode=false}else if(this.powerOut/this.powerIn>=1){b.fillStyle=j;this.lowPowerMode=false}else if(this.powerOut6?6:this.leftButtons.length;for(var e=0;e6?6:this.rightButtons.length;for(var e=0;e0&&this.status!="build"&&this.status!="sell"){z(c[0],d.gridSize*this.x+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}var e=this.imageArray[imageCategory];if(!this.animationIndex){this.animationIndex=0}if(e.length>Math.floor(this.animationIndex/this.animationSpeed)){var f=e[Math.floor(this.animationIndex/this.animationSpeed)];if(this.status=="sell"){f=e[e.length-1-Math.floor(this.animationIndex/this.animationSpeed)]}this.currentImage=f;z(f,this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}this.animationIndex++;if(this.animationIndex/this.animationSpeed>=e.length){this.animationIndex=0;if(this.status=="build"||this.status=="construct"){this.status=""}else if(this.status=="sell"){this.status="destroy"}}this.drawSelection()},load:function(a){var b=this.buildingDetails[a];var c={};c.defaults={type:"building",draw:f.draw,underPoint:t,drawSelection:s,getLife:r,animationSpeed:2,status:"",health:b.hitPoints,gridHeight:b.gridShape.length,gridWidth:b.gridShape[0].length,pixelHeight:b.gridShape.length*d.gridSize,pixelWidth:b.gridShape[0].length*d.gridSize,bibImage:this.preloadImage("buildings/bib/bib-"+b.gridShape[0].length+".gif"),pixelOffsetX:0,pixelOffsetY:0,pixelTop:0,pixelLeft:0};c.imageArray=[];for(var e=b.imagesToLoad.length-1;e>=0;e--){var g=b.imagesToLoad[e].count;var h=b.imagesToLoad[e].name;c.imageArray[h]=this.loadImageArray("buildings/"+a+"/"+a+"-"+h,g,".gif")}$.extend(c,b);this.types[a]=c},add:function(a){var b={};b.team=d.currentLevel.team;var c=a.name;$.extend(b,this.types[c].defaults);$.extend(b,this.types[c]);$.extend(b,a);return b}};var g={types:[],infantryDetails:{minigunner:{name:"minigunner",label:"Minigunner",speed:8,cost:100,sight:1,hitPoints:50,collisionRadius:5,imagesToLoad:[{name:"stand",count:1,directionCount:8},{name:"walk",count:6,directionCount:8},{name:"fire",count:8,directionCount:8}]}},preloadImage:p,loadImageArray:q,preloadCount:0,loadedCount:0,collision:function(a){if(this==a){return false}var b=Math.pow(this.x-a.x,2)+Math.pow(this.y-a.y,2);var c=Math.pow((this.collisionRadius+a.collisionRadius)/d.gridSize,2);return b<=c},load:function(a){var b=this.infantryDetails[a];var c={};c.defaults={type:"infantry",draw:this.draw,drawSelection:s,underPoint:t,collision:this.collision,move:this.move,getLife:r,status:"stand",animationSpeed:4,health:b.hitPoints,pixelOffsetX:-50/2,pixelOffsetY:-39/2,pixelWidth:16,pixelHeight:16,pixelTop:6,pixelLeft:16};c.imageArray=[];for(var d=b.imagesToLoad.length-1;d>=0;d--){var e=b.imagesToLoad[d].count;var f=b.imagesToLoad[d].directionCount;var g=b.imagesToLoad[d].name;var h=[];for(var i=0;i=a.length){this.animationIndex=0}var b=a[Math.floor(this.animationIndex/this.animationSpeed)];var c=this.x*d.gridSize+d.viewportAdjustX+this.pixelOffsetX;var e=this.y*d.gridSize+d.viewportAdjustY+this.pixelOffsetY;z(b,c,e,this.team,this.type);this.drawSelection()},add:function(a){var b={};var c=a.name;b.moveDirection=0;b.animationIndex=0;b.team=d.currentLevel.team;$.extend(b,this.types[c].defaults);$.extend(b,this.types[c]);$.extend(b,a);return b},move:function(){if(!this.speedCounter){this.speedCounter=0}this.speedCounter++;var a=this.moveDirection/8*2*Math.PI;if(this.status=="walk"){this.x=this.x-.005*this.speed*Math.sin(a);this.y=this.y-.005*this.speed*Math.cos(a)}if(this.speedCounter>=7){this.speedCounter=0;this.moveDirection=Math.floor(this.moveDirection+Math.round((Math.random()-.5)*10)*1/10);if(this.moveDirection>7){this.moveDirection=0}else if(this.moveDirection<0){this.moveDirection=7}this.status=Math.random()>.7?"fire":Math.random()>.7?"stand":"walk"}}};var h={types:[],vehicleDetails:{mcv:{name:"mcv",label:"Mobile Construction Vehicle",turnSpeed:5,speed:12,cost:5e3,hitPoints:200,sight:2,moveImageCount:32,pixelWidth:48,pixelHeight:48,pixelOffsetX:-24,pixelOffsetY:-24,collisionRadius:14,softCollisionRadius:18},"light-tank":{name:"light-tank",label:"Light Tank",turnSpeed:5,speed:18,cost:600,sight:3,hitPoints:300,primaryWeapon:9,reloadTime:2e3,moveImageCount:32,turretImageCount:32,pixelWidth:24,pixelHeight:24,pixelOffsetX:-12,pixelOffsetY:-12,collisionRadius:8,softCollisionRadius:11},jeep:{name:"jeep",label:"Hum-Vee",turnSpeed:10,speed:30,cost:400,sight:2,hitPoints:150,primaryWeapon:16,moveImageCount:32,turretImageCount:32,pixelWidth:24,pixelHeight:24,pixelOffsetX:-12,pixelOffsetY:-12,collisionRadius:6}},preloadImage:p,loadImageArray:q,preloadCount:0,loadedCount:0,collision:function(a){if(this==a){return false}var b=Math.pow(this.x-a.x,2)+Math.pow(this.y-a.y,2);var c=Math.pow((this.collisionRadius+a.collisionRadius)/d.gridSize,2);var e=Math.pow((this.softCollisionRadius+a.collisionRadius)/d.gridSize,2);var f=Math.pow((this.softCollisionRadius+a.softCollisionRadius)/d.gridSize,2);if(b<=c){return{type:"hard",distance:Math.pow(b,.5)}}else if(b1){var f=C(this.path[1],this.path[0],32);var g=this.movementSpeed*d.speedAdjustmentFactor/d.gridSize;var h=this.moveDirection/32*2*Math.PI;this.x=this.x-g*Math.sin(h);this.y=this.y-g*Math.cos(h);this.colliding=false;var i;for(var j=d.units.length-1;j>=0;j--){if(i=this.collision(d.units[j])){if(i.distance0){var l={x:k+.5,y:j+.5,collisionRadius:d.gridSize*.5,softCollisionRadius:d.gridSize*.7};if(i=this.collision(l)){if(i.distance0){f=B(this.moveDirection,-1*o/Math.abs(o),32)}else{f=B(this.moveDirection,-1,32)}this.moveDirection=f}else if(Math.abs(n)<=2){f=B(this.moveDirection,-1*n/Math.abs(n),32);this.moveDirection=f}else if(Math.abs(n)<4){f=B(this.moveDirection,-1*n/Math.abs(n),32);this.moveDirection=f}else if(Math.abs(n)<9){f=B(this.moveDirection,-n/Math.abs(n),32);this.moveDirection=f}else{this.movementSpeed=this.speed}break;case"soft-hard":if(Math.abs(n)==0){this.movementSpeed=0;if(Math.abs(o)>0){f=B(this.moveDirection,-1*o/Math.abs(o),32)}else{f=B(this.moveDirection,-1,32)}this.moveDirection=f}else if(Math.abs(n)<=2){this.movementSpeed=0;f=B(this.moveDirection,-1*n/Math.abs(n),32);this.moveDirection=f}else if(Math.abs(n)<4){this.movementSpeed=0;f=B(this.moveDirection,-1*n/Math.abs(n),32);this.moveDirection=f}else if(Math.abs(n)<9){this.movementSpeed=0;f=B(this.moveDirection,-1*n/Math.abs(n),32);this.moveDirection=f}else{this.movementSpeed=this.speed}break;case"soft":if(Math.abs(n)==0){this.movementSpeed=this.speed*(this.collisionDistance-this.collisionRadius)/(this.softCollisionRadius-this.collisionRadius);if(this.movementSpeed<0){this.movementSpeed=0}if(Math.abs(o)>0){f=B(this.moveDirection,-1*o/Math.abs(o),32)}else{f=B(this.moveDirection,-1,32)}}else if(Math.abs(n)<=2){this.movementSpeed=this.speed*(this.collisionDistance-this.collisionRadius)/(this.softCollisionRadius-this.collisionRadius);if(this.movementSpeed<0){this.movementSpeed=0}f=B(this.moveDirection,-n*1,32)}else if(Math.abs(n)<4){this.movementSpeed=this.speed*(this.collisionDistance-this.collisionRadius)/(this.softCollisionRadius-this.collisionRadius);if(this.movementSpeed<0){this.movementSpeed=0}f=B(this.moveDirection,-n*1,32)}else if(Math.abs(n)<9){this.movementSpeed=this.speed;f=B(this.moveDirection,-n*1,32)}else{this.movementSpeed=this.speed}break}}else{this.movementSpeed=this.speed}if(this.movementSpeed>this.speed){this.movementSpeed=this.speed}else if(this.movementSpeed<-this.speed){this.movementSpeed=-this.speed}if(this.moveDirection!=f){this.instructions.push({type:"turn",toDirection:f})}var p=Math.abs(A(this.moveDirection,f,32));if(p<8||this.colliding){this.instructions.push({type:"move",distance:1})}var q;if(b){q=C(a,this,32)}else{q=C(this.path[1],this.path[0],32)}if(this.turretDirection!=q){this.instructions.push({type:"aim",toDirection:q})}}},processOrders:function(){this.colliding=false;this.collisionType="";this.collisionDistance=this.softCollisionRadius+1;this.collisionWith=null;this.movementSpeed=0;this.instructions=[];if(!this.orders){this.orders={type:"guard"}}if(this.orders.type=="make-way"){if(Math.abs(collDirection)>16){this.instructions.push({type:"move",distance:.25})}else{this.instructions.push({type:"move",distance:-.25})}this.movementSpeed=this.speed;this.orders={type:"guard"}}else if(this.orders.type=="move"){this.moveTo(this.orders.to);if(this.path.length<=1||this.colliding&&this.collisionType=="soft"&&this.path.length<=2||this.colliding&&this.collisionType=="soft-hard"&&this.path.length<=2||this.colliding&&this.collisionType=="hard"&&this.path.length<=2){this.orders={type:"guard"}}}else if(this.orders.type=="patrol"){var a=u(this,2);if(a.length>0){var b=a[0];this.orders={type:"attack",target:b};return}this.moveTo(this.orders.to);if(this.path.length<=1){this.orders={type:"patrol",to:this.orders.from,from:this.orders.to}}}else if(this.orders.type=="protect"||this.orders.type=="attack"){if(this.orders.target.status=="destroy"){this.orders={type:"guard"};return}var c=this.orders.target.x;var e=this.orders.target.y;if(this.orders.target.type=="turret"){c+=this.orders.target.pixelWidth/(2*d.gridSize);e+=this.orders.target.pixelHeight/(2*d.gridSize)}if(this.orders.target.type=="building"){c+=this.orders.target.gridWidth/2;e+=this.orders.target.gridHeight}if(Math.pow(c-this.x,2)+Math.pow(e-this.y,2)<=Math.pow(this.sight,2)){if(this.orders.type=="attack"){var g=C({x:c,y:e},this,32);if(this.turretDirection==g){this.instructions.push({type:"fire"})}else{this.instructions.push({type:"aim",toDirection:g})}}}else{this.moveTo({x:Math.floor(c),y:Math.floor(e)},true)}}else if(this.orders.type=="build"){if(this.moveDirection!=15){this.instructions.push({type:"turn",toDirection:15})}else{this.status="destroy";o.play("construction");d.buildings.push(f.add({name:"construction-yard",x:Math.floor(this.x)-1,y:Math.floor(this.y)-1,status:"build"}))}}else if(this.orders.type=="guard"){var a=u(this,1);if(a.length>0){var b=a[0];this.orders={type:"attack",target:b}}}},move:function(){this.moving=false;this.attacking=false;if(!this.instructions){this.instructions=[]}if(this.instructions.length==0){return}for(var a=0;athis.moveDirection&&b.toDirection-this.moveDirection<16||b.toDirection16){this.moveDirection=this.moveDirection+this.turnSpeed*.1;if((this.moveDirection-b.toDirection)*(this.moveDirection+this.turnSpeed*.1-b.toDirection)<=0){this.moveDirection=b.toDirection}}else{this.moveDirection=this.moveDirection-this.turnSpeed*.1;if((this.moveDirection-b.toDirection)*(this.moveDirection-this.turnSpeed*.1-b.toDirection)<=0){this.moveDirection=b.toDirection}}if(this.moveDirection>31){this.moveDirection=0}else if(this.moveDirection<0){this.moveDirection=31}}if(b.type=="move"){if(b.distance<=0){b.type="done";return}this.moving=true;var c=this.movementSpeed*d.speedAdjustmentFactor/d.gridSize;b.distance-=c;var e=this.moveDirection/32*2*Math.PI;this.x=this.x-c*Math.sin(e);this.y=this.y-c*Math.cos(e)}if(b.type=="aim"){if(b.toDirection==this.turretDirection){b.type="done"}else{var f=A(Math.floor(this.turretDirection),Math.floor(b.toDirection),32);if(Math.abs(f)<1){this.turretDirection=b.toDirection;b.type="done"}else{this.turretDirection=B(this.turretDirection,f/Math.abs(f),32)}}}if(b.type=="fire"){if(!this.bulletFiring){o.play("tank_fire");this.bulletFiring=true;var e=this.turretDirection/32*2*Math.PI;d.fireBullet({x:this.x,y:this.y,angle:e,range:this.sight,source:this})}}}},add:function(a){var b={};var c=a.name;b.team=d.currentLevel.team;$.extend(b,this.types[c].defaults);$.extend(b,this.types[c]);$.extend(b,a);return b}};var j={types:[],turretDetails:{"gun-turret":{name:"gun-turret",label:"Gun Turret",powerIn:20,primaryWeapon:12,cost:600,hitPoints:200,sight:5,turnSpeed:5,reloadTime:1500,pixelWidth:24,pixelHeight:24,buildImageCount:20,turretImageCount:32,pixelOffsetX:-12,pixelOffsetY:-12,pixelTop:12,pixelLeft:12}},preloadImage:p,loadImageArray:q,preloadCount:0,loadedCount:0,load:function(a){var b=this.turretDetails[a];var c={};c.defaults={type:"turret",status:"",draw:this.draw,drawSelection:s,processOrders:this.processOrders,underPoint:t,move:this.move,getLife:r,animationSpeed:4,health:b.hitPoints,pixelLeft:0,pixelTop:0,pixelOffsetX:0,pixelOffsetY:0,turretDirection:0};c.imageArray=[];c.imageArray["build"]=this.loadImageArray("turrets/"+b.name+"/"+b.name+"-build",b.buildImageCount,".gif");c.imageArray["healthy"]=this.loadImageArray("turrets/"+b.name+"/"+b.name+"-healthy",b.turretImageCount,".gif");c.imageArray["damaged"]=this.loadImageArray("turrets/"+b.name+"/"+b.name+"-damaged",b.turretImageCount,".gif");$.extend(c,b);this.types[a]=c},draw:function(){var a=this.getLife();if(this.status=="build"||this.status=="sell"){imageCategory="build"}else if(this.status==""){imageCategory=this.life;if(this.life=="ultra-damaged"){imageCategory="damaged"}}var b=this.imageArray[imageCategory];if(!this.animationIndex){this.animationIndex=0}if(this.status==""){var c=b[Math.floor(this.turretDirection)];z(c,this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}else{if(b.length>Math.floor(this.animationIndex/this.animationSpeed)){var c=b[Math.floor(this.animationIndex/this.animationSpeed)];if(this.status=="sell"){c=b[b.length-1-Math.floor(this.animationIndex/this.animationSpeed)]}this.currentImage=c;z(c,this.x*d.gridSize+d.viewportAdjustX,this.y*d.gridSize+d.viewportAdjustY,this.team,this.type)}this.animationIndex++;if(this.animationIndex/this.animationSpeed>=b.length){this.animationIndex=0;if(this.status=="build"||this.status=="construct"){this.status=""}else if(this.status=="sell"){this.status=="destroy"}}}this.drawSelection()},processOrders:function(){if(!this.orders){this.orders={type:"guard"}}if(this.orders.type=="attack"){this.instructions=[];if(this.orders.target.status=="destroy"){this.orders={type:"guard"};return}var a=[Math.floor(this.x),Math.floor(this.y)];var b=this.orders.target.x;var c=this.orders.target.y;if(this.orders.target.type=="turret"){b+=this.orders.target.pixelWidth/(2*d.gridSize);c+=this.orders.target.pixelHeight/(2*d.gridSize)}if(this.orders.target.type=="building"){b+=this.orders.target.gridWidth/2;c+=this.orders.target.gridHeight}if(Math.pow(b-this.x,2)+Math.pow(c-this.y,2)>=Math.pow(this.sight,2)){this.orders={type:"guard"}}else{if(this.orders.type=="attack"){var e=C({x:b,y:c},this,32);if(this.turretDirection!=e){this.instructions.push({type:"aim",toDirection:e})}else{this.instructions.push({type:"fire"})}}}}else if(this.orders.type=="guard"){var f=u(this,1);if(f.length>0){var g=f[0];this.orders={type:"attack",target:g}}}},move:function(){if(!this.instructions){this.instructions=[]}if(this.instructions.length==0){return}for(var a=0;athis.turretDirection&&b.toDirection-this.turretDirection<16||b.toDirection16){this.turretDirection=this.turretDirection+this.turnSpeed*.1;if((this.turretDirection-b.toDirection)*(this.turretDirection+this.turnSpeed*.1-b.toDirection)<=0){this.turretDirection=b.toDirection}}else{this.turretDirection=this.turretDirection-this.turnSpeed*.1;if((this.turretDirection-b.toDirection)*(this.turretDirection-this.turnSpeed*.1-b.toDirection)<=0){this.turretDirection=b.toDirection}}if(this.turretDirection>31){this.turretDirection=0}else if(this.turretDirection<0){this.turretDirection=31}}if(b.type=="fire"){if(!this.bulletFiring){o.play("tank_fire");this.bulletFiring=true;var c=this.turretDirection/32*2*Math.PI;d.fireBullet({x:this.x+.5,y:this.y+.5,angle:c,range:this.sight,source:this,damage:10})}}}},add:function(a){var b={};var c=a.name;b.team=d.currentLevel.team;$.extend(b,this.types[c].defaults);$.extend(b,this.types[c]);$.extend(b,a);return b}};var l={types:[],load:function(a){var b={name:a}},add:function(a){$.extend(a,this.types[name])}};var m={types:[],overlayDetails:{tiberium:{name:"tiberium",count:2,stageCount:12,gridOffsetX:0,gridOffsetY:0},tree:{name:"tree",count:1,stageCount:10,gridOffsetX:0,gridOffsetY:-1},trees:{name:"trees",count:1,stageCount:10,gridOffsetX:0,gridOffsetY:-1}},load:function(a){var b={name:a,draw:this.draw};var c=this.overlayDetails[a];var d=[];for(i=0;i=0;d--){h.load(this.levelDetails[a].items[item][d])}}if(item=="buildings"){for(var d=c.items[item].length-1;d>=0;d--){f.load(c.items[item][d])}}if(item=="infantry"){for(var d=c.items[item].length-1;d>=0;d--){g.load(c.items[item][d])}}if(item=="turrets"){for(var d=c.items[item].length-1;d>=0;d--){j.load(c.items[item][d])}}}var i=new Array;var k=new Array;for(var l=0;l=0;d--){var o=c.terrain[d];for(var n=o.x1;n<=o.x2;n++){for(var l=o.y1;l<=o.y2;l++){i[l][n]=1;k[l][n]=o.type}}}var p=[];for(var d=c.overlay.length-1;d>=0;d--){p.push(m.add(c.overlay[d]))}b.mapGrid=k;b.obstructionGrid=i;b.overlay=p;e.cash=c.startingCash;return b}};var o={sound_list:[],loaded:true,load:function(a,b){var c=new Audio("audio/"+b+"/"+a+".ogg");c.load();return c},play:function(a,b){var c=this.sound_list[a];if(c.length==1){c[0].play()}else{var d=Math.floor(c.length*Math.random());c[d].play()}},loadAll:function(){this.sound_list["building_in_progress"]=[this.load("building_in_progress","voice")];this.sound_list["insufficient_funds"]=[this.load("insufficient_funds","voice")];this.sound_list["building"]=[this.load("building","voice")];this.sound_list["on_hold"]=[this.load("on_hold","voice")];this.sound_list["cancelled"]=[this.load("cancelled","voice")];this.sound_list["cannot_deploy_here"]=[this.load("cannot_deploy_here","voice")];this.sound_list["new_construction_options"]=[this.load("new_construction_options","voice")];this.sound_list["construction_complete"]=[this.load("construction_complete","voice")];this.sound_list["not_ready"]=[this.load("not_ready","voice")];this.sound_list["reinforcements_have_arrived"]=[this.load("reinforcements_have_arrived","voice")];this.sound_list["low_power"]=[this.load("low_power","voice")];this.sound_list["unit_ready"]=[this.load("unit_ready","voice")];this.sound_list["mission_accomplished"]=[this.load("mission_accomplished","voice")];this.sound_list["mission_failure"]=[this.load("mission_failure","voice")];this.sound_list["construction"]=[this.load("construction","sounds")];this.sound_list["crumble"]=[this.load("crumble","sounds")];this.sound_list["sell"]=[this.load("sell","sounds")];this.sound_list["button"]=[this.load("button","sounds")];this.sound_list["clock"]=[this.load("clock","sounds")];this.sound_list["machine_gun"]=[this.load("machine_gun-0","sounds"),this.load("machine_gun-1","sounds")];this.sound_list["tank_fire"]=[this.load("tank-fire-0","sounds"),this.load("tank-fire-1","sounds"),this.load("tank-fire-2","sounds"),this.load("tank-fire-3","sounds")];this.sound_list["vehicle_select"]=[this.load("ready_and_waiting","talk"),this.load("vehicle_reporting","talk"),this.load("awaiting_orders","talk")];this.sound_list["vehicle_move"]=[this.load("affirmative","talk"),this.load("moving_out","talk"),this.load("acknowledged","talk"),this.load("over_and_out","talk")];this.sound_list["infantry_select"]=[this.load("reporting","talk"),this.load("unit_reporting","talk"),this.load("awaiting_orders","talk")];this.sound_list["infantry_move"]=[this.load("affirmative","talk"),this.load("yes_sir","talk"),this.load("acknowledged","talk"),this.load("right_away","talk")]}};var w={fogCanvas:document.createElement("canvas"),canvasWidth:128,canvasHeight:128,init:function(){this.fogContext=this.fogCanvas.getContext("2d"),this.fogContext.fillStyle="rgba(0,0,0,1)";this.fogContext.fillRect(0,0,this.canvasWidth,this.canvasHeight)},draw:function(){var a=this.fogCanvas;var c=this.fogContext;var e=d.currentLevel.mapImage;c.save();c.scale(this.canvasWidth/e.width,this.canvasHeight/e.height);c.fillStyle="rgba(200,200,200,1)";for(var f=d.units.length-1;f>=0;f--){var g=d.units[f];if(g.team==d.currentLevel.team||g.bulletFiring){c.beginPath();c.globalCompositeOperation="destination-out";c.arc((Math.floor(g.x)+.5)*d.gridSize,(Math.floor(g.y)+.5)*d.gridSize,(g.sight+.5)*d.gridSize,0,2*Math.PI,false);c.fill()}}for(var f=d.buildings.length-1;f>=0;f--){var h=d.buildings[f];if(h.team==d.currentLevel.team){c.beginPath();c.globalCompositeOperation="destination-out";c.arc(Math.floor(h.x)*d.gridSize+h.pixelWidth/2,Math.floor(h.y)*d.gridSize+h.pixelHeight/2,h.sight*d.gridSize,0,2*Math.PI,false);c.fill()}}for(var f=d.turrets.length-1;f>=0;f--){var i=d.turrets[f];if(i.team==d.currentLevel.team||i.bulletFiring){c.beginPath();c.globalCompositeOperation="destination-out";c.arc(Math.floor(i.x)*d.gridSize+i.pixelWidth/2,Math.floor(i.y)*d.gridSize+i.pixelHeight/2,i.sight*d.gridSize,0,2*Math.PI,false);c.fill()}}c.restore();b.drawImage(this.fogCanvas,0+d.viewportX*this.canvasWidth/e.width,0+d.viewportY*this.canvasHeight/e.height,d.viewportWidth*this.canvasWidth/e.width,d.viewportHeight*this.canvasHeight/e.height,d.viewportLeft,d.viewportTop,d.viewportWidth,d.viewportHeight)}};var x=document.createElement("canvas");var y=x.getContext("2d");var E=function(){function a(a,b,c,d,e,f,g,h,i,j,k,l,m){if(a){c&&!i[e][g]&&(l[m++]={x:g,y:e});d&&!i[e][h]&&(l[m++]={x:h,y:e})}if(b){c&&!i[f][g]&&(l[m++]={x:g,y:f});d&&!i[f][h]&&(l[m++]={x:h,y:f})}return l}function b(a,b,c,d,e,f,g,h,i,j,k,l,m){a=e>-1;b=f-1;if(c){a&&!i[e][g]&&(l[m++]={x:g,y:e});b&&!i[f][g]&&(l[m++]={x:g,y:f})}if(d){a&&!i[e][h]&&(l[m++]={x:h,y:e});b&&!i[f][h]&&(l[m++]={x:h,y:f})}return l}function c(a,b,c,d,e,f,g,h,i,j,k,l,m){return l}function d(a,b,c,d,e,f){var g=c-1,h=c+1,i=b+1,j=b-1,k=g>-1&&!d[g][b],l=h-1&&!d[c][j],o=[],p=0;k&&(o[p++]={x:b,y:g});m&&(o[p++]={x:i,y:c});l&&(o[p++]={x:b,y:h});n&&(o[p++]={x:j,y:c});return a(k,l,m,n,g,h,i,j,d,e,f,o,p)}function e(a,b,c,d){return d(c(a.x-b.x),c(a.y-b.y))}function f(a,b,c,d){var e=a.x-b.x,f=a.y-b.y;return d(e*e+f*f)}function g(a,b,c,d){return c(a.x-b.x)+c(a.y-b.y)}function h(h,i,j,k){var l=h[0].length,m=h.length,n=l*m,o=Math.abs,p=Math.max,q={},r=[],s=[{x:i[0],y:i[1],f:0,g:0,v:i[0]+i[1]*l}],t=1,u,v,w,x,y,z,A,B,C;j={x:j[0],y:j[1],v:j[0]+j[1]*l};switch(k){case"Diagonal":w=a;case"DiagonalFree":v=e;break;case"Euclidean":w=a;case"EuclideanFree":p=Math.sqrt;v=f;break;default:v=g;w=c;break}w||(w=b);do{z=n;A=0;for(x=0;x