summaryrefslogtreecommitdiff
path: root/includes/bitset.php
blob: 1d026e5746307e4447f233d407fb3a045d8cdfac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php

function parseBitset ($bitset) {
    $bin = str_repeat("0", 48 - strlen(decbin($bitset))) . decbin($bitset);

    $sharedMemory = bindec(substr($bin, 24, 2));
    $median = substr($bin, 26, 1) !== "0";
    $little = bindec(substr($bin, 27, 2));
    $food = bindec(substr($bin, 16, 2));
    $nonverbal = substr($bin, 15, 1) !== "0";
    $lessFrequent = substr($bin, 14, 1) !== "0";
    $sexuallyActive = substr($bin, 13, 1) !== "0";
    $ageRegressor = substr($bin, 12, 1) !== "0";
    $magic = bindec(substr($bin, 18, 3));
    $sensitivity = bindec(substr($bin, 21, 3));
    $protector = substr($bin, 29, 1) !== "0";
    $fictive = substr($bin, 30, 1) !== "0";
    $notTalking = substr($bin, 31, 1) !== "0";
    $host = substr($bin, 32, 1) !== "0";
    $robot = substr($bin, 45, 1) !== "0";
    $plush = substr($bin, 46, 1) !== "0";
    $age = substr($bin, 47, 1) !== "0";
    $species1 = substr($bin, 33, 4);
    $species2 = substr($bin, 37, 4);
    $species3 = substr($bin, 41, 4);

    $species1 = match ($species1) {
        "0001" => "earth",
        "0010" => "unicorn",
        "0011" => "pegasus",
        "0100" => "alicorn",
        "0101" => "batpony",
        "0110" => "crystal",
        default => null,
    };

    $species2 = match ($species2) {
        "0001" => "earth",
        "0010" => "unicorn",
        "0011" => "pegasus",
        "0100" => "alicorn",
        "0101" => "batpony",
        "0110" => "crystal",
        default => null,
    };

    $species3 = match ($species3) {
        "0001" => "earth",
        "0010" => "unicorn",
        "0011" => "pegasus",
        "0100" => "alicorn",
        "0101" => "batpony",
        "0110" => "crystal",
        default => null,
    };

    if ($little === 1) {
        $ageRegressor = true;
        $little = 0;
    }

    return [
        'shared_memory' => $sharedMemory,
        'median' => $median,
        'protector' => $protector,
        'fictive' => $fictive,
        'little' => $little,
        'not_talking' => $notTalking,
        'host' => $host,
        'robot' => $robot,
        'magic' => $magic,
        'sensitivity' => $sensitivity,
        'food' => $food,
        'plush' => $plush,
        'nonverbal' => $nonverbal,
        'less_frequent' => $lessFrequent,
        'age_spells' => $age,
        'age_regressor' => $ageRegressor,
        'sexually_active' => $sexuallyActive,
        'species' => array_filter([
            $species1,
            $species2,
            $species3
        ], function ($i) {
            return isset($i);
        })
    ];
}

function parseMetadata ($metadata) {
    if (isset($metadata)) {
        if ($metadata["bitset"]) {
            $m = parseBitset($metadata["bitset"]);
            $m["marefriends"] = $metadata["marefriends"] ?? [];
            $m["bitset"] = $metadata["bitset"] ?? [];
            $m["sisters"] = $metadata["sisters"] ?? [];
            $m["regression"] = $metadata["regression"] ?? null;
            $m["caretakers"] = $metadata["caretakers"] ?? [];
            $m["median"] = $metadata["median"] ?? null;
            $m["birth"] = $metadata["birth"] ?? null;
            $m["heat"] = $metadata["heat"] ?? null;
        } else {
            $m = $metadata;
        }

        return $m;
    } else {
        return $metadata;
    }
}