Willow and the Storm

Jun 21, 2010 at 1:24 AM
Cold Agony of Resolute Vacuum
"Heavy swords for sale. Suitable for most RPG Protagonists. Apply now!"
Join Date: Jan 1, 2008
Location: Elsewhere
Posts: 1973
I just had one of those things...
A headache with pictures.

Anyways, what if the variable commands directly manipulated normal flags?
 
Jun 21, 2010 at 2:06 AM
Lvl 1
Forum Moderator
"Life begins and ends with Nu."
Join Date: May 28, 2008
Location: PMMM MMO
Posts: 3713
Age: 31
DragonBoots said:
Anyways, what if the variable commands directly manipulated normal flags?

Isn't that what I suggested to do?

Unless you're talking about a different bunch of "normal" flags.
 
Jun 21, 2010 at 5:11 AM
Administrator
Forum Administrator
"Life begins and ends with Nu."
Join Date: Jul 15, 2007
Location: Australia
Posts: 6211
Age: 38
DragonBoots said:
Anyways, what if the variable commands directly manipulated normal flags?
You lose over half of your available flags that way.

How about we use both? First 30 variables (V000 to V029) can be stored variables (flag data) and the rest (V30 onwards) are runtime variables (broken skipflag data). This way you only use up the last 500 flags for variables (leaving you with 7500 for flag use) and you don't save data that you only want to exist at runtime.
 
Jun 21, 2010 at 6:15 AM
Cold Agony of Resolute Vacuum
"Heavy swords for sale. Suitable for most RPG Protagonists. Apply now!"
Join Date: Jan 1, 2008
Location: Elsewhere
Posts: 1973
ANYWAYS.

If I may grab the wheel before we barrelroll into argumentation, let us remember why the whole variable-thing came up:

Turning this...

Code:
//Limit Notice
#0099
<KEY<MSGYou can't carry any more of this.<NOD<EVE0000

//Item 01 - Flags 100-107; Events 100 and 109
#0100
<FLJ0107:0099<FLJ0106:0108<FLJ0105:0107<FLJ0104:0106<FLJ0103:0105<FLJ0102:0104<FLJ0101:0103<FLJ0100:0102<ITJ0001:0101<IT+0001<EVE0000
#0101
<FL+0100<EVE0000
#0102
<FL+0101<EVE0000
#0103
<FL+0102<EVE0000
#0104
<FL+0103<EVE0000
#0105
<FL+0104<EVE0000
#0106
<FL+0105<EVE0000
#0107
<FL+0106<EVE0000
#0108
<FL+0107<EVE0000
#0109
<FLJ0107:0110<FLJ0106:0111<FLJ0105:0112<FLJ0104:0113<FLJ0103:0114<FLJ0102:0115<FLJ0101:0116<FLJ0100:0117<IT-0001<EVE0000
#0110
<FL-0107<EVE0000
#0111
<FL-0106<EVE0000
#0112
<FL-0105<EVE0000
#0113
<FL-0104<EVE0000
#0114
<FL-0103<EVE0000
#0115
<FL-0102<EVE0000
#0116
<FL-0101<EVE0000
#0117
<FL-0100<EVE0000

//Item 02 - Flags 108-115; Events 118 and 127
#0118
<FLJ0115:0099<FLJ0114:0126<FLJ0113:0125<FLJ0112:0124<FLJ0111:0123<FLJ0110:0122<FLJ0109:0121<FLJ0108:0120<ITJ0002:0119<IT+0002<EVE0000
#0119
<FL+0108<EVE0000
#0120
<FL+0109<EVE0000
#0121
<FL+0110<EVE0000
#0122
<FL+0111<EVE0000
#0123
<FL+0112<EVE0000
#0124
<FL+0113<EVE0000
#0125
<FL+0114<EVE0000
#0126
<FL+0115<EVE0000
#0127
<FLJ0115:0128<FLJ0114:0129<FLJ0113:0130<FLJ0112:0131<FLJ0111:0132<FLJ0110:0133<FLJ0109:0134<FLJ0108:0135<IT-0002<EVE0000
#0128
<FL-0115<EVE0000
#0129
<FL-0114<EVE0000
#0130
<FL-0113<EVE0000
#0131
<FL-0112<EVE0000
#0132
<FL-0111<EVE0000
#0133
<FL-0110<EVE0000
#0134
<FL-0109<EVE0000
#0135
<FL-0108<EVE0000

//Item 03 - Flags 116-123; Events 136 and 145
#0136
<FLJ0123:0099<FLJ0122:0144<FLJ0121:0143<FLJ0120:0142<FLJ0119:0141<FLJ0118:0140<FLJ0117:0139<FLJ0116:0138<ITJ0003:0137<IT+0003<EVE0000
#0137
<FL+0116<EVE0000
#0138
<FL+0117<EVE0000
#0139
<FL+0118<EVE0000
#0140
<FL+0119<EVE0000
#0141
<FL+0120<EVE0000
#0142
<FL+0121<EVE0000
#0143
<FL+0122<EVE0000
#0144
<FL+0123<EVE0000
#0145
<FLJ0123:0146<FLJ0122:0147<FLJ0121:0148<FLJ0120:0149<FLJ0119:0150<FLJ0118:0151<FLJ0117:0152<FLJ0116:0153<IT-0003<EVE0000
#0146
<FL-0123<EVE0000
#0147
<FL-0122<EVE0000
#0148
<FL-0121<EVE0000
#0149
<FL-0120<EVE0000
#0150
<FL-0119<EVE0000
#0151
<FL-0118<EVE0000
#0152
<FL-0117<EVE0000
#0153
<FL-0116<EVE0000

//Item 04 - Flags 124-131; Events 154 and 163
#0154
<FLJ0131:0099<FLJ0130:0162<FLJ0129:0161<FLJ0128:0160<FLJ0127:0159<FLJ0126:0158<FLJ0125:0157<FLJ0124:0156<ITJ0004:0155<IT+0004<EVE0000
#0155
<FL+0124<EVE0000
#0156
<FL+0125<EVE0000
#0157
<FL+0126<EVE0000
#0158
<FL+0127<EVE0000
#0159
<FL+0128<EVE0000
#0160
<FL+0129<EVE0000
#0161
<FL+0130<EVE0000
#0162
<FL+0131<EVE0000
#0163
<FLJ0131:0164<FLJ0130:0165<FLJ0129:0166<FLJ0128:0167<FLJ0127:0168<FLJ0126:0169<FLJ0125:0170<FLJ0124:0171<IT-0004<EVE0000
#0164
<FL-0131<EVE0000
#0165
<FL-0130<EVE0000
#0166
<FL-0129<EVE0000
#0167
<FL-0128<EVE0000
#0168
<FL-0127<EVE0000
#0169
<FL-0126<EVE0000
#0170
<FL-0125<EVE0000
#0171
<FL-0124<EVE0000

//Item 05 - Flags 132-139; Events 172 and 181
#0172
<FLJ0139:0099<FLJ0138:0180<FLJ0137:0179<FLJ0136:0178<FLJ0135:0177<FLJ0134:0176<FLJ0133:0175<FLJ0132:0174<ITJ0005:0173<IT+0005<EVE0000
#0173
<FL+0132<EVE0000
#0174
<FL+0133<EVE0000
#0175
<FL+0134<EVE0000
#0176
<FL+0135<EVE0000
#0177
<FL+0136<EVE0000
#0178
<FL+0137<EVE0000
#0179
<FL+0138<EVE0000
#0180
<FL+0139<EVE0000
#0181
<FLJ0139:0182<FLJ0138:0183<FLJ0137:0184<FLJ0136:0185<FLJ0135:0186<FLJ0134:0187<FLJ0133:0188<FLJ0132:0189<IT-0005<EVE0000
#0182
<FL-0139<EVE0000
#0183
<FL-0138<EVE0000
#0184
<FL-0137<EVE0000
#0185
<FL-0136<EVE0000
#0186
<FL-0135<EVE0000
#0187
<FL-0134<EVE0000
#0188
<FL-0133<EVE0000
#0189
<FL-0132<EVE0000

//Item 06 - Flags 140-147; Events 190 and 199
#0190
<FLJ0147:0099<FLJ0146:0198<FLJ0145:0197<FLJ0144:0196<FLJ0143:0195<FLJ0142:0194<FLJ0141:0193<FLJ0140:0192<ITJ0006:0191<IT+0006<EVE0000
#0191
<FL+0140<EVE0000
#0192
<FL+0141<EVE0000
#0193
<FL+0142<EVE0000
#0194
<FL+0143<EVE0000
#0195
<FL+0144<EVE0000
#0196
<FL+0145<EVE0000
#0197
<FL+0146<EVE0000
#0198
<FL+0147<EVE0000
#0199
<FLJ0147:0200<FLJ0146:0201<FLJ0145:0202<FLJ0144:0203<FLJ0143:0204<FLJ0142:0205<FLJ0141:0206<FLJ0140:0207<IT-0006<EVE0000
#0200
<FL-0147<EVE0000
#0201
<FL-0146<EVE0000
#0202
<FL-0145<EVE0000
#0203
<FL-0144<EVE0000
#0204
<FL-0143<EVE0000
#0205
<FL-0142<EVE0000
#0206
<FL-0141<EVE0000
#0207
<FL-0140<EVE0000

//Item 07 - Flags 148-155; Events 208 and 217
#0208
<FLJ0155:0099<FLJ0154:0216<FLJ0153:0215<FLJ0152:0214<FLJ0151:0213<FLJ0150:0212<FLJ0149:0211<FLJ0148:0210<ITJ0007:0209<IT+0007<EVE0000
#0209
<FL+0148<EVE0000
#0210
<FL+0149<EVE0000
#0211
<FL+0150<EVE0000
#0212
<FL+0151<EVE0000
#0213
<FL+0152<EVE0000
#0214
<FL+0153<EVE0000
#0215
<FL+0154<EVE0000
#0216
<FL+0155<EVE0000
#0217
<FLJ0155:0218<FLJ0154:0219<FLJ0153:0220<FLJ0152:0221<FLJ0151:0222<FLJ0150:0223<FLJ0149:0224<FLJ0148:0225<IT-0007<EVE0000
#0218
<FL-0155<EVE0000
#0219
<FL-0154<EVE0000
#0220
<FL-0153<EVE0000
#0221
<FL-0152<EVE0000
#0222
<FL-0151<EVE0000
#0223
<FL-0150<EVE0000
#0224
<FL-0149<EVE0000
#0225
<FL-0148<EVE0000

//Item 08 - Flags 156-163; Events 226 and 235
#0226
<FLJ0163:0099<FLJ0162:0234<FLJ0161:0233<FLJ0160:0232<FLJ0159:0231<FLJ0158:0230<FLJ0157:0229<FLJ0156:0228<ITJ0008:0227<IT+0008<EVE0000
#0227
<FL+0156<EVE0000
#0228
<FL+0157<EVE0000
#0229
<FL+0158<EVE0000
#0230
<FL+0159<EVE0000
#0231
<FL+0160<EVE0000
#0232
<FL+0161<EVE0000
#0233
<FL+0162<EVE0000
#0234
<FL+0163<EVE0000
#0235
<FLJ0163:0236<FLJ0162:0237<FLJ0161:0238<FLJ0160:0239<FLJ0159:0240<FLJ0158:0241<FLJ0157:0242<FLJ0156:0243<IT-0008<EVE0000
#0236
<FL-0163<EVE0000
#0237
<FL-0162<EVE0000
#0238
<FL-0161<EVE0000
#0239
<FL-0160<EVE0000
#0240
<FL-0159<EVE0000
#0241
<FL-0158<EVE0000
#0242
<FL-0157<EVE0000
#0243
<FL-0156<EVE0000

