';----------------------------------------------------------------------------;' Comment.Single
'\n'          Text

'; Does A* pathfinding for rockraiders and vehicles' Comment.Single
'\n'          Text

';'           Comment.Single
'\n'          Text

'; Copyright 2015 Ruben De Smet' Comment.Single
'\n'          Text

';'           Comment.Single
'\n'          Text

'; Redistribution and use in source and binary forms, with or without' Comment.Single
'\n'          Text

'; modification, are permitted provided that the following conditions are' Comment.Single
'\n'          Text

'; met:'      Comment.Single
'\n'          Text

'; '          Comment.Single
'\n'          Text

';     (1) Redistributions of source code must retain the above copyright' Comment.Single
'\n'          Text

';         notice, this list of conditions and the following disclaimer. ' Comment.Single
'\n'          Text

'; '          Comment.Single
'\n'          Text

';     (2) Redistributions in binary form must reproduce the above copyright' Comment.Single
'\n'          Text

';         notice, this list of conditions and the following disclaimer in' Comment.Single
'\n'          Text

';         the documentation and/or other materials provided with the' Comment.Single
'\n'          Text

';         distribution.  ' Comment.Single
'\n'          Text

';         '  Comment.Single
'\n'          Text

';     (3) The name of the author may not be used to' Comment.Single
'\n'          Text

';         endorse or promote products derived from this software without' Comment.Single
'\n'          Text

';         specific prior written permission.' Comment.Single
'\n'          Text

'; '          Comment.Single
'\n'          Text

"; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR" Comment.Single
'\n'          Text

'; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED' Comment.Single
'\n'          Text

'; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE' Comment.Single
'\n'          Text

'; DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,' Comment.Single
'\n'          Text

'; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES' Comment.Single
'\n'          Text

'; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR' Comment.Single
'\n'          Text

'; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)' Comment.Single
'\n'          Text

'; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,' Comment.Single
'\n'          Text

'; STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING' Comment.Single
'\n'          Text

'; IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE' Comment.Single
'\n'          Text

'; POSSIBILITY OF SUCH DAMAGE.' Comment.Single
'\n'          Text

';'           Comment.Single
'\n'          Text

';----------------------------------------------------------------------------;' Comment.Single
'\n'          Text

'\n'          Text

'IDEAL'       Keyword
'\n'          Text

'P386'        Keyword
'\n'          Text

'MODEL'       Keyword
' '           Text
'FLAT'        Name.Variable
','           Punctuation
' '           Text
'C'           Name.Variable
'\n'          Text

'ASSUME'      Keyword
' '           Text
'cs'          Name.Builtin
':'           Punctuation
'_TEXT'       Name.Variable
','           Punctuation
'ds'          Name.Builtin
':'           Punctuation
'FLAT'        Name.Variable
','           Punctuation
'es'          Name.Builtin
':'           Punctuation
'FLAT'        Name.Variable
','           Punctuation
'fs'          Name.Builtin
':'           Punctuation
'FLAT'        Name.Variable
','           Punctuation
'gs'          Name.Builtin
':'           Punctuation
'FLAT'        Name.Variable
'\n\n'        Text

'INCLUDE'     Keyword
' '           Text
'"ASTAR.INC"' Literal.String
'\n'          Text

'INCLUDE'     Keyword
' '           Text
'"READLVL.INC"' Literal.String
'\n'          Text

'INCLUDE'     Keyword
' '           Text
'"DEBUG.INC"' Literal.String
'\n\n'        Text

'STRUC'       Keyword
' '           Text
'TPriorityField' Name.Variable
'\n'          Text

'    '        Text
'heuristic'   Name.Constant
' '           Keyword.Declaration
'dd'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'distance'    Name.Constant
' '           Keyword.Declaration
'dd'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'x'           Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'y'           Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'fromx'       Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'fromy'       Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'ENDS'        Keyword
'\n\n'        Text

'STRUC'       Keyword
' '           Text
'TField'      Name.Variable
'\n'          Text

'    '        Text
'distance'    Name.Constant
' '           Keyword.Declaration
'dd'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'x'           Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'    '        Text
'y'           Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'ENDS'        Keyword
'\n\n'        Text

'CODESEG'     Keyword
' '           Text
'\n\n'        Text

'PROC'        Keyword
' '           Text
'getPath'     Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'@@tgtx'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@tgty'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
' '           Text
'\\\n'        Text

