Previously we couldn't tell if a restart was due to game win or fail. Statistics are now saved that include the start and end epoch, the game time in ticks (so we can gauge activity), how many biters, worms and nests were killed, how many enemy_entities remain (so we can tell if the map was cleared) and how many players participated in total.
The strike count and cost described by the market was correct but the actual number of capsules sent and the number of capsules removed from the chest was wrong. Bug due to starting index, have now updated the maths to be correct.
Tested and the market description, number of shots fired and the number of capsules removed from the chest are now correct.
Rearranged the order of the code so that it's more performant and added comments to further explain the logic and reasons for the complications, ie. the cheesing with artillery.
Previously the airstrike was not reaching the corners of the map. There was a default max_range value of 1000 that limited how far the poison capsules could travel. Have set it to 1400 so that it can reach the corners of the map.
THIS NEEDS PLAY TESTING. Please don't merge until I've confirmed I've play tested it.
- Current behaviour is that when destroyers/defenders are created their target position is set to the entity that killed them.
- If a player picks up the artillery after the capsules spawn then they lose their cause.target and stop, not reaching the cause of the turret death.
- I've changed this behaviour so that if the target.cause is artillery then it spawns a defender/destroyer projectile NOT an entity. The projectile target can therefore be a position not an entity. So the capsules won't stop if the artillery is picked up.
- If the cause is not artillery turret or wagon then a destroyer/defender capsule entity is spawned instead of a projectile because a projectile cannot track the player.
- If the player picks up the artillery turret before the projectile that kills a turret arrives then the event cause.name will be missing and no bots spawn at all. I have changed the behaviour so that "if not cause" then we assume they're doing something fucky. We won't have the entity cause name or position, so let's just spawn double the normal amount of destroyers and just send them at 0, 0 since we know nothing else to do with them.
- Type `/strike [gps=x,y,surface] to send a large cloud of poison into the enemy
- Searches a chest near spawn for poison capsules. Current cost for command is 100 capsules but could be balanced.
- Needs market items adding for technology research, bought with coins.
- Variables strikeCount and strikeRadius start low. As the market upgrades are made (start at 5k each?) the size of teh strike and amount of capsules increases.
- Should be balanced to allow use from mid-game onwards. Don't allow early game use as manual throwing is fine for early outposts. This should be to speed up the boring end-game clearing of worms.
- Added spidetron to artillery_target_entities list
- Added code to fire a rocket at spidertrons as well as the non-damaging artillery
- Tested effect of 4 and 8 artillery rockets on spidertron. Kills shields quick but spidertron takes about a minute to die. Enough to deter them from staying too long but not too OP.
When a combat robot expires and is targeting an artillery wagon, it will now explode. This is a work around for a factorio bug where combat robots do not attack artillery wagons.
- Changed get_inventory(1) to get_inventory(defines.inventory.character_main) to make it clearer which inventory we're getting.
- changed area charted to 3x3 full chunks cented on the chunk containing the pinged coordinate. Will now charta 96x96 tile area which is more reasonable considering the cost of /spy
Players were using remotely located artillery wagons in lakes to cheesily clear the map with no repercussions. Swarms of destroyer capsules would hover over the artillery but not target it. They would timeout and the player could then refill the wagon with ammo.
I've changed the entity_died_events file to events.lua since it now has on_entity_died, on_player_died and on_combat_robot_expired.
I have added the on_combat_robot_expired event so that when the robots timeout they explode, damaging nearby entities.
Added lines to store the unix time the restart happens as well as how many ticks the game lasted. Starting storing these now so I have some interesting data to use in a week or two.
Added changed requested by grilledham:
- Used format_time function
- Added local var to show that text string was role ID.
- Added another commented var with the ID of a test role in case we want to test something and not ping @crash_site
- Added markdown to make printed string bold
Added discord notification for the @crash site role when crash site is restarted using the /restart command. Pings users with @Crash Site role and prints the map time to add to competitiveness.
Space race has a bug that sometimes a rock will spawn where the silo needs to be. But the code only removes trees. This will allow me to call a function to delete rocks.
- Changed behaviour for non-admins. Now checks for spawners, biters and turrets but doesn't require walls and power structures to be destroyed for restart
- Added checks to limit non-admins from changing the scenario by using an argument after /restart. Now defaults to current scenario for non-admins.
Updated crash site /restart command so that guests and regulars can call it when map is cleared
- Only admin can abort, once the map is cleared.
- Guests and Regular can both call /restart when all enemy units and structures are dead
- Tested on S10 by running this command:
/c local surface=game.player.surface
for key, entity in pairs(surface.find_entities_filtered({force="enemy"})) do
entity.destroy()
end
- Need to merge into develop to test on live server in case conditions at the end of the game are different
- Thought about adding rocket launched condition but decided against it.
Originally proposed change to allow for a numerical surface_index to work with the diggy-clear-void debugging command. But found that command works as is by using the text 'redmew' as the surface index. Discarded proposed change and documented example use in comments to help clarify how to use.
Fixes an infrequent bug in hail_hydra that has existed a long time. Currently Factorio does not allow enemy entitities of type 'turret' to target entities of type 'car' (includes cars and tanks). Doing so logs an error. If this changes in the future then the condition cause.type ~= "car" below can be removed.
* Recommended Diggy bot mining update for Factorio .18.27
* Resolve conflicts in this PR with diggy_hole.lua in PR 1061
* Include recent updates made to diggy_hole.lua in PR 1061
* Mining delay and particle tweaks
* Diggy updates for Factorio .18.27
* Updated with Soggs suggestions and tested again. Thanks Soggs.
* improved on_entity_died event handling
* Changes to on_entity_died event handling based on feedback
* Ensure loot is also suppressed for rocks that die by being damaged
* Remove unused local variable from simple_room_generator.lua
* Fix exploding reactor generating stone drops and freezing game. Using entity.destroy() again where it is better suited and for performance.
* Minor cleanup
* Readability
* Additional readibility
* Minor indentation cleanup
Concrete Jungle - the map is complete, only remaining things to do are are
- migrate description to wiki
- add cutscene
- bring into regular map rotation (this is an interesting map that we should run more often)
When a scenario fails to start the restarting state was not reset, which prevented another restart from being started. We now clear the restarting flag.
Space Race is still very much a [WIP] and should be treated as such. Many features need to be added, but it is being merged in its current state to allow for easier internal integration. The map is in a playable state, and includes a configuration file.
A list of future ideas and features to implement can be found at #996 and it should be notes that this is still a "high priority" project.