GLOBAL_LIST_INIT(bitfields, generate_bitfields()) /// Specifies a bitfield for smarter debugging /datum/bitfield /// The variable name that contains the bitfield var/variable /// An associative list of the readable flag and its true value var/list/flags /// Turns /datum/bitfield subtypes into a list for use in debugging /proc/generate_bitfields() var/list/bitfields = list() for (var/_bitfield in subtypesof(/datum/bitfield)) var/datum/bitfield/bitfield = new _bitfield bitfields[bitfield.variable] = bitfield.flags return bitfields /// Returns an associative list of bitflag name -> number for all valid bitflags in the passed in field /proc/get_valid_bitflags(var_name) return GLOB.bitfields[var_name] || list() /proc/get_random_bitflag(var_name) var/list/flags = get_valid_bitflags(var_name) if(!length(flags)) return var/name = pick(flags) return flags[name] DEFINE_BITFIELD(admin_flags, list( "ADMIN" = R_ADMIN, "AUTOLOGIN" = R_AUTOADMIN, "BAN" = R_BAN, "BUILDMODE" = R_BUILD, "DBRANKS" = R_DBRANKS, "DEBUG" = R_DEBUG, "FUN" = R_FUN, "PERMISSIONS" = R_PERMISSIONS, "POLL" = R_POLL, "POSSESS" = R_POSSESS, "SERVER" = R_SERVER, "SOUNDS" = R_SOUND, "SPAWN" = R_SPAWN, "STEALTH" = R_STEALTH, "VAREDIT" = R_VAREDIT, )) DEFINE_BITFIELD(appearance_flags, list( "KEEP_APART" = KEEP_APART, "KEEP_TOGETHER" = KEEP_TOGETHER, "LONG_GLIDE" = LONG_GLIDE, "NO_CLIENT_COLOR" = NO_CLIENT_COLOR, "PIXEL_SCALE" = PIXEL_SCALE, "PLANE_MASTER" = PLANE_MASTER, "RESET_ALPHA" = RESET_ALPHA, "RESET_COLOR" = RESET_COLOR, "RESET_TRANSFORM" = RESET_TRANSFORM, "TILE_BOUND" = TILE_BOUND, "PASS_MOUSE" = PASS_MOUSE, "TILE_MOVER" = TILE_MOVER, )) DEFINE_BITFIELD(area_flags, list( "BLOBS_ALLOWED" = BLOBS_ALLOWED, "BLOCK_SUICIDE" = BLOCK_SUICIDE, "CAVES_ALLOWED" = CAVES_ALLOWED, "CULT_PERMITTED" = CULT_PERMITTED, "FLORA_ALLOWED" = FLORA_ALLOWED, "HIDDEN_AREA" = HIDDEN_AREA, "MEGAFAUNA_SPAWN_ALLOWED" = MEGAFAUNA_SPAWN_ALLOWED, "MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED, "NOTELEPORT" = NOTELEPORT, "NO_DEATH_MESSAGE" = NO_DEATH_MESSAGE, "PERSISTENT_ENGRAVINGS" = PERSISTENT_ENGRAVINGS, "UNIQUE_AREA" = UNIQUE_AREA, "VALID_TERRITORY" = VALID_TERRITORY, "XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE, "NO_BOH" = NO_BOH, "UNLIMITED_FISHING" = UNLIMITED_FISHING, )) DEFINE_BITFIELD(turf_flags, list( "NO_LAVA_GEN" = NO_LAVA_GEN, "NO_RUINS" = NO_RUINS, "NO_RUST" = NO_RUST, "NOJAUNT" = NOJAUNT, "IS_SOLID" = IS_SOLID, "UNUSED_RESERVATION_TURF" = UNUSED_RESERVATION_TURF, "RESERVATION_TURF" = RESERVATION_TURF, "TURF_BLOCKS_PLACEATOM" = TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES, )) DEFINE_BITFIELD(car_traits, list( "CAN_KIDNAP" = CAN_KIDNAP, )) DEFINE_BITFIELD(clothing_flags, list( "ANTI_TINFOIL_MANEUVER" = ANTI_TINFOIL_MANEUVER, "BLOCK_GAS_SMOKE_EFFECT" = BLOCK_GAS_SMOKE_EFFECT, "CASTING_CLOTHES" = CASTING_CLOTHES, "GAS_FILTERING" = GAS_FILTERING, "HEADINTERNALS" = HEADINTERNALS, "INEDIBLE_CLOTHING" = INEDIBLE_CLOTHING, "LARGE_WORN_ICON" = LARGE_WORN_ICON, "LAVAPROTECT" = LAVAPROTECT, "MASKINTERNALS" = MASKINTERNALS, "STACKABLE_HELMET_EXEMPT" = STACKABLE_HELMET_EXEMPT, "PLASMAMAN_PREVENT_IGNITION" = PLASMAMAN_PREVENT_IGNITION, "SNUG_FIT" = SNUG_FIT, "STOPSPRESSUREDAMAGE" = STOPSPRESSUREDAMAGE, "THICKMATERIAL" = THICKMATERIAL, "VOICEBOX_DISABLED" = VOICEBOX_DISABLED, "VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE, "INTERNALS_ADJUST_EXEMPT" = INTERNALS_ADJUST_EXEMPT, )) DEFINE_BITFIELD(datum_flags, list( "DF_ISPROCESSING" = DF_ISPROCESSING, "DF_VAR_EDITED" = DF_VAR_EDITED, "DF_USE_TAG" = DF_USE_TAG, )) DEFINE_BITFIELD(disease_flags, list( "CAN_CARRY" = CAN_CARRY, "CAN_RESIST" = CAN_RESIST, "CURABLE" = CURABLE, )) DEFINE_BITFIELD(flags_1, list( "ADMIN_SPAWNED_1" = ADMIN_SPAWNED_1, "ALLOW_DARK_PAINTS_1" = ALLOW_DARK_PAINTS_1, "ATMOS_IS_PROCESSING_1" = ATMOS_IS_PROCESSING_1, "CAN_BE_DIRTY_1" = CAN_BE_DIRTY_1, "DECAL_INIT_UPDATE_EXPERIENCED_1" = DECAL_INIT_UPDATE_EXPERIENCED_1, "HAS_CONTEXTUAL_SCREENTIPS_1" = HAS_CONTEXTUAL_SCREENTIPS_1, "HAS_DISASSOCIATED_STORAGE_1" = HAS_DISASSOCIATED_STORAGE_1, "HOLOGRAM_1" = HOLOGRAM_1, "HTML_USE_INITAL_ICON_1" = HTML_USE_INITAL_ICON_1, "IGNORE_TURF_PIXEL_OFFSET_1" = IGNORE_TURF_PIXEL_OFFSET_1, "INITIALIZED_1" = INITIALIZED_1, "IS_ONTOP_1" = IS_ONTOP_1, "IS_PLAYER_COLORABLE_1" = IS_PLAYER_COLORABLE_1, "NO_NEW_GAGS_PREVIEW_1" = NO_NEW_GAGS_PREVIEW_1, "NO_SCREENTIPS_1" = NO_SCREENTIPS_1, "ON_BORDER_1" = ON_BORDER_1, "PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1, "PREVENT_CONTENTS_EXPLOSION_1" = PREVENT_CONTENTS_EXPLOSION_1, "SUPERMATTER_IGNORES_1" = SUPERMATTER_IGNORES_1, "UNPAINTABLE_1" = UNPAINTABLE_1, )) DEFINE_BITFIELD(flags_ricochet, list( "RICOCHET_HARD" = RICOCHET_HARD, "RICOCHET_SHINY" = RICOCHET_SHINY, )) DEFINE_BITFIELD(interaction_flags_atom, list( "INTERACT_ATOM_ATTACK_HAND" = INTERACT_ATOM_ATTACK_HAND, "INTERACT_ATOM_CHECK_GRAB" = INTERACT_ATOM_CHECK_GRAB, "INTERACT_ATOM_IGNORE_INCAPACITATED" = INTERACT_ATOM_IGNORE_INCAPACITATED, "INTERACT_ATOM_IGNORE_RESTRAINED" = INTERACT_ATOM_IGNORE_RESTRAINED, "INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND" = INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND, "INTERACT_ATOM_NO_FINGERPRINT_INTERACT" = INTERACT_ATOM_NO_FINGERPRINT_INTERACT, "INTERACT_ATOM_REQUIRES_ANCHORED" = INTERACT_ATOM_REQUIRES_ANCHORED, "INTERACT_ATOM_REQUIRES_DEXTERITY" = INTERACT_ATOM_REQUIRES_DEXTERITY, "INTERACT_ATOM_UI_INTERACT" = INTERACT_ATOM_UI_INTERACT, "INTERACT_ATOM_ALLOW_USER_LOCATION" = INTERACT_ATOM_ALLOW_USER_LOCATION, "INTERACT_ATOM_IGNORE_MOBILITY" = INTERACT_ATOM_IGNORE_MOBILITY, )) DEFINE_BITFIELD(interaction_flags_machine, list( "INTERACT_MACHINE_OPEN" = INTERACT_MACHINE_OPEN, "INTERACT_MACHINE_OFFLINE" = INTERACT_MACHINE_OFFLINE, "INTERACT_MACHINE_WIRES_IF_OPEN" = INTERACT_MACHINE_WIRES_IF_OPEN, "INTERACT_MACHINE_ALLOW_SILICON" = INTERACT_MACHINE_ALLOW_SILICON, "INTERACT_MACHINE_OPEN_SILICON" = INTERACT_MACHINE_OPEN_SILICON, "INTERACT_MACHINE_REQUIRES_SILICON" = INTERACT_MACHINE_REQUIRES_SILICON, "INTERACT_MACHINE_REQUIRES_SIGHT" = INTERACT_MACHINE_REQUIRES_SIGHT, "INTERACT_MACHINE_REQUIRES_LITERACY" = INTERACT_MACHINE_REQUIRES_LITERACY, "INTERACT_MACHINE_REQUIRES_STANDING" = INTERACT_MACHINE_REQUIRES_STANDING, )) DEFINE_BITFIELD(interaction_flags_item, list( "INTERACT_ITEM_ATTACK_HAND_PICKUP" = INTERACT_ITEM_ATTACK_HAND_PICKUP, )) DEFINE_BITFIELD(item_flags, list( "ABSTRACT" = ABSTRACT, "BEING_REMOVED" = BEING_REMOVED, "DROPDEL" = DROPDEL, "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, "HAND_ITEM" = HAND_ITEM, "IGNORE_DIGITIGRADE" = IGNORE_DIGITIGRADE, "IMMUTABLE_SLOW" = IMMUTABLE_SLOW, "IN_INVENTORY" = IN_INVENTORY, "IN_STORAGE" = IN_STORAGE, "ITEM_HAS_CONTEXTUAL_SCREENTIPS" = ITEM_HAS_CONTEXTUAL_SCREENTIPS, "NEEDS_PERMIT" = NEEDS_PERMIT, "NOBLUDGEON" = NOBLUDGEON, "NO_MAT_REDEMPTION" = NO_MAT_REDEMPTION, "NO_PIXEL_RANDOM_DROP" = NO_PIXEL_RANDOM_DROP, "SLOWS_WHILE_IN_HAND" = SLOWS_WHILE_IN_HAND, "SURGICAL_TOOL" = SURGICAL_TOOL, "CRUEL_IMPLEMENT" = CRUEL_IMPLEMENT, "XENOMORPH_HOLDABLE" = XENOMORPH_HOLDABLE, "NO_BLOOD_ON_ITEM" = NO_BLOOD_ON_ITEM, )) DEFINE_BITFIELD(flags_inv, list( "HIDEEARS" = HIDEEARS, "HIDEEYES" = HIDEEYES, "HIDEFACE" = HIDEFACE, "HIDEFACIALHAIR" = HIDEFACIALHAIR, "HIDEGLOVES" = HIDEGLOVES, "HIDEHAIR" = HIDEHAIR, "HIDEHEADGEAR" = HIDEHEADGEAR, "HIDEJUMPSUIT" = HIDEJUMPSUIT, "HIDEMASK" = HIDEMASK, "HIDEBELT" = HIDEBELT, "HIDENECK" = HIDENECK, "HIDESHOES" = HIDESHOES, "HIDESNOUT" = HIDESNOUT, "HIDESUITSTORAGE" = HIDESUITSTORAGE, "HIDEMUTWINGS" = HIDEMUTWINGS, "HIDEANTENNAE" = HIDEANTENNAE, )) DEFINE_BITFIELD(strict_coverage_zones, list( "HAIR_APPENDAGE_FRONT" = HAIR_APPENDAGE_FRONT, "HAIR_APPENDAGE_LEFT" = HAIR_APPENDAGE_LEFT, "HAIR_APPENDAGE_RIGHT" = HAIR_APPENDAGE_RIGHT, "HAIR_APPENDAGE_REAR" = HAIR_APPENDAGE_REAR, "HAIR_APPENDAGE_TOP" = HAIR_APPENDAGE_TOP, "HAIR_APPENDAGE_HANGING_FRONT" = HAIR_APPENDAGE_HANGING_FRONT, "HAIR_APPENDAGE_HANGING_REAR" = HAIR_APPENDAGE_HANGING_REAR, )) DEFINE_BITFIELD(machine_stat, list( "BROKEN" = BROKEN, "EMPED" = EMPED, "MAINT" = MAINT, "NOPOWER" = NOPOWER, )) DEFINE_BITFIELD(material_flags, list( "MATERIAL_EFFECTS" = MATERIAL_EFFECTS, "MATERIAL_COLOR" = MATERIAL_COLOR, "MATERIAL_ADD_PREFIX" = MATERIAL_ADD_PREFIX, "MATERIAL_AFFECT_STATISTICS" = MATERIAL_AFFECT_STATISTICS, "MATERIAL_GREYSCALE" = MATERIAL_GREYSCALE, "MATERIAL_NO_SLOWDOWN" = MATERIAL_NO_SLOWDOWN, )) DEFINE_BITFIELD(mat_container_flags, list( "MATCONTAINER_EXAMINE" = MATCONTAINER_EXAMINE, "MATCONTAINER_NO_INSERT" = MATCONTAINER_NO_INSERT, "MATCONTAINER_ANY_INTENT" = MATCONTAINER_ANY_INTENT, "MATCONTAINER_SILENT" = MATCONTAINER_SILENT )) DEFINE_BITFIELD(internal_damage, list( "MECHA_INT_FIRE" = MECHA_INT_FIRE, "MECHA_INT_TEMP_CONTROL" = MECHA_INT_TEMP_CONTROL, "MECHA_CABIN_AIR_BREACH" = MECHA_CABIN_AIR_BREACH, "MECHA_INT_CONTROL_LOST" = MECHA_INT_CONTROL_LOST, "MECHA_INT_SHORT_CIRCUIT" = MECHA_INT_SHORT_CIRCUIT, )) DEFINE_BITFIELD(mecha_flags, list( "ID_LOCK_ON" = ID_LOCK_ON, "CAN_STRAFE" = CAN_STRAFE, "LIGHTS_ON" = LIGHTS_ON, "SILICON_PILOT" = SILICON_PILOT, "IS_ENCLOSED" = IS_ENCLOSED, "HAS_LIGHTS" = HAS_LIGHTS, "QUIET_STEPS" = QUIET_STEPS, "QUIET_TURNS" = QUIET_TURNS, "CANNOT_INTERACT" = CANNOT_INTERACT, "MMI_COMPATIBLE" = MMI_COMPATIBLE, "AI_COMPATIBLE" = AI_COMPATIBLE, "OMNIDIRECTIONAL_ATTACKS" = OMNIDIRECTIONAL_ATTACKS, "CANNOT_OVERPENETRATE" = CANNOT_OVERPENETRATE, "BEACON_TRACKABLE" = BEACON_TRACKABLE, "BEACON_CONTROLLABLE" = BEACON_CONTROLLABLE, )) DEFINE_BITFIELD(mob_biotypes, list( "MOB_BEAST" = MOB_BEAST, "MOB_BUG" = MOB_BUG, "MOB_HUMANOID" = MOB_HUMANOID, "MOB_MINERAL" = MOB_MINERAL, "MOB_ORGANIC" = MOB_ORGANIC, "MOB_PLANT" = MOB_PLANT, "MOB_REPTILE" = MOB_REPTILE, "MOB_ROBOTIC" = MOB_ROBOTIC, "MOB_SLIME" = MOB_SLIME, "MOB_SPECIAL" = MOB_SPECIAL, "MOB_SPIRIT" = MOB_SPIRIT, "MOB_UNDEAD" = MOB_UNDEAD, )) DEFINE_BITFIELD(mob_flags, list( "MOB_HAS_SCREENTIPS_NAME_OVERRIDE" = MOB_HAS_SCREENTIPS_NAME_OVERRIDE, )) DEFINE_BITFIELD(mob_respiration_type, list( "RESPIRATION_OXYGEN" = RESPIRATION_OXYGEN, "RESPIRATION_N2" = RESPIRATION_N2, "RESPIRATION_PLASMA" = RESPIRATION_PLASMA, )) DEFINE_BITFIELD(mobility_flags, list( "MOVE" = MOBILITY_MOVE, "PICKUP" = MOBILITY_PICKUP, "PULL" = MOBILITY_PULL, "STAND" = MOBILITY_STAND, "STORAGE" = MOBILITY_STORAGE, "UI" = MOBILITY_UI, "USE" = MOBILITY_USE, )) DEFINE_BITFIELD(movement_type, list( "FLOATING" = FLOATING, "FLYING" = FLYING, "GROUND" = GROUND, "PHASING" = PHASING, "VENTCRAWLING" = VENTCRAWLING, "UPSIDE_DOWN" = UPSIDE_DOWN, )) DEFINE_BITFIELD(obj_flags, list( "EMAGGED" = EMAGGED, "CAN_BE_HIT" = CAN_BE_HIT, "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, "UNIQUE_RENAME" = UNIQUE_RENAME, "BLOCK_Z_OUT_DOWN" = BLOCK_Z_OUT_DOWN, "BLOCK_Z_OUT_UP" = BLOCK_Z_OUT_UP, "BLOCK_Z_IN_DOWN" = BLOCK_Z_IN_DOWN, "BLOCK_Z_IN_UP" = BLOCK_Z_IN_UP, "BLOCKS_CONSTRUCTION" = BLOCKS_CONSTRUCTION, "BLOCKS_CONSTRUCTION_DIR" = BLOCKS_CONSTRUCTION_DIR, "IGNORE_DENSITY" = IGNORE_DENSITY, "INFINITE_RESKIN" = INFINITE_RESKIN, "CONDUCTS_ELECTRICITY" = CONDUCTS_ELECTRICITY, "NO_DEBRIS_AFTER_DECONSTRUCTION" = NO_DEBRIS_AFTER_DECONSTRUCTION, )) DEFINE_BITFIELD(pass_flags, list( "PASSBLOB" = PASSBLOB, "PASSCLOSEDTURF" = PASSCLOSEDTURF, "PASSDOORS" = PASSDOORS, "PASSFLAPS" = PASSFLAPS, "PASSGLASS" = PASSGLASS, "PASSGRILLE" = PASSGRILLE, "PASSITEM" = PASSITEM, "PASSMACHINE" = PASSMACHINE, "PASSMOB" = PASSMOB, "PASSSTRUCTURE" = PASSSTRUCTURE, "PASSTABLE" = PASSTABLE, "PASSVEHICLE" = PASSVEHICLE, "PASSWINDOW" = PASSWINDOW, )) DEFINE_BITFIELD(pass_flags_self, list( "LETPASSCLICKS" = LETPASSCLICKS, "LETPASSTHROW" = LETPASSTHROW, "PASSBLOB" = PASSBLOB, "PASSCLOSEDTURF" = PASSCLOSEDTURF, "PASSDOORS" = PASSDOORS, "PASSFLAPS" = PASSFLAPS, "PASSGLASS" = PASSGLASS, "PASSGRILLE" = PASSGRILLE, "PASSITEM" = PASSITEM, "PASSMACHINE" = PASSMACHINE, "PASSMOB" = PASSMOB, "PASSSTRUCTURE" = PASSSTRUCTURE, "PASSTABLE" = PASSTABLE, "PASSVEHICLE" = PASSVEHICLE, "PASSWINDOW" = PASSWINDOW, )) DEFINE_BITFIELD(resistance_flags, list( "LAVA_PROOF" = LAVA_PROOF, "FIRE_PROOF" = FIRE_PROOF, "FLAMMABLE" = FLAMMABLE, "ON_FIRE" = ON_FIRE, "UNACIDABLE" = UNACIDABLE, "ACID_PROOF" = ACID_PROOF, "INDESTRUCTIBLE" = INDESTRUCTIBLE, "FREEZE_PROOF" = FREEZE_PROOF, "SHUTTLE_CRUSH_PROOF" = SHUTTLE_CRUSH_PROOF, "BOMB_PROOF" = BOMB_PROOF, )) DEFINE_BITFIELD(sight, list( "BLIND" = BLIND, "SEE_BLACKNESS" = SEE_BLACKNESS, "SEE_INFRA" = SEE_INFRA, "SEE_MOBS" = SEE_MOBS, "SEE_OBJS" = SEE_OBJS, "SEE_PIXELS" = SEE_PIXELS, "SEE_SELF" = SEE_SELF, "SEE_THRU" = SEE_THRU, "SEE_TURFS" = SEE_TURFS, )) DEFINE_BITFIELD(vis_flags, list( "VIS_HIDE" = VIS_HIDE, "VIS_INHERIT_DIR" = VIS_INHERIT_DIR, "VIS_INHERIT_ICON" = VIS_INHERIT_ICON, "VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE, "VIS_INHERIT_ID" = VIS_INHERIT_ID, "VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER, "VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE, "VIS_UNDERLAY" = VIS_UNDERLAY, )) DEFINE_BITFIELD(zap_flags, list( "ZAP_ALLOW_DUPLICATES" = ZAP_ALLOW_DUPLICATES, "ZAP_MACHINE_EXPLOSIVE" = ZAP_MACHINE_EXPLOSIVE, "ZAP_MOB_DAMAGE" = ZAP_MOB_DAMAGE, "ZAP_MOB_STUN" = ZAP_MOB_STUN, "ZAP_OBJ_DAMAGE" = ZAP_OBJ_DAMAGE, "ZAP_GENERATES_POWER" = ZAP_GENERATES_POWER, )) DEFINE_BITFIELD(chemical_flags, list( "REAGENT_DEAD_PROCESS" = REAGENT_DEAD_PROCESS, "REAGENT_INVISIBLE" = REAGENT_INVISIBLE, "REAGENT_SNEAKYNAME" = REAGENT_SNEAKYNAME, "REAGENT_SPLITRETAINVOL" = REAGENT_SPLITRETAINVOL, "REAGENT_CAN_BE_SYNTHESIZED" = REAGENT_CAN_BE_SYNTHESIZED, "REAGENT_IGNORE_STASIS" = REAGENT_IGNORE_STASIS, "REAGENT_NO_RANDOM_RECIPE" = REAGENT_NO_RANDOM_RECIPE, "REAGENT_CLEANS" = REAGENT_CLEANS, )) DEFINE_BITFIELD(reaction_flags, list( "REACTION_CLEAR_IMPURE" = REACTION_CLEAR_IMPURE, "REACTION_CLEAR_INVERSE" = REACTION_CLEAR_INVERSE, "REACTION_CLEAR_RETAIN" = REACTION_CLEAR_RETAIN, "REACTION_INSTANT" = REACTION_INSTANT, "REACTION_HEAT_ARBITARY" = REACTION_HEAT_ARBITARY, "REACTION_COMPETITIVE" = REACTION_COMPETITIVE, "REACTION_PH_VOL_CONSTANT" = REACTION_PH_VOL_CONSTANT, "REACTION_REAL_TIME_SPLIT" = REACTION_REAL_TIME_SPLIT, )) DEFINE_BITFIELD(bodytype, list( "BODYTYPE_ORGANIC" = BODYTYPE_ORGANIC, "BODYTYPE_ROBOTIC" = BODYTYPE_ROBOTIC, "BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER, "BODYTYPE_ALIEN" = BODYTYPE_ALIEN, "BODYTYPE_GOLEM" = BODYTYPE_GOLEM, "BODYTYPE_PEG" = BODYTYPE_PEG, )) DEFINE_BITFIELD(acceptable_bodytype, list( "BODYTYPE_ORGANIC" = BODYTYPE_ORGANIC, "BODYTYPE_ROBOTIC" = BODYTYPE_ROBOTIC, "BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER, "BODYTYPE_ALIEN" = BODYTYPE_ALIEN, "BODYTYPE_GOLEM" = BODYTYPE_GOLEM, "BODYTYPE_PEG" = BODYTYPE_PEG, )) DEFINE_BITFIELD(bodyshape, list( "BODYSHAPE_HUMANOID" = BODYSHAPE_HUMANOID, "BODYSHAPE_MONKEY" = BODYSHAPE_MONKEY, "BODYSHAPE_DIGITIGRADE" = BODYSHAPE_DIGITIGRADE, "BODYSHAPE_SNOUTED" = BODYSHAPE_SNOUTED, )) DEFINE_BITFIELD(acceptable_bodyshape, list( "BODYSHAPE_HUMANOID" = BODYSHAPE_HUMANOID, "BODYSHAPE_MONKEY" = BODYSHAPE_MONKEY, "BODYSHAPE_DIGITIGRADE" = BODYSHAPE_DIGITIGRADE, "BODYSHAPE_SNOUTED" = BODYSHAPE_SNOUTED, )) DEFINE_BITFIELD(bodypart_flags, list( "BODYPART_UNREMOVABLE" = BODYPART_UNREMOVABLE, "BODYPART_PSEUDOPART" = BODYPART_PSEUDOPART, "BODYPART_IMPLANTED" = BODYPART_IMPLANTED, )) DEFINE_BITFIELD(change_exempt_flags, list( "BP_BLOCK_CHANGE_SPECIES" = BP_BLOCK_CHANGE_SPECIES, )) DEFINE_BITFIELD(head_flags, list( "HEAD_HAIR" = HEAD_HAIR, "HEAD_FACIAL_HAIR" = HEAD_FACIAL_HAIR, "HEAD_LIPS" = HEAD_LIPS, "HEAD_EYESPRITES" = HEAD_EYESPRITES, "HEAD_EYECOLOR" = HEAD_EYECOLOR, "HEAD_EYEHOLES" = HEAD_EYEHOLES, "HEAD_DEBRAIN" = HEAD_DEBRAIN, )) DEFINE_BITFIELD(supports_variations_flags, list( "CLOTHING_NO_VARIATION" = CLOTHING_NO_VARIATION, "CLOTHING_DIGITIGRADE_VARIATION" = CLOTHING_DIGITIGRADE_VARIATION, "CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON" = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON, "CLOTHING_DIGITIGRADE_MASK" = CLOTHING_DIGITIGRADE_MASK, )) DEFINE_BITFIELD(flora_flags, list( "FLORA_HERBAL" = FLORA_HERBAL, "FLORA_WOODEN" = FLORA_WOODEN, "FLORA_STONE" = FLORA_STONE, )) DEFINE_BITFIELD(emote_flags, list( "EMOTE_AUDIBLE" = EMOTE_AUDIBLE, "EMOTE_VISIBLE" = EMOTE_VISIBLE, "EMOTE_IMPORTANT" = EMOTE_IMPORTANT, )) DEFINE_BITFIELD(organ_flags, list( "ORGAN_ORGANIC" = ORGAN_ORGANIC, "ORGAN_ROBOTIC" = ORGAN_ROBOTIC, "ORGAN_MINERAL" = ORGAN_MINERAL, "ORGAN_FROZEN" = ORGAN_FROZEN, "ORGAN_FAILING" = ORGAN_FAILING, "ORGAN_EMP" = ORGAN_EMP, "ORGAN_VITAL" = ORGAN_VITAL, "ORGAN_EDIBLE" = ORGAN_EDIBLE, "ORGAN_UNREMOVABLE" = ORGAN_UNREMOVABLE, "ORGAN_HIDDEN" = ORGAN_HIDDEN, "ORGAN_VIRGIN" = ORGAN_VIRGIN, )) DEFINE_BITFIELD(respiration_type, list( "RESPIRATION_OXYGEN" = RESPIRATION_OXYGEN, "RESPIRATION_N2" = RESPIRATION_N2, "RESPIRATION_PLASMA" = RESPIRATION_PLASMA, )) DEFINE_BITFIELD(liked_foodtypes, list( "MEAT" = MEAT, "VEGETABLES" = VEGETABLES, "RAW" = RAW, "JUNKFOOD" = JUNKFOOD, "GRAIN" = GRAIN, "FRUIT" = FRUIT, "DAIRY" = DAIRY, "FRIED" = FRIED, "ALCOHOL" = ALCOHOL, "SUGAR" = SUGAR, "GROSS" = GROSS, "TOXIC" = TOXIC, "PINEAPPLE" = PINEAPPLE, "BREAKFAST" = BREAKFAST, "CLOTH" = CLOTH, "NUTS" = NUTS, "SEAFOOD" = SEAFOOD, "ORANGES" = ORANGES, "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, )) DEFINE_BITFIELD(disliked_foodtypes, list( "MEAT" = MEAT, "VEGETABLES" = VEGETABLES, "RAW" = RAW, "JUNKFOOD" = JUNKFOOD, "GRAIN" = GRAIN, "FRUIT" = FRUIT, "DAIRY" = DAIRY, "FRIED" = FRIED, "ALCOHOL" = ALCOHOL, "SUGAR" = SUGAR, "GROSS" = GROSS, "TOXIC" = TOXIC, "PINEAPPLE" = PINEAPPLE, "BREAKFAST" = BREAKFAST, "CLOTH" = CLOTH, "NUTS" = NUTS, "SEAFOOD" = SEAFOOD, "ORANGES" = ORANGES, "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, )) DEFINE_BITFIELD(toxic_foodtypes, list( "MEAT" = MEAT, "VEGETABLES" = VEGETABLES, "RAW" = RAW, "JUNKFOOD" = JUNKFOOD, "GRAIN" = GRAIN, "FRUIT" = FRUIT, "DAIRY" = DAIRY, "FRIED" = FRIED, "ALCOHOL" = ALCOHOL, "SUGAR" = SUGAR, "GROSS" = GROSS, "TOXIC" = TOXIC, "PINEAPPLE" = PINEAPPLE, "BREAKFAST" = BREAKFAST, "CLOTH" = CLOTH, "NUTS" = NUTS, "SEAFOOD" = SEAFOOD, "ORANGES" = ORANGES, "BUGS" = BUGS, "GORE" = GORE, "STONE" = STONE, )) DEFINE_BITFIELD(sharpness, list( "SHARP_EDGED" = SHARP_EDGED, "SHARP_POINTY" = SHARP_POINTY, )) DEFINE_BITFIELD(gun_flags, list( "NOT_A_REAL_GUN" = NOT_A_REAL_GUN, "TOY_FIREARM_OVERLAY" = TOY_FIREARM_OVERLAY, "TURRET_INCOMPATIBLE" = TURRET_INCOMPATIBLE, )) DEFINE_BITFIELD(fish_flags, list( "FISH_FLAG_SHOW_IN_CATALOG" = FISH_FLAG_SHOW_IN_CATALOG, "FISH_DO_FLOP_ANIM" = FISH_DO_FLOP_ANIM, "FISH_FLAG_PETTED" = FISH_FLAG_PETTED, "FISH_FLAG_EXPERIMENT_SCANNABLE" = FISH_FLAG_EXPERIMENT_SCANNABLE, "FISH_FLAG_UPDATING_SIZE_AND_WEIGHT" = FISH_FLAG_OVERPOPULATED, "FISH_FLAG_SAFE_TEMPERATURE" = FISH_FLAG_SAFE_TEMPERATURE, "FISH_FLAG_SAFE_FLUID" = FISH_FLAG_SAFE_FLUID, )) DEFINE_BITFIELD(bot_mode_flags, list( "POWER_ON" = BOT_MODE_ON, "AUTO_PATROL" = BOT_MODE_AUTOPATROL, "REMOTE_CONTROL" = BOT_MODE_REMOTE_ENABLED, "SAPIENCE_ALLOWED" = BOT_MODE_CAN_BE_SAPIENT, "STARTS_POSSESSABLE" = BOT_MODE_ROUNDSTART_POSSESSION, )) DEFINE_BITFIELD(construction_upgrades, list( "RCD_UPGRADE_FRAMES" = RCD_UPGRADE_FRAMES, "RCD_UPGRADE_SIMPLE_CIRCUITS" = RCD_UPGRADE_SIMPLE_CIRCUITS, "RCD_UPGRADE_SILO_LINK" = RCD_UPGRADE_SILO_LINK, "RCD_UPGRADE_FURNISHING" = RCD_UPGRADE_FURNISHING, "RCD_UPGRADE_ANTI_INTERRUPT" = RCD_UPGRADE_ANTI_INTERRUPT, "RCD_UPGRADE_NO_FREQUENT_USE_COOLDOWN" = RCD_UPGRADE_NO_FREQUENT_USE_COOLDOWN, )) DEFINE_BITFIELD(weather_flags, list( "WEATHER_TURFS" = WEATHER_TURFS, "WEATHER_MOBS" = WEATHER_MOBS, "WEATHER_THUNDER" = WEATHER_THUNDER, "WEATHER_INDOORS" = WEATHER_INDOORS, "WEATHER_ENDLESS" = WEATHER_ENDLESS, "WEATHER_BAROMETER" = WEATHER_BAROMETER, "WEATHER_TEMPERATURE_BYPASS_CLOTHING" = WEATHER_TEMPERATURE_BYPASS_CLOTHING, ))