/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"