mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-16 01:23:41 +01:00
Nano-Mob Hunter GO! WIP commit 3: The committening
This commit is contained in:
@@ -273,6 +273,16 @@
|
||||
src.emagged = 0
|
||||
setMenuState(usr,COMM_SCREEN_MAIN)
|
||||
|
||||
if("RestartNanoMob")
|
||||
if(mob_hunt_server)
|
||||
var/loading_msg = pick("Respawning spawns", "Reticulating splines", "Flipping hat",
|
||||
"Capturing all of them", "Fixing minor text issues", "Being the very best",
|
||||
"Nerfing this", "Not communicating with playerbase", "Coding a ripoff in a 2D spaceman game")
|
||||
to_chat(usr, "Restarting Nano-Mob Hunter GO! game server. [loading_msg]...")
|
||||
mob_hunt_server.manual_reboot()
|
||||
else
|
||||
to_chat(usr, "Nano-Mob Hunter GO! game server is offline for extended maintenance. Contact your Central Command administrators for more info if desired.")
|
||||
|
||||
if("AcceptDocking")
|
||||
to_chat(usr, "Docking request accepted!")
|
||||
trade_dock_timelimit = world.time + 1200
|
||||
|
||||
@@ -833,11 +833,11 @@
|
||||
product_slogans = "Carts to go!"
|
||||
icon_state = "cart"
|
||||
icon_deny = "cart-deny"
|
||||
products = list(/obj/item/device/pda =10,/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/chemistry = 10,
|
||||
products = list(/obj/item/device/pda =10,/obj/item/weapon/cartridge/mob_hunt_game = 25,/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/chemistry = 10,
|
||||
/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/atmos = 10,/obj/item/weapon/cartridge/janitor = 10,
|
||||
/obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/weapon/cartridge/signal = 10)
|
||||
contraband = list(/obj/item/weapon/cartridge/clown = 1,/obj/item/weapon/cartridge/mime = 1)
|
||||
prices = list(/obj/item/device/pda =300,/obj/item/weapon/cartridge/medical = 200,/obj/item/weapon/cartridge/chemistry = 150,/obj/item/weapon/cartridge/engineering = 100,
|
||||
prices = list(/obj/item/device/pda =300,/obj/item/weapon/cartridge/mob_hunt_game = 50,/obj/item/weapon/cartridge/medical = 200,/obj/item/weapon/cartridge/chemistry = 150,/obj/item/weapon/cartridge/engineering = 100,
|
||||
/obj/item/weapon/cartridge/atmos = 75,/obj/item/weapon/cartridge/janitor = 100,/obj/item/weapon/cartridge/signal/toxins = 150,
|
||||
/obj/item/weapon/cartridge/signal = 75)
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ var/global/obj/machinery/mob_hunt_server/mob_hunt_server = null
|
||||
/obj/machinery/mob_hunt_server/proc/register_spawn(datum/mob_hunt/mob_info)
|
||||
if(!mob_info)
|
||||
return 0
|
||||
var/obj/effect/nanomob/new_mob = new /obj/effect/nanomob(get_turf(src), mob_info)
|
||||
var/obj/effect/nanomob/new_mob = new /obj/effect/nanomob(mob_info.spawn_point, mob_info)
|
||||
normal_spawns += new_mob
|
||||
return 1
|
||||
|
||||
@@ -98,8 +98,8 @@ var/global/obj/machinery/mob_hunt_server/mob_hunt_server = null
|
||||
if(!mob_info)
|
||||
return 0
|
||||
if(!mob_info.is_trap)
|
||||
return register_spawn()
|
||||
var/obj/effect/nanomob/new_mob = new /obj/effect/nanomob(locate(mob_info.x_coord, mob_info.y_coord, STATION_LEVEL), mob_info)
|
||||
return register_spawn(mob_info)
|
||||
var/obj/effect/nanomob/new_mob = new /obj/effect/nanomob(mob_info.spawn_point, mob_info)
|
||||
trap_spawns += new_mob
|
||||
check_stability()
|
||||
return 1
|
||||
@@ -2,8 +2,8 @@
|
||||
/obj/effect/nanomob
|
||||
name = "Nano-Mob Avatar" //will be overridden by the mob datum name value when created
|
||||
desc = "A wild Nano-Mob appeared! Hit it with your PDA with the game open to attempt to capture it!"
|
||||
alpha = 128
|
||||
invisibility = 101 //normally invisible, this gets adjusted through the game's scanning
|
||||
alpha = 128
|
||||
anchored = 1 //just in case
|
||||
density = 0
|
||||
icon = 'icons/effects/mob_hunt.dmi'
|
||||
@@ -17,28 +17,36 @@
|
||||
qdel(src)
|
||||
return
|
||||
mob_info = new_info
|
||||
update_self()
|
||||
forceMove(mob_info.spawn_point)
|
||||
if(!mob_info.is_trap)
|
||||
addtimer(src, "despawn", mob_info.lifetime)
|
||||
|
||||
/obj/effect/nanomob/proc/update_self()
|
||||
if(!mob_info)
|
||||
return
|
||||
name = mob_info.mob_name
|
||||
desc = "A wild [name] (level [mob_info.level]) appeared! Hit it with your PDA with the game open to attempt to capture it!"
|
||||
if(mob_info.is_shiny)
|
||||
icon_state = mob_info.icon_state_shiny
|
||||
else
|
||||
icon_state = mob_info.icon_state_normal
|
||||
var/turf/target_turf = locate(mob_info.x_coord, mob_info.y_coord, STATION_LEVEL)
|
||||
forceMove(target_turf)
|
||||
to_chat(world, "[name] located at ([x],[y],[z])")
|
||||
if(!mob_info.is_trap)
|
||||
addtimer(src, "despawn", mob_info.lifetime)
|
||||
|
||||
/obj/effect/nanomob/attackby(obj/item/O, mob/user)
|
||||
if(invisibility) //no catching mobs you can't normally see!
|
||||
return
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = O
|
||||
if(P.current_app && P.current_app == /datum/data/pda/app/mob_hunter_game)
|
||||
if(P.current_app && istype(P.current_app, /datum/data/pda/app/mob_hunter_game))
|
||||
attempt_capture(P)
|
||||
return 1
|
||||
|
||||
/obj/effect/nanomob/hitby(obj/item/O)
|
||||
if(invisibility) //no catching mobs you can't normally see!
|
||||
return
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = O
|
||||
if(P.current_app && P.current_app == /datum/data/pda/app/mob_hunter_game)
|
||||
if(P.current_app && istype(P.current_app, /datum/data/pda/app/mob_hunter_game))
|
||||
attempt_capture(P)
|
||||
return 1
|
||||
|
||||
@@ -52,7 +60,9 @@
|
||||
O.show_message("[bicon(P)] No server connection. Capture aborted.")
|
||||
return
|
||||
|
||||
if(mob_info.is_trap) //traps work even if you ran into them before
|
||||
if(mob_info.is_trap) //traps work even if you ran into them before, which is why this is before the clients_encountered check
|
||||
if(client.hacked) //hacked copies of the game (copies capable of setting traps) are protected from traps
|
||||
return
|
||||
if(istype(P.loc, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = P.loc
|
||||
//Strike them down with a lightning bolt to complete the illusion (copied from the surge reagent overdose, probably could
|
||||
@@ -97,6 +107,8 @@
|
||||
/obj/effect/nanomob/proc/reveal()
|
||||
if(invisibility == 101)
|
||||
invisibility = 0
|
||||
//density = 1
|
||||
spawn(30)
|
||||
if(src)
|
||||
invisibility = 101
|
||||
//density = 1
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
/obj/item/weapon/nanomob_card/booster/New()
|
||||
var/datum/mob_hunt/mob_info = pick(subtypesof(/datum/mob_hunt))
|
||||
mob_data = new mob_info(0,0,0,1)
|
||||
mob_data = new mob_info(0,null,1)
|
||||
update_info()
|
||||
|
||||
//Booster Packs (Box of booster pack cards)
|
||||
|
||||
@@ -41,8 +41,7 @@
|
||||
var/list/turf_blacklist = list() //list of turfs this mob can NOT spawn on (such as wood floors)
|
||||
var/list/area_whitelist = list() //list of areas this mob is more likely to spawn in (can be used to reinclude subtypes of blacklisted areas)
|
||||
var/list/turf_whitelist = list() //list of turfs this mob is more likely to spawn on (can be used to reinclude subtypes of blacklisted turfs)
|
||||
var/x_coord = 0 //gets set and sent to the game server to spawn its avatar (generated in select_spawn)
|
||||
var/y_coord = 0 //gets set and sent to the game server to spawn its avatar (generated in select_spawn)
|
||||
var/turf/spawn_point //gets set and sent to the game server to spawn its avatar (generated in select_spawn or assigned via set_trap)
|
||||
var/lifetime = 6000 //number of deciseconds the mob will remain before despawning (REMEMBER: DECISECONDS! So 6000 is 600 seconds which is 10 minutes)
|
||||
var/is_shiny = 0 //if this gets set at spawn (super rare), the mob is considered "shiny" and will use the shiny icon_state and holographic cards
|
||||
|
||||
@@ -52,29 +51,32 @@
|
||||
|
||||
var/is_trap = 0 //if this gets set, the mob is a booby-trap and will electrocute any players that dare attempt to catch it
|
||||
|
||||
/datum/mob_hunt/New(set_trap = 0, trap_x = 0, trap_y=0, no_register = 0)
|
||||
level = rand(min_level, max_level)
|
||||
health[2] = base_health + (level * health_multiplier)
|
||||
/datum/mob_hunt/New(set_trap = 0, turf/trap_turf = null, no_register = 0)
|
||||
if(set_trap)
|
||||
level = max_level
|
||||
is_trap = 1
|
||||
spawn_point = trap_turf
|
||||
else
|
||||
level = rand(min_level, max_level)
|
||||
if(prob(1) && prob(1))
|
||||
is_shiny = 1
|
||||
health[2] = base_health + (level * health_multiplier)
|
||||
if(no_register) //for booster pack cards
|
||||
return
|
||||
if(mob_hunt_server)
|
||||
if(set_trap)
|
||||
is_trap = 1
|
||||
x_coord = trap_x
|
||||
y_coord = trap_y
|
||||
mob_hunt_server.register_trap(src)
|
||||
if(mob_hunt_server.register_trap(src))
|
||||
return
|
||||
else if(select_spawn())
|
||||
mob_hunt_server.register_spawn(src)
|
||||
else //if we aren't a trap and can't spawn, delete the datum to avoid buildups
|
||||
qdel(src)
|
||||
else
|
||||
qdel(src)
|
||||
if(mob_hunt_server.register_spawn(src))
|
||||
return
|
||||
qdel(src) //if you reach this, the datum is just pure clutter, so delete it
|
||||
|
||||
/datum/mob_hunt/proc/select_spawn()
|
||||
var/list/possible_areas = list()
|
||||
for(var/areapath in the_station_areas)
|
||||
if(istype(areapath, /area/holodeck)) //don't allow holodeck areas as possible spawns since it will allow it to spawn in the holodeck rooms on z2 as well
|
||||
continue
|
||||
possible_areas += typesof(areapath)
|
||||
for(var/areapath in area_blacklist)
|
||||
possible_areas -= typesof(areapath)
|
||||
@@ -84,7 +86,6 @@
|
||||
log_admin("No possible areas to spawn [type] found. Possible code/mapping error?")
|
||||
return 0
|
||||
var/list/possible_turfs = list()
|
||||
var/turf/T
|
||||
while(possible_areas.len)
|
||||
//randomly select an area from our possible_areas list to try spawning in, then remove it from possible_areas so it won't get picked over and over forever.
|
||||
var/area/spawn_area = locate(pick_n_take(possible_areas))
|
||||
@@ -104,17 +105,13 @@
|
||||
if(!possible_turfs.len) //If we don't have any possible turfs, this attempt was a failure. Try again.
|
||||
continue
|
||||
//if we got this far, we're spawning on this attempt, hooray!
|
||||
T = pickweight(possible_turfs)
|
||||
x_coord = T.x
|
||||
y_coord = T.y
|
||||
spawn_point = pickweight(possible_turfs)
|
||||
break
|
||||
if(T)
|
||||
to_chat(world, "DEBUGGING: [type] spawning at ([x_coord], [y_coord])")
|
||||
return 1
|
||||
else
|
||||
if(!spawn_point)
|
||||
//if we get to this, we failed every attempt to find a suitable turf for EVERY area in our list of possible areas. DAMN.
|
||||
log_admin("No acceptable turfs to spawn [type] on could be located. Possible code/mapping error, or someone replaced/destroyed all the acceptable turf types?")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/mob_hunt/proc/calc_dam_multiplier(datum/mob_type/attack_type)
|
||||
if(!primary_type)
|
||||
|
||||
@@ -190,6 +190,12 @@ var/global/datum/prizes/global_prizes = new
|
||||
typepath = /obj/item/weapon/spellbook/oneuse/fake_gib
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/nanomob_booster
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
typepath = /obj/item/weapon/storage/box/nanomob_booster_pack
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/capgun
|
||||
name = "Capgun Revolver"
|
||||
desc = "Do you feel lucky... punk?"
|
||||
|
||||
@@ -74,3 +74,8 @@
|
||||
/datum/gear/skullbandana
|
||||
display_name = "bandana, skull"
|
||||
path = /obj/item/clothing/mask/bandana/skull
|
||||
|
||||
/datum/gear/mob_hunt_game
|
||||
display_name = "Nano-Mob Hunter GO! Cartridge"
|
||||
path = /obj/item/weapon/cartridge/mob_hunt_game
|
||||
cost = 2
|
||||
|
||||
@@ -504,4 +504,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
/obj/item/device/pda/process()
|
||||
if(current_app)
|
||||
current_app.program_process()
|
||||
current_app.program_process()
|
||||
|
||||
/obj/item/device/pda/hit_check(speed)
|
||||
if(current_app)
|
||||
current_app.program_hit_check()
|
||||
..()
|
||||
@@ -20,6 +20,9 @@
|
||||
/datum/data/pda/proc/program_process()
|
||||
return
|
||||
|
||||
/datum/data/pda/proc/program_hit_check()
|
||||
return
|
||||
|
||||
/datum/data/pda/proc/notify(message, blink = 1)
|
||||
if(message)
|
||||
//Search for holder of the PDA.
|
||||
|
||||
@@ -314,11 +314,12 @@
|
||||
D.remote_door_id = initial_remote_door_id
|
||||
|
||||
/obj/item/weapon/cartridge/mob_hunt_game
|
||||
name = "Nano-Mob Hunter GO"
|
||||
name = "Nano-Mob Hunter GO! Cartridge"
|
||||
desc = "The hit new PDA game that lets you track down and capture your favorite Nano-Mobs living in your world!"
|
||||
icon_state = "cart-eye"
|
||||
programs = list(
|
||||
new/datum/data/pda/app/mob_hunter_game)
|
||||
var/emagged = 0
|
||||
|
||||
/obj/item/weapon/cartridge/mob_hunt_game/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/weapon/nanomob_card))
|
||||
@@ -330,4 +331,13 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Transfer failed. Could not read mob data from card.</span>")
|
||||
else
|
||||
..()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/cartridge/mob_hunt_game/emag_act(mob/user)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
var/datum/data/pda/app/mob_hunter_game/my_game = programs[1]
|
||||
my_game.hacked = 1
|
||||
to_chat(user, "<span class='warning'>TR4P_M45T3R.mod successfully initialized. ToS violated. User Agreement nullified. Gotta pwn them all.</span>")
|
||||
to_chat(user, "<span class='warning'>You can now create trapped versions of any mob in your collection that will damage hunters who attempt to capture it.</span>")
|
||||
description_antag = "This copy of Nano-Mob Hunter GO! has been hacked to allow the creation of trap mobs which will cause any PDA that attempts to capture it to shock anyone holding it. Hacked copies of the game will not trigger the trap."
|
||||
@@ -14,6 +14,7 @@
|
||||
var/list/my_collection = list()
|
||||
var/current_index = 0
|
||||
var/connected = 0
|
||||
var/hacked = 0 //if set, this cartridge is able to spawn trap mobs from its collection (set via emag_act on the cartridge)
|
||||
|
||||
/datum/data/pda/app/mob_hunter_game/start()
|
||||
..()
|
||||
@@ -71,9 +72,9 @@
|
||||
data["connected"] = 0
|
||||
else
|
||||
data["connected"] = 1
|
||||
data["not_collection"] = 0
|
||||
data["no_collection"] = 0
|
||||
if(!my_collection.len)
|
||||
data["no_collecton"] = 1
|
||||
data["no_collection"] = 1
|
||||
return
|
||||
var/datum/mob_hunt/mob_info
|
||||
if(!current_index)
|
||||
@@ -89,11 +90,14 @@
|
||||
"level" = mob_info.level,
|
||||
"type1" = mob_info.get_type1(),
|
||||
"type2" = mob_info.get_type2(),
|
||||
"sprite" = "[mob_info.icon_state_normal].png"
|
||||
"sprite" = "[mob_info.icon_state_normal].png",
|
||||
"is_hacked" = hacked
|
||||
)
|
||||
if(mob_info.is_shiny)
|
||||
entry["sprite"] = "[mob_info.icon_state_shiny].png"
|
||||
data["entry"] = entry
|
||||
for(var/a in entry)
|
||||
log_debug("[a] = [entry[a]]")
|
||||
|
||||
/datum/data/pda/app/mob_hunter_game/proc/assign_nickname()
|
||||
if(!my_collection.len)
|
||||
@@ -127,6 +131,13 @@
|
||||
if(current_index > my_collection.len)
|
||||
current_index = my_collection.len
|
||||
|
||||
/datum/data/pda/app/mob_hunter_game/proc/set_trap()
|
||||
if(!my_collection.len || !pda || !hacked)
|
||||
return
|
||||
var/datum/mob_hunt/bait = my_collection[current_index]
|
||||
bait = bait.type
|
||||
new bait(1, get_turf(pda))
|
||||
|
||||
/datum/data/pda/app/mob_hunter_game/Topic(href, list/href_list)
|
||||
switch(href_list["choice"])
|
||||
if("Rename")
|
||||
@@ -146,4 +157,6 @@
|
||||
if("Disconnect")
|
||||
disconnect()
|
||||
if("Transfer")
|
||||
print_card()
|
||||
print_card()
|
||||
if("Set_Trap")
|
||||
set_trap()
|
||||
@@ -57,6 +57,12 @@
|
||||
typepath = /obj/item/weapon/storage/box/dice
|
||||
cost = 200
|
||||
|
||||
/datum/storeitem/nanomob_booster
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
typepath = /obj/item/weapon/storage/box/nanomob_booster_pack
|
||||
cost = 250
|
||||
|
||||
/datum/storeitem/crayons
|
||||
name = "Crayons"
|
||||
desc = "Let security know how they're doing by scrawling lovenotes all over their hallways."
|
||||
|
||||
@@ -68,6 +68,9 @@ Used In File(s): /code/game/machinery/computers/communications.dm
|
||||
<div class="line">
|
||||
{{:helper.link('Message List','comment',{'operation':'messagelist'})}}
|
||||
</div>
|
||||
<div class="line">
|
||||
{{:helper.link('Restart Nano-Mob Hunter GO! Server','power-off',{'operation':'RestartNanoMob'})}}
|
||||
</div>
|
||||
{{if data.dock_request}}
|
||||
<div class="line">
|
||||
{{:helper.link('Accept Docking Request','signal',{'operation':'AcceptDocking'})}}
|
||||
|
||||
@@ -79,5 +79,9 @@
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{{if data.entry.is_hacked}}
|
||||
<br>
|
||||
{{:helper.link('Set Trap', 'bolt', {'choice': 'Set_Trap'})}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
Reference in New Issue
Block a user