diff options
Diffstat (limited to 'npc')
-rw-r--r-- | npc/functions/bitwise.txt | 113 |
1 files changed, 111 insertions, 2 deletions
diff --git a/npc/functions/bitwise.txt b/npc/functions/bitwise.txt index f7e595a27..fb9b1493c 100644 --- a/npc/functions/bitwise.txt +++ b/npc/functions/bitwise.txt @@ -6,8 +6,7 @@ * * @arg 0 - the variable * @arg 1 - mask - * @arg 2 - shift - */ + * @arg 2 - shift */ function script bitwise_get { .@shift = getarg(2, 0); @@ -65,3 +64,113 @@ function script bitmask_count { return .@p; } +///////////////////////////////////////////////////////////////////////////////// +// A Nibble can go up to 15. There are 7 nibbles. +// get_nibble(VAR, NIBBLEID) +function script get_nibble { + .@v=getarg(0); + switch (getarg(1)) { + case 0: + .@s=0; .@m=0xF; break; + case 1: + .@s=4; .@m=0XF0; break; + case 2: + .@s=8; .@m=0XF00; break; + case 3: + .@s=12; .@m=0XF000; break; + case 4: + .@s=16; .@m=0XF0000; break; + case 5: + .@s=20; .@m=0XF00000; break; + case 6: + .@s=24; .@m=0XF000000; break; + default: + Exception("Invalid Nibble: "+getarg(1), RB_DEFAULT, .@v); + } + + return bitwise_get(.@v, .@m, .@s); +} + +// A Byte can go up to 255. There are 3 bytes. The forth can go up to 127. +// get_nibble(VAR, BYTEID) +function script get_byte { + .@v=getarg(0); + switch (getarg(1)) { + case 0: + .@s=0; .@m=0xFF; break; + case 1: + .@s=8; .@m=0XFF00; break; + case 2: + .@s=16; .@m=0XFF0000; break; + case 3: + .@s=24; .@m=0X7F000000; break; + default: + Exception("Invalid Byte: "+getarg(1), RB_DEFAULT, .@v); + } + + return bitwise_get(.@v, .@m, .@s); +} + +// A Bitword can go up to 65535 and is fixed in position to handle Soul EXP. +// get_bitword(VAR) +function script get_bitword { + .@v=getarg(0); + + return bitwise_get(.@v, 0x7FFF800, 11); +} + +///////////////////////////////////////////////////////////////////////////////// +// A Nibble can go up to 15. There are 7 nibbles. +// set_nibble(VAR, VAL, NIBBLEID) +function script set_nibble { + .@v=getarg(0); + switch (getarg(2)) { + case 0: + .@s=0; .@m=0xF; break; + case 1: + .@s=4; .@m=0XF0; break; + case 2: + .@s=8; .@m=0XF00; break; + case 3: + .@s=12; .@m=0XF000; break; + case 4: + .@s=16; .@m=0XF0000; break; + case 5: + .@s=20; .@m=0XF00000; break; + case 6: + .@s=24; .@m=0XF000000; break; + default: + Exception("Invalid SNibble: "+getarg(2), RB_DEFAULT); + } + + return bitwise_set(.@v, .@m, .@s, getarg(1)); +} + +// A Byte can go up to 255. There are 3 bytes. The forth can go up to 127. +// set_nibble(VAR, VAL, BYTEID) +function script set_byte { + .@v=getarg(0); + switch (getarg(2)) { + case 0: + .@s=0; .@m=0xFF; break; + case 1: + .@s=8; .@m=0XFF00; break; + case 2: + .@s=16; .@m=0XFF0000; break; + case 3: + .@s=24; .@m=0X7F000000; break; + default: + Exception("Invalid SByte: "+getarg(2), RB_DEFAULT); + } + + return bitwise_set(.@v, .@m, .@s, getarg(1)); +} + +// A Bitword can go up to 65535 and is fixed in position to handle Soul EXP. +// set_bitword(VAR, VAL) +function script set_bitword { + .@v=getarg(0); + + return bitwise_set(.@v, 0x7FFF800, 11, getarg(1)); +} + |