diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-01-03 00:37:48 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-01-03 00:37:48 -0700 |
commit | fcd30be44982cfe79ed777b19b2543fe3e72e239 (patch) | |
tree | 1b8d5f5aebbf828d1da4a2c68c3ed22a40a7cbb7 | |
parent | 8b9a15a755ebc6681ff6be808615e375cb567080 (diff) | |
download | stage-fcd30be44982cfe79ed777b19b2543fe3e72e239.tar.gz stage-fcd30be44982cfe79ed777b19b2543fe3e72e239.tar.bz2 stage-fcd30be44982cfe79ed777b19b2543fe3e72e239.tar.xz stage-fcd30be44982cfe79ed777b19b2543fe3e72e239.zip |
+=, -=, *=, /= works with indexed dicts/lists
-rw-r--r-- | bloodfields.stage | 27 | ||||
-rw-r--r-- | src/parser.y | 4 | ||||
-rw-r--r-- | test.stage | 8 |
3 files changed, 15 insertions, 24 deletions
diff --git a/bloodfields.stage b/bloodfields.stage index 91bee08..58a24a2 100644 --- a/bloodfields.stage +++ b/bloodfields.stage | |||
@@ -78,21 +78,15 @@ function status() | |||
78 | 78 | ||
79 | function look() | 79 | function look() |
80 | { | 80 | { |
81 | display('''You are standing in a field of wheat.'''); | ||
81 | if exists(global.enemy) then | 82 | if exists(global.enemy) then |
82 | { | 83 | { |
83 | display('''You are standing in a field of wheat. You see a ''' + | 84 | display('You see a ' + global.enemy['name'] + ' in front of you.'); |
84 | global.enemy['name'] + ''' in front of you.'''); | ||
85 | } | 85 | } |
86 | else if exists( global.treasure ) then | 86 | else if exists( global.treasure ) then |
87 | { | 87 | { |
88 | display('''You are standing in a field of wheat. You find a ''' + | 88 | display('You find a ' + global.treasure['name'] + ' lying here!'); |
89 | global.treasure['name'] + ''' lying here!'''); | ||
90 | } | 89 | } |
91 | else | ||
92 | { | ||
93 | display('''You are standing in a field of wheat.'''); | ||
94 | } | ||
95 | // status(); | ||
96 | } | 90 | } |
97 | 91 | ||
98 | function mkEnemy() | 92 | function mkEnemy() |
@@ -107,9 +101,8 @@ function mkEnemy() | |||
107 | } | 101 | } |
108 | global.enemy['name'] = global.enemyMods[mod]['name'] + ' ' + | 102 | global.enemy['name'] = global.enemyMods[mod]['name'] + ' ' + |
109 | global.enemy['name']; | 103 | global.enemy['name']; |
110 | global.enemy['attack'] = global.enemy['attack'] + | 104 | global.enemy['attack'] += global.enemyMods[mod]['attack']; |
111 | global.enemyMods[mod]['attack']; | 105 | global.enemy['hp'] += global.enemyMods[mod]['hp']; |
112 | global.enemy['hp'] = global.enemy['hp'] + global.enemyMods[mod]['hp']; | ||
113 | global.enemy['level'] = mod; | 106 | global.enemy['level'] = mod; |
114 | } | 107 | } |
115 | 108 | ||
@@ -137,7 +130,7 @@ function playerAttack() | |||
137 | display('You killed the ' + global.enemy['name'] + '! You gained ' + | 130 | display('You killed the ' + global.enemy['name'] + '! You gained ' + |
138 | xp + ' experience points.'); | 131 | xp + ' experience points.'); |
139 | player.xp += xp; | 132 | player.xp += xp; |
140 | if player.xp >= 100 then | 133 | while player.xp >= 100 do |
141 | { | 134 | { |
142 | player.xp -= 100; | 135 | player.xp -= 100; |
143 | player.level += 1; | 136 | player.level += 1; |
@@ -176,16 +169,12 @@ function enemyAttack() | |||
176 | 169 | ||
177 | situation <<travel>> | 170 | situation <<travel>> |
178 | { | 171 | { |
179 | command: "hi" | ||
180 | { | ||
181 | display("Yup, you're in travel."); | ||
182 | } | ||
183 | |||
184 | enter | 172 | enter |
185 | { | 173 | { |
186 | delete( global.enemy ); | 174 | delete( global.enemy ); |
175 | delete( global.treasure ); | ||
187 | 176 | ||
188 | display('You wander aimlessly through the seemingly endless field of wheat.'); | 177 | display('You wander aimlessly through the endless field of wheat.'); |
189 | 178 | ||
190 | select = random(1,6); | 179 | select = random(1,6); |
191 | if select <= 4 then // 66% of the time, enemy! | 180 | if select <= 4 then // 66% of the time, enemy! |
diff --git a/src/parser.y b/src/parser.y index 2e9eead..2aff29c 100644 --- a/src/parser.y +++ b/src/parser.y | |||
@@ -245,6 +245,10 @@ expr: literal | |||
245 | | expr tokGtEq expr { bld.addNode( AstNode::tCompGtEq ); } | 245 | | expr tokGtEq expr { bld.addNode( AstNode::tCompGtEq ); } |
246 | | '(' expr ')' | 246 | | '(' expr ')' |
247 | | expr '[' expr ']' { bld.addNode( AstNode::tIndex ); } | 247 | | expr '[' expr ']' { bld.addNode( AstNode::tIndex ); } |
248 | | expr '[' expr ']' tokPlusAssign { bld.addNode( AstNode::tIndex ); } expr { bld.addNode( AstNode::tPlusStore ); } | ||
249 | | expr '[' expr ']' tokMinusAssign { bld.addNode( AstNode::tIndex ); } expr { bld.addNode( AstNode::tMinusStore ); } | ||
250 | | expr '[' expr ']' tokTimesAssign { bld.addNode( AstNode::tIndex ); } expr { bld.addNode( AstNode::tMultiplyStore ); } | ||
251 | | expr '[' expr ']' tokDivideAssign { bld.addNode( AstNode::tIndex ); } expr { bld.addNode( AstNode::tDivideStore ); } | ||
248 | | expr '[' expr ']' '=' expr { bld.addNode( AstNode::tInsert ); } | 252 | | expr '[' expr ']' '=' expr { bld.addNode( AstNode::tInsert ); } |
249 | | '[' ']' { bld.addLiteral( Variable( Variable::tList ) ); } | 253 | | '[' ']' { bld.addLiteral( Variable( Variable::tList ) ); } |
250 | | '[' { bld.addLiteral( Variable( Variable::tList ) ); } listValues ']' | 254 | | '[' { bld.addLiteral( Variable( Variable::tList ) ); } listValues ']' |
@@ -17,11 +17,9 @@ situation <<start>> | |||
17 | { | 17 | { |
18 | setup | 18 | setup |
19 | { | 19 | { |
20 | for each i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] do | 20 | global.stuff = {'count': 1}; |
21 | { | 21 | global.stuff['count'] += 5; |
22 | display( random(0.25, 0.5)*10 ); | 22 | display( global.stuff['count'] ); |
23 | } | ||
24 | display( 0.25 * 10.0 ); | ||
25 | exit(); | 23 | exit(); |
26 | } | 24 | } |
27 | 25 | ||