Browse Source
Record of added instructions in new.masm and parser/templates for
Record of added instructions in new.masm and parser/templates for
making builtins.cdynamic
4 changed files with 60 additions and 70 deletions
-
1.gitignore
-
94new.masm
-
32parser.py
-
3skeleton.j2
@ -1,73 +1,27 @@ |
|||
# template |
|||
#+begin_src masm |
|||
control shootp obj unit shoot 0 0 |
|||
control configure obj configure 0 0 0 |
|||
control color obj r g b 0 |
|||
#+end_src |
|||
|
|||
# manual |
|||
#+begin_src masm |
|||
draw image x y image size rotation 0 |
|||
control shootp obj unit shoot 0 0 |
|||
control configure obj configure 0 0 0 |
|||
control color obj r g b 0 |
|||
ubind type |
|||
#+end_src |
|||
# template |
|||
|
|||
# toggles/set |
|||
#+begin_src masm |
|||
ucontrol boost enable 0 0 0 0 |
|||
ucontrol flag value 0 0 0 0 |
|||
#+end_src |
|||
|
|||
# direct commands |
|||
#+begin_src masm |
|||
ucontrol idle 0 0 0 0 0 |
|||
ucontrol stop 0 0 0 0 0 |
|||
ucontrol pathfind 0 0 0 0 0 |
|||
ucontrol payDrop 0 0 0 0 0 |
|||
#+end_src |
|||
|
|||
# direct with bool |
|||
#+begin_src masm |
|||
ucontrol payTake takeUnits 0 0 0 0 |
|||
#+end_src |
|||
|
|||
# xy-direct |
|||
#+begin_src masm |
|||
ucontrol move x y 0 0 0 |
|||
ucontrol mine x y 0 0 0 |
|||
#+end_src |
|||
|
|||
# xy-param-set |
|||
#+begin_src masm |
|||
ucontrol approach x y r 0 0 |
|||
control target x y shoot 0 0 |
|||
#+end_src |
|||
|
|||
# xy-param-get |
|||
#+begin_src masm |
|||
ucontrol within x y raduis result 0 |
|||
ucontrol getBlock x y type building 0 |
|||
#+end_src |
|||
|
|||
# other |
|||
#+begin_src masm |
|||
ucontrol targetp unit shoot 0 0 0 |
|||
ucontrol itemDrop to amount 0 0 0 |
|||
ucontrol itemTake from item amount 0 0 |
|||
ucontrol build x y block rotation config |
|||
#+end_src |
|||
|
|||
|
|||
|
|||
|
|||
# subclass from radar, no 'from' param |
|||
#+begin_src masm |
|||
uradar boss boss player armor 0 order result |
|||
#+end_src |
|||
|
|||
# manual/subclass |
|||
#+begin_src masm |
|||
ulocate ore core enemy @copper outx outy found building |
|||
ucontrol idle x y 0 0 0 |
|||
ucontrol stop 0 0 0 0 0 |
|||
ucontrol approach x y radius 0 0 |
|||
ucontrol boost enable y radius 0 0 |
|||
ucontrol pathfind enable y radius 0 0 |
|||
ucontrol target x y shoot 0 0 |
|||
ucontrol targetp unit shoot shoot 0 0 |
|||
ucontrol itemDrop obj amount shoot 0 0 |
|||
ucontrol itemTake obj item amount 0 0 |
|||
ucontrol payDrop obj item amount 0 0 |
|||
ucontrol payTake takeUnits item amount 0 0 |
|||
ucontrol mine x y amount 0 0 |
|||
ucontrol flag value y amount 0 0 |
|||
ucontrol build x y block rotation configure |
|||
ucontrol getBlock x y type building configure |
|||
ucontrol within x y radius result configure |
|||
uradar any any any distance 0 order result |
|||
ulocate building core enemy @copper outx outy found building |
|||
ulocate spawn core enemy @copper outx outy found building |
|||
ulocate damaged core enemy @copper outx outy found building |
|||
#+end_src |
|||
ulocate ore core enemy ore outx outy found building |
|||
ulocate spawn core enemy ore outx outy found building |
|||
ulocate damaged core enemy ore outx outy found building |
|||
@ -0,0 +1,32 @@ |
|||
import re |
|||
COMMAND_RE = re.compile(r'(?P<command>\w+) (?P<subcommand>\w+) ?(?P<params>.*)') |
|||
PARAM_RE = re.compile(r'[\w@]+') |
|||
|
|||
def parse_params(param_text): |
|||
important_params = [] |
|||
params = [] |
|||
for match in PARAM_RE.finditer(param_text): |
|||
important = True |
|||
s = match.group(0) |
|||
params.append(s) |
|||
if s == '0' or "@" in s: |
|||
important = False |
|||
important_params.append(important) |
|||
return params, important_params |
|||
|
|||
def parse_command(command_text): |
|||
match = COMMAND_RE.match(command_text) |
|||
info = match.groupdict() |
|||
if info['params'] != '': |
|||
parsed_params, important = parse_params(info['params']) |
|||
info['params'] = parsed_params |
|||
info['important'] = important |
|||
else: |
|||
info['params'] = [] |
|||
info['important'] = [] |
|||
return info |
|||
|
|||
if __name__ == "__main__": |
|||
with open('./new.masm') as command_file: |
|||
command_text = command_file.read() |
|||
l = list(map(parse_command, filter(bool, command_text.split('\n')))) |
|||
@ -0,0 +1,3 @@ |
|||
{{ subcommand }}({% for param in params %}{% if important[loop.index0] %}void* {{ param }}{% if not loop.last %}, {% endif %}{% endif %}{% endfor %}){% raw %}{{% endraw %} |
|||
asm("{{ command }} {{ subcommand }} {% for param in params %}{% if important[loop.index0] %}{% raw %}{{% endraw %}{{ param }}{% raw %}}{% endraw %}{% else %}{{ param }}{% endif %}{% if not loop.last %} {% endif %}{% endfor %}"); |
|||
{% raw %}}{% endraw %} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue