diff options
Diffstat (limited to 'world/map/npc/functions/bitwise.txt')
-rw-r--r-- | world/map/npc/functions/bitwise.txt | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/world/map/npc/functions/bitwise.txt b/world/map/npc/functions/bitwise.txt new file mode 100644 index 00000000..fe851f15 --- /dev/null +++ b/world/map/npc/functions/bitwise.txt @@ -0,0 +1,146 @@ +// ALL functions here are call()-only + +// A Byte can go up to 255. There are 4 bytes. The fourth can go up to 127. +// get_byte(VAR, BYTEID) +function|script|get_byte +{ + set .@v, getarg(0); + set .@id, getarg(1); + if (.@id == 0) goto L_Byte0; + if (.@id == 1) goto L_Byte1; + if (.@id == 2) goto L_Byte2; + if (.@id == 3) goto L_Byte3; + debugmes "get_byte invalid call"; + return -1; + +L_Byte0: + return (.@v & BYTE_0_MASK) >> BYTE_0_SHIFT; + +L_Byte1: + return (.@v & BYTE_1_MASK) >> BYTE_1_SHIFT; + +L_Byte2: + return (.@v & BYTE_2_MASK) >> BYTE_2_SHIFT; + +L_Byte3: + return (.@v & BYTE_3_MASK) >> BYTE_3_SHIFT; +} + +// A Nibble can go up to 15. There are 7 nibbles.. +// get_nibble(VAR, BYTEID) +function|script|get_nibble +{ + set .@v, getarg(0); + set .@id, getarg(1); + if (.@id == 0) goto L_Nibble0; + if (.@id == 1) goto L_Nibble1; + if (.@id == 2) goto L_Nibble2; + if (.@id == 3) goto L_Nibble3; + if (.@id == 4) goto L_Nibble4; + if (.@id == 5) goto L_Nibble5; + if (.@id == 6) goto L_Nibble6; + debugmes "get_byte invalid call"; + return -1; + +L_Nibble0: + return (.@v & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT; + +L_Nibble1: + return (.@v & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT; + +L_Nibble2: + return (.@v & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT; + +L_Nibble3: + return (.@v & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT; + +L_Nibble4: + return (.@v & NIBBLE_4_MASK) >> NIBBLE_4_SHIFT; + +L_Nibble5: + return (.@v & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT; + +L_Nibble6: + return (.@v & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT; + +// In theory, there's a "nibble 7" but it is broken so it is not available +} + +///////////////////////////////////////////////////////////////////////////////// +// A Byte can go up to 255. There are 4 bytes. The fourth can go up to 127. +// set_byte(VAR, BYTEID, VALUE) +function|script|set_byte +{ + set .@v, getarg(0); + set .@id, getarg(1); + if (.@id == 0) goto L_Byte0; + if (.@id == 1) goto L_Byte1; + if (.@id == 2) goto L_Byte2; + if (.@id == 3) goto L_Byte3; + debugmes "get_byte invalid call"; + return -1; + +L_Byte0: + set getarg(0), ((.@v & ~(BYTE_0_MASK)) | (getarg(2) << BYTE_0_SHIFT)); + return; + +L_Byte1: + set getarg(0), ((.@v & ~(BYTE_1_MASK)) | (getarg(2) << BYTE_1_SHIFT)); + return; + +L_Byte2: + set getarg(0), ((.@v & ~(BYTE_2_MASK)) | (getarg(2) << BYTE_2_SHIFT)); + return; + +L_Byte3: + set getarg(0), ((.@v & ~(BYTE_3_MASK)) | (getarg(2) << BYTE_3_SHIFT)); + return; +} + + + +// A Nibble can go up to 15. There are 7 nibbles.. +// get_nibble(VAR, NIBBLEID, VALUE) +function|script|set_nibble +{ + set .@v, getarg(0); + set .@id, getarg(1); + if (.@id == 0) goto L_Nibble0; + if (.@id == 1) goto L_Nibble1; + if (.@id == 2) goto L_Nibble2; + if (.@id == 3) goto L_Nibble3; + if (.@id == 4) goto L_Nibble4; + if (.@id == 5) goto L_Nibble5; + if (.@id == 6) goto L_Nibble6; + debugmes "get_byte invalid call"; + return -1; + +L_Nibble0: + set getarg(0), ((.@v & ~(NIBBLE_0_MASK)) | (getarg(2) << NIBBLE_0_SHIFT)); + return; + +L_Nibble1: + set getarg(0), ((.@v & ~(NIBBLE_1_MASK)) | (getarg(2) << NIBBLE_1_SHIFT)); + return; + +L_Nibble2: + set getarg(0), ((.@v & ~(NIBBLE_2_MASK)) | (getarg(2) << NIBBLE_2_SHIFT)); + return; + +L_Nibble3: + set getarg(0), ((.@v & ~(NIBBLE_3_MASK)) | (getarg(2) << NIBBLE_3_SHIFT)); + return; + +L_Nibble4: + set getarg(0), ((.@v & ~(NIBBLE_4_MASK)) | (getarg(2) << NIBBLE_4_SHIFT)); + return; + +L_Nibble5: + set getarg(0), ((.@v & ~(NIBBLE_5_MASK)) | (getarg(2) << NIBBLE_5_SHIFT)); + return; + +L_Nibble6: + set getarg(0), ((.@v & ~(NIBBLE_6_MASK)) | (getarg(2) << NIBBLE_6_SHIFT)); + return; +} + |