diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 2f9d6e548f3..4ce23b417d3 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -153,3 +153,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define RELIGION_TOOL_INVOKE (1<<0) #define RELIGION_TOOL_SACRIFICE (1<<1) #define RELIGION_TOOL_SECTSELECT (1<<2) + +//skillchip flags +//Skillchip type can be implanted multiple times +#define SKILLCHIP_ALLOWS_MULTIPLE (1<<0) diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm index 1f350c674ca..be5964186c1 100644 --- a/code/modules/library/skill_learning/skillchip.dm +++ b/code/modules/library/skill_learning/skillchip.dm @@ -13,7 +13,7 @@ var/skill_name /// Skill description shown on UI var/skill_description - /// FS icon show on UI + /// Fontawesome icon show on UI, list of possible icons https://fontawesome.com/icons?d=gallery&m=free var/skill_icon = "brain" /// Message shown when implanting the chip var/implanting_message @@ -23,6 +23,8 @@ var/removable = TRUE /// How many skillslots this one takes var/slot_cost = 1 + /// Variable for flags + var/skillchip_flags = NONE /// Called after implantation and/or brain entering new body /obj/item/skillchip/proc/on_apply(mob/living/carbon/user,silent=TRUE) @@ -49,8 +51,8 @@ //No skill slots left if(target.used_skillchip_slots + slot_cost > target.max_skillchip_slots) return FALSE - //Only one copy of each for now. - if(locate(type) in target_brain.skillchips) + //Only one multiple copies of a type if SKILLCHIP_ALLOWS_MULTIPLE flag is set + if(!(skillchip_flags & SKILLCHIP_ALLOWS_MULTIPLE) && (locate(type) in target_brain.skillchips)) return FALSE return TRUE @@ -63,8 +65,8 @@ //No skill slots left if(target.used_skillchip_slots + slot_cost > target.max_skillchip_slots) return "Complexity limit exceeded." - //Only one copy of each for now. - if(locate(type) in target_brain.skillchips) + //Only one multiple copies of a type if SKILLCHIP_ALLOWS_MULTIPLE flag is set + if(!(skillchip_flags & SKILLCHIP_ALLOWS_MULTIPLE) && (locate(type) in target_brain.skillchips)) return "Duplicate chip detected." return "Chip ready for implantation." @@ -96,3 +98,23 @@ skill_icon = "spa" implanting_message = "Your mind is filled with plant arrangments." removal_message = "Your can't remember how a hedge looks like anymore." + +/obj/item/skillchip/useless_adapter + name = "Skillchip adapter" + skill_name = "Useless adapter" + skill_description = "Allows you to insert another identical skillchip into this adapter, but the adapter also takes a slot ..." + skill_icon = "plug" + implanting_message = "You can now implant another chip into this adapter, but the adapter also took up an existing slot ..." + removal_message = "You no longer have the useless skillchip adapter." + skillchip_flags = SKILLCHIP_ALLOWS_MULTIPLE + slot_cost = 0 + +/obj/item/skillchip/useless_adapter/on_apply(mob/living/carbon/user, silent) + . = ..() + user.max_skillchip_slots++ + user.used_skillchip_slots++ + +/obj/item/skillchip/useless_adapter/on_removal(mob/living/carbon/user, silent) + user.max_skillchip_slots-- + user.used_skillchip_slots-- + return ..() diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index 9f26a9589a9..3480b732026 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -17,7 +17,8 @@ /obj/item/storage/card_binder = 10, /obj/item/skillchip/basketweaving=2, /obj/item/skillchip/bonsai=2, - /obj/item/skillchip/wine_taster=2) + /obj/item/skillchip/wine_taster=2, + /obj/item/skillchip/useless_adapter=5) contraband = list(/obj/item/dice/fudge = 9) premium = list(/obj/item/melee/skateboard/pro = 3, /obj/item/melee/skateboard/hoverboard = 1)