'        '    Text
'RETURNS'     Name.Variable
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
' '           Text
'; eax contains x, ebx contains y' Comment.Single
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'getLevelWidth' Name.Variable
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TField'      Name.Variable
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'backtraceGraph' Name.Variable
'        '    Text
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'xor'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'al'          Name.Builtin
','           Punctuation
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ecx'         Name.Builtin
')'           Punctuation
'.x'          Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'bl'          Name.Builtin
','           Punctuation
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ecx'         Name.Builtin
')'           Punctuation
'.y'          Name.Variable
']'           Punctuation
'\n\n'        Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'getPath'     Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'findPath'    Name.Variable
'\n'          Text

'        '    Text
'; eax will contain a 1 when a path has been found' Comment.Single
'\n'          Text

'        '    Text
';                    0 otherwise.' Comment.Single
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'@@srcx'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@srcy'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@tgtx'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@tgty'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@type'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
' '           Text
'\\\n'        Text

'            ' Text
'RETURNS'     Name.Variable
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'; Check whether the target field is "allowed" for' Comment.Single
'\n'          Text

'        '    Text
'; the selected vehicle or rock raider' Comment.Single
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'getField'    Name.Variable
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'al'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'byte'        Keyword.Type
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
']'           Punctuation
'\n'          Text

'        '    Text
'and'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0FFh'        Literal.Number.Hex
'\n\n'        Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'actionTable' Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'eax'         Name.Builtin
']'           Punctuation
'\n'          Text

'        '    Text
'and'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@type'      Name.Variable
']'           Punctuation
'               ' Text
'; TODO: for now, rock raider is hard coded' Comment.Single
'\n'          Text

'        '    Text
'jnz'         Name.Function
' '           Text
'@canGoToTarget' Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'@canGoToTarget:' Name.Label
'\n'          Text

'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'cl'          Name.Builtin
'eanData'     Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@type'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'currentType' Name.Variable
'],'          Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@srcx'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
'],'          Punctuation
' '           Text
'al'          Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@srcy'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
'],'          Punctuation
' '           Text
'al'          Name.Builtin
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
','           Punctuation
' '           Text
'['           Punctuation
'@@srcx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@srcy'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
' '           Text
'\n'          Text

'        '    Text
'; eax <- distance' Comment.Single
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'addOpen'     Name.Variable
','           Punctuation
' '           Text
'['           Punctuation
'@@srcx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@srcy'      Name.Variable
'],'          Punctuation
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n\n'        Text

'@openListNotEmpty:' Name.Label
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'popOpen'     Name.Variable
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'je'          Name.Function
' '           Text
'@openListEmpty' Name.Variable
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'addToMap'    Name.Variable
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'addClosed'   Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
'],'          Punctuation
' '           Text
'al'          Name.Builtin
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@nextOpen'   Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
'],'          Punctuation
' '           Text
'al'          Name.Builtin
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@nextOpen'   Name.Variable
'\n\n'        Text

'        '    Text
'jmp'         Name.Function
' '           Text
'@routeFound' Name.Variable
'\n\n'        Text

'        '    Text
'@nextOpen:'  Name.Label
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'addNeighbours' Name.Variable
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n\n'        Text

'        '    Text
'jmp'         Name.Function
' '           Text
'@openListNotEmpty' Name.Variable
'\n\n'        Text

'@openListEmpty:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n\n'        Text

'@routeFound:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'findPath'    Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'addToMap'    Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'getLevelWidth' Name.Variable
'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TField'      Name.Variable
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'backtraceGraph' Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.distance' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.distance'   Name.Variable
'],'          Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'jbe'         Name.Function
' '           Text
'@dontAdd'    Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.distance'   Name.Variable
'],'          Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.fromx' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.x'          Name.Variable
'],'          Punctuation
' '           Text
'cl'          Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.fromy' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.y'          Name.Variable
'],'          Punctuation
' '           Text
'cl'          Name.Builtin
'\n\n'        Text

'@dontAdd:'   Name.Label
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'addToMap'    Name.Variable
'\n\n'        Text

'; Is closed checks whether the field considered is "closed" for being added to the open list.' Comment.Single
'\n'          Text

'; So, it also checks whether we can go on the selected field.' Comment.Single
'\n'          Text

'PROC'        Keyword
' '           Text
'isClosed'    Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'@@x'         Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@y'         Name.Variable
':'           Punctuation
'dword'       Keyword.Type
' '           Text
'RETURNS'     Name.Variable
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'; Check bounds first:' Comment.Single
'\n'          Text

