Main loop: Stores: sprite: enemy animation x y width: 96 height: 96 object: enemy name type health damage status knockback vector colliding Every frame: for each enemy: push enemy name, type, and position as an object to array movedenemies send movedenemies to worker as message type 'move' On message get: for each object in sent array returnenemypositions: move enemy with matching name to that position unless frozen or knocked back Enemy Worker: Stores: array supertotalenemies: object name type x y state age array returnenemypositions: object name x y On message type 'spawn' get: push sent object to array supertotalenemies and add state and age (which aren't sent) On message type 'delete' get: find sent object in array supertotalenemies and remove it On message type 'move' get: copy sent array movedenemies to supertotalenemies (updating already stored enemies' positions only) for each enemy in supertotalenemies: increment age case pawn: if floor(age/10) mod 2 == 0 //example of simple ai flow find position PAWN_SPEED closer to player from current position push name and position to returnenemypositions send array returnenemypositions as message to main loop