/area/sim/racing_entry name = "Clowncar Race track - Entry" icon_state = "green" luminosity = 1 force_fullbright = 1 requires_power = 0 /area/sim/racing_track name = "Clowncar Race track" icon_state = "yellow" luminosity = 1 force_fullbright = 1 requires_power = 0 /obj/racing_boosterstrip name = "Booster" icon = 'icons/misc/racing.dmi' icon_state = "boosterstrip" anchored = 1 density = 0 opacity = 0 event_handler_flags = USE_HASENTERED HasEntered(atom/A) if(istype(A,/obj/racing_clowncar)) playsound(A, "sound/mksounds/boost.ogg",30, 0) step(A,src.dir) var/obj/racing_clowncar/R = A R.speed = R.base_speed - R.turbo R.drive(R.dir, R.speed) R.overlays += image('icons/mob/robots.dmi', "up-speed") SPAWN_DBG(1.5 SECONDS) R.speed = R.base_speed if (R.driving) R.drive(R.dir, 2) R.overlays -= image('icons/mob/robots.dmi', "up-speed") /obj/racing_powerup_spawner name = "PowerUpSpawner" icon = 'icons/Testing/atmos_testing.dmi' anchored = 1 density = 0 opacity = 0 invisibility = 101 var/spawn_time = 0 var/wait = 0 New() processing_items += src spawnit() ..() disposing() processing_items -= src ..() proc/process() if (world.time > spawn_time + wait) spawnit() ..() proc/spawnit() if(!(locate(/obj/racing_powerupbox) in src.loc)) new/obj/racing_powerupbox(src.loc) wait = 150 + rand(50, 400) spawn_time = world.time /obj/racing_butt/ name = "butt" icon = 'icons/misc/racing.dmi' icon_state = "buttshell" anchored = 1 density = 1 opacity = 0 var/source_car = null New(var/atom/spawnloc, var/spawndir, var/atom/sourcecar) src.set_loc(spawnloc) src.dir = spawndir source_car = sourcecar SPAWN_DBG(7.5 SECONDS) playsound(src, "sound/mksounds/itemdestroy.ogg",45, 0) qdel(src) move_process() Bump(var/atom/A) if(istype(A,/obj/racing_clowncar) && A != source_car) var/obj/racing_clowncar/R = A R.spin(20) playsound(A, "sound/mksounds/gothit.ogg",45, 0) qdel(src) proc/move_process() if (src.qdeled || src.pooled) return step(src,dir) SPAWN_DBG(1 DECI SECOND) move_process() /obj/super_racing_butt/ name = "superbutt" icon = 'icons/misc/racing.dmi' icon_state = "superbuttshell" anchored = 1 density = 1 opacity = 0 var/source_car = null New(var/atom/spawnloc, var/spawndir, var/atom/sourcecar) src.set_loc(spawnloc) src.dir = spawndir source_car = sourcecar SPAWN_DBG(7.5 SECONDS) playsound(src, "sound/mksounds/itemdestroy.ogg",45, 0) qdel(src) move_process() Bump(var/atom/A) if(istype(A,/obj/racing_clowncar) && A != source_car) var/obj/racing_clowncar/R = A R.spin(15) playsound(A, "sound/mksounds/gothit.ogg",45, 0) qdel(src) proc/move_process() if (src.qdeled || src.pooled) return var/atom/target = null for(var/obj/racing_clowncar/C in view(2,src)) if(C != source_car) target = C break if(target) step_towards(src,target) SPAWN_DBG(1 DECI SECOND) move_process() else step(src, src.dir) SPAWN_DBG(1 DECI SECOND) move_process() /obj/racing_trap_banana/ name = "banana peel" icon = 'icons/misc/racing.dmi' icon_state = "banana-peel" anchored = 1 density = 0 opacity = 0 var/delete = 1 event_handler_flags = USE_HASENTERED var/spawn_time = 0 New() ..() spawn_time = world.time if (delete) processing_items += src disposing() if (delete) processing_items -= src ..() proc/process() if (world.time > spawn_time + 4500) qdel(src) ..() HasEntered(atom/A) if(istype(A,/obj/racing_clowncar)) var/obj/racing_clowncar/R = A R.spin(20) playsound(src, "sound/mksounds/itemdestroy.ogg",45, 0) if(delete) qdel(src) /obj/racing_powerupbox/ name = "POWERUP!" icon = 'icons/misc/racing.dmi' icon_state = "powerup" anchored = 1 density = 0 opacity = 0 event_handler_flags = USE_HASENTERED HasEntered(atom/A) if(istype(A,/obj/racing_clowncar)) var/obj/racing_clowncar/R = A R.random_powerup() qdel(src) /obj/powerup/ name = "powerup" desc = "Click to use" icon = 'icons/misc/racing.dmi' icon_state = "blank" anchored = 1 layer = HUD_LAYER screen_loc = "NORTH,WEST" var/obj/racing_clowncar/owner disposing() owner = null ..() Click() if (owner.powerup == src) owner.powerup = null qdel(src) return /obj/powerup/bananapeel name = "Bananapeel" desc = "Click to use" anchored = 1 icon_state = "banana" screen_loc = "NORTH,WEST" Click() if(!istype(src.loc,/obj/racing_clowncar)) qdel(src) return var/turf/T = get_turf(src.loc) new/obj/racing_trap_banana/(T) playsound(T, "sound/mksounds/itemdrop.ogg",45, 0) qdel(src) return /obj/powerup/butt name = "Butt" desc = "Click to use" anchored = 1 icon_state = "butt" screen_loc = "NORTH,WEST" Click() if(!istype(src.loc,/obj/racing_clowncar)) qdel(src) return var/obj/racing_clowncar/C = src.loc var/turf/T = get_turf(C) var/turf/T2 = get_step(T,C.dir) var/turf/trg = null if(!T2.density) trg = T2 else trg = T new/obj/racing_butt(trg, C.dir, C) playsound(C, "sound/mksounds/throw.ogg",33, 0) qdel(src) return /obj/powerup/superbutt name = "Superbutt" desc = "Click to use" anchored = 1 icon_state = "superbutt" screen_loc = "NORTH,WEST" Click() if(!istype(src.loc,/obj/racing_clowncar)) qdel(src) return var/obj/racing_clowncar/C = src.loc var/turf/T = get_turf(C) var/turf/T2 = get_step(T,C.dir) var/turf/trg = null if(!T2.density) trg = T2 else trg = T new/obj/super_racing_butt(trg, C.dir, C) playsound(C, "sound/mksounds/throw.ogg",33, 0) qdel(src) return /obj/powerup/mushroom name = "Mushroom" desc = "Click to use" anchored = 1 icon_state = "mushroom" screen_loc = "NORTH,WEST" Click() var/atom/source = src src = null if(!istype(source.loc,/obj/racing_clowncar)) qdel(source) return var/obj/racing_clowncar/R = source.loc playsound(R, "sound/mksounds/boost.ogg",33, 0) R.boost() qdel(source) return /obj/powerup/superboost name = "Super Boost" desc = "Click to use" anchored = 1 icon_state = "superboost" screen_loc = "NORTH,WEST" Click() var/atom/source = src src = null if(!istype(source.loc,/obj/racing_clowncar)) qdel(source) return var/obj/racing_clowncar/R = source.loc playsound(R, "sound/mksounds/invin10sec.ogg",33, 0,0) // 33 R.super = 1 R.boost() qdel(source) return /obj/racing_clowncar name = "Turbo Clowncar 2000" desc = "" icon = 'icons/misc/racing.dmi' icon_state = "clowncar" anchored = 0 density = 1 opacity = 0 var/obj/powerup/powerup = null var/dir_original = 1 var/cant_control = 0 //Used during spins, etc var/base_speed = 2 //Base speed. var/turbo = 1 //Boost speed is base_speed - turbo. var/super = 0 //Invincibility var/driving = 0 var/speed = 2 //This is actually the DELAY. Lower = faster. var/mob/living/carbon/human/driver = null New() proc/random_powerup() var/list/powerups = childrentypesof(/obj/powerup/) if(!powerups.len) return playsound(src, "sound/mksounds/gotitem.ogg",33, 0) for(var/obj/powerup/OLD in src) qdel(OLD) var/picked = pick(powerups) var/obj/powerup/P = new picked(src) src.powerup = P if(driver) driver.client.screen += P return verb/enter() set src in oview(1) set category = "Local" if(!ishuman(usr)) return if(driver) boutput(usr, "Car already occupied by [driver.name].") return var/mob/M = usr M.set_loc(src) driver = M if(powerup && !(powerup in driver.client.screen)) driver.client.screen += powerup name = "Turbo Clowncar 2000 ([driver.name])" driving = 0 verb/exit() set src in oview(1) set category = "Local" if(!ishuman(usr) || usr != driver) return stop() driver.set_loc(get_turf(src)) if(powerup && (powerup in driver.client.screen)) driver.client.screen -= powerup name = "Turbo Clowncar 2000" driver = null driving = 0 proc/spin(var/magnitude) if(super) return cant_control = 1 set_density(0) dir_original = src.dir var/image/out_of_control = image('icons/misc/racing.dmi',"broken") src.overlays += out_of_control playsound(src, "sound/mksounds/cpuspin.ogg",33, 0) SPAWN_DBG(magnitude+1) cant_control = 0 dir_original = 0 set_density(1) src.overlays -= out_of_control SPAWN_DBG(0) for(var/i=0, iCar already occupied by [driver.name].") return var/mob/M = usr M.set_loc(src) driver = M layer = MOB_EFFECT_LAYER overlays += driver update() if(powerup && !(powerup in driver.client.screen)) driver.client.screen += powerup name = "[driver.name]'s Go-Kart" driving = 0 update() exit() set src in oview(1) set category = "Local" if(!ishuman(usr) || usr != driver) return reset() proc/reset() stop() returntoline() if(driver) driver.set_loc(get_turf(src)) if(driver.client) if(powerup && (powerup in driver.client.screen)) driver.client.screen -= powerup overlays = null name = "Go-Kart" driver = null driving = 0 layer = OBJ_LAYER update() proc/update() if(!driver) overlays = null icon_state = "kart_blue_u" else icon_state = "kart_blue" proc/returntoline() if(returnloc) loc = returnloc dir = returndir /obj/racing_clowncar/kart/red update() if(!driver) overlays = null icon_state = "kart_red_u" else icon_state = "kart_red"