'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'getLevelWidth' Name.Variable
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'@@x'         Name.Variable
'],'          Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'ja'          Name.Function
' '           Text
'notWithinBounds' Name.Variable
' '           Text
'; ja considers -1 > 10' Comment.Single
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'getLevelHeight' Name.Variable
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'@@y'         Name.Variable
'],'          Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'ja'          Name.Function
' '           Text
'notWithinBounds' Name.Variable
'\n\n'        Text

'        '    Text
'; Check whether this field is "allowed" for' Comment.Single
'\n'          Text

'        '    Text
'; the selected vehicle or rock raider' Comment.Single
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'getField'    Name.Variable
','           Punctuation
' '           Text
'['           Punctuation
'@@x'         Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@y'         Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'al'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'byte'        Keyword.Type
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
']'           Punctuation
'\n'          Text

'        '    Text
'and'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0FFh'        Literal.Number.Hex
'\n\n'        Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'actionTable' Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'eax'         Name.Builtin
']'           Punctuation
'\n'          Text

'        '    Text
'and'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentType' Name.Variable
']'           Punctuation
'               ' Text
'; TODO: for now, rock raider is hard coded' Comment.Single
'\n'          Text

'        '    Text
'jnz'         Name.Function
' '           Text
'@canGoHere'  Name.Variable
'\n\n\n'      Text

'        '    Text
'inc'         Name.Function
' '           Text
'eax'         Name.Builtin
' '           Text
'; mov eax, 1' Comment.Single
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n\n'        Text

'@canGoHere:' Name.Label
'\n'          Text

'        '    Text
'\n'          Text

'        '    Text
'; Getting here means the field is okay to walk/fly/whatever on' Comment.Single
'\n'          Text

'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cx'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'cl'          Name.Builtin
'osedlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'cx'          Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
' '           Text
'; If empty, return 0' Comment.Single
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@closedNotEmpty' Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n\n'        Text

'@closedNotEmpty:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'cl'          Name.Builtin
'osedlist'    Name.Variable
'\n\n'        Text

'@loopClosed:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'edx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@x'         Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ebx'         Name.Builtin
')'           Punctuation
'.x'          Name.Variable
'],'          Punctuation
' '           Text
'dl'          Name.Builtin
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@nextClosed' Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'edx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@y'         Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ebx'         Name.Builtin
')'           Punctuation
'.y'          Name.Variable
'],'          Punctuation
' '           Text
'dl'          Name.Builtin
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@nextClosed' Name.Variable
'\n\n'        Text

'        '    Text
'; If reached here, yep, contained in closed list' Comment.Single
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n\n'        Text

'    '        Text
'@nextClosed:' Name.Label
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TField'      Name.Variable
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'jnz'         Name.Function
' '           Text
'@loopClosed' Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n\n'        Text

'notWithinBounds:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'isClosed'    Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'addNeighbours' Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'@@tgtx'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@tgty'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
'\n'          Text

'        '    Text
'; Push all neighbours of currentOpen on openList' Comment.Single
'\n'          Text

'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'bl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'edx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.distance' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'inc'         Name.Function
' '           Text
'edx'         Name.Builtin
' '           Text
'; Next distance is one more.' Comment.Single
'\n\n'        Text

'        '    Text
'; Up'        Comment.Single
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'isClosed'    Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@noUp'       Name.Variable
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'addOpen'     Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'@noUp:'      Name.Label
'\n'          Text

'        '    Text
'inc'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n\n'        Text

'        '    Text
'; Right'     Comment.Single
'\n'          Text

'        '    Text
'inc'         Name.Function
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'isClosed'    Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@noRight'    Name.Variable
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'addOpen'     Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'@noRight:'   Name.Label
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ebx'         Name.Builtin
'\n\n'        Text

'        '    Text
'; Left'      Comment.Single
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'isClosed'    Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@noLeft'     Name.Variable
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'addOpen'     Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'@noLeft:'    Name.Label
'\n'          Text

'        '    Text
'inc'         Name.Function
' '           Text
'ebx'         Name.Builtin
'\n\n'        Text

'        '    Text
'; Down'      Comment.Single
'\n'          Text

'        '    Text
'inc'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'isClosed'    Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@noDown'     Name.Variable
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
'],'          Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'addOpen'     Name.Variable
','           Punctuation
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
'\n'          Text

