diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm index 5583b36435b..9b383a93d17 100644 --- a/code/modules/admin/verbs/honksquad.dm +++ b/code/modules/admin/verbs/honksquad.dm @@ -117,8 +117,11 @@ var/global/sent_honksquad = 0 equip_to_slot_or_del(new /obj/item/weapon/bikehorn(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(src), slot_in_backpack) - equip_to_slot_or_del(new /obj/item/weapon/gun/energy/clown(src), slot_in_backpack) equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(src), slot_in_backpack) + if(prob(50)) + equip_to_slot_or_del(new /obj/item/weapon/gun/energy/clown(src), slot_in_backpack) + else + equip_to_slot_or_del(new /obj/item/weapon/gun/grenadelauncher/piecannon(src), slot_in_backpack) src.mutations.Add(CLUMSY) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 01b425c9140..0f36f012b71 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -163,6 +163,7 @@ obj/item/weapon/gun/energy/staff/focus icon_state = "energy" projectile_type = "/obj/item/projectile/clown" fire_sound = 'sound/weapons/Gunshot_smg.ogg' + clumsy_check = 0 diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 54538e57a7b..38a996775cb 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -11,26 +11,30 @@ force = 5.0 var/list/grenades = new/list() var/max_grenades = 3 + var/ammo_name = "grenade" + var/ammo_type = /obj/item/weapon/grenade + var/unloaded + m_amt = 2000 examine() set src in view() ..() if (!(usr in view(2)) && usr!=src.loc) return - usr << "\icon [src] Grenade launcher:" - usr << "\blue [grenades] / [max_grenades] Grenades." + usr << "\icon [src] [name]:" + usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s." attackby(obj/item/I as obj, mob/user as mob, params) - if((istype(I, /obj/item/weapon/grenade))) + if((istype(I, ammo_type))) if(grenades.len < max_grenades) user.drop_item() I.loc = src grenades += I - user << "\blue You put the grenade in the grenade launcher." - user << "\blue [grenades.len] / [max_grenades] Grenades." + user << "\blue You put the [ammo_name] in the [name]." + user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." else - usr << "\red The grenade launcher cannot hold more grenades." + usr << "\red The grenade launcher cannot hold more [ammo_name]s." afterattack(obj/target, mob/user , flag) @@ -46,21 +50,68 @@ if(grenades.len) spawn(0) fire_grenade(target,user) else - usr << "\red The grenade launcher is empty." + usr << "\red The [name] is empty." proc fire_grenade(atom/target, mob/user) for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [] fired a grenade!", user), 1) - user << "\red You fire the grenade launcher!" + O.show_message(text("\red [] fired a [ammo_name]!", user), 1) + user << "\red You fire the [name]!" var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! grenades -= F F.loc = user.loc F.throw_at(target, 30, 2, user) - message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") - log_game("[key_name_admin(user)] used a grenade ([src.name]).") + message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([src.name]).") + log_game("[key_name_admin(user)] used a [ammo_name] ([src.name]).") F.active = 1 F.icon_state = initial(icon_state) + "_active" playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) spawn(15) - F.prime() \ No newline at end of file + F.prime() + +/obj/item/weapon/gun/grenadelauncher/piecannon + name = "pie cannon" + icon = 'icons/obj/gun.dmi' + icon_override = 'icons/mob/in-hand/guns.dmi' + icon_state = "piecannon0" + item_state = "piecannon0" + w_class = 4.0 + throw_speed = 2 + throw_range = 10 + force = 5.0 + clumsy_check = 0 + grenades = new/list() + max_grenades = 5 + ammo_name = "cream pie" + ammo_type = /obj/item/weapon/reagent_containers/food/snacks/pie + +/obj/item/weapon/gun/grenadelauncher/piecannon/New() + ..() + for(var/i=0, i < max_grenades, i++) + var/obj/item/weapon/reagent_containers/food/snacks/pie/P = new /obj/item/weapon/reagent_containers/food/snacks/pie(src) + grenades += P + +/obj/item/weapon/gun/grenadelauncher/piecannon/attackby(obj/item/I as obj, mob/user as mob, params) + if((istype(I, ammo_type))) + if(grenades.len < max_grenades) + user.drop_item() + I.loc = src + grenades += I + user << "\blue You put the [ammo_name] in the [name]." + user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." + icon_state = "piecannon1" + else + usr << "\red The grenade launcher cannot hold more [ammo_name]s." + +/obj/item/weapon/gun/grenadelauncher/piecannon/fire_grenade(atom/target, mob/user) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] fired a [ammo_name]!", user), 1) + user << "\red You fire the [name]!" + var/obj/item/weapon/reagent_containers/food/snacks/pie/P = grenades[1] //Now with less copypasta! + grenades -= P + P.loc = user.loc + P.throw_at(target, 30, 2, user) + message_admins("[key_name_admin(user)] fired a [ammo_name] ([P.name]) from a launcher ([src.name]).") + log_game("[key_name_admin(user)] used a [ammo_name] ([src.name]).") + if(!grenades.len) + icon_state = "piecannon0" diff --git a/icons/mob/in-hand/guns.dmi b/icons/mob/in-hand/guns.dmi index 619a7e534ef..da0a3a89699 100644 Binary files a/icons/mob/in-hand/guns.dmi and b/icons/mob/in-hand/guns.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index ba0ca07b908..ebef770d77a 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