//Item 09 - Flags 164-171; Events 244 and 253
#0244
<FLJ0171:0099<FLJ0170:0252<FLJ0169:0251<FLJ0168:0250<FLJ0167:0249<FLJ0166:0248<FLJ0165:0247<FLJ0164:0246<ITJ0009:0245<IT+0009<EVE0000
#0245
<FL+0164<EVE0000
#0246
<FL+0165<EVE0000
#0247
<FL+0166<EVE0000
#0248
<FL+0167<EVE0000
#0249
<FL+0168<EVE0000
#0250
<FL+0169<EVE0000
#0251
<FL+0170<EVE0000
#0252
<FL+0171<EVE0000
#0253
<FLJ0171:0254<FLJ0170:0255<FLJ0169:0256<FLJ0168:0257<FLJ0167:0258<FLJ0166:0259<FLJ0165:0260<FLJ0164:0261<IT-0009<EVE0000
#0254
<FL-0171<EVE0000
#0255
<FL-0170<EVE0000
#0256
<FL-0169<EVE0000
#0257
<FL-0168<EVE0000
#0258
<FL-0167<EVE0000
#0259
<FL-0166<EVE0000
#0260
<FL-0165<EVE0000
#0261
<FL-0164<EVE0000

//Item 10 - Flags 172-179; Events 262 and 271
#0262
<FLJ0179:0099<FLJ0178:0270<FLJ0177:0269<FLJ0176:0268<FLJ0175:0267<FLJ0174:0266<FLJ0173:0265<FLJ0172:0264<ITJ0010:0263<IT+0010<EVE0000
#0263
<FL+0172<EVE0000
#0264
<FL+0173<EVE0000
#0265
<FL+0174<EVE0000
#0266
<FL+0175<EVE0000
#0267
<FL+0176<EVE0000
#0268
<FL+0177<EVE0000
#0269
<FL+0178<EVE0000
#0270
<FL+0179<EVE0000
#0271
<FLJ0179:0272<FLJ0178:0273<FLJ0177:0274<FLJ0176:0275<FLJ0175:0276<FLJ0174:0277<FLJ0173:0278<FLJ0172:0279<IT-0010<EVE0000
#0272
<FL-0179<EVE0000
#0273
<FL-0178<EVE0000
#0274
<FL-0177<EVE0000
#0275
<FL-0176<EVE0000
#0276
<FL-0175<EVE0000
#0277
<FL-0174<EVE0000
#0278
<FL-0173<EVE0000
#0279
<FL-0172<EVE0000

//Item 11 - Flags 180-187; Events 280 and 289
#0280
<FLJ0187:0099<FLJ0186:0288<FLJ0185:0287<FLJ0184:0286<FLJ0183:0285<FLJ0182:0284<FLJ0181:0283<FLJ0180:0282<ITJ0011:0281<IT+0011<EVE0000
#0281
<FL+0180<EVE0000
#0282
<FL+0181<EVE0000
#0283
<FL+0182<EVE0000
#0284
<FL+0183<EVE0000
#0285
<FL+0184<EVE0000
#0286
<FL+0185<EVE0000
#0287
<FL+0186<EVE0000
#0288
<FL+0187<EVE0000
#0289
<FLJ0187:0290<FLJ0186:0291<FLJ0185:0292<FLJ0184:0293<FLJ0183:0294<FLJ0182:0295<FLJ0181:0296<FLJ0180:0297<IT-0011<EVE0000
#0290
<FL-0187<EVE0000
#0291
<FL-0186<EVE0000
#0292
<FL-0185<EVE0000
#0293
<FL-0184<EVE0000
#0294
<FL-0183<EVE0000
#0295
<FL-0182<EVE0000
#0296
<FL-0181<EVE0000
#0297
<FL-0180<EVE0000

//Item 12 - Flags 188-195; Events 298 and 307
#0298
<FLJ0195:0099<FLJ0194:0306<FLJ0193:0305<FLJ0192:0304<FLJ0191:0303<FLJ0190:0302<FLJ0189:0301<FLJ0188:0300<ITJ0012:0299<IT+0012<EVE0000
#0299
<FL+0188<EVE0000
#0300
<FL+0189<EVE0000
#0301
<FL+0190<EVE0000
#0302
<FL+0191<EVE0000
#0303
<FL+0192<EVE0000
#0304
<FL+0193<EVE0000
#0305
<FL+0194<EVE0000
#0306
<FL+0195<EVE0000
#0307
<FLJ0195:0308<FLJ0194:0309<FLJ0193:0310<FLJ0192:0311<FLJ0191:0312<FLJ0190:0313<FLJ0189:0314<FLJ0188:0315<IT-0012<EVE0000
#0308
<FL-0195<EVE0000
#0309
<FL-0194<EVE0000
#0310
<FL-0193<EVE0000
#0311
<FL-0192<EVE0000
#0312
<FL-0191<EVE0000
#0313
<FL-0190<EVE0000
#0314
<FL-0189<EVE0000
#0315
<FL-0188<EVE0000

//Item 13 - Flags 196-203; Events 316 and 325
#0316
<FLJ0203:0099<FLJ0202:0324<FLJ0201:0323<FLJ0200:0322<FLJ0199:0321<FLJ0198:0320<FLJ0197:0319<FLJ0196:0318<ITJ0013:0317<IT+0013<EVE0000
#0317
<FL+0196<EVE0000
#0318
<FL+0197<EVE0000
#0319
<FL+0198<EVE0000
#0320
<FL+0199<EVE0000
#0321
<FL+0200<EVE0000
#0322
<FL+0201<EVE0000
#0323
<FL+0202<EVE0000
#0324
<FL+0203<EVE0000
#0325
<FLJ0203:0326<FLJ0202:0327<FLJ0201:0328<FLJ0200:0329<FLJ0199:0330<FLJ0198:0331<FLJ0197:0332<FLJ0196:0333<IT-0013<EVE0000
#0326
<FL-0203<EVE0000
#0327
<FL-0202<EVE0000
#0328
<FL-0201<EVE0000
#0329
<FL-0200<EVE0000
#0330
<FL-0199<EVE0000
#0331
<FL-0198<EVE0000
#0332
<FL-0197<EVE0000
#0333
<FL-0196<EVE0000

//Item 14 - Flags 204-211; Events 334 and 343
#0334
<FLJ0211:0099<FLJ0210:0342<FLJ0209:0341<FLJ0208:0340<FLJ0207:0339<FLJ0206:0338<FLJ0205:0337<FLJ0204:0336<ITJ0014:0335<IT+0014<EVE0000
#0335
<FL+0204<EVE0000
#0336
<FL+0205<EVE0000
#0337
<FL+0206<EVE0000
#0338
<FL+0207<EVE0000
#0339
<FL+0208<EVE0000
#0340
<FL+0209<EVE0000
#0341
<FL+0210<EVE0000
#0342
<FL+0211<EVE0000
#0343
<FLJ0211:0344<FLJ0210:0345<FLJ0209:0346<FLJ0208:0347<FLJ0207:0348<FLJ0206:0349<FLJ0205:0350<FLJ0204:0351<IT-0014<EVE0000
#0344
<FL-0211<EVE0000
#0345
<FL-0210<EVE0000
#0346
<FL-0209<EVE0000
#0347
<FL-0208<EVE0000
#0348
<FL-0207<EVE0000
#0349
<FL-0206<EVE0000
#0350
<FL-0205<EVE0000
#0351
<FL-0204<EVE0000

//Item 15 - Flags 212-219; Events 352 and 361
#0352
<FLJ0219:0099<FLJ0218:0360<FLJ0217:0359<FLJ0216:0358<FLJ0215:0357<FLJ0214:0356<FLJ0213:0355<FLJ0212:0354<ITJ0015:0353<IT+0015<EVE0000
#0353
<FL+0212<EVE0000
#0354
<FL+0213<EVE0000
#0355
<FL+0214<EVE0000
#0356
<FL+0215<EVE0000
#0357
<FL+0216<EVE0000
#0358
<FL+0217<EVE0000
#0359
<FL+0218<EVE0000
#0360
<FL+0219<EVE0000
#0361
<FLJ0219:0362<FLJ0218:0363<FLJ0217:0364<FLJ0216:0365<FLJ0215:0366<FLJ0214:0367<FLJ0213:0368<FLJ0212:0369<IT-0015<EVE0000
#0362
<FL-0219<EVE0000
#0363
<FL-0218<EVE0000
#0364
<FL-0217<EVE0000
#0365
<FL-0216<EVE0000
#0366
<FL-0215<EVE0000
#0367
<FL-0214<EVE0000
#0368
<FL-0213<EVE0000
#0369
<FL-0212<EVE0000

//Item 16 - Flags 220-227; Events 370 and 379
#0370
<FLJ0227:0099<FLJ0226:0378<FLJ0225:0377<FLJ0224:0376<FLJ0223:0375<FLJ0222:0374<FLJ0221:0373<FLJ0220:0372<ITJ0016:0371<IT+0016<EVE0000
#0371
<FL+0220<EVE0000
#0372
<FL+0221<EVE0000
#0373
<FL+0222<EVE0000
#0374
<FL+0223<EVE0000
#0375
<FL+0224<EVE0000
#0376
<FL+0225<EVE0000
#0377
<FL+0226<EVE0000
#0378
<FL+0227<EVE0000
#0379
<FLJ0227:0380<FLJ0226:0381<FLJ0225:0382<FLJ0224:0383<FLJ0223:0384<FLJ0222:0385<FLJ0221:0386<FLJ0220:0387<IT-0016<EVE0000
#0380
<FL-0227<EVE0000
#0381
<FL-0226<EVE0000
#0382
<FL-0225<EVE0000
#0383
<FL-0224<EVE0000
#0384
<FL-0223<EVE0000
#0385
<FL-0222<EVE0000
#0386
<FL-0221<EVE0000
#0387
<FL-0220<EVE0000

//Item 17 - Flags 228-235; Events 388 and 397
#0388
<FLJ0235:0099<FLJ0234:0396<FLJ0233:0395<FLJ0232:0394<FLJ0231:0393<FLJ0230:0392<FLJ0229:0391<FLJ0228:0390<ITJ0017:0389<IT+0017<EVE0000
#0389
<FL+0228<EVE0000
#0390
<FL+0229<EVE0000
#0391
<FL+0230<EVE0000
#0392
<FL+0231<EVE0000
#0393
<FL+0232<EVE0000
#0394
<FL+0233<EVE0000
#0395
<FL+0234<EVE0000
#0396
<FL+0235<EVE0000
#0397
<FLJ0235:0398<FLJ0234:0399<FLJ0233:0400<FLJ0232:0401<FLJ0231:0402<FLJ0230:0403<FLJ0229:0404<FLJ0228:0405<IT-0017<EVE0000
#0398
<FL-0235<EVE0000
#0399
<FL-0234<EVE0000
#0400
<FL-0233<EVE0000
#0401
<FL-0232<EVE0000
#0402
<FL-0231<EVE0000
#0403
<FL-0230<EVE0000
#0404
<FL-0229<EVE0000
#0405
<FL-0228<EVE0000

