| 412 | | int val = cmd.args[0].value; |
| 413 | | int offset = cmd.args[1].value; |
| 414 | | int r_min = cmd.args[2].value; |
| 415 | | int v_min = cmd.args[3].value; |
| 416 | | int v_max = cmd.args[4].value; |
| 417 | | int r_max = cmd.args[5].value; |
| 418 | | int mode = cmd.args[6].value; |
| 419 | | // rldev : mode == 1,3 : 'acceralating curve', 2,3: 'decelerating curve' |
| 420 | | // è€æ°ã®åŒæ°ãªã¹ã(r_minããmodeãŸã§ã®ãªã¹ã)ãã€ããšãããããã®å Žå㯠|
| 421 | | // "cancel out in some way" ããã |
| 422 | | if (mode == 1 || mode == 3) |
| 423 | | val += offset; |
| 424 | | else if (mode == 2 || mode == 4) |
| 425 | | val -= offset; |
| 426 | | if (cmd.args.size() != 7) |
| 427 | | fprintf(stderr,"\n%d/%d: cmd 01-04:0320 : XXXX NOT SUPPORTED LIST : DOUBLE RANGE CONVERSION! XXXXXXXXXXX\n",cmd.scn,cmd.pos); |
| 428 | | if (val < v_min) |
| 429 | | val = v_min; |
| 430 | | if (val > v_max) |
| 431 | | val = v_max; |
| 432 | | val = (r_max-r_min)*(val-v_min)/(v_max-v_min) + r_min; |
| | 412 | int i, val; |
| | 413 | int x, startval; |
| | 414 | int start, end, endval, mode; |
| | 415 | |
| | 416 | //TODO: why index and offset, and not x? |
| | 417 | x = cmd.args[0].value + cmd.args[1].value; |
| | 418 | startval = cmd.args[2].value; |
| | 419 | start = end = 0; |
| | 420 | val = endval = startval; |
| | 421 | for (i=3; i < cmd.args.size(); i += 4) |
| | 422 | { |
| | 423 | startval = endval; |
| | 424 | start = cmd.args[i].value; |
| | 425 | end = cmd.args[i + 1].value; |
| | 426 | endval = cmd.args[i + 2].value; |
| | 427 | int mode = cmd.args[i + 3].value; |
| | 428 | if (start <= x && x <= end) |
| | 429 | { |
| | 430 | // rldev : mode == 1,3 : 'acceralating curve', 2,3: 'decelerating curve' |
| | 431 | // è€æ°ã®åŒæ°ãªã¹ã(r_minããmodeãŸã§ã®ãªã¹ã)ãã€ããšãããããã®å Žå㯠|
| | 432 | // "cancel out in some way" ããã |
| | 433 | // Assume mode 0, as we only know of it |
| | 434 | // TODO: find out how other mode works (exp/log?) |
| | 435 | // TODO: "When two ranges overlap, they appear to cancel out in some way" |
| | 436 | val = startval + (endval - startval) * (x - start) / (end - start); |
| | 437 | } |
| | 438 | } |
| | 439 | if (i != cmd.args.size()) |
| | 440 | fprintf(stderr, "\n%d/%d: cmd 01-04:0320 : WARNING: %d unconsumed arguments\n", cmd.scn, cmd.pos, cmd.args.size() - i); |
| | 441 | if (x > end) |
| | 442 | x = endval; |