'        '    Text
'@noDown:'    Name.Label
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n\n'        Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'addNeighbours' Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'popOpen'     Name.Variable
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'RETURNS'     Name.Variable
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'edx'         Name.Builtin
','           Punctuation
' '           Text
'esi'         Name.Builtin
','           Punctuation
' '           Text
'edi'         Name.Builtin
'\n'          Text

'        '    Text
'; eax contains the smallest current heuristic' Comment.Single
'\n'          Text

'        '    Text
'; ebx contains the index of that field' Comment.Single
'\n'          Text

'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
'],'          Punctuation
' '           Text
'0'           Literal.Number.Integer
'           ' Text
'; If empty, return 0' Comment.Single
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@goForth'    Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n\n'        Text

'@goForth:'   Name.Label
'\n'          Text

'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'0FFFFFFFFh'  Literal.Number.Hex
'             ' Text
'; Longest distance possible in 32 bits.' Comment.Single
'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'                    ' Text
'; ecx contains the current index' Comment.Single
'\n\n'        Text

'@searchFurther:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'edx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'edx'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TPriorityField' Name.Variable
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'('           Punctuation
'openlist'    Name.Variable
' '           Text
'+'           Operator
' '           Text
'edx'         Name.Builtin
'))'          Punctuation
'.heuristic'  Name.Variable
'],'          Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'ja'          Name.Function
' '           Text
'@notBetter'  Name.Variable
'\n'          Text

'        '    Text
'; Better guess found, put right values in eax and ebx' Comment.Single
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'('           Punctuation
'openlist'    Name.Variable
' '           Text
'+'           Operator
' '           Text
'edx'         Name.Builtin
'))'          Punctuation
'.heuristic'  Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n\n'        Text

'@notBetter:' Name.Label
'\n'          Text

'\n'          Text

'        '    Text
'inc'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'cx'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@searchFurther' Name.Variable
'\n\n'        Text

'        '    Text
'; By now, we have found the right item to pop from the priorityqueue.' Comment.Single
'\n'          Text

'\n'          Text

'        '    Text
'; Move the correct item in currentOpen' Comment.Single
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TPriorityField' Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'esi'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'esi'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'esi'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'openlist'    Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'edi'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'currentOpen' Name.Variable
'\n'          Text

'        '    Text
'rep'         Name.Function
' '           Text
'movsb'       Name.Variable
'\n\n'        Text

'        '    Text
'; Now make the remove the thing from the vector' Comment.Single
'\n'          Text

'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'cx'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'sub'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TPriorityField' Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'edi'         Name.Builtin
','           Punctuation
' '           Text
'esi'         Name.Builtin
'\n'          Text

'        '    Text
'sub'         Name.Function
' '           Text
'edi'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TPriorityField' Name.Variable
'\n'          Text

'        '    Text
'rep'         Name.Function
' '           Text
'movsb'       Name.Variable
'\n\n'        Text

'        '    Text
'dec'         Name.Function
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'popOpen'     Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'addClosed'   Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n\n'        Text

'        '    Text
'xor'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'xor'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'bx'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'cl'          Name.Builtin
'osedlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TField'      Name.Variable
'        '    Text
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'cl'          Name.Builtin
'osedlist'    Name.Variable
' '           Text
'; ebx contains the target TField' Comment.Single
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'al'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ebx'         Name.Builtin
')'           Punctuation
'.x'          Name.Variable
'],'          Punctuation
' '           Text
'al'          Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'al'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ebx'         Name.Builtin
')'           Punctuation
'.y'          Name.Variable
'],'          Punctuation
' '           Text
'al'          Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.distance' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'ebx'         Name.Builtin
')'           Punctuation
'.distance'   Name.Variable
'],'          Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'inc'         Name.Function
' '           Text
'['           Punctuation
'cl'          Name.Builtin
'osedlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'cl'          Name.Builtin
'osedlistSize' Name.Variable
'],'          Punctuation
' '           Text
'CL'          Name.Builtin
'OSED_LIST_SIZE_MAX' Name.Variable
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@noProblemWithClosedVector' Name.Variable
'\n\n'        Text

'        '    Text
'xor'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ax'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'cl'          Name.Builtin
'osedlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'crash'       Name.Variable
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'cl'          Name.Builtin
'osedOutOfMemory' Name.Variable
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'@noProblemWithClosedVector:' Name.Label
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'addClosed'   Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'addOpen'     Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'@@x'         Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@y'         Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@priority'  Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@distance'  Name.Variable
':'           Punctuation
'dword'       Keyword.Type
'\n\n'        Text