//Item 18 - Flags 236-243; Events 406 and 415
#0406
<FLJ0243:0099<FLJ0242:0414<FLJ0241:0413<FLJ0240:0412<FLJ0239:0411<FLJ0238:0410<FLJ0237:0409<FLJ0236:0408<ITJ0018:0407<IT+0018<EVE0000
#0407
<FL+0236<EVE0000
#0408
<FL+0237<EVE0000
#0409
<FL+0238<EVE0000
#0410
<FL+0239<EVE0000
#0411
<FL+0240<EVE0000
#0412
<FL+0241<EVE0000
#0413
<FL+0242<EVE0000
#0414
<FL+0243<EVE0000
#0415
<FLJ0243:0416<FLJ0242:0417<FLJ0241:0418<FLJ0240:0419<FLJ0239:0420<FLJ0238:0421<FLJ0237:0422<FLJ0236:0423<IT-0018<EVE0000
#0416
<FL-0243<EVE0000
#0417
<FL-0242<EVE0000
#0418
<FL-0241<EVE0000
#0419
<FL-0240<EVE0000
#0420
<FL-0239<EVE0000
#0421
<FL-0238<EVE0000
#0422
<FL-0237<EVE0000
#0423
<FL-0236<EVE0000

//Item 19 - Flags 244-251; Events 424 and 433
#0424
<FLJ0251:0099<FLJ0250:0432<FLJ0249:0431<FLJ0248:0430<FLJ0247:0429<FLJ0246:0428<FLJ0245:0427<FLJ0244:0426<ITJ0019:0425<IT+0019<EVE0000
#0425
<FL+0244<EVE0000
#0426
<FL+0245<EVE0000
#0427
<FL+0246<EVE0000
#0428
<FL+0247<EVE0000
#0429
<FL+0248<EVE0000
#0430
<FL+0249<EVE0000
#0431
<FL+0250<EVE0000
#0432
<FL+0251<EVE0000
#0433
<FLJ0251:0434<FLJ0250:0435<FLJ0249:0436<FLJ0248:0437<FLJ0247:0438<FLJ0246:0439<FLJ0245:0440<FLJ0244:0441<IT-0019<EVE0000
#0434
<FL-0251<EVE0000
#0435
<FL-0250<EVE0000
#0436
<FL-0249<EVE0000
#0437
<FL-0248<EVE0000
#0438
<FL-0247<EVE0000
#0439
<FL-0246<EVE0000
#0440
<FL-0245<EVE0000
#0441
<FL-0244<EVE0000

//Item 20 - Flags 252-259; Events 442 and 451
#0442
<FLJ0259:0099<FLJ0258:0450<FLJ0257:0449<FLJ0256:0448<FLJ0255:0447<FLJ0254:0446<FLJ0253:0445<FLJ0252:0444<ITJ0020:0443<IT+0020<EVE0000
#0443
<FL+0252<EVE0000
#0444
<FL+0253<EVE0000
#0445
<FL+0254<EVE0000
#0446
<FL+0255<EVE0000
#0447
<FL+0256<EVE0000
#0448
<FL+0257<EVE0000
#0449
<FL+0258<EVE0000
#0450
<FL+0259<EVE0000
#0451
<FLJ0259:0452<FLJ0258:0453<FLJ0257:0454<FLJ0256:0455<FLJ0255:0456<FLJ0254:0457<FLJ0253:0458<FLJ0252:0459<IT-0020<EVE0000
#0452
<FL-0259<EVE0000
#0453
<FL-0258<EVE0000
#0454
<FL-0257<EVE0000
#0455
<FL-0256<EVE0000
#0456
<FL-0255<EVE0000
#0457
<FL-0254<EVE0000
#0458
<FL-0253<EVE0000
#0459
<FL-0252<EVE0000

//Item 21 - Flags 260-267; Events 460 and 469
#0460
<FLJ0267:0099<FLJ0266:0468<FLJ0265:0467<FLJ0264:0466<FLJ0263:0465<FLJ0262:0464<FLJ0261:0463<FLJ0260:0462<ITJ0021:0461<IT+0021<EVE0000
#0461
<FL+0260<EVE0000
#0462
<FL+0261<EVE0000
#0463
<FL+0262<EVE0000
#0464
<FL+0263<EVE0000
#0465
<FL+0264<EVE0000
#0466
<FL+0265<EVE0000
#0467
<FL+0266<EVE0000
#0468
<FL+0267<EVE0000
#0469
<FLJ0267:0470<FLJ0266:0471<FLJ0265:0472<FLJ0264:0473<FLJ0263:0474<FLJ0262:0475<FLJ0261:0476<FLJ0260:0477<IT-0021<EVE0000
#0470
<FL-0267<EVE0000
#0471
<FL-0266<EVE0000
#0472
<FL-0265<EVE0000
#0473
<FL-0264<EVE0000
#0474
<FL-0263<EVE0000
#0475
<FL-0262<EVE0000
#0476
<FL-0261<EVE0000
#0477
<FL-0260<EVE0000

//Item 22 - Flags 268-275; Events 478 and 487
#0478
<FLJ0275:0099<FLJ0274:0486<FLJ0273:0485<FLJ0272:0484<FLJ0271:0483<FLJ0270:0482<FLJ0269:0481<FLJ0268:0480<ITJ0022:0479<IT+0022<EVE0000
#0479
<FL+0268<EVE0000
#0480
<FL+0269<EVE0000
#0481
<FL+0270<EVE0000
#0482
<FL+0271<EVE0000
#0483
<FL+0272<EVE0000
#0484
<FL+0273<EVE0000
#0485
<FL+0274<EVE0000
#0486
<FL+0275<EVE0000
#0487
<FLJ0275:0488<FLJ0274:0489<FLJ0273:0490<FLJ0272:0491<FLJ0271:0492<FLJ0270:0493<FLJ0269:0494<FLJ0268:0495<IT-0022<EVE0000
#0488
<FL-0275<EVE0000
#0489
<FL-0274<EVE0000
#0490
<FL-0273<EVE0000
#0491
<FL-0272<EVE0000
#0492
<FL-0271<EVE0000
#0493
<FL-0270<EVE0000
#0494
<FL-0269<EVE0000
#0495
<FL-0268<EVE0000

//Item 23 - Flags 276-283; Events 496 and 505
#0496
<FLJ0283:0099<FLJ0282:0504<FLJ0281:0503<FLJ0280:0502<FLJ0279:0501<FLJ0278:0500<FLJ0277:0499<FLJ0276:0498<ITJ0023:0497<IT+0023<EVE0000
#0497
<FL+0276<EVE0000
#0498
<FL+0277<EVE0000
#0499
<FL+0278<EVE0000
#0500
<FL+0279<EVE0000
#0501
<FL+0280<EVE0000
#0502
<FL+0281<EVE0000
#0503
<FL+0282<EVE0000
#0504
<FL+0283<EVE0000
#0505
<FLJ0283:0506<FLJ0282:0507<FLJ0281:0508<FLJ0280:0509<FLJ0279:0510<FLJ0278:0511<FLJ0277:0512<FLJ0276:0513<IT-0023<EVE0000
#0506
<FL-0283<EVE0000
#0507
<FL-0282<EVE0000
#0508
<FL-0281<EVE0000
#0509
<FL-0280<EVE0000
#0510
<FL-0279<EVE0000
#0511
<FL-0278<EVE0000
#0512
<FL-0277<EVE0000
#0513
<FL-0276<EVE0000

//Item 24 - Flags 284-291; Events 514 and 523
#0514
<FLJ0291:0099<FLJ0290:0522<FLJ0289:0521<FLJ0288:0520<FLJ0287:0519<FLJ0286:0518<FLJ0285:0517<FLJ0284:0516<ITJ0024:0515<IT+0024<EVE0000
#0515
<FL+0284<EVE0000
#0516
<FL+0285<EVE0000
#0517
<FL+0286<EVE0000
#0518
<FL+0287<EVE0000
#0519
<FL+0288<EVE0000
#0520
<FL+0289<EVE0000
#0521
<FL+0290<EVE0000
#0522
<FL+0291<EVE0000
#0523
<FLJ0291:0524<FLJ0290:0525<FLJ0289:0526<FLJ0288:0527<FLJ0287:0528<FLJ0286:0529<FLJ0285:0530<FLJ0284:0531<IT-0024<EVE0000
#0524
<FL-0291<EVE0000
#0525
<FL-0290<EVE0000
#0526
<FL-0289<EVE0000
#0527
<FL-0288<EVE0000
#0528
<FL-0287<EVE0000
#0529
<FL-0286<EVE0000
#0530
<FL-0285<EVE0000
#0531
<FL-0284<EVE0000

Into something FAR more sane.

More to the point, smaller scripts mean more items and junk.
Which means, if I *really* wanted, I could create a far more complex alchemy system. :3
More to the point, I've decided how I want it for WatS.
Ze ball ish rollin'.
 
Jun 21, 2010 at 1:26 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Fun facts about skipflags:
1) They are a bitch
2) There are only 8 bytes worth, aka 2 DWORDS or 4 WORDS or one QWORD or or 64 BITS.
3) Right after Skipflags, Flags start, so if you set <SK+0064 you're actually setting <FL+0000
4) they are located at 49dd98

This is why Pixel never used high values for skipflags because there were no high values.
By the way I hate skipflags.

Anyway I think it would be smart to have one command to do the work of many.

<VAOXXXX:YYYY?$
XXXX - The variable # being acted upon
YYYY - The number
? - Type modifier - If == V, then YYYY refers to a variable #, else YYYY is just a number.
$ - Operation to perform. Legal operations include +, -, * and %
 
Jun 21, 2010 at 4:50 PM
Lvl 1
Forum Moderator
"Life begins and ends with Nu."
Join Date: May 28, 2008
Location: PMMM MMO
Posts: 3713
Age: 31
Noxid said:
Fun facts about skipflags:
1) They are a bitch
2) There are only 8 bytes worth, aka 2 DWORDS or 4 WORDS or one QWORD or or 64 BITS.
3) Right after Skipflags, Flags start, so if you set <SK+0064 you're actually setting <FL+0000
4) they are located at 49dd98

I knew it!
And this should go somewhere important so that no one forgets this important information..
 
Jun 21, 2010 at 5:29 PM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
andwhyisit said:
No, because 90% of variables do not need to be saved.
Well, alright then.

DragonBoots said:
=Debugging tools=
<VADXXXX - Dump all variables to flag range starting at X, ending as required
<VAF - Dump all variables as their value + variable number flags (Eg. Var0001 = 1312, so the resulting flag set is 1313)
I can't see these being at all useful.

DragonBoots said:
=Methods=
0000 - Equal (X=Y)
0001 - Greater than (X>Y)
0002 - Less than (X<Y)
0003 - Not equal to (X=/=Y)
0004 - Equal to or greater than (X>/=Y)
0005 - Equal to or less than (X</=Y)
I don't like this; why not use actual operators instead? That is, as follows:

<VAJWWWW:VXXX::==::YYYY - Jump to event W if variable X is equal to Y.
<VAJWWWW:VXXX::<=::YYYY - Jump to event W if variable X is less than or equal to Y.
<VAJWWWW:VXXX::>=::YYYY - Jump to event W if variable X is greater than or equal to Y.
<VAJWWWW:VXXX::<<::YYYY - Jump to event W if variable X is less than Y.
<VAJWWWW:VXXX::>>::YYYY - Jump to event W if variable X is greater than Y.
<VAJWWWW:VXXX::<>::YYYY - Jump to event W if variable X is not equal to Y.

For the record, the numeric values of these would be as follows:
:==: - 11440
:<=: - 11340
:>=: - 11540
:<<: - 11330
:>>: - 11550
:<>: - 11350
And, if you prefer != to <>...
:!=: - 8540

(This assuming that my conversion script is correct, which I think it is. It works for regular numbers, anyway.)

And, assuming you use the VXXX notation for variables, you could do things like the following:
<VAJ1234:V123::==::1234 - Jump to event 1234 if V123 == 1234
<VAJ1234:6621::<=::V021 - Jump to event 1234 if 6621 <= V021
<VAJ0022:V001::<>::V005 - Jump to event 0002 if variables 1 and 5 differ
<VAJ0042:0034::==::0034 - Unconditional jump to event 0042, with the minor bonus that one of the arguments could later be made dependent on a variable

andwhyisit said:
A better debug function would write data directly to a text file.

<VAD - Saves all current variable data to "var.dbg".
Yeah. This method is definitely better.

GIRakaCHEEZER said:
Sounds to me that you really just want to create a programming language, rather than extending the TSC. I'm sure most of the things you want to do in TSC could be achieved by hard coding it in assembly (as in, instead of making all the new TSC functions just get lace to put it in ASM).
We want to make the language a bit easier to use, I guess; it currently has even less features than assembly. And has someone mentions later, hard-coding is not necessarily a good thing.

GIRakaCHEEZER said:
If you know what you need to do, you could pull it off faster with just assembly (heck you could even CALL functions in assembly, a completely foreign concept :rolleyes:).
Depends what you want to do, I guess. Something simple like variables is logical to do in the script, in my opinion.

GIRakaCHEEZER said:
It just feels like you're overdoing the whole TSC thing, since the modifications you guys are suggesting would change it from a scripting language to a mini-programming language. Plus I keep seeing posts that are 2-3 screens long, and I am amazed at how complex you want it to be.
These changes would not change it into a mini-programming language; at most, it would become a mini-assembly language.

DragonBoots said:
For starters, I intend to release the TSC-modified EXE as a modding tool; something for people to try out more advanced scripting (otherwise impossible).
This is a great idea. :D

GIRakaCHEEZER said:
I guess the biggest issue is that adding more and more to the TSC might cause lag-issues, something you wouldn't see with just pure ASM.
This is a somewhat valid point; the TSC parser is horrendously inefficient, apparently.

DragonBoots said:
Basically, rather than writing a fixed processor for each option, write one, and have the appropriate variables passed to it by calling the appropriate event.
Kind of like writing functions! :p

andwhyisit said:
<VDCXXXX is an alright idea I guess, but it is based on the concept of storing variables in the flag data. Plus it also assumes that you only want to declare only one variable which is unlikely.
Yeah, <VDC isn't a particularly good idea really.

DragonBoots said:
<VARXXXX:YYYY:ZZZZ- Put Y into variable form starting at skipflag X via method Z (0000 - Set, 0001 - Add, 0002 - Subtract, 0003 - Multiply, 0004 - Divide and trunicate)
Again, why not actual operators?

<VARVXXX::==::YYYY - Store Y in variable X
<VARVXXX::-=::YYYY - Subtract Y from the value of variable X and store in variable X
<VARVXXX::+=::YYYY - Add Y to the value of variable X and store in variable X
<VARVXXX::*=::YYYY - Multiply Y by the value of variable X and store in variable X
<VARVXXX::/=::YYYY - Divide Y by the value of variable X and store the truncated value in variable X
<VARVXXX::%=::YYYY - Divide Y by the value of variable X and store the remainder in variable X
<VARVXXX::^=::YYYY - Raise Y to the power of the value of variable X and store in variable X
<VARVXXX::|=::YYYY - Combine Y with the value of variable X using bitwise OR and store in variable X
<VARVXXX::&=::YYYY - Combine Y with the value of variable X using bitwise AND and store in variable X
<VARVXXX::mad:=::YYYY - Combine Y with the value of variable X using bitwise XOR and store in variable X
<VARVXXX::<<::YYYY - Bitshift variable X left by Y bits and store in variable X
<VARVXXX::>>::YYYY - Bitshift variable X right by Y bits and store in variable Y

And the actual numbers for information:
:==: - 11440
:-=: - 9840
:+=: - 9640
:*=: - 9540
:/=: - 10040
:%=: - 9040
:^=: - 14740
:|=: - 17740
:&=: - 9140
:mad:=: - 11740
:<<: - 11330
:>>: - 11550

andwhyisit said:
I personally think that to avoid confusion, and for consistency, we should reset all runtime variables on reload. If you closed down the game, opened the game and loaded your save file the runtime variables are not set, so why should they be set when you reload your game without closing it down? Runtime variables aren't skipflags or "skipvariables", we are just using the space occupied by skipflags, not following their behaviour.
Agreed that closing the game and reloading should be equivalent to reloading without closing.

andwhyisit said:
2. Z is dead weight in my opinion. I would rather use 5 different commands for set, add, subtract, store and retrieve (VAR,VA+,VA-,BIS,BIR) then to add 5 redundant characters to every variable-related operation. No offense.
How do you like my idea, in which 2 of those 5 previously redundant characters actually visually indicate the type of comparison?

DragonBoots said:
Anyways, more to the point - What would be a good maximum for storage per-variable?
Anything more than 16 bits would probably be overkill.

DragonBoots said:
However, I'd say 8 would suffice for moist needs.
What about dry needs? Can't forget those! :p

DragonBoots said:
Though the possibility of -0 kinda disturbs me. ^^;
Standard (IEEE) floating-point representations do have a -0; in the standard integer implementation, though, what would be -0 is instead one less than the lowest value.

Noxid said:
How the hell do you use 14 bits for a number D:
Unless you read it bitwise and then calculated the final value, but that's insane.
You can use any number of bits you like for a number. Using 14 bits, though, would mean you have to do it yourself rather than using the hardware's built-in support (though just for reading and writing the number; you could load it into a register or something for operations on the number).

andwhyisit said:
1. While V++ and V-- would be useful, they are a shorthand for <VA±XXXX:0001 and therefore optional.
2. A TSC script can be easily written to accommodate saving to flag data in a variable-driven TSC, so a command for this use is purely optional.
3. I already made a point about multiplication and division, it's unnessessary.
I agree with 1 and 2, but I think division and multiplication should definitely be included.

andwhyisit said:
How about we use both? First 30 variables (V000 to V029) can be stored variables (flag data) and the rest (V30 onwards) are runtime variables (broken skipflag data). This way you only use up the last 500 flags for variables (leaving you with 7500 for flag use) and you don't save data that you only want to exist at runtime.
This seems a bit silly...

Noxid said:
<VAOXXXX:YYYY?$
XXXX - The variable # being acted upon
YYYY - The number
? - Type modifier - If == V, then YYYY refers to a variable #, else YYYY is just a number.
$ - Operation to perform. Legal operations include +, -, * and %
What about this instead?
<VAOXXXX$YYYY
XXXX - The variable to change (less than 1000)
YYYY - The right operand
$ - The operator; one of =+-*/%^&|@ as described further up


...okay, now that I've responded to a good chunk of the thread, here's my suggestions. And in order to partially avert "too long, didn't read", I'll make a separate post for them.
 
Jun 21, 2010 at 5:49 PM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
Okay. So, here's my proposal for the whole variables thing.

First of all, the VXXX notation to substitute a variable into a command seems to be to be pretty essential to the whole thing working. However, if an alternate method could be found that does not take up a whole digit, that would be great. In the following descriptions, I'm going to assume that XXXX is of the form VXXX; however, if an alternative way of using a variable in a command was devised, that would no longer be necessary.

Second, obviously "set variable" is the most important command.
<VARXXXX:YYYY - Set variable X to value Y

Next, we need a way to modify the variable in a non-absolute way. There's the idea at the bottom of my previous post, but I think I like this one better:
<VAMXXXX::$$::YYYY - Apply Y to variable X using method $$ (one of +=, -=, *=, /=, %=, ^=, &=, |=, @=, <<, >>)
<V++XXXX - Increment variable X
<V--XXXX - Decrement variable X

And we need a way to compare values. This command is not specifically a variable command; it simply compares two values and jumps or doesn't jump. To use a variable in the comparison you need to specify VXXX.
<CPJXXXX::$$::YYYY:WWWW - Compare X to Y using method $$ (==, <=, >=, <<, >>, <>, !=); if the comparison yields TRUE, jump to event W

If you don't add a new section to profile.dat for variables, the ability to save variables to the flags would be useful.
<VASXXXX:YYYY - Save variable X to flag Y; Y must be a multiple of 16, and the 16 flags starting at Y are used to store the variable.
<VALXXXX:YYYY - Load variable X from flag Y; Y must be a multiple of 16, and the 16 flags starting at Y are used to load the variable.

The rest is just optional bonus features.
<VAPXXXX - Print the value of variable X to the message box
<RNDXXXX - Generate a random number and store it in variable X (this could be a bit fiddly due to the need to seed the random number generator the first time it is called)

VAM - VAriable Modify
CPJ - ComPare Jump
VAS - VAriable Save
VAL - VAriable Load
VAP - VAriable Print
RND - RaNDom

This last reply was moved here to increase the chances of it being noticed, because I really want a reply to it.
DragonBoots said:
<*NJ - 5 Negation jumps (Flag, Arms, Items, Equipment, Map (Optional, really))
<MIM - Mimiga Mask expansion
<BUL - Draw a bullet
<SMY - Spawn NPC at player location

And two others I don't recall. ^^;
The negation jumps are a good idea, but I'd like to know more about <MIM, <BUL, and <SMY, as well as the two others you didn't recall.
 
Jun 21, 2010 at 6:24 PM
Cold Agony of Resolute Vacuum
"Heavy swords for sale. Suitable for most RPG Protagonists. Apply now!"
Join Date: Jan 1, 2008
Location: Elsewhere
Posts: 1973
Celtic Minstrel said:
The negation jumps are a good idea, but I'd like to know more about <MIM, <BUL, and <SMY, as well as the two others you didn't recall.

<MIMXXXX - Switch to Mimiga Mask X (Extended character sheet set)
<BULXXXX - Draw bullet X at player location (Mostly for the Wizards' spells Thunderclap Torrent and Brimstone Barrage, though some ally NPC's may trigger this too)
<SMYXXXX - Spawns NPC X at the player location. (Allows for teleport-from-anywhere to be neatly possible, as well as (to be a jerk) the spawning of enemies directly at the player location)

Still can't think of the last two...
 
Jun 21, 2010 at 7:38 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Sorry I don't like putting the modifier between variables.
You'll have to be happy with the way it is.
On the plus side there is only one modifier ($ for operation) because I forgot about VXXX.
 
