SC2MM 0.1.0
A package for StarCraft2 Micro-Management.
Requires Python: >=3.6.10

# SCMM StarCraft II Micro Management

# Installing StarCraft II
You can find lastest verson of StarCraft II at [here](https://starcraft2.com/en-us/)

After installing the game, navigate to *installing_path/StarCraft II/Maps* and move a copy of all the maps in SCMM there.

If *Maps* folder does not exist, then manually create one

# Installing SCMM
Two ways:

1. You can directly clone the repo:

        git clone https://github.com/caiyangcy/SC2DC.git
    
2. Use pip install:

        pip install SC2MM


# Maps
* You can find a list of maps [here](https://github.com/caiyangcy/SC2DC/blob/master/docs/map_info.md)

Alternatively, you can run:

    python -m scmm.bin.map_list

## View a Map

All the maps can be viewed by StarCraft II Editor

## Change a Map

The terrain and functionality of a map can be changed by StarCraft II Editor

## Create a Map

Create a map using StarCraft II Editor. After creation, make sure add the map to *scmm/env/micro_env/maps/mm_maps.py* and also make sure the map is added to the game folder

## Create an unit

The most important thing when creating units on a new map is to disable some reactions of them. 

To do this (taken from SMAC):

        Open editor, data editor, unit tab
        
        Right click and click add new unit
        
        Name the new unit, click suggest right below it
        
        Leave the "parent:" row alone. That determines what we're making. We want to make a unit
        
        Select the unit you want to copy (bottom of the new opened window, "copy from" row) e.g. zealot if you're copying zealot
        
        Set the "Object family:," "Race:," and "Object Type:" as desired. THESE DO NOTHING but make it easier for you to find your new unit once it's made. e.g. you probably want a new zerg unit to be in the zerg section when you go to place it on your map or something.
        
        Press okay, you're almost done
        
        Click the plus sign on the data editor tabs, go to edit actor data, actors
        
        Click the new actors tab
        
        Right click and click add new actor
        
        Name it and click suggest like before
        
        Change the "Actor Type:" row to unit
        
        Select what you want to copy from (bottom of the new opened window again) e.g. zealot if you're coping a zealot
        
        Press okay
        
        Click on your new actor
        
        At the bottom right of the window where it says "Token" and then "Unit Name," change the unit name to the name of your unit e.g. Zealot RL
        
        Go back to the Unit tab, find the new unit and modify the following fields:
        
            (Basic) Stats: Supplies - 0
            Combat: Default Acquire Level - Passive
            Behaviour: Response - No Response


## Unit Tester Map

A unit tester map can be found at unit tester map folder. Source at *[unit-tester](https://www.sc2mapster.com/projects/unit-tester).

The purpose of this map is to help design some new scenarios. 


# Run

Refer to the names of agents to find out the details of running agents.

## Scripted

    python -m scmm.agents.scripted.agent_demo -n_episode=10 -map_name=3m -difficulty=7 -plot_level=0 -agent=FocusFire
    
## Genetic
    
    python -m scmm.agents.genetic.ga -n_episode=10 -map_name=8m -difficulty=7 -plot_level=0 
    
## NN

    python -m scmm.agents.nn.nn -n_episode=10 -map_name=25m -difficulty=7 -plot_level=0 
    
## Potential Field

    python -m scmm.agents.potential_fields.forces -n_episode=10 -map_name=25m -difficulty=7 -plot_level=0 

# Acknowledgement
* The coding is based on [SMAC](https://github.com/oxwhirl/smac). Refer to the repo for details and license.