mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-05-18 06:29:01 +01:00
544 lines
11 KiB
Plaintext
544 lines
11 KiB
Plaintext
/area/sim/racing_entry
|
|
name = "Clowncar Race track - Entry"
|
|
icon_state = "green"
|
|
luminosity = 1
|
|
RL_Lighting = 0
|
|
requires_power = 0
|
|
|
|
/area/sim/racing_track
|
|
name = "Clowncar Race track"
|
|
icon_state = "yellow"
|
|
luminosity = 1
|
|
RL_Lighting = 0
|
|
requires_power = 0
|
|
|
|
/obj/racing_boosterstrip
|
|
name = "Booster"
|
|
icon = 'icons/misc/racing.dmi'
|
|
icon_state = "boosterstrip"
|
|
anchored = 1
|
|
density = 0
|
|
opacity = 0
|
|
|
|
HasEntered(atom/A)
|
|
if(istype(A,/obj/racing_clowncar))
|
|
playsound(A, "sound/mksounds/boost.ogg",30, 0)
|
|
step(A,src.dir)
|
|
spawn(1) step(A,src.dir)
|
|
|
|
/obj/racing_powerup_spawner
|
|
name = "PowerUpSpawner"
|
|
icon = 'icons/Testing/atmos_testing.dmi'
|
|
anchored = 1
|
|
density = 0
|
|
opacity = 0
|
|
invisibility = 101
|
|
|
|
New()
|
|
spawnit()
|
|
return
|
|
|
|
proc/spawnit()
|
|
if(!(locate(/obj/racing_powerupbox) in src.loc))
|
|
new/obj/racing_powerupbox(src.loc)
|
|
spawn(150 + rand(50, 400)) spawnit()
|
|
|
|
/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(75)
|
|
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()
|
|
step(src,dir)
|
|
spawn(1) 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(75)
|
|
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()
|
|
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(1) move_process()
|
|
else
|
|
step(src, src.dir)
|
|
spawn(1) 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
|
|
|
|
New()
|
|
..()
|
|
if(delete) spawn(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
|
|
|
|
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"
|
|
|
|
Click()
|
|
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.speed = R.base_speed - R.turbo
|
|
R.drive(R.dir, R.speed)
|
|
|
|
if(istype(src,/obj/racing_clowncar))
|
|
R.icon_state = "clowncar_boost"
|
|
spawn(50)
|
|
R.speed = R.base_speed
|
|
if (R.driving) R.drive(R.dir, R.speed)
|
|
R.icon_state = "clowncar"
|
|
|
|
else
|
|
R.overlays += icon('icons/mob/robots.dmi', "up-speed")
|
|
spawn(50)
|
|
R.speed = R.base_speed
|
|
if (R.driving) R.drive(R.dir, 2)
|
|
R.overlays -= icon('icons/mob/robots.dmi', "up-speed")
|
|
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.speed = R.base_speed - R.turbo
|
|
R.drive(R.dir, 1)
|
|
|
|
if(istype(src,/obj/racing_clowncar))
|
|
R.icon_state = "clowncar_super"
|
|
spawn(40)
|
|
R.super = 0
|
|
R.speed = R.base_speed
|
|
if (R.driving) R.drive(R.dir, 2)
|
|
R.icon_state = "clowncar"
|
|
else
|
|
R.overlays += image('icons/misc/racing.dmi',"kart_super")
|
|
spawn(40)
|
|
R.overlays -= image('icons/misc/racing.dmi',"kart_super")
|
|
R.super = 0
|
|
R.speed = R.base_speed
|
|
if (R.driving) R.drive(R.dir, 2)
|
|
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 = (typesof(/obj/powerup/) - /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(!istype(usr,/mob/living/carbon/human)) return
|
|
|
|
if(driver)
|
|
boutput(usr, "<span style=\"color:red\">Car already occupied by [driver.name].</span>")
|
|
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(!istype(usr,/mob/living/carbon/human) || 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
|
|
density = 0
|
|
dir_original = src.dir
|
|
var/icon/out_of_control = icon('icons/misc/racing.dmi',"broken")
|
|
src.overlays += out_of_control
|
|
|
|
playsound(src, "sound/mksounds/cpuspin.ogg",33, 0)
|
|
|
|
spawn(magnitude+1)
|
|
cant_control = 0
|
|
dir_original = 0
|
|
density = 1
|
|
src.overlays -= out_of_control
|
|
|
|
spawn(0)
|
|
for(var/i=0, i<magnitude, i++)
|
|
src.dir = turn(src.dir, 90)
|
|
sleep(1)
|
|
return
|
|
|
|
proc/drive(var/direction, var/speed)
|
|
dir = direction
|
|
driving = 1
|
|
walk(src, dir, speed)
|
|
|
|
proc/stop()
|
|
driving = 0
|
|
playsound(src, "sound/mksounds/skidd.ogg",25, 0)
|
|
walk(src, 0)
|
|
|
|
relaymove(mob/user, direction)
|
|
if(!driver) return
|
|
if(user != driver || cant_control) return
|
|
|
|
if(direction == turn(src.dir,180))
|
|
dir = direction
|
|
stop()
|
|
else
|
|
drive(direction, speed)
|
|
|
|
Bump(var/atom/A)
|
|
if(super && istype(A,/obj/racing_clowncar))
|
|
var/obj/racing_clowncar/R = A
|
|
if(!R.super)
|
|
R.dir = pick(turn(src.dir,90),turn(src.dir,-90))
|
|
step(R,R.dir)
|
|
R.spin(6)
|
|
return
|
|
|
|
remove_air(amount as num)
|
|
var/datum/gas_mixture/Air = unpool(/datum/gas_mixture)
|
|
Air.oxygen = amount
|
|
Air.temperature = 310
|
|
return Air
|
|
|
|
|
|
|
|
/obj/racing_clowncar/kart
|
|
name = "Go-Kart"
|
|
desc = "A Go-Kart, whatever the kids spell it these days."
|
|
icon = 'icons/misc/racing.dmi'
|
|
icon_state = "kart_blue_u"
|
|
layer = OBJ_LAYER
|
|
var/returnpoint = null
|
|
var/returndir = null
|
|
var/turf/returnloc = null
|
|
|
|
New()
|
|
..()
|
|
returndir = dir
|
|
if(returnpoint)
|
|
for (var/obj/landmark/A in world)
|
|
if (A.name == returnpoint)
|
|
returnloc = A.loc
|
|
return
|
|
returnloc = null
|
|
|
|
enter()
|
|
set src in oview(1)
|
|
set category = "Local"
|
|
if(!istype(usr,/mob/living/carbon/human)) return
|
|
|
|
if(driver)
|
|
boutput(usr, "<span style=\"color:red\">Car already occupied by [driver.name].</span>")
|
|
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(!istype(usr,/mob/living/carbon/human) || 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"
|