Jun 21, 2010 at 9:56 PM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
Noxid said:
Sorry I don't like putting the modifier between variables.
Why not? It's how the rest of the world does it. The "modifier", as you call it, is actually an "operator".

May I see the assembly for these new commands?
 
Jun 22, 2010 at 1:40 AM
Administrator
Forum Administrator
"Life begins and ends with Nu."
Join Date: Jul 15, 2007
Location: Australia
Posts: 6211
Age: 38
Celtic Minstrel said:
Well, alright then.

I can't see these being at all useful.
I already pointed that out.

Celtic Minstrel said:
I don't like this; why not use actual operators instead? That is, as follows:

<VAJWWWW:VXXX::==::YYYY - Jump to event W if variable X is equal to Y.
<VAJWWWW:VXXX::<=::YYYY - Jump to event W if variable X is less than or equal to Y.
<VAJWWWW:VXXX::>=::YYYY - Jump to event W if variable X is greater than or equal to Y.
<VAJWWWW:VXXX::<<::YYYY - Jump to event W if variable X is less than Y.
<VAJWWWW:VXXX::>>::YYYY - Jump to event W if variable X is greater than Y.
<VAJWWWW:VXXX::<>::YYYY - Jump to event W if variable X is not equal to Y.
Hell no. I want to stick to the tsc syntax. Your VAJ is making my eyes bleed. You too Noxid. Plus adding more tsc parsing rules is only going to slow things down, that is why we reduced the number of commands in the first place.

By the way, VXXX passes the variable's value to the command argument. You are supposed to pass a reference to the variable itself (the variable number) with XXXX.

Celtic Minstrel said:
Yeah. This method is definitely better.
...

..no.

Celtic Minstrel said:
We want to make the language a bit easier to use, I guess; it currently has even less features than assembly. And has someone mentions later, hard-coding is not necessarily a good thing.
Everything has less features than assembly.

Celtic Minstrel said:
This seems a bit silly..
How so?
 
Jun 22, 2010 at 2:39 AM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Celtic Minstrel said:
May I see the assembly for these new commands?

For shits n' giggles, sure, why not.

