Separated object-related and generic parts of the attacks, moved the object-related part to ObjectPlayer2Tower1.
Copied ObjectPlayer2Tower1 to ObjectPlayer2Tower2, altered the colors and added its own attack().
Fixed a typo in a comment.
Renamed gfx_shots[] to gfx_effect_shot[].
Added _2d_copy() helper to copy an array, _2d_angle() helper to calculate an angle from two points (in radians).
Added shots[] and process_shots().
Replaced ObjectPlayer2Tower2.attack().
Added "damage", "radius", "attacker_player" for shots[], added hit_nearby_objects() in process_shots().
Added debug stuffs to make the shots visible.
Modified damage, impact radius and cycle time for towers.
Added fire gfx effect! Added gfx_effect_fire[], gfx_render_fire(), gfx_render_fire_particle() based on experiments/04.html, added A.gfx_effect_fire[] handling to process_shot().