'        '    Text
'xor'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ax'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TPriorityField' Name.Variable
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'openlist'    Name.Variable
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@x'         Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.x'          Name.Variable
'],'          Punctuation
' '           Text
'bl'          Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@y'         Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.y'          Name.Variable
'],'          Punctuation
' '           Text
'bl'          Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'bl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.fromx'      Name.Variable
'],'          Punctuation
' '           Text
'bl'          Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'bl'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.fromy'      Name.Variable
'],'          Punctuation
' '           Text
'bl'          Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@priority'  Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.heuristic'  Name.Variable
'],'          Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@distance'  Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TPriorityField' Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.distance'   Name.Variable
'],'          Punctuation
' '           Text
'ebx'         Name.Builtin
'\n\n'        Text

'        '    Text
'inc'         Name.Function
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'cmp'         Name.Function
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
'],'          Punctuation
' '           Text
'OPEN_LIST_SIZE_MAX' Name.Variable
'\n'          Text

'        '    Text
'jne'         Name.Function
' '           Text
'@noProblem'  Name.Variable
'\n\n'        Text

'        '    Text
'xor'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ax'          Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'crash'       Name.Variable
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'openOutOfMemory' Name.Variable
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'@noProblem:' Name.Label
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
'\n\n'        Text

'PROC'        Keyword
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'ARG'         Keyword
' '           Text
'@@srcx'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@srcy'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@tgtx'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
','           Punctuation
' '           Text
'\\\n'        Text

'            ' Text
'@@tgty'      Name.Variable
':'           Punctuation
'dword'       Keyword.Type
' '           Text
'\\\n'        Text

'        '    Text
'RETURNS'     Name.Variable
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@srcx'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'sub'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgtx'      Name.Variable
']'           Punctuation
'\n\n'        Text

'        '    Text
'jns'         Name.Function
' '           Text
'@noSignChangex' Name.Variable
'\n'          Text

'        '    Text
'neg'         Name.Function
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'@noSignChangex:' Name.Label
'\n'          Text

'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@srcy'      Name.Variable
']'           Punctuation
'\n'          Text

'        '    Text
'sub'         Name.Function
' '           Text
'ebx'         Name.Builtin
','           Punctuation
' '           Text
'['           Punctuation
'@@tgty'      Name.Variable
']'           Punctuation
'\n\n'        Text

'        '    Text
'jns'         Name.Function
' '           Text
'@noSignChangey' Name.Variable
'\n'          Text

'        '    Text
'neg'         Name.Function
' '           Text
'ebx'         Name.Builtin
'\n\n'        Text

'        '    Text
'@noSignChangey:' Name.Label
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ebx'         Name.Builtin
'\n'          Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'di'          Name.Builtin
'stance'      Name.Variable
'\n\n'        Text

'PROC'        Keyword
' '           Text
'cl'          Name.Builtin
'eanData'     Name.Variable
'\n'          Text

'        '    Text
'USES'        Keyword
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'openlistSize' Name.Variable
'],'          Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'cl'          Name.Builtin
'osedlistSize' Name.Variable
'],'          Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.x' Name.Variable
'],'          Punctuation
' '           Text
'-'           Operator
'1'           Literal.Number.Integer
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.y' Name.Variable
'],'          Punctuation
' '           Text
'-'           Operator
'1'           Literal.Number.Integer
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'['           Punctuation
'currentOpen.distance' Name.Variable
'],'          Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n\n'        Text

'        '    Text
'call'        Name.Function
' '           Text
'getLevelWidth' Name.Variable
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n'          Text

'        '    Text
'call'        Name.Function
' '           Text
'getLevelHeight' Name.Variable
'\n'          Text

'        '    Text
'imul'        Name.Function
' '           Text
'ecx'         Name.Builtin
','           Punctuation
' '           Text
'eax'         Name.Builtin
'\n\n'        Text

'        '    Text
'mov'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'offset'      Name.Variable
' '           Text
'backtraceGraph' Name.Variable
'\n'          Text

'@fieldIter:' Name.Label
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.distance'   Name.Variable
'],'          Punctuation
' '           Text
'0ffffffffh'  Literal.Number.Hex
' '           Text
'; Set to approximately +inf' Comment.Single
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.x'          Name.Variable
'],'          Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'mov'         Name.Function
' '           Text
'[('          Punctuation
'TField'      Name.Variable
' '           Text
'ptr'         Name.Variable
' '           Text
'eax'         Name.Builtin
')'           Punctuation
'.y'          Name.Variable
'],'          Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text