Insertion for the extension to the TSC parser;
Code:
004225ED   .  E8 D52E0500   CALL KingTSC+.004754C7
004225F2   .  85C0          TEST EAX,EAX
004225F4   .  74 6B         JE SHORT KingTSC+.00422661
004225F6   .  90            NOP
004225F7   .  90            NOP
004225F8   .  A1 D85A4A00   MOV EAX,[4A5AD8]
004225FD   .  0305 E05A4A00 ADD EAX,[4A5AE0]
00422603   .  0FBE48 01     MOVSX ECX,BYTE PTR [EAX+1]
00422607   .  83F9 45       CMP ECX,45
0042260A   .  75 5A         JNZ SHORT KingTSC+.00422666
0042260C   .  90            NOP
0042260D   .  0FBE48 02     MOVSX ECX,BYTE PTR [EAX+2]
00422611   .  83F9 4E       CMP ECX,4E
00422614   .  75 50         JNZ SHORT KingTSC+.00422666
00422616   .  8B0D D85A4A00 MOV ECX,[4A5AD8]
0042261C   .  030D E05A4A00 ADD ECX,[4A5AE0]
00422622   .  0FBE51 03     MOVSX EDX,BYTE PTR [ECX+3]
00422626   .  83FA 44       CMP EDX,44
00422629   .  75 3B         JNZ SHORT KingTSC+.00422666
0042262B   .  C605 DC5A4A00>MOV BYTE PTR [4A5ADC],0
00422632   .  0FB605 38E649>MOVZX EAX,BYTE PTR [49E638]
00422639   .  83E0 FE       AND EAX,FFFFFFFE
0042263C   .  A2 38E64900   MOV [49E638],AL
00422641   .  8B0D E8E14900 MOV ECX,[49E1E8]
00422647   .  83C9 03       OR ECX,3
0042264A   .  890D E8E14900 MOV [49E1E8],ECX
00422650   .  C705 0C5B4A00>MOV DWORD PTR [4A5B0C],0
0042265A   .  C745 D4 01000>MOV DWORD PTR [EBP-2C],1
00422661   >  E9 412C0000   JMP KingTSC+.004252A7
...
New parser segment;
Code:
004754C7  /$  A1 D85A4A00   MOV EAX,[4A5AD8]
004754CC  |.  0305 E05A4A00 ADD EAX,[4A5AE0]
004754D2  |.  0FBE50 01     MOVSX EDX,BYTE PTR [EAX+1]
004754D6  |.  83FA 56       CMP EDX,56
004754D9  |.  75 28         JNZ SHORT KingTSC+.00475503
004754DB  |.  0FBE50 02     MOVSX EDX,BYTE PTR [EAX+2]
004754DF  |.  83FA 41       CMP EDX,41
004754E2  |.  75 1F         JNZ SHORT KingTSC+.00475503
004754E4  |.  0FBE50 03     MOVSX EDX,BYTE PTR [EAX+3]
004754E8  |.  83FA 52       CMP EDX,52
004754EB  |.  75 16         JNZ SHORT KingTSC+.00475503
004754ED  |.  83C0 04       ADD EAX,4
004754F0  |.  50            PUSH EAX                                 ; /Arg1
004754F1  |.  E8 0A670100   CALL KingTSC+.0048BC00                   ; \KingTSC+.0048BC00
004754F6  |.  83C4 04       ADD ESP,4
004754F9  |.  8305 E05A4A00>ADD DWORD PTR [4A5AE0],0D
00475500  |.  33C0          XOR EAX,EAX
00475502  |.  C3            RETN
00475503  |>  A1 D85A4A00   MOV EAX,[4A5AD8]
00475508  |.  0305 E05A4A00 ADD EAX,[4A5AE0]
0047550E  |.  0FBE50 01     MOVSX EDX,BYTE PTR [EAX+1]
00475512  |.  83FA 56       CMP EDX,56
00475515  |.  75 28         JNZ SHORT KingTSC+.0047553F
00475517  |.  0FBE50 02     MOVSX EDX,BYTE PTR [EAX+2]
0047551B  |.  83FA 41       CMP EDX,41
0047551E  |.  75 1F         JNZ SHORT KingTSC+.0047553F
00475520  |.  0FBE50 03     MOVSX EDX,BYTE PTR [EAX+3]
00475524  |.  83FA 4F       CMP EDX,4F
00475527  |.  75 16         JNZ SHORT KingTSC+.0047553F
00475529  |.  83C0 04       ADD EAX,4
0047552C  |.  50            PUSH EAX                                 ; /Arg1
0047552D  |.  E8 0A670100   CALL KingTSC+.0048BC3C                   ; \KingTSC+.0048BC3C
00475532  |.  83C4 04       ADD ESP,4
00475535  |.  8305 E05A4A00>ADD DWORD PTR [4A5AE0],0E
0047553C  |.  33C0          XOR EAX,EAX
0047553E  |.  C3            RETN
0047553F  |>  A1 D85A4A00   MOV EAX,[4A5AD8]
00475544  |.  0305 E05A4A00 ADD EAX,[4A5AE0]
0047554A  |.  0FBE50 01     MOVSX EDX,BYTE PTR [EAX+1]
0047554E  |.  83FA 56       CMP EDX,56
00475551  |.  75 28         JNZ SHORT KingTSC+.0047557B
00475553  |.  0FBE50 02     MOVSX EDX,BYTE PTR [EAX+2]
00475557  |.  83FA 41       CMP EDX,41
0047555A  |.  75 1F         JNZ SHORT KingTSC+.0047557B
0047555C  |.  0FBE50 03     MOVSX EDX,BYTE PTR [EAX+3]
00475560  |.  83FA 5A       CMP EDX,5A
00475563  |.  75 16         JNZ SHORT KingTSC+.0047557B
00475565  |.  83C0 04       ADD EAX,4
00475568  |.  50            PUSH EAX                                 ; /Arg1
00475569  |.  E8 84670100   CALL KingTSC+.0048BCF2                   ; \KingTSC+.0048BCF2
0047556E  |.  83C4 04       ADD ESP,4
00475571  |.  8305 E05A4A00>ADD DWORD PTR [4A5AE0],0D
00475578  |.  33C0          XOR EAX,EAX
0047557A  |.  C3            RETN
0047557B  |>  A1 D85A4A00   MOV EAX,[4A5AD8]
00475580  |.  0305 E05A4A00 ADD EAX,[4A5AE0]
00475586  |.  0FBE50 01     MOVSX EDX,BYTE PTR [EAX+1]
0047558A  |.  83FA 56       CMP EDX,56
0047558D  |.  75 2C         JNZ SHORT KingTSC+.004755BB
0047558F  |.  0FBE50 02     MOVSX EDX,BYTE PTR [EAX+2]
00475593  |.  83FA 41       CMP EDX,41
00475596  |.  75 23         JNZ SHORT KingTSC+.004755BB
00475598  |.  0FBE50 03     MOVSX EDX,BYTE PTR [EAX+3]
0047559C  |.  83FA 4A       CMP EDX,4A
0047559F  |.  75 1A         JNZ SHORT KingTSC+.004755BB
004755A1  |.  83C0 04       ADD EAX,4
004755A4  |.  50            PUSH EAX
004755A5  |.  E8 95670100   CALL KingTSC+.0048BD3F
004755AA  |.  83C4 04       ADD ESP,4
004755AD  |.  85C0          TEST EAX,EAX
004755AF  |.  75 07         JNZ SHORT KingTSC+.004755B8
004755B1  |.  8305 E05A4A00>ADD DWORD PTR [4A5AE0],17
004755B8  |>  33C0          XOR EAX,EAX
004755BA  |.  C3            RETN
004755BB  |>  A1 D85A4A00   MOV EAX,[4A5AD8]
004755C0  |.  0305 E05A4A00 ADD EAX,[4A5AE0]
004755C6  |.  0FBE50 01     MOVSX EDX,BYTE PTR [EAX+1]
004755CA  |.  83FA 52       CMP EDX,52
004755CD  |.  75 28         JNZ SHORT KingTSC+.004755F7
004755CF  |.  0FBE50 02     MOVSX EDX,BYTE PTR [EAX+2]
004755D3  |.  83FA 4E       CMP EDX,4E
004755D6  |.  75 1F         JNZ SHORT KingTSC+.004755F7
004755D8  |.  0FBE50 03     MOVSX EDX,BYTE PTR [EAX+3]
004755DC  |.  83FA 44       CMP EDX,44
004755DF  |.  75 16         JNZ SHORT KingTSC+.004755F7
004755E1  |.  83C0 04       ADD EAX,4
004755E4  |.  50            PUSH EAX                                 ; /Arg1
004755E5  |.  E8 0C680100   CALL KingTSC+.0048BDF6                   ; \KingTSC+.0048BDF6
004755EA  |.  83C4 04       ADD ESP,4
004755ED  |.  8305 E05A4A00>ADD DWORD PTR [4A5AE0],0D
004755F4  |.  33C0          XOR EAX,EAX
004755F6  |.  C3            RETN
004755F7  |>  33C0          XOR EAX,EAX
004755F9  |.  40            INC EAX
004755FA  \.  C3            RETN
<VAR command;
Code:
0048BC00  /$  55            PUSH EBP
0048BC01  |.  8BEC          MOV EBP,ESP
0048BC03  |.  83EC 08       SUB ESP,8
0048BC06  |.  8B45 08       MOV EAX,[EBP+8]
0048BC09  |.  50            PUSH EAX                                 ; /Arg1
0048BC0A  |.  E8 F19AFEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BC0F  |.  83C4 04       ADD ESP,4
0048BC12  |.  8945 FC       MOV [EBP-4],EAX
0048BC15  |.  8B45 08       MOV EAX,[EBP+8]
0048BC18  |.  83C0 05       ADD EAX,5
0048BC1B  |.  50            PUSH EAX                                 ; /Arg1
0048BC1C  |.  E8 DF9AFEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BC21  |.  83C4 04       ADD ESP,4
0048BC24  |.  8945 F8       MOV [EBP-8],EAX
0048BC27  |.  8B45 FC       MOV EAX,[EBP-4]
0048BC2A  |.  D1E0          SHL EAX,1
0048BC2C  |.  90            NOP
0048BC2D  |.  05 90E04900   ADD EAX,KingTSC+.0049E090
0048BC32  |.  8B4D F8       MOV ECX,[EBP-8]
0048BC35  |.  66:8908       MOV [EAX],CX
0048BC38  |.  8BE5          MOV ESP,EBP
0048BC3A  |.  5D            POP EBP
0048BC3B  \.  C3            RETN
<VAO command;
Code:
0048BC3C  /$  55            PUSH EBP
0048BC3D  |.  8BEC          MOV EBP,ESP
0048BC3F  |.  83EC 0C       SUB ESP,0C
0048BC42  |.  8B45 08       MOV EAX,[EBP+8]
0048BC45  |.  50            PUSH EAX                                 ; /Arg1
0048BC46  |.  E8 B59AFEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BC4B  |.  83C4 04       ADD ESP,4
0048BC4E  |.  8945 FC       MOV [EBP-4],EAX
0048BC51  |.  8B45 08       MOV EAX,[EBP+8]
0048BC54  |.  83C0 05       ADD EAX,5
0048BC57  |.  50            PUSH EAX                                 ; /Arg1
0048BC58  |.  E8 A39AFEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BC5D  |.  83C4 04       ADD ESP,4
0048BC60  |.  8945 F8       MOV [EBP-8],EAX
0048BC63  |.  8B45 FC       MOV EAX,[EBP-4]
0048BC66  |.  D1E0          SHL EAX,1
0048BC68  |.  05 90E04900   ADD EAX,KingTSC+.0049E090
0048BC6D  |.  8945 F4       MOV [EBP-C],EAX
0048BC70  |.  8B45 08       MOV EAX,[EBP+8]
0048BC73  |.  83C0 09       ADD EAX,9
0048BC76  |.  0FBE10        MOVSX EDX,BYTE PTR [EAX]
0048BC79  |.  83FA 2B       CMP EDX,2B
0048BC7C  |.  74 13         JE SHORT KingTSC+.0048BC91
0048BC7E  |.  83FA 2D       CMP EDX,2D
0048BC81  |.  74 19         JE SHORT KingTSC+.0048BC9C
0048BC83  |.  83FA 2A       CMP EDX,2A
0048BC86  |.  74 1F         JE SHORT KingTSC+.0048BCA7
0048BC88  |.  83FA 25       CMP EDX,25
0048BC8B  |.  74 2F         JE SHORT KingTSC+.0048BCBC
0048BC8D  |>  8BE5          MOV ESP,EBP
0048BC8F  |.  5D            POP EBP
0048BC90  |.  C3            RETN
0048BC91  |>  8B4D F8       MOV ECX,[EBP-8]
0048BC94  |.  8B45 F4       MOV EAX,[EBP-C]
0048BC97  |.  66:0108       ADD [EAX],CX
0048BC9A  |.^ EB F1         JMP SHORT KingTSC+.0048BC8D
0048BC9C  |>  8B4D F8       MOV ECX,[EBP-8]
0048BC9F  |.  8B45 F4       MOV EAX,[EBP-C]
0048BCA2  |.  66:2908       SUB [EAX],CX
0048BCA5  |.^ EB E6         JMP SHORT KingTSC+.0048BC8D
0048BCA7  |>  8B45 F4       MOV EAX,[EBP-C]
0048BCAA  |.  66:0FBF00     MOVSX AX,WORD PTR [EAX]
0048BCAE  |.  8B4D F8       MOV ECX,[EBP-8]
0048BCB1  |.  0FAFC1        IMUL EAX,ECX
0048BCB4  |.  8B4D F4       MOV ECX,[EBP-C]
0048BCB7  |.  66:8901       MOV [ECX],AX
0048BCBA  |.^ EB D1         JMP SHORT KingTSC+.0048BC8D
0048BCBC  |>  8B4D F4       MOV ECX,[EBP-C]
0048BCBF  |.  66:0FBF01     MOVSX AX,WORD PTR [ECX]
0048BCC3  |.  8B4D F8       MOV ECX,[EBP-8]
0048BCC6  |.  99            CDQ
0048BCC7  |.  F7F8          IDIV EAX
0048BCC9  |.  8B4D F4       MOV ECX,[EBP-C]
0048BCCC  |.  66:8901       MOV [ECX],AX
0048BCCF  \.^ EB BC         JMP SHORT KingTSC+.0048BC8D
<VAZ Command;
Code:
0048BCF2  /$  55            PUSH EBP
0048BCF3  |.  8BEC          MOV EBP,ESP
0048BCF5  |.  83EC 0C       SUB ESP,0C
0048BCF8  |.  8B45 08       MOV EAX,[EBP+8]
0048BCFB  |.  50            PUSH EAX                                 ; /Arg1
0048BCFC  |.  E8 FF99FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BD01  |.  83C4 04       ADD ESP,4
0048BD04  |.  8945 FC       MOV [EBP-4],EAX
0048BD07  |.  8B45 08       MOV EAX,[EBP+8]
0048BD0A  |.  83C0 05       ADD EAX,5
0048BD0D  |.  50            PUSH EAX                                 ; /Arg1
0048BD0E  |.  E8 ED99FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BD13  |.  83C4 04       ADD ESP,4
0048BD16  |.  8945 F8       MOV [EBP-8],EAX
0048BD19  |.  C745 F4 90E04>MOV DWORD PTR [EBP-C],KingTSC+.0049E090
0048BD20  |>  FF4D F8       /DEC DWORD PTR [EBP-8]
0048BD23  |.  837D F8 00    |CMP DWORD PTR [EBP-8],0
0048BD27  |.  7C 12         |JL SHORT KingTSC+.0048BD3B
0048BD29  |.  8B45 FC       |MOV EAX,[EBP-4]
0048BD2C  |.  0345 F8       |ADD EAX,[EBP-8]
0048BD2F  |.  D1E0          |SHL EAX,1
0048BD31  |.  0345 F4       |ADD EAX,[EBP-C]
0048BD34  |.  33D2          |XOR EDX,EDX
0048BD36  |.  66:8910       |MOV [EAX],DX
0048BD39  |.^ EB E5         \JMP SHORT KingTSC+.0048BD20
0048BD3B  |>  8BE5          MOV ESP,EBP
0048BD3D  |.  5D            POP EBP
0048BD3E  \.  C3            RETN
<VAJ Command; (extra messy)
Code:
0048BD3F   $  55            PUSH EBP
0048BD40   .  8BEC          MOV EBP,ESP
0048BD42   .  83EC 10       SUB ESP,10
0048BD45   .  8B45 08       MOV EAX,[EBP+8]
0048BD48   .  50            PUSH EAX                                 ; /Arg1
0048BD49   .  E8 B299FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BD4E   .  83C4 04       ADD ESP,4
0048BD51   .  8945 FC       MOV [EBP-4],EAX
0048BD54   .  8B45 08       MOV EAX,[EBP+8]
0048BD57   .  83C0 05       ADD EAX,5
0048BD5A   .  50            PUSH EAX                                 ; /Arg1
0048BD5B   .  E8 A099FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BD60   .  83C4 04       ADD ESP,4
0048BD63   .  8945 F8       MOV [EBP-8],EAX
0048BD66   .  8B45 08       MOV EAX,[EBP+8]
0048BD69   .  83C0 0A       ADD EAX,0A
0048BD6C   .  50            PUSH EAX                                 ; /Arg1
0048BD6D   .  E8 8E99FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BD72   .  83C4 04       ADD ESP,4
0048BD75   .  8945 F4       MOV [EBP-C],EAX
0048BD78   .  8B45 08       MOV EAX,[EBP+8]
0048BD7B   .  83C0 0F       ADD EAX,0F
0048BD7E   .  50            PUSH EAX                                 ; /Arg1
0048BD7F   .  E8 7C99FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BD84   .  83C4 04       ADD ESP,4
0048BD87   .  8945 F0       MOV [EBP-10],EAX
0048BD8A   .  8B45 F4       MOV EAX,[EBP-C]
0048BD8D   .  6BC0 0C       IMUL EAX,EAX,0C
0048BD90   .  05 97BD4800   ADD EAX,KingTSC+.0048BD97
0048BD95   .  FFE0          JMP EAX
0048BD97   .  8B45 FC       MOV EAX,[EBP-4]
0048BD9A   .  8B4D F8       MOV ECX,[EBP-8]
0048BD9D   .  3BC1          CMP EAX,ECX
0048BD9F   .  74 3E         JE SHORT KingTSC+.0048BDDF
0048BDA1   .  EB 4F         JMP SHORT KingTSC+.0048BDF2
0048BDA3   .  8B45 FC       MOV EAX,[EBP-4]
0048BDA6   .  8B4D F8       MOV ECX,[EBP-8]
0048BDA9   .  3BC1          CMP EAX,ECX
0048BDAB   .  75 32         JNZ SHORT KingTSC+.0048BDDF
0048BDAD   .  EB 43         JMP SHORT KingTSC+.0048BDF2
0048BDAF   .  8B45 FC       MOV EAX,[EBP-4]
0048BDB2   .  8B4D F8       MOV ECX,[EBP-8]
0048BDB5   .  3BC1          CMP EAX,ECX
0048BDB7   .  7F 26         JG SHORT KingTSC+.0048BDDF
0048BDB9   .  EB 37         JMP SHORT KingTSC+.0048BDF2
0048BDBB   .  8B45 FC       MOV EAX,[EBP-4]
0048BDBE   .  8B4D F8       MOV ECX,[EBP-8]
0048BDC1   .  3BC1          CMP EAX,ECX
0048BDC3   .  7C 1A         JL SHORT KingTSC+.0048BDDF
0048BDC5   .  EB 2B         JMP SHORT KingTSC+.0048BDF2
0048BDC7   .  8B45 FC       MOV EAX,[EBP-4]
0048BDCA   .  8B4D F8       MOV ECX,[EBP-8]
0048BDCD   .  3BC1          CMP EAX,ECX
0048BDCF   .  7D 0E         JGE SHORT KingTSC+.0048BDDF
0048BDD1   .  EB 1F         JMP SHORT KingTSC+.0048BDF2
0048BDD3   .  8B45 FC       MOV EAX,[EBP-4]
0048BDD6   .  8B4D F8       MOV ECX,[EBP-8]
0048BDD9   .  3BC1          CMP EAX,ECX
0048BDDB   .  7E 02         JLE SHORT KingTSC+.0048BDDF
0048BDDD   .  EB 13         JMP SHORT KingTSC+.0048BDF2
0048BDDF   >  8B45 F0       MOV EAX,[EBP-10]
0048BDE2   .  50            PUSH EAX                                 ; /Arg1
0048BDE3   .  E8 085DF9FF   CALL KingTSC+.00421AF0                   ; \KingTSC+.00421AF0
0048BDE8   .  83C4 04       ADD ESP,4
0048BDEB   .  33C0          XOR EAX,EAX
0048BDED   .  40            INC EAX
0048BDEE   >  8BE5          MOV ESP,EBP
0048BDF0   .  5D            POP EBP
0048BDF1   .  C3            RETN
0048BDF2   >  33C0          XOR EAX,EAX
0048BDF4   .^ EB F8         JMP SHORT KingTSC+.0048BDEE
<RND Command;
Code:
0048BDF6  /$  55            PUSH EBP
0048BDF7  |.  8BEC          MOV EBP,ESP
0048BDF9  |.  83EC 0C       SUB ESP,0C
0048BDFC  |.  8B45 08       MOV EAX,[EBP+8]
0048BDFF  |.  50            PUSH EAX                                 ; /Arg1
0048BE00  |.  E8 FB98FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BE05  |.  83C4 04       ADD ESP,4
0048BE08  |.  8945 FC       MOV [EBP-4],EAX
0048BE0B  |.  8B45 08       MOV EAX,[EBP+8]
0048BE0E  |.  83C0 05       ADD EAX,5
0048BE11  |.  50            PUSH EAX                                 ; /Arg1
0048BE12  |.  E8 E998FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BE17  |.  83C4 04       ADD ESP,4
0048BE1A  |.  8945 F8       MOV [EBP-8],EAX
0048BE1D  |.  8B45 08       MOV EAX,[EBP+8]
0048BE20  |.  83C0 0A       ADD EAX,0A
0048BE23  |.  50            PUSH EAX                                 ; /Arg1
0048BE24  |.  E8 D798FEFF   CALL KingTSC+.00475700                   ; \KingTSC+.00475700
0048BE29  |.  83C4 04       ADD ESP,4
0048BE2C  |.  8945 F4       MOV [EBP-C],EAX
0048BE2F  |.  8B45 F8       MOV EAX,[EBP-8]
0048BE32  |.  50            PUSH EAX                                 ; /Arg2
0048BE33  |.  8B45 FC       MOV EAX,[EBP-4]                          ; |
0048BE36  |.  50            PUSH EAX                                 ; |Arg1
0048BE37  |.  E8 1435F8FF   CALL KingTSC+.0040F350                   ; \KingTSC+.0040F350
0048BE3C  |.  83C4 08       ADD ESP,8
0048BE3F  |.  8B4D F4       MOV ECX,[EBP-C]
0048BE42  |.  D1E1          SHL ECX,1
0048BE44  |.  81C1 90E04900 ADD ECX,KingTSC+.0049E090
0048BE4A  |.  66:8901       MOV [ECX],AX
0048BE4D  |.  8BE5          MOV ESP,EBP
0048BE4F  |.  5D            POP EBP
0048BE50  \.  C3            RETN
Slightly different ASCII to number function because I accidentally messed up the format with the new TSC things;
Code:
00475700  /$  55            PUSH EBP
00475701  |.  8BEC          MOV EBP,ESP
00475703  |.  83EC 04       SUB ESP,4
00475706  |.  8B45 08       MOV EAX,[EBP+8]
00475709  |.  0FB608        MOVZX ECX,BYTE PTR [EAX]
0047570C  |.  83F9 56       CMP ECX,56
0047570F  |.  74 37         JE SHORT KingTSC+.00475748
00475711  |.  83E9 30       SUB ECX,30
00475714  |.  69C9 E8030000 IMUL ECX,ECX,3E8
0047571A  |.  894D FC       MOV [EBP-4],ECX
0047571D  |.  0FB648 01     MOVZX ECX,BYTE PTR [EAX+1]
00475721  |.  83E9 30       SUB ECX,30
00475724  |.  6BC9 64       IMUL ECX,ECX,64
00475727  |.  014D FC       ADD [EBP-4],ECX
0047572A  |.  0FB648 02     MOVZX ECX,BYTE PTR [EAX+2]
0047572E  |.  83E9 30       SUB ECX,30
00475731  |.  6BC9 0A       IMUL ECX,ECX,0A
00475734  |.  014D FC       ADD [EBP-4],ECX
00475737  |.  0FB648 03     MOVZX ECX,BYTE PTR [EAX+3]
0047573B  |.  83E9 30       SUB ECX,30
0047573E  |.  014D FC       ADD [EBP-4],ECX
00475741  |.  8B45 FC       MOV EAX,[EBP-4]
00475744  |.  8BE5          MOV ESP,EBP
00475746  |.  5D            POP EBP
00475747  |.  C3            RETN
00475748  |>  0FB648 01     MOVZX ECX,BYTE PTR [EAX+1]
0047574C  |.  83E9 30       SUB ECX,30
0047574F  |.  6BC9 64       IMUL ECX,ECX,64
00475752  |.  894D FC       MOV [EBP-4],ECX
00475755  |.  0FB648 02     MOVZX ECX,BYTE PTR [EAX+2]
00475759  |.  83E9 30       SUB ECX,30
0047575C  |.  6BC9 0A       IMUL ECX,ECX,0A
0047575F  |.  014D FC       ADD [EBP-4],ECX
00475762  |.  0FB648 03     MOVZX ECX,BYTE PTR [EAX+3]
00475766  |.  83E9 30       SUB ECX,30
00475769  |.  014D FC       ADD [EBP-4],ECX
0047576C  |.  8B45 FC       MOV EAX,[EBP-4]
0047576F  |.  D1E0          SHL EAX,1
00475771  |.  05 90E04900   ADD EAX,KingTSC+.0049E090
00475776  |.  0FB700        MOVZX EAX,WORD PTR [EAX]
00475779  |.  8BE5          MOV ESP,EBP
0047577B  |.  5D            POP EBP
0047577C  \.  C3            RETN
Modified ASCII to number function for VXXX;
Code:
...
00421900   $  55            PUSH EBP
00421901   .  8BEC          MOV EBP,ESP
00421903   .  51            PUSH ECX
00421904   .  C745 FC 00000>MOV DWORD PTR [EBP-4],0
0042190B   .  E9 6D3E0500   JMP KingTSC+.0047577D
00421910   >  0345 08       ADD EAX,[EBP+8]
00421913   .  0FBE08        MOVSX ECX,BYTE PTR [EAX]
00421916   .  83E9 30       SUB ECX,30
...
0047577D   > \A1 D85A4A00   MOV EAX,[4A5AD8]
00475782   .  0345 08       ADD EAX,[EBP+8]
00475785   .  0FBE08        MOVSX ECX,BYTE PTR [EAX]
00475788   .  83F9 56       CMP ECX,56
0047578B   .  74 0A         JE SHORT KingTSC+.00475797
0047578D   .  A1 D85A4A00   MOV EAX,[4A5AD8]
00475792   .^ E9 79C1FAFF   JMP KingTSC+.00421910
00475797   >  8345 08 01    ADD DWORD PTR [EBP+8],1
0047579B   .  A1 D85A4A00   MOV EAX,[4A5AD8]
004757A0   .  0345 08       ADD EAX,[EBP+8]
004757A3   .  0FBE08        MOVSX ECX,BYTE PTR [EAX]
004757A6   .  83E9 30       SUB ECX,30
004757A9   .  6BC9 64       IMUL ECX,ECX,64
004757AC   .  034D FC       ADD ECX,[EBP-4]
004757AF   .  894D FC       MOV [EBP-4],ECX
004757B2   .  8B55 08       MOV EDX,[EBP+8]
004757B5   .  83C2 01       ADD EDX,1
004757B8   .  8955 08       MOV [EBP+8],EDX
004757BB   .  A1 D85A4A00   MOV EAX,[4A5AD8]
004757C0   .  0345 08       ADD EAX,[EBP+8]
004757C3   .  0FBE08        MOVSX ECX,BYTE PTR [EAX]
004757C6   .  83E9 30       SUB ECX,30
004757C9   .  6BC9 0A       IMUL ECX,ECX,0A
004757CC   .  034D FC       ADD ECX,[EBP-4]
004757CF   .  894D FC       MOV [EBP-4],ECX
004757D2   .  8B55 08       MOV EDX,[EBP+8]
004757D5   .  83C2 01       ADD EDX,1
004757D8   .  8955 08       MOV [EBP+8],EDX
004757DB   .  A1 D85A4A00   MOV EAX,[4A5AD8]
004757E0   .  0345 08       ADD EAX,[EBP+8]
004757E3   .  0FBE08        MOVSX ECX,BYTE PTR [EAX]
004757E6   .  83E9 30       SUB ECX,30
004757E9   .  014D FC       ADD [EBP-4],ECX
004757EC   .  8B45 FC       MOV EAX,[EBP-4]
004757EF   .  D1E0          SHL EAX,1
004757F1   .  05 90E04900   ADD EAX,KingTSC+.0049E090
004757F6   .  0FB700        MOVZX EAX,WORD PTR [EAX]
004757F9   .  8BE5          MOV ESP,EBP
004757FB   .  5D            POP EBP
004757FC   .  C3            RETN
<NUM changes;
Code:
00421D10  /$  55            PUSH EBP
00421D11  |.  8BEC          MOV EBP,ESP
00421D13  |.  83EC 2C       SUB ESP,2C
00421D16  |.  A1 208B4900   MOV EAX,[498B20]
00421D1B  |.  8945 DC       MOV [EBP-24],EAX
00421D1E  |.  C745 E8 E8030>MOV DWORD PTR [EBP-18],3E8
00421D25  |.  C745 EC 64000>MOV DWORD PTR [EBP-14],64
00421D2C  |.  C745 F0 0A000>MOV DWORD PTR [EBP-10],0A
00421D33  |.  8B45 08       MOV EAX,[EBP+8]
00421D36  |.  D1E0          SHL EAX,1
00421D38  |.  05 90E04900   ADD EAX,KingTSC+.0049E090
00421D3D  |.  0FB600        MOVZX EAX,BYTE PTR [EAX]
00421D40  |.  8945 FC       MOV [EBP-4],EAX
00421D43  |.  33C0          XOR EAX,EAX
00421D45  |.  8945 E0       MOV [EBP-20],EAX
00421D48  |.  8945 F4       MOV [EBP-C],EAX
00421D4B  |.  90            NOP
00421D4C  |.  90            NOP
00421D4D  |.  90            NOP
00421D4E  |.  C745 F8 00000>MOV DWORD PTR [EBP-8],0
00421D55  |.  EB 09         JMP SHORT KingTSC+.00421D60
...

