mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 11:07:12 +01:00
This commit ports /tg/'s move refactor. The throwing system has been replaced entirely, removing the necessity of throw_at_fast and resolving multiple outstanding issues, such as crossbows being unusable. Spacedrifting has also been upgraded to function with the new throwing system. It is now it's own process. Tickcomp has been killed, and the config values have been adjusted to more or less match live Paradise. All mobs now share a common Bump() proc. There are only four mobtypes which do not, including humans and simple animals. With the exception of mob types that do not ever want to Bump() or be Bumped(), they should call the parent proc. Human movement slowdown has been moderately tweaked in how it stacks effects; It shouldn't be significantly different from a player perspective. Mobs will now spread fire if they bump into another mob. I don't want to set the world on fiiiire, I just want start a flame in your heart~ For player facing changes: Input delay has been reduced by roughly ~50ms for any direction keys, by advantage of a previously unknown flag on byond verbs which allow them to operate independently from the tick rate of the server. You may need to clear your interface.dmf file if you have a custom skin for this change to function.
176 lines
5.6 KiB
Plaintext
176 lines
5.6 KiB
Plaintext
|
|
/*
|
|
This stuff isn't included with in core_apps.dm because it is so distinct and would end up making the file huge (more than it already is).
|
|
I put it in it's own file in order to help it stay organized and easier to locate the procs and such.
|
|
For reference, the other Nano-mob Hunter GO files are in /code/game/modules/arcade/mob_hunt
|
|
*/
|
|
|
|
/datum/data/pda/app/mob_hunter_game
|
|
name = "Nano-Mob Hunter GO"
|
|
icon = "gamepad"
|
|
template = "pda_mob_hunt"
|
|
category = "Games"
|
|
|
|
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)
|
|
var/catch_mod = 0 //used to adjust the likelihood of a mob running from this client, a negative value means it is less likely to run (support for temporary bonuses)
|
|
var/wild_captures = 0 //used to track the total number of mobs captured from the wild (does not count card mobs) by this client
|
|
var/scan_range = 3 //maximum distance (in tiles) from which the client can reveal nearby mobs
|
|
|
|
/datum/data/pda/app/mob_hunter_game/start()
|
|
..()
|
|
processing_objects.Add(pda)
|
|
|
|
/datum/data/pda/app/mob_hunter_game/stop()
|
|
..()
|
|
disconnect("Program Terminated")
|
|
processing_objects.Remove(pda)
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/scan_nearby()
|
|
if(!mob_hunt_server || !connected)
|
|
return
|
|
for(var/turf/T in range(scan_range, get_turf(pda)))
|
|
for(var/obj/effect/nanomob/N in T.contents)
|
|
if(src in N.clients_encountered)
|
|
//hide the mob
|
|
N.conceal()
|
|
else
|
|
//reveal the mob
|
|
N.reveal()
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/reconnect()
|
|
if(!mob_hunt_server || !mob_hunt_server.server_status || connected)
|
|
//show a message about the server being unavailable (because it doesn't exist / didn't get set to the global var / is offline)
|
|
return 0
|
|
mob_hunt_server.connected_clients += src
|
|
connected = 1
|
|
if(pda)
|
|
pda.audible_message("[bicon(pda)] Connection established. Capture all of the mobs, [pda.owner ? pda.owner : "hunter"]!", null, 2)
|
|
return 1
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/get_player()
|
|
if(!pda)
|
|
return null
|
|
if(ishuman(pda.loc))
|
|
var/mob/living/carbon/human/H = pda.loc
|
|
return H
|
|
return null
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/disconnect(reason = null)
|
|
if(!mob_hunt_server || !connected)
|
|
return
|
|
mob_hunt_server.connected_clients -= src
|
|
for(var/obj/effect/nanomob/N in (mob_hunt_server.normal_spawns + mob_hunt_server.trap_spawns))
|
|
N.conceal(list(get_player()))
|
|
connected = 0
|
|
//show a disconnect message if we were disconnected involuntarily (reason argument provided)
|
|
if(pda && reason)
|
|
pda.audible_message("[bicon(pda)] Disconnected from server. Reason: [reason].", null, 2)
|
|
|
|
/datum/data/pda/app/mob_hunter_game/program_process()
|
|
if(!mob_hunt_server || !connected)
|
|
return
|
|
scan_nearby()
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/register_capture(datum/mob_hunt/captured, wild = 0)
|
|
if(!captured)
|
|
return 0
|
|
my_collection.Add(captured)
|
|
if(wild)
|
|
wild_captures++
|
|
return 1
|
|
|
|
/datum/data/pda/app/mob_hunter_game/update_ui(mob/user, list/data)
|
|
if(!mob_hunt_server || !(src in mob_hunt_server.connected_clients))
|
|
data["connected"] = 0
|
|
else
|
|
data["connected"] = 1
|
|
data["wild_captures"] = wild_captures
|
|
data["no_collection"] = 0
|
|
if(!my_collection.len)
|
|
data["no_collection"] = 1
|
|
return
|
|
var/datum/mob_hunt/mob_info
|
|
if(!current_index)
|
|
current_index = 1
|
|
if(current_index > my_collection.len)
|
|
current_index = 1
|
|
if(current_index < 1)
|
|
current_index = my_collection.len
|
|
mob_info = my_collection[current_index]
|
|
var/list/entry = list(
|
|
"nickname" = mob_info.nickname,
|
|
"real_name" = mob_info.mob_name,
|
|
"level" = mob_info.level,
|
|
"type1" = mob_info.get_type1(),
|
|
"type2" = mob_info.get_type2(),
|
|
"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
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/assign_nickname()
|
|
if(!my_collection.len)
|
|
return
|
|
var/datum/mob_hunt/mob_info = my_collection[current_index]
|
|
var/old_name = mob_info.mob_name
|
|
if(mob_info.nickname)
|
|
old_name = mob_info.nickname
|
|
mob_info.nickname = input("Give a nickname to [old_name]?", "Nickname", old_name)
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/release()
|
|
if(!my_collection.len)
|
|
return
|
|
if(alert("Are you sure you want to release this mob back into the wild?", "Confirm Release", "Yes", "No") == "Yes")
|
|
remove_mob()
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/print_card()
|
|
if(!pda || !my_collection.len)
|
|
return
|
|
var/obj/item/weapon/nanomob_card/card = new/obj/item/weapon/nanomob_card(null)
|
|
var/datum/mob_hunt/mob_info = my_collection[current_index]
|
|
card.mob_data = mob_info
|
|
card.update_info()
|
|
card.forceMove(get_turf(pda))
|
|
remove_mob()
|
|
|
|
/datum/data/pda/app/mob_hunter_game/proc/remove_mob()
|
|
if(!my_collection.len)
|
|
return
|
|
my_collection.Remove(my_collection[current_index])
|
|
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")
|
|
assign_nickname()
|
|
if("Release")
|
|
release()
|
|
if("Next")
|
|
current_index++
|
|
if(current_index > my_collection.len)
|
|
current_index = 1
|
|
if("Prev")
|
|
current_index--
|
|
if(current_index < 1)
|
|
current_index = my_collection.len
|
|
if("Reconnect")
|
|
reconnect()
|
|
if("Disconnect")
|
|
disconnect()
|
|
if("Transfer")
|
|
print_card()
|
|
if("Set_Trap")
|
|
set_trap() |