'        '    Text
'add'         Name.Function
' '           Text
'eax'         Name.Builtin
','           Punctuation
' '           Text
'SI'          Name.Builtin
'ZE'          Name.Variable
' '           Text
'TField'      Name.Variable
'\n'          Text

'        '    Text
'dec'         Name.Function
' '           Text
'ecx'         Name.Builtin
'\n'          Text

'        '    Text
'jnz'         Name.Function
' '           Text
'@fieldIter'  Name.Variable
'\n\n'        Text

'        '    Text
'ret'         Name.Function
'\n'          Text

'ENDP'        Keyword
' '           Text
'cl'          Name.Builtin
'eanData'     Name.Variable
'\n\n'        Text

'DATASEG'     Keyword
'\n\n'        Text

'openOutOfMemory' Name.Constant
'   '         Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'"Out of openlistSize memory. Hi dev: Please increase$"' Literal.String
'\n'          Text

'closedOutOfMemory' Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
' '           Text
'"Out of closedlistSize memory. Hi dev: Please increase$"' Literal.String
'\n\n'        Text

'; power | discover | walking | sailing | flying' Comment.Single
'\n'          Text

'actionTable' Name.Constant
' '           Keyword.Declaration
'db'          Keyword.Declaration
'  '          Text
'00001101b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';EMPTY'      Comment.Single
'\n'          Text

'                ' Text
'00001101b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';RUBBLE'     Comment.Single
'\n'          Text

'                ' Text
'00000000b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';GRAVEL'     Comment.Single
'\n'          Text

'                ' Text
'00000000b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';LOOSE ROCK' Comment.Single
'\n'          Text

'                ' Text
'00000000b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';HARD ROCK'  Comment.Single
'\n'          Text

'                ' Text
'00000000b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';MASSIVE ROCK' Comment.Single
'\n'          Text

'                ' Text
'00000000b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';KRISTAL SOURCE' Comment.Single
'\n'          Text

'                ' Text
'00000000b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';OREROCK'    Comment.Single
'\n'          Text

'                ' Text
'00001011b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';WATER'      Comment.Single
'\n'          Text

'                ' Text
'00001001b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';LAVA'       Comment.Single
'\n'          Text

'                ' Text
'00001101b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';SNAIL HOLE' Comment.Single
'\n'          Text

'                ' Text
'00001101b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';EROSION'    Comment.Single
'\n'          Text

'                ' Text
'00011101b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';POWER PATH' Comment.Single
'\n'          Text

'                ' Text
'00011101b'   Literal.Number.Bin
','           Punctuation
' '           Text
'\\ '         Text
';BUILDING POWER PATH' Comment.Single
'\n'          Text

'                ' Text
'00011000b'   Literal.Number.Bin
'  '          Text
'\\ '         Text
';BUILDING'   Comment.Single
'\n'          Text

'\n'          Text

'UDATASEG'    Keyword
'\n\n'        Text

'currentType' Name.Constant
'      '      Keyword.Declaration
'dd'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'currentOpen' Name.Constant
'      '      Keyword.Declaration
'TPriorityField' Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n\n'        Text

'openlist'    Name.Constant
'         '   Keyword.Declaration
'TPriorityField' Keyword.Declaration
' '           Text
'OPEN_LIST_SIZE_MAX' Name.Variable
' '           Text
'dup'         Name.Variable
'('           Punctuation
'?'           Name.Variable
')'           Punctuation
'\n'          Text

'openlistSize' Name.Constant
'     '       Keyword.Declaration
'dw'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'closedlist'  Name.Constant
'       '     Keyword.Declaration
'TField'      Keyword.Declaration
' '           Text
'CL'          Name.Builtin
'OSED_LIST_SIZE_MAX' Name.Variable
'       '     Text
'dup'         Name.Variable
'('           Punctuation
'?'           Name.Variable
')'           Punctuation
'\n'          Text

'closedlistSize' Name.Constant
'   '         Keyword.Declaration
'dw'          Keyword.Declaration
' '           Text
'?'           Name.Variable
'\n'          Text

'backtraceGraph' Name.Constant
'   '         Keyword.Declaration
'TField'      Keyword.Declaration
' '           Text
'MAX_LEVEL_SIZE' Name.Variable
'             ' Text
'dup'         Name.Variable
'('           Punctuation
'?'           Name.Variable
')'           Punctuation
'\n\n'        Text

'END'         Keyword
'\n'          Text