I think probably that's all there is.
I guess it would't be TOO much of an ordeal to move the modifier to the spacing character for <VAO but I'm not keen on changing <VAJ.

Also that's about 8 hours work with some intersession playing James Bond and doing housework >.>
 
Jun 22, 2010 at 3:54 AM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
andwhyisit said:
I already pointed that out.
Yeah, I know. That's probably why I didn't go into more detail.

andwhyisit said:
Hell no. I want to stick to the tsc syntax. Your VAJ is making my eyes bleed. You too Noxid. Plus adding more tsc parsing rules is only going to slow things down, that is why we reduced the number of commands in the first place.
I'm not breaking the TSC syntax; I'm exploiting the fact that numbers do not have to be composed of only digits to make the code more readable. My example that you quoted would not require a single change to the TSC parsing rules. The only difference between it and the original <VAJ:XXXX:YYYY:ZZZZ:WWWW where Z is the method is 1) the order of parameters is X-Z-Y-W instead of X-Y-Z-W and 2) the numbers you check the Z parameter against to determine the method are 11440, 11340, 11540, 11330, 11550, and either 11350 or 8540 instead of 0 through 5. Unless there's some significant performance penalty for comparing against large numbers (well, and for calculating the numbers from the code), my <VAJ would be exactly equal in terms of efficiency and so forth as your <VAJ, but it would be more readable. No disadvantages over the other form, but a definite advantage. (Well. I think there are no disadvantages; I'm assuming here that calculating 11440 from the string ':==:' and comparing it to some numbers is as efficient as calculating 0 from the string '0000' and comparing it to some numbers; this may not be the case.)

