Skip to content

Commit 27767a4

Browse files
committed
Bugfixes with arrays and functions
1 parent 37c0e0a commit 27767a4

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

Gamemodes/Clicker.owpy

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -595,13 +595,13 @@ SaveInput("Left", 2, save_pos - x_offset)
595595
SaveInput("Right", 3, save_pos + x_offset)
596596

597597
%UnlockHero(hero_)
598+
pvar save_code_effect = Last Text Id
598599
Destroy In-World Text(pvar save_code_effect)
599600
Set Hero(Event Player, hero_)
600601
Wait(0.5s)
601602
Big Msg(Event Player, `You Unlocked {}`(Hero Icon String(hero_)))
602603
SuccessSound()
603604
Wait(0.25)
604-
pvar save_code_effect = Last Text Id
605605

606606
Rule "Buy Prestige Item"
607607
Each(Team 1)
@@ -624,19 +624,19 @@ Rule "Check Save Code"
624624
// 3: Right
625625
if pvar save_code == [0, 0, 0, 0, 0]:
626626
UnlockHero(Hero(McCree))
627-
CodeText(Event Player, "Up", "Up", "Up", "Up", "Up", save_pos + Up * 1.25, 2)
627+
CodeText(Event Player, ["Up", "Up", "Up", "Up", "Up"], save_pos + Up * 1.25, 2)
628628
elif pvar save_code == [3, 1, 2, 3, 2]:
629629
UnlockHero(Hero(Soldier: 76))
630-
CodeText(Event Player, "Right", "Down", "Left", "Right", "Left", save_pos + Up * 1.25, 2)
630+
CodeText(Event Player, ["Right", "Down", "Left", "Right", "Left"], save_pos + Up * 1.25, 2)
631631
elif pvar save_code == [0, 2, 2, 1, 3]:
632632
UnlockHero(Hero(Ashe))
633-
CodeText(Event Player, "Up", "Left", "Left", "Down", "Right", save_pos + Up * 1.25, 2)
633+
CodeText(Event Player, ["Up", "Left", "Left", "Down", "Right"], save_pos + Up * 1.25, 2)
634634
elif pvar save_code == [2, 3, 2, 0, 0]:
635635
UnlockHero(Hero(Genji))
636-
CodeText(Event Player, "Left", "Right", "Left", "Up", "Up", save_pos + Up * 1.25, 2)
636+
CodeText(Event Player, ["Left", "Right", "Left", "Up", "Up"], save_pos + Up * 1.25, 2)
637637
elif pvar save_code == [1, 1, 3, 1, 2]:
638638
UnlockHero(Hero(Hanzo))
639-
CodeText(Event Player, "Down", "Down", "Right", "Down", "Left", save_pos + Up * 1.25, 2)
639+
CodeText(Event Player, ["Down", "Down", "Right", "Down", "Left"], save_pos + Up * 1.25, 2)
640640
elif pvar save_code == [2, 0, 1, 0, 3]: // Secrets
641641
Big Msg(Event Player, "Hacked")
642642
// You Unlocked Hidden Save 2

OWScript/AST.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ def __init__(self, name):
376376
def __repr__(self):
377377
return self.name
378378

379-
def halt(self):
379+
def halt(self, tp):
380380
return Raw(code='Apply Impulse({}, Down, Multiply(0.001, 0.001), To World, Cancel Contrary Motion)'.format(self.name.title()))
381381

382382
class BinaryOp(AST):
@@ -423,8 +423,7 @@ def __init__(self, elements=None):
423423
self.elements = elements or []
424424

425425
def append(self, tp, elem):
426-
if type(elem) == GlobalVar:
427-
elem = tp.scope.get(elem.name).value
426+
elem = Raw(code=tp.visit(elem, tp.scope))
428427
self.elements.append(elem)
429428

430429
def index(self, elem):

OWScript/Transpiler.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,14 @@ def range(tp, *args):
5454
return array
5555

5656
def ceil(tp, n):
57-
node = OWID(name='Round To Integer')
57+
node = OWID(name='Round To Integer', args=(Number, Any))
58+
node._pos = n._pos
5859
node.children.extend([n, OWID(name='Up')])
5960
return node
6061

6162
def floor(tp, n):
62-
node = OWID(name='Round To Integer')
63+
node = OWID(name='Round To Integer', args=(Number, Any))
64+
node._pos = n._pos
6365
node.children.extend([n, OWID(name='Down')])
6466
return node
6567

@@ -139,6 +141,7 @@ def visitRaw(self, node, scope):
139141

140142
def visitFunction(self, node, scope):
141143
scope.assign('gvar_' + node.name, node)
144+
node.closure = scope
142145
return ''
143146

144147
def visitBlock(self, node, scope):
@@ -378,7 +381,10 @@ def visitGlobalVar(self, node, scope):
378381
return self.visit(var, scope)
379382
elif type(var.value) == String:
380383
return var.value.value
381-
code = 'Value In Array(Global Variable(A), {})'.format(var.index)
384+
if var.index != None:
385+
code = 'Value In Array(Global Variable(A), {})'.format(var.index)
386+
else:
387+
code = '{}'.format(var.value)
382388
return code
383389

384390
def visitPlayerVar(self, node, scope):
@@ -454,12 +460,11 @@ def visitItem(self, node, scope):
454460
print('DEBUG - Item Error 01:', ex)
455461
else:
456462
try:
457-
print(node.index, scope, node.parent.name)
458463
index = int(scope.get(node.index.name).value)
459464
item = scope.get(node.parent.name).value[index]
460465
return self.visit(item, scope)
461466
except Exception as er:
462-
print('DEBUG - Item Error 02:', er)
467+
#print('DEBUG - Item Error 02:', er)
463468
return 'Value In Array(' + self.visit(node.parent, scope) + ', ' + self.visit(node.index, scope) + ')'
464469

465470
def visitAttribute(self, node, scope):
@@ -480,20 +485,23 @@ def visitCall(self, node, scope):
480485
if type(parent) == Attribute:
481486
if type(base_node) == Variable:
482487
method = getattr(base_node.value, parent.name)
488+
elif type(base_node) in (GlobalVar, PlayerVar):
489+
method = getattr(scope.get(base_node.name).value, parent.name)
483490
else:
484491
method = getattr(base_node, parent.name)
485492
try:
486493
self.scope = scope
487494
result = method(self, *node.args)
488495
except TypeError as ex:
496+
print('Invalid method arguments:', ex)
489497
raise Errors.InvalidParameter("'{}' method received invalid arguments".format(parent.name), pos=parent._pos)
490498
if result:
491499
lines.append(self.visit(result, scope))
492500
return ';\n'.join(lines)
493501
elif type(parent) in (GlobalVar, PlayerVar):
494502
func_name = parent.name[5:]
495503
else:
496-
print('DEBUG - called by:', type(parent))
504+
print('DEBUG - Call Origin:', type(parent))
497505
if not base_node:
498506
raise Errors.NameError('Undefined function \'{}\''.format(base_name[5:]), pos=parent._pos)
499507
func = base_node if type(base_node) != Variable else base_node.value

0 commit comments

Comments
 (0)