summaryrefslogtreecommitdiff
path: root/world/map/npc/functions/bitwise.txt
diff options
context:
space:
mode:
Diffstat (limited to 'world/map/npc/functions/bitwise.txt')
-rw-r--r--world/map/npc/functions/bitwise.txt146
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;
+}
+