But of course there are other methods. You could use Noxid's postfix idea that he did with <VAO (or my infix variant of it). There are two notable ways that I can think of for this; one requires odd notation, the other requires two separate commands. Observe. (I'm using the infix, but the postfix would be equally viable, if a bit uglier. Also note that XXXX or YYYY can be replaced with a variable using the VXXX notation; otherwise you're comparing a constant.)

Method 1: Odd notation
<VAJXXXX=YYYY:WWWW - Jump to event W if X is equal to Y.
<VAJXXXX<YYYY:WWWW - Jump to event W if X is less than Y.
<VAJXXXX>YYYY:WWWW - Jump to event W if X is more than Y.
<VAJXXXX!YYYY:WWWW - Jump to event W if X is not equal to Y.
<VAJXXXX[YYYY:WWWW - Jump to event W if X is less than or equal to Y.
<VAJXXXX]YYYY:WWWW - Jump to event W if X is more than or equal to Y.
(Note that [] may not be the best choice; something else could easily be chosen.)

Method 2: Two commands (<VAJ is jump-if-true, <VNJ is jump-if-false)
<VAJXXXX=YYYY:WWWW - Jump to event W if X is equal to Y.
<VAJXXXX<YYYY:WWWW - Jump to event W if X is less than Y.
<VAJXXXX>YYYY:WWWW - Jump to event W if X is more than Y.
<VNJXXXX=YYYY:WWWW - Jump to event W if X is not equal to Y.
<VNJXXXX>YYYY:WWWW - Jump to event W if X is less than or equal to Y.
<VNJXXXX<YYYY:WWWW - Jump to event W if X is more than or equal to Y.
(Minor penalty to readability here is that to check less-than-or-equal, the character is > for greater-than because you're technically checking not-greater-than.)

andwhyisit said:
By the way, VXXX passes the variable's value to the command argument. You are supposed to pass a reference to the variable itself (the variable number) with XXXX.
No you aren't. For the commands that modify the variable (<VAR, <VAO, whatever), sure, pass the reference. However, for <VAJ, you definitely want the value. It's the value of the variable you want to compare with something, not its number.

andwhyisit said:
...

..no.
Um, so, I quote you post and say "Yes this is better" and then you say "no it's not". Do you see the contradiction here? I was agreeing with you before.

andwhyisit said:
Everything has less features than assembly.
Not really. Most things (esoteric languages excepted) have more features than assembly. For example, real control structures.

andwhyisit said:
I think it's silly because it's a completely arbitrary flip; there's no way to tell whether a given variable will be stored in the save-file or not except by the number. If you want to types of variables, it's better to distinguish them somehow; still, I think it's better for saving to be either automatic (as DB/Noxid has done) or explicit (which adds two more commands).
 
Jun 22, 2010 at 4:02 AM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
Noxid said:
I think probably that's all there is.
I guess it would't be TOO much of an ordeal to move the modifier to the spacing character for <VAO but I'm not keen on changing <VAJ.
*sigh* I might've known I'd have little idea what was going on there. I mean, I know generally what the commands do, but I have no idea what they're doing it with; ie, no idea where the stuff is in memory.

Still... from what DragonBoots has told me, it sounds like it's a pretty good method of handling variables. My only quibbles are the postfix-instead-of-infix (minor, really) and the ZZZZ method argument of <VAJ; I think it'd be better to do <VAJ in much the same way as <VAO.

...oh, and I don't particularly like the choice of names (<VAJ in particular seems to have nothing directly to do with variables), but that matters not at all.
 
Jun 22, 2010 at 5:29 AM
Administrator
Forum Administrator
"Life begins and ends with Nu."
Join Date: Jul 15, 2007
Location: Australia
Posts: 6211
Age: 38
I honestly prefer infix for both <VAJ and <VAO. It looks cleaner and can't be misinterpreted as text by someone reading the script.

What about "CMJ" instead of "VAJ"?

And what the heck is <VAZ?

Celtic Minstrel said:
Um, so, I quote you post and say "Yes this is better" and then you say "no it's not". Do you see the contradiction here? I was agreeing with you before.
Yeah sorry about that. When you quote a large post it is sometimes hard to tell which paragraphs are replies to one quote and which are replies to another.
 
Jun 22, 2010 at 12:01 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Well VAO has been changed to an 'infix' like you guys wanted. However, I'm still not going to change <VAJ's format since I economised space there by simply multiplying the Z argument by 0x0C and jumping forward that many bytes at a certain spot. Someone else can do it if it really bothers them :/

Oh but the name is easy to change. I wanted it to be CMP since that's basically what it does, but that was taken so I guess <CMJ works.

<VAZ is en-masse variable clearing; YYYY variables starting from XXXX. I made that because there are only 64 skipflags and you guys seemed pretty adamant about those runtime variables so this can be dropped anywhere you want the thing to get wiped. I could probably call it from <LDP if I had to.

Now the interesting bit here is, does anybody remember that post from runelancer about "the danger of flags"?
Well this is kinda like that, only FAR more powerful because you can modify up to half of a variable at a time, and it's got much (MUCH) longer reach.

EDIT: For example... I think <VAR0490:0001 will turn on the FPS counter.
V798 will return CurrentHealth.
 
Jun 22, 2010 at 5:51 PM
In front of a computer
"Man, if only I had an apple..."
Join Date: Mar 1, 2008
Location: Grasstown
Posts: 1435
Noxid said:
Well VAO has been changed to an 'infix' like you guys wanted. However, I'm still not going to change <VAJ's format since I economised space there by simply multiplying the Z argument by 0x0C and jumping forward that many bytes at a certain spot. Someone else can do it if it really bothers them :/
Well, that does seem like a logical ecomonisation, but did you check that the method is in the proper range? Otherwise you could get arbitrary code execution out of that command, which (generally speaking) is bad.


(Though, with the "readable" version, it might be possible to divide by some number to determine where to jump. I'm not sure though.)
 
Jun 22, 2010 at 7:16 PM
In my body, in my head
Forum Moderator
"Life begins and ends with Nu."
Join Date: Aug 28, 2009
Location: The Purple Zone
Posts: 5998
Nope I forgot to check, which is why you can crash the game if you go higher than 6 (6 itself has the effect of an unconditional jump as though you'd used <EVE but that was an unintentional side effect). Also forgot to check for dividing by zero so doing that will crash the game too.

And, I can't really think of any method for the ASCII chars since they aren't regularly spaced or in order, it'd probably just have to be a CMP for each case (which is what I did with <VAO).

Also, the TSC parser would be much more efficient if you replaced all the stuff like this:
Code:
00422666   > \8B15 D85A4A00 MOV EDX,[4A5AD8]
0042266C   .  0315 E05A4A00 ADD EDX,[4A5AE0]
00422672      0FBE42 01     MOVSX EAX,BYTE PTR [EDX+1]
00422676      83F8 4C       CMP EAX,4C
00422679      75 5E         JNZ SHORT KingTSC+.004226D9
0042267B      8B0D D85A4A00 MOV ECX,[4A5AD8]
00422681      030D E05A4A00 ADD ECX,[4A5AE0]
00422687      0FBE51 02     MOVSX EDX,BYTE PTR [ECX+2]
0042268B      83FA 49       CMP EDX,49
0042268E      75 49         JNZ SHORT KingTSC+.004226D9
00422690      A1 D85A4A00   MOV EAX,[4A5AD8]
00422695      0305 E05A4A00 ADD EAX,[4A5AE0]
0042269B      0FBE48 03     MOVSX ECX,BYTE PTR [EAX+3]
0042269F      83F9 2B       CMP ECX,2B
004226A2      75 35         JNZ SHORT KingTSC+.004226D9
004226A4   .  8B15 E05A4A00 MOV EDX,[4A5AE0]
With something like this:
Code:
00422666   > \8B15 D85A4A00 MOV EDX,[4A5AD8]
0042266C   .  0315 E05A4A00 ADD EDX,[4A5AE0]
00422672   .  8B02          MOV EAX,[EDX]
00422674   .  3D 3C4C492B   CMP EAX,2B494C3C
00422679   .  75 5E         JNZ SHORT KingTSC+.004226D9
0042267B   .  EB 27         JMP SHORT KingTSC+.004226A4
0042267D      90            NOP
0042267E      90            NOP
0042267F      90            NOP
00422680      90            NOP
00422681      90            NOP
00422682      90            NOP
00422683      90            NOP
00422684      90            NOP
00422685      90            NOP
00422686      90            NOP
00422687      90            NOP
00422688      90            NOP
00422689      90            NOP
0042268A      90            NOP
0042268B      90            NOP
0042268C      90            NOP
0042268D      90            NOP
0042268E      90            NOP
0042268F      90            NOP
00422690      90            NOP
00422691      90            NOP
00422692      90            NOP
00422693      D9D0          FNOP
00422695      90            NOP
00422696      90            NOP
00422697      90            NOP
00422698      90            NOP
00422699      90            NOP
0042269A      90            NOP
0042269B      90            NOP
0042269C      90            NOP
0042269D      90            NOP
0042269E      90            NOP
0042269F      90            NOP
004226A0      90            NOP
004226A1      90            NOP
004226A2      90            NOP
004226A3      90            NOP
004226A4   >  8B15 E05A4A00 MOV EDX,[4A5AE0]
It only took like an hour to go over every TSC command I had and I'm pretty sure it should make the parser generate far less strain on the computer, since it only involves one check per command.
 
Jun 23, 2010 at 12:50 AM
Administrator
Forum Administrator
"Life begins and ends with Nu."
Join Date: Jul 15, 2007
Location: Australia
Posts: 6211
Age: 38
We need to put a limit on certain arguments. So if the argument integer exceeds to limit value it will be interpreted as either the limit value or a default value depending upon the argument.

Max skipflag for SK+/SK-/SKJ should be 63.
Max flag for FL+/FL-/FLJ should be 7999.
Max variable for VAR/VXXX/VAO should be 255.
Max direction for MYD/FAI/FA0/ANP/CNP/INP/MNP/SNP should be 3.
Max method for CMJ should be 6.
etc.

Actually where is the variable data situated in ram and how much space do we have to burn?

EDIT: Set a condition that dividing by 0 gives the result 9999, except in the case where 0 is divided by itself (which will be 0).
 
Top