diff --git a/.travis.yml b/.travis.yml index ab3b1003c3..3082e1a18e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,7 @@ matrix: - find . -name "*.json" -not -path "./tgui/node_modules/*" -print0 | xargs -0 python3 ./tools/json_verifier.py - tools/travis/build_tgui.sh - tools/travis/check_grep.sh + - python3 tools/travis/check_line_endings.py - ~/dreamchecker - name: "Compile All Maps" diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 0caa86f68c..4ce0ccf361 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -341,7 +341,7 @@ if(probabilities[M.config_tag]<=0) qdel(M) continue - if(M.config_tag in SSvote.stored_modetier_results && SSvote.stored_modetier_results[M.config_tag] < Get(/datum/config_entry/number/dropped_modes)) + if(CONFIG_GET(flag/modetier_voting) && !(M.config_tag in SSvote.stored_modetier_results)) qdel(M) continue if(min_pop[M.config_tag]) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 940ba52946..af1b7da8da 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -396,7 +396,6 @@ config_entry_value = TRUE /datum/config_entry/flag/modetier_voting - config_entry_value = TRUE /datum/config_entry/number/dropped_modes config_entry_value = 3 diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0948e428ff..c9562bcfd1 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -188,6 +188,12 @@ SUBSYSTEM_DEF(ticker) tipped = TRUE if(timeLeft <= 0) + if(SSvote.mode && (SSvote.mode == "roundtype" || SSvote.mode == "dynamic" || SSvote.mode == "mode tiers")) + SSvote.result() + SSpersistence.SaveSavedVotes() + for(var/client/C in SSvote.voting) + C << browse(null, "window=vote;can_close=0") + SSvote.reset() current_state = GAME_STATE_SETTING_UP Master.SetRunLevel(RUNLEVEL_SETUP) if(start_immediately) @@ -221,12 +227,6 @@ SUBSYSTEM_DEF(ticker) var/init_start = world.timeofday //Create and announce mode var/list/datum/game_mode/runnable_modes - if(SSvote.mode && (SSvote.mode == "roundtype" || SSvote.mode == "dynamic" || SSvote.mode == "mode tiers")) - SSvote.result() - SSpersistence.SaveSavedVotes() - for(var/client/C in SSvote.voting) - C << browse(null, "window=vote;can_close=0") - SSvote.reset() if(GLOB.master_mode == "random" || GLOB.master_mode == "secret") runnable_modes = config.get_runnable_modes() diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 66aaf317fb..c67a1620f1 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -102,17 +102,18 @@ SUBSYSTEM_DEF(vote) var/list/d[][] = new/list(choices.len,choices.len) // the basic vote matrix, how many times a beats b for(var/ckey in voted) var/list/this_vote = voted[ckey] - for(var/a in 1 to choices.len) - for(var/b in a+1 to choices.len) - var/a_rank = this_vote.Find(a) - var/b_rank = this_vote.Find(b) - a_rank = a_rank ? a_rank : choices.len+1 - b_rank = b_rank ? b_rank : choices.len+1 - if(a_rank 0) @@ -219,13 +226,20 @@ SUBSYSTEM_DEF(vote) stored_gamemode_votes = list() if(!obfuscated && vote_system == RANKED_CHOICE_VOTING) text += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!" - for(var/i=1,i<=choices.len,i++) - var/votes = choices[choices[i]] - if(!votes) - votes = 0 - if(was_roundtype_vote) - stored_gamemode_votes[choices[i]] = votes - text += "\n[choices[i]]: [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes + if(mode == "mode tiers") + for(var/score_name in scores) + var/score = scores[score_name] + if(!score) + score = 0 + text = "\n[score_name]: [obfuscated ? "???" : score]" + else + for(var/i=1,i<=choices.len,i++) + var/votes = choices[choices[i]] + if(!votes) + votes = 0 + if(was_roundtype_vote) + stored_gamemode_votes[choices[i]] = votes + text += "\n[choices[i]]: [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes if(mode != "custom") if(winners.len > 1 && !obfuscated) //CIT CHANGE - adds obfuscated votes text = "\nVote Tied Between:" @@ -247,8 +261,9 @@ SUBSYSTEM_DEF(vote) if(RANKED_CHOICE_VOTING) for(var/i=1,i<=voted.len,i++) var/list/myvote = voted[voted[i]] - for(var/j=1,j<=myvote.len,j++) - SSblackbox.record_feedback("nested tally","voting",1,list(vote_title_text,"[j]\th",choices[myvote[j]])) + if(islist(myvote)) + for(var/j=1,j<=myvote.len,j++) + SSblackbox.record_feedback("nested tally","voting",1,list(vote_title_text,"[j]\th",choices[myvote[j]])) if(obfuscated) //CIT CHANGE - adds obfuscated votes. this messages admins with the vote's true results var/admintext = "Obfuscated results" if(vote_system == RANKED_CHOICE_VOTING) @@ -276,7 +291,7 @@ SUBSYSTEM_DEF(vote) if(CONFIG_GET(flag/modetier_voting)) reset() started_time = 0 - initiate_vote("mode tiers","server",hideresults=FALSE,votesystem=RANKED_CHOICE_VOTING,forced=TRUE, vote_time = 30 MINUTES) + initiate_vote("mode tiers","server",hideresults=FALSE,votesystem=SCORE_VOTING,forced=TRUE, vote_time = 30 MINUTES) to_chat(world,"The vote will end right as the round starts.") return . if("restart") @@ -290,7 +305,14 @@ SUBSYSTEM_DEF(vote) else GLOB.master_mode = . if("mode tiers") - stored_modetier_results = choices.Copy() + var/list/raw_score_numbers = list() + for(var/score_name in scores) + sorted_insert(raw_score_numbers,scores[score_name],/proc/cmp_numeric_asc) + stored_modetier_results = scores.Copy() + for(var/score_name in stored_modetier_results) + if(stored_modetier_results[score_name] <= raw_score_numbers[CONFIG_GET(number/dropped_modes)]) + stored_modetier_results -= score_name + stored_modetier_results += "traitor" if("dynamic") if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started. return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") @@ -417,6 +439,7 @@ SUBSYSTEM_DEF(vote) for(var/tag in modes_to_add) if(probabilities[tag] <= 0) modes_to_add -= tag + modes_to_add -= "traitor" // makes it so that traitor is always available choices.Add(modes_to_add) if("dynamic") for(var/T in config.storyteller_cache) @@ -516,7 +539,7 @@ SUBSYSTEM_DEF(vote) if(RANKED_CHOICE_VOTING) var/list/myvote = voted[C.ckey] for(var/i=1,i<=choices.len,i++) - var/vote = (myvote ? (myvote.Find(i)) : 0) + var/vote = (islist(myvote) ? (myvote.Find(i)) : 0) if(vote) . += "
  • [choices[i]] ([vote])
  • " else @@ -615,8 +638,12 @@ SUBSYSTEM_DEF(vote) if(usr.ckey in voted) if(!(usr.ckey in SSpersistence.saved_votes)) SSpersistence.saved_votes[usr.ckey] = list() - SSpersistence.saved_votes[usr.ckey][mode] = voted[usr.ckey] - saved += usr.ckey + if(islist(voted[usr.ckey])) + SSpersistence.saved_votes[usr.ckey][mode] = voted[usr.ckey] + saved += usr.ckey + else + voted[usr.ckey] = list() + to_chat(usr,"Your vote was malformed! Start over!") if("load") if(!(usr.ckey in SSpersistence.saved_votes)) SSpersistence.LoadSavedVote(usr.ckey) @@ -627,7 +654,21 @@ SUBSYSTEM_DEF(vote) else SSpersistence.saved_votes[usr.ckey][mode] = list() voted[usr.ckey] = SSpersistence.saved_votes[usr.ckey][mode] - saved += usr.ckey + if(islist(voted[usr.ckey])) + var/malformed = FALSE + if(vote_system == SCORE_VOTING) + for(var/thing in voted[usr.ckey]) + if(!(thing in choices)) + malformed = TRUE + if(!malformed) + saved += usr.ckey + else + to_chat(usr,"Your saved vote was malformed! Start over!") + SSpersistence.saved_votes[usr.ckey] -= mode + voted -= usr.ckey + else + to_chat(usr,"Your saved vote was malformed! Start over!") + voted -= usr.ckey else if(vote_system == SCORE_VOTING) submit_vote(round(text2num(href_list["vote"])),round(text2num(href_list["score"]))) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index e6d80bedb5..e355a507f3 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -380,9 +380,14 @@ /datum/map_template/shuttle/emergency/gorilla suffix = "gorilla" name = "Gorilla Cargo Freighter" - description = "A rustic, barely excuseable shuttle transporting important cargo. Not for crew who are about to go ape." + description = "(Emag only) A rustic, barely excuseable shuttle transporting important cargo. Not for crew who are about to go ape." credit_cost = 2000 +/datum/map_template/shuttle/emergency/gorilla/prerequisites_met() + if("emagged" in SSshuttle.shuttle_purchase_requirements_met) + return TRUE + return FALSE + /datum/map_template/shuttle/ferry/base suffix = "base" name = "transport ferry" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 036d8193fb..751f5faa94 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -99,10 +99,12 @@ id = "Mesmerize" alert_type = /obj/screen/alert/status_effect/mesmerized -/datum/status_effect/no_combat_mode/mesmerize/on_apply() +/datum/status_effect/no_combat_mode/mesmerize/on_creation(mob/living/new_owner, set_duration) + . = ..() ADD_TRAIT(owner, TRAIT_MUTE, "mesmerize") /datum/status_effect/no_combat_mode/mesmerize/on_remove() + . = ..() REMOVE_TRAIT(owner, TRAIT_MUTE, "mesmerize") /obj/screen/alert/status_effect/mesmerized diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 9e2efd1d4e..49fdd64a72 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -139,9 +139,9 @@ /datum/world_topic/status/Run(list/input, addr) if(!key_valid) //If we have a key, then it's safe to trust that this isn't a malicious packet. Also prevents the extra info from leaking - if(GLOB.topic_status_lastcache <= world.time + 5) + if(GLOB.topic_status_lastcache >= world.time) return GLOB.topic_status_cache - GLOB.topic_status_lastcache = world.time + GLOB.topic_status_lastcache = world.time + 5 . = list() .["version"] = GLOB.game_version .["mode"] = "hidden" //CIT CHANGE - hides the gamemode in topic() calls to prevent meta'ing the gamemode diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm index 48ba92962f..dd7c5b15d9 100644 --- a/code/game/objects/items/devices/instruments.dm +++ b/code/game/objects/items/devices/instruments.dm @@ -101,13 +101,23 @@ item_state = "synth" instrumentId = "piano" instrumentExt = "ogg" - var/static/list/insTypes = list("accordion" = "mid", "bikehorn" = "ogg", "glockenspiel" = "mid", "guitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "mid", "xylophone" = "mid") //No eguitar you ear-rapey fuckers. + var/static/list/insTypes = list("accordion" = "mid", "bikehorn" = "ogg", "glockenspiel" = "mid", "banjo" = "ogg", "guitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "mid", "xylophone" = "mid") //No eguitar you ear-rapey fuckers. actions_types = list(/datum/action/item_action/synthswitch) /obj/item/instrument/piano_synth/proc/changeInstrument(name = "piano") song.instrumentDir = name song.instrumentExt = insTypes[name] +/obj/item/instrument/banjo + name = "banjo" + desc = "A 'Mura' brand banjo. It's pretty much just a drum with a neck and strings." + icon_state = "banjo" + item_state = "banjo" + instrumentExt = "ogg" + attack_verb = list("scruggs-styled", "hum-diggitied", "shin-digged", "clawhammered") + hitsound = 'sound/weapons/banjoslap.ogg' + instrumentId = "banjo" + /obj/item/instrument/guitar name = "guitar" desc = "It's made of wood and has bronze strings." @@ -263,8 +273,6 @@ throw_range = 15 hitsound = 'sound/items/bikehorn.ogg' -/// - /obj/item/musicaltuner name = "musical tuner" desc = "A device for tuning musical instruments both manual and electronic alike." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index ad482b68af..5dcfad66db 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -29,7 +29,6 @@ new /obj/item/radio/headset/heads/captain(src) new /obj/item/clothing/glasses/sunglasses/gar/supergar(src) new /obj/item/clothing/gloves/color/captain(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) new /obj/item/storage/belt/sabre(src) new /obj/item/gun/energy/e_gun(src) new /obj/item/door_remote/captain(src) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index b0152e85f2..bbb12b6692 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -7,22 +7,33 @@ #define STICKYBAN_MAX_ADMIN_MATCHES 2 /world/IsBanned(key,address,computer_id,type,real_bans_only=FALSE) + var/static/key_cache = list() + if(!real_bans_only) + if(key_cache[key]) + return list("reason"="concurrent connection attempts", "desc"="You are attempting to connect too fast. Try again.") + key_cache[key] = 1 + if (!key || !address || !computer_id) if(real_bans_only) + key_cache[key] = 0 return FALSE log_access("Failed Login (invalid data): [key] [address]-[computer_id]") + key_cache[key] = 0 return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]'. (If you continue to get this error, please restart byond or contact byond support.)") if (text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire log_access("Failed Login (invalid cid): [key] [address]-[computer_id]") + key_cache[key] = 0 return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.)") if (type == "world") + key_cache[key] = 0 return ..() //shunt world topic banchecks to purely to byond's internal ban system var/ckey = ckey(key) var/client/C = GLOB.directory[ckey] if (C && ckey == C.ckey && computer_id == C.computer_id && address == C.address) + key_cache[key] = 0 return //don't recheck connected clients. var/admin = FALSE @@ -38,21 +49,25 @@ addclientmessage(ckey,"You have been allowed to bypass the whitelist") else log_access("Failed Login: [key] - Not on whitelist") + key_cache[key] = 0 return list("reason"="whitelist", "desc" = "\nReason: You are not on the white list for this server") //Guest Checking if(!real_bans_only && IsGuestKey(key)) if (CONFIG_GET(flag/guest_ban)) log_access("Failed Login: [key] - Guests not allowed") + key_cache[key] = 0 return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") if (CONFIG_GET(flag/panic_bunker) && SSdbcore.Connect()) log_access("Failed Login: [key] - Guests not allowed during panic bunker") + key_cache[key] = 0 return list("reason"="guest", "desc"="\nReason: Sorry but the server is currently not accepting connections from never before seen players or guests. If you have played on this server with a byond account before, please log in to the byond account you have played from.") //Population Cap Checking var/extreme_popcap = CONFIG_GET(number/extreme_popcap) if(!real_bans_only && extreme_popcap && living_player_count() >= extreme_popcap && !admin) log_access("Failed Login: [key] - Population cap reached") + key_cache[key] = 0 return list("reason"="popcap", "desc"= "\nReason: [CONFIG_GET(string/extreme_popcap_message)]") if(CONFIG_GET(flag/ban_legacy_system)) @@ -66,6 +81,7 @@ addclientmessage(ckey,"You have been allowed to bypass a matching ban on [.["key"]]") else log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") + key_cache[key] = 0 return . else @@ -73,6 +89,7 @@ var/msg = "Ban database connection failure. Key [ckey] not checked" log_world(msg) message_admins(msg) + key_cache[key] = 0 return var/ipquery = "" @@ -86,6 +103,7 @@ var/datum/DBQuery/query_ban_check = SSdbcore.NewQuery("SELECT IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey), ckey), IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].a_ckey), a_ckey), reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")] WHERE (ckey = '[ckey]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") if(!query_ban_check.Execute(async = TRUE)) qdel(query_ban_check) + key_cache[key] = 0 return while(query_ban_check.NextRow()) var/pkey = query_ban_check.item[1] @@ -124,6 +142,7 @@ log_access("Failed Login: [key] [computer_id] [address] - Banned (#[banid]) [.["reason"]]") qdel(query_ban_check) + key_cache[key] = 0 return . qdel(query_ban_check) @@ -138,6 +157,7 @@ //rogue ban in the process of being reverted. if (cachedban && cachedban["reverting"]) + key_cache[key] = 0 return null if (cachedban && ckey != bannedckey) @@ -165,6 +185,7 @@ newmatches_admin.len > STICKYBAN_MAX_ADMIN_MATCHES \ ) if (cachedban["reverting"]) + key_cache[key] = 0 return null cachedban["reverting"] = TRUE @@ -182,6 +203,7 @@ cachedban["admin_matches_this_round"] = list() cachedban -= "reverting" world.SetConfig("ban", bannedckey, list2stickyban(cachedban)) + key_cache[key] = 0 return null //byond will not trigger isbanned() for "global" host bans, @@ -191,6 +213,7 @@ log_admin("The admin [key] has been allowed to bypass a matching host/sticky ban on [bannedckey]") message_admins("The admin [key] has been allowed to bypass a matching host/sticky ban on [bannedckey]") addclientmessage(ckey,"You have been allowed to bypass a matching host/sticky ban on [bannedckey]") + key_cache[key] = 0 return null if (C) //user is already connected!. @@ -200,6 +223,7 @@ . = list("reason" = "Stickyban", "desc" = desc) log_access("Failed Login: [key] [computer_id] [address] - StickyBanned [ban["message"]] Target Username: [bannedckey] Placed by [ban["admin"]]") + key_cache[key] = 0 return . diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm index 7962c7d403..2fe7115d98 100644 --- a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm +++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm @@ -91,7 +91,7 @@ target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert - if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target))) + if(do_mob(user, target, 40, 0, TRUE, extra_checks = CALLBACK(src, .proc/ContinueActive, user, target))) PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN! var/power_time = 90 + level_current * 12 target.apply_status_effect(STATUS_EFFECT_MESMERIZE, power_time + 80) diff --git a/code/modules/assembly/playback.dm b/code/modules/assembly/playback.dm index 088f186adc..eecb991434 100644 --- a/code/modules/assembly/playback.dm +++ b/code/modules/assembly/playback.dm @@ -24,7 +24,7 @@ recorded = raw_message listening = FALSE languages = message_language - say("Activation message is '[recorded]'.", language = message_language) + say("The recorded message is '[recorded]'.", language = message_language) /obj/item/assembly/playback/activate() if(recorded == "") // Why say anything when there isn't anything to say diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 81a92f4d0f..3f37969e82 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -34,9 +34,10 @@ if(listening && !radio_freq) record_speech(speaker, raw_message, message_language) else - if(message_language == languages) // If it isn't in the same language as the message, don't try to find the message - if(check_activation(speaker, raw_message)) - addtimer(CALLBACK(src, .proc/pulse, 0), 10) + if(!istype(speaker, /obj/item/assembly/playback)) // Check if it isn't a playback device to prevent spam and lag + if(message_language == languages) // If it isn't in the same language as the message, don't try to find the message + if(check_activation(speaker, raw_message)) // Is it the message? + addtimer(CALLBACK(src, .proc/pulse, 0), 10) /obj/item/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language) languages = message_language // Assign the message's language to a variable to use it elsewhere diff --git a/code/modules/client/message.dm b/code/modules/client/message.dm index 2b4f8453d7..6904fa8973 100644 --- a/code/modules/client/message.dm +++ b/code/modules/client/message.dm @@ -2,8 +2,9 @@ GLOBAL_LIST_EMPTY(clientmessages) /proc/addclientmessage(var/ckey, var/message) ckey = ckey(ckey) - if (!ckey || !message) + if(!ckey || !message) return - if (!(ckey in GLOB.clientmessages)) - GLOB.clientmessages[ckey] = list() - GLOB.clientmessages[ckey] += message \ No newline at end of file + var/list/L = GLOB.clientmessages[ckey] + if(!L) + GLOB.clientmessages[ckey] = L = list() + L += message \ No newline at end of file diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index 2b8bfa6860..dec5c25eb9 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -25,7 +25,7 @@ else log_admin("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.") message_admins("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.") - QDEL_IN(src, 1) + qdel(src) return ///Check if the key is short enough to even be a real key diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm index be2ab152a8..55bdc31aef 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -244,6 +244,10 @@ name = "Shark" icon_state = "shark" +/datum/sprite_accessory/mam_snouts/hshark + name = "hShark" + icon_state = "hshark" + /datum/sprite_accessory/mam_snouts/toucan name = "Toucan" icon_state = "toucan" diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index c40299d7a8..01b9b1dc41 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -833,8 +833,8 @@ Nothing else in the console has ID requirements. for(var/i in 1 to length(ui)) if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) ui[i] += "
    " - ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "") - return ui.Join("") + . = ui.Join("") + return replacetextEx(., RDSCREEN_NOBREAK, "") /obj/machinery/computer/rdconsole/Topic(raw, ls) if(..()) diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 8cd7fc8539..0911258692 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -131,6 +131,12 @@ /obj/item/clothing/suit/drfreeze_coat = 1, /obj/item/clothing/suit/gothcoat = 2, /obj/item/clothing/under/draculass = 1, + /obj/item/clothing/under/christmas/christmasmaler = 3, + /obj/item/clothing/under/christmas/christmasmaleg = 3, + /obj/item/clothing/under/christmas/christmasfemaler = 3, + /obj/item/clothing/under/christmas/christmasfemaleg = 3, + /obj/item/clothing/head/christmashat = 3, + /obj/item/clothing/head/christmashatg = 3, /obj/item/clothing/under/drfreeze = 1) //End of Cit Changes refill_canister = /obj/item/vending_refill/autodrobe diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 6116936880..4bd21ea7f2 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -123,15 +123,19 @@ /obj/item/clothing/ears/headphones = 10, /obj/item/clothing/suit/apron/purple_bartender = 4, /obj/item/clothing/under/rank/bartender/purple = 4, + /* Commenting out until next Christmas or made automatic /obj/item/clothing/under/christmas/christmasmaler = 3, /obj/item/clothing/under/christmas/christmasmaleg = 3, /obj/item/clothing/under/christmas/christmasfemaler = 3, /obj/item/clothing/under/christmas/christmasfemaleg = 3, + */ /obj/item/clothing/suit/hooded/wintercoat/christmascoatr = 3, /obj/item/clothing/suit/hooded/wintercoat/christmascoatg = 3, /obj/item/clothing/suit/hooded/wintercoat/christmascoatrg = 3, + /*Commenting out until next Christmas or made automatic /obj/item/clothing/head/christmashat = 3, /obj/item/clothing/head/christmashatg = 3, + */ /obj/item/clothing/shoes/winterboots/christmasbootsr = 3, /obj/item/clothing/shoes/winterboots/christmasbootsg = 3, /obj/item/clothing/shoes/winterboots/santaboots = 3, diff --git a/html/changelogs/AutoChangeLog-pr-10287.yml b/html/changelogs/AutoChangeLog-pr-10287.yml new file mode 100644 index 0000000000..f59cd0bd7f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10287.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - rscdel: "Removed an old pair of zipties from the captain closet." diff --git a/html/changelogs/AutoChangeLog-pr-10404.yml b/html/changelogs/AutoChangeLog-pr-10404.yml new file mode 100644 index 0000000000..5f88a991ff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10404.yml @@ -0,0 +1,4 @@ +author: "Xantholne" +delete-after: True +changes: + - tweak: "Christmas clothes moved from clothesmate and loadout to premium autodrobe, hoodies and boots remain." diff --git a/html/changelogs/AutoChangeLog-pr-10478.yml b/html/changelogs/AutoChangeLog-pr-10478.yml new file mode 100644 index 0000000000..b174a5e8ee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10478.yml @@ -0,0 +1,4 @@ +author: "Seris02" +delete-after: True +changes: + - tweak: "makes gorilla shuttle emag only" diff --git a/html/changelogs/AutoChangeLog-pr-10493.yml b/html/changelogs/AutoChangeLog-pr-10493.yml new file mode 100644 index 0000000000..201eaad5b5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10493.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - tweak: "Score instead of ranked choice for mode tiers" diff --git a/html/changelogs/AutoChangeLog-pr-10507.yml b/html/changelogs/AutoChangeLog-pr-10507.yml new file mode 100644 index 0000000000..70d82d9cf6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10507.yml @@ -0,0 +1,4 @@ +author: "LetterN" +delete-after: True +changes: + - rscadd: "Adds banjo" diff --git a/html/changelogs/AutoChangeLog-pr-10539.yml b/html/changelogs/AutoChangeLog-pr-10539.yml new file mode 100644 index 0000000000..66a03ee573 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10539.yml @@ -0,0 +1,5 @@ +author: "Savotta" +delete-after: True +changes: + - rscadd: "snout" + - imageadd: "snout" diff --git a/html/changelogs/AutoChangeLog-pr-10546.yml b/html/changelogs/AutoChangeLog-pr-10546.yml new file mode 100644 index 0000000000..a49c2027e5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10546.yml @@ -0,0 +1,4 @@ +author: "r4d6" +delete-after: True +changes: + - bugfix: "fixed being able to use a playback device and a voice analyzer to activate each others" diff --git a/html/changelogs/AutoChangeLog-pr-10552.yml b/html/changelogs/AutoChangeLog-pr-10552.yml new file mode 100644 index 0000000000..846667ea2a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10552.yml @@ -0,0 +1,5 @@ +author: "Tupinambis" +delete-after: True +changes: + - tweak: "Replaces new fire alarms with a slightly updated version of the old ones." + - bugfix: "Fixed bug where Amber alert had no proper alert lights, and red alert had amber lights." diff --git a/html/changelogs/AutoChangeLog-pr-10556.yml b/html/changelogs/AutoChangeLog-pr-10556.yml new file mode 100644 index 0000000000..af42a9eee6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10556.yml @@ -0,0 +1,4 @@ +author: "AffectedArc07" +delete-after: True +changes: + - tweak: "Added CI step to check for CRLF files" diff --git a/icons/mob/inhands/equipment/instruments_lefthand.dmi b/icons/mob/inhands/equipment/instruments_lefthand.dmi index 55f690e445..9de54aed63 100644 Binary files a/icons/mob/inhands/equipment/instruments_lefthand.dmi and b/icons/mob/inhands/equipment/instruments_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/instruments_righthand.dmi b/icons/mob/inhands/equipment/instruments_righthand.dmi index 1878fdefe3..1a3bb055a7 100644 Binary files a/icons/mob/inhands/equipment/instruments_righthand.dmi and b/icons/mob/inhands/equipment/instruments_righthand.dmi differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index 93a1908fba..5e91660e87 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ diff --git a/icons/obj/musician.dmi b/icons/obj/musician.dmi index 8375b38ee9..b0603f6cae 100644 Binary files a/icons/obj/musician.dmi and b/icons/obj/musician.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/head.dm index 427a4ac61d..8634460d4e 100644 --- a/modular_citadel/code/modules/client/loadout/head.dm +++ b/modular_citadel/code/modules/client/loadout/head.dm @@ -93,6 +93,7 @@ restricted_desc = "Engineering, Security, and Cargo" restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster") +/*Commenting out Until next Christmas or made automatic /datum/gear/santahatr name = "Red Santa Hat" category = SLOT_HEAD @@ -102,6 +103,7 @@ name = "Green Santa Hat" category = SLOT_HEAD path = /obj/item/clothing/head/christmashatg +*/ /datum/gear/cowboyhat name = "Cowboy Hat, Brown" @@ -129,6 +131,3 @@ path = /obj/item/clothing/head/cowboyhat/sec restricted_desc = "Security" restricted_roles = list("Warden","Detective","Security Officer","Head of Security") - - - diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index 64ed0d363d..46692ea7a9 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -390,6 +390,7 @@ path = /obj/item/clothing/under/gear_harness //Christmas +/*Commenting out Until next Christmas or made automatic /datum/gear/christmasmaler name = "Red Masculine Christmas Suit" category = SLOT_W_UNIFORM @@ -415,6 +416,7 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/stripper_pink cost = 3 +*/ /datum/gear/greenstripper name = "Green stripper outfit" diff --git a/modular_citadel/icons/mob/mam_snouts.dmi b/modular_citadel/icons/mob/mam_snouts.dmi index d0f5d56314..80371ce83f 100644 Binary files a/modular_citadel/icons/mob/mam_snouts.dmi and b/modular_citadel/icons/mob/mam_snouts.dmi differ diff --git a/sound/instruments/banjo/Ab3.ogg b/sound/instruments/banjo/Ab3.ogg new file mode 100644 index 0000000000..66e263bd61 Binary files /dev/null and b/sound/instruments/banjo/Ab3.ogg differ diff --git a/sound/instruments/banjo/Ab4.ogg b/sound/instruments/banjo/Ab4.ogg new file mode 100644 index 0000000000..f003e03233 Binary files /dev/null and b/sound/instruments/banjo/Ab4.ogg differ diff --git a/sound/instruments/banjo/Ab5.ogg b/sound/instruments/banjo/Ab5.ogg new file mode 100644 index 0000000000..c405725208 Binary files /dev/null and b/sound/instruments/banjo/Ab5.ogg differ diff --git a/sound/instruments/banjo/An3.ogg b/sound/instruments/banjo/An3.ogg new file mode 100644 index 0000000000..1700704c9c Binary files /dev/null and b/sound/instruments/banjo/An3.ogg differ diff --git a/sound/instruments/banjo/An4.ogg b/sound/instruments/banjo/An4.ogg new file mode 100644 index 0000000000..eb7279f869 Binary files /dev/null and b/sound/instruments/banjo/An4.ogg differ diff --git a/sound/instruments/banjo/An5.ogg b/sound/instruments/banjo/An5.ogg new file mode 100644 index 0000000000..d9cf57c0fe Binary files /dev/null and b/sound/instruments/banjo/An5.ogg differ diff --git a/sound/instruments/banjo/Bb3.ogg b/sound/instruments/banjo/Bb3.ogg new file mode 100644 index 0000000000..d3f757c0ac Binary files /dev/null and b/sound/instruments/banjo/Bb3.ogg differ diff --git a/sound/instruments/banjo/Bb4.ogg b/sound/instruments/banjo/Bb4.ogg new file mode 100644 index 0000000000..a9d869091b Binary files /dev/null and b/sound/instruments/banjo/Bb4.ogg differ diff --git a/sound/instruments/banjo/Bb5.ogg b/sound/instruments/banjo/Bb5.ogg new file mode 100644 index 0000000000..a56e6c2500 Binary files /dev/null and b/sound/instruments/banjo/Bb5.ogg differ diff --git a/sound/instruments/banjo/Bn2.ogg b/sound/instruments/banjo/Bn2.ogg new file mode 100644 index 0000000000..3154f97419 Binary files /dev/null and b/sound/instruments/banjo/Bn2.ogg differ diff --git a/sound/instruments/banjo/Bn3.ogg b/sound/instruments/banjo/Bn3.ogg new file mode 100644 index 0000000000..6c72ec2fd5 Binary files /dev/null and b/sound/instruments/banjo/Bn3.ogg differ diff --git a/sound/instruments/banjo/Bn4.ogg b/sound/instruments/banjo/Bn4.ogg new file mode 100644 index 0000000000..b0e9a2b3b2 Binary files /dev/null and b/sound/instruments/banjo/Bn4.ogg differ diff --git a/sound/instruments/banjo/Bn5.ogg b/sound/instruments/banjo/Bn5.ogg new file mode 100644 index 0000000000..1b002140b8 Binary files /dev/null and b/sound/instruments/banjo/Bn5.ogg differ diff --git a/sound/instruments/banjo/Cn3.ogg b/sound/instruments/banjo/Cn3.ogg new file mode 100644 index 0000000000..6ef414d9d0 Binary files /dev/null and b/sound/instruments/banjo/Cn3.ogg differ diff --git a/sound/instruments/banjo/Cn4.ogg b/sound/instruments/banjo/Cn4.ogg new file mode 100644 index 0000000000..4a26a6741d Binary files /dev/null and b/sound/instruments/banjo/Cn4.ogg differ diff --git a/sound/instruments/banjo/Cn5.ogg b/sound/instruments/banjo/Cn5.ogg new file mode 100644 index 0000000000..901ed3bc08 Binary files /dev/null and b/sound/instruments/banjo/Cn5.ogg differ diff --git a/sound/instruments/banjo/Cn6.ogg b/sound/instruments/banjo/Cn6.ogg new file mode 100644 index 0000000000..5cdbbb17ce Binary files /dev/null and b/sound/instruments/banjo/Cn6.ogg differ diff --git a/sound/instruments/banjo/Db3.ogg b/sound/instruments/banjo/Db3.ogg new file mode 100644 index 0000000000..1ebffdf502 Binary files /dev/null and b/sound/instruments/banjo/Db3.ogg differ diff --git a/sound/instruments/banjo/Db4.ogg b/sound/instruments/banjo/Db4.ogg new file mode 100644 index 0000000000..5b93936508 Binary files /dev/null and b/sound/instruments/banjo/Db4.ogg differ diff --git a/sound/instruments/banjo/Db5.ogg b/sound/instruments/banjo/Db5.ogg new file mode 100644 index 0000000000..6ee4dde947 Binary files /dev/null and b/sound/instruments/banjo/Db5.ogg differ diff --git a/sound/instruments/banjo/Db6.ogg b/sound/instruments/banjo/Db6.ogg new file mode 100644 index 0000000000..fd73894fda Binary files /dev/null and b/sound/instruments/banjo/Db6.ogg differ diff --git a/sound/instruments/banjo/Dn3.ogg b/sound/instruments/banjo/Dn3.ogg new file mode 100644 index 0000000000..77491b01b8 Binary files /dev/null and b/sound/instruments/banjo/Dn3.ogg differ diff --git a/sound/instruments/banjo/Dn4.ogg b/sound/instruments/banjo/Dn4.ogg new file mode 100644 index 0000000000..11f68b5a15 Binary files /dev/null and b/sound/instruments/banjo/Dn4.ogg differ diff --git a/sound/instruments/banjo/Dn5.ogg b/sound/instruments/banjo/Dn5.ogg new file mode 100644 index 0000000000..2e9ebe4989 Binary files /dev/null and b/sound/instruments/banjo/Dn5.ogg differ diff --git a/sound/instruments/banjo/Dn6.ogg b/sound/instruments/banjo/Dn6.ogg new file mode 100644 index 0000000000..89ae62361d Binary files /dev/null and b/sound/instruments/banjo/Dn6.ogg differ diff --git a/sound/instruments/banjo/Eb3.ogg b/sound/instruments/banjo/Eb3.ogg new file mode 100644 index 0000000000..1d1e43049d Binary files /dev/null and b/sound/instruments/banjo/Eb3.ogg differ diff --git a/sound/instruments/banjo/Eb4.ogg b/sound/instruments/banjo/Eb4.ogg new file mode 100644 index 0000000000..2722655f5a Binary files /dev/null and b/sound/instruments/banjo/Eb4.ogg differ diff --git a/sound/instruments/banjo/Eb5.ogg b/sound/instruments/banjo/Eb5.ogg new file mode 100644 index 0000000000..7a109dfdf7 Binary files /dev/null and b/sound/instruments/banjo/Eb5.ogg differ diff --git a/sound/instruments/banjo/En3.ogg b/sound/instruments/banjo/En3.ogg new file mode 100644 index 0000000000..4610efdd4f Binary files /dev/null and b/sound/instruments/banjo/En3.ogg differ diff --git a/sound/instruments/banjo/En4.ogg b/sound/instruments/banjo/En4.ogg new file mode 100644 index 0000000000..64c14daf91 Binary files /dev/null and b/sound/instruments/banjo/En4.ogg differ diff --git a/sound/instruments/banjo/En5.ogg b/sound/instruments/banjo/En5.ogg new file mode 100644 index 0000000000..8e0b6c1637 Binary files /dev/null and b/sound/instruments/banjo/En5.ogg differ diff --git a/sound/instruments/banjo/Fn3.ogg b/sound/instruments/banjo/Fn3.ogg new file mode 100644 index 0000000000..5cdc4f13fb Binary files /dev/null and b/sound/instruments/banjo/Fn3.ogg differ diff --git a/sound/instruments/banjo/Fn4.ogg b/sound/instruments/banjo/Fn4.ogg new file mode 100644 index 0000000000..78d5454f18 Binary files /dev/null and b/sound/instruments/banjo/Fn4.ogg differ diff --git a/sound/instruments/banjo/Fn5.ogg b/sound/instruments/banjo/Fn5.ogg new file mode 100644 index 0000000000..b21559b465 Binary files /dev/null and b/sound/instruments/banjo/Fn5.ogg differ diff --git a/sound/instruments/banjo/Gb3.ogg b/sound/instruments/banjo/Gb3.ogg new file mode 100644 index 0000000000..fd055b7471 Binary files /dev/null and b/sound/instruments/banjo/Gb3.ogg differ diff --git a/sound/instruments/banjo/Gb4.ogg b/sound/instruments/banjo/Gb4.ogg new file mode 100644 index 0000000000..f2c62510ed Binary files /dev/null and b/sound/instruments/banjo/Gb4.ogg differ diff --git a/sound/instruments/banjo/Gb5.ogg b/sound/instruments/banjo/Gb5.ogg new file mode 100644 index 0000000000..ab17347912 Binary files /dev/null and b/sound/instruments/banjo/Gb5.ogg differ diff --git a/sound/instruments/banjo/Gn3.ogg b/sound/instruments/banjo/Gn3.ogg new file mode 100644 index 0000000000..ad52ef85c0 Binary files /dev/null and b/sound/instruments/banjo/Gn3.ogg differ diff --git a/sound/instruments/banjo/Gn4.ogg b/sound/instruments/banjo/Gn4.ogg new file mode 100644 index 0000000000..2ddb13b86b Binary files /dev/null and b/sound/instruments/banjo/Gn4.ogg differ diff --git a/sound/instruments/banjo/Gn5.ogg b/sound/instruments/banjo/Gn5.ogg new file mode 100644 index 0000000000..d5a7886c4c Binary files /dev/null and b/sound/instruments/banjo/Gn5.ogg differ diff --git a/sound/instruments/bikehorn/Ab2.ogg b/sound/instruments/bikehorn/Ab2.ogg index cc33da35f4..516dc5f1a5 100644 Binary files a/sound/instruments/bikehorn/Ab2.ogg and b/sound/instruments/bikehorn/Ab2.ogg differ diff --git a/sound/instruments/bikehorn/Ab3.ogg b/sound/instruments/bikehorn/Ab3.ogg index b046ed2e74..6110ccc005 100644 Binary files a/sound/instruments/bikehorn/Ab3.ogg and b/sound/instruments/bikehorn/Ab3.ogg differ diff --git a/sound/instruments/bikehorn/Ab4.ogg b/sound/instruments/bikehorn/Ab4.ogg index ba50324d62..b69bc30a42 100644 Binary files a/sound/instruments/bikehorn/Ab4.ogg and b/sound/instruments/bikehorn/Ab4.ogg differ diff --git a/sound/instruments/bikehorn/An2.ogg b/sound/instruments/bikehorn/An2.ogg index ddfbe21910..29c97fc38e 100644 Binary files a/sound/instruments/bikehorn/An2.ogg and b/sound/instruments/bikehorn/An2.ogg differ diff --git a/sound/instruments/bikehorn/An3.ogg b/sound/instruments/bikehorn/An3.ogg index c69e59a8da..f9f67aaa53 100644 Binary files a/sound/instruments/bikehorn/An3.ogg and b/sound/instruments/bikehorn/An3.ogg differ diff --git a/sound/instruments/bikehorn/An4.ogg b/sound/instruments/bikehorn/An4.ogg index 5b42fe4ae8..74b9fa6adc 100644 Binary files a/sound/instruments/bikehorn/An4.ogg and b/sound/instruments/bikehorn/An4.ogg differ diff --git a/sound/instruments/bikehorn/Bb2.ogg b/sound/instruments/bikehorn/Bb2.ogg index 4a909bdfc5..5cee07e192 100644 Binary files a/sound/instruments/bikehorn/Bb2.ogg and b/sound/instruments/bikehorn/Bb2.ogg differ diff --git a/sound/instruments/bikehorn/Bb3.ogg b/sound/instruments/bikehorn/Bb3.ogg index 2055984a86..f655ba973c 100644 Binary files a/sound/instruments/bikehorn/Bb3.ogg and b/sound/instruments/bikehorn/Bb3.ogg differ diff --git a/sound/instruments/bikehorn/Bb4.ogg b/sound/instruments/bikehorn/Bb4.ogg index 73003e040c..54dc87781e 100644 Binary files a/sound/instruments/bikehorn/Bb4.ogg and b/sound/instruments/bikehorn/Bb4.ogg differ diff --git a/sound/instruments/bikehorn/Bn2.ogg b/sound/instruments/bikehorn/Bn2.ogg index 17532a6a7c..ff86ec9719 100644 Binary files a/sound/instruments/bikehorn/Bn2.ogg and b/sound/instruments/bikehorn/Bn2.ogg differ diff --git a/sound/instruments/bikehorn/Bn3.ogg b/sound/instruments/bikehorn/Bn3.ogg index ff36b91709..c639f34e8e 100644 Binary files a/sound/instruments/bikehorn/Bn3.ogg and b/sound/instruments/bikehorn/Bn3.ogg differ diff --git a/sound/instruments/bikehorn/Bn4.ogg b/sound/instruments/bikehorn/Bn4.ogg index 6750a93155..ea0bc643c5 100644 Binary files a/sound/instruments/bikehorn/Bn4.ogg and b/sound/instruments/bikehorn/Bn4.ogg differ diff --git a/sound/instruments/bikehorn/Cn3.ogg b/sound/instruments/bikehorn/Cn3.ogg index f75ddaa83f..129a67d6bd 100644 Binary files a/sound/instruments/bikehorn/Cn3.ogg and b/sound/instruments/bikehorn/Cn3.ogg differ diff --git a/sound/instruments/bikehorn/Cn4.ogg b/sound/instruments/bikehorn/Cn4.ogg index e5889f04bc..e02a4fa8d2 100644 Binary files a/sound/instruments/bikehorn/Cn4.ogg and b/sound/instruments/bikehorn/Cn4.ogg differ diff --git a/sound/instruments/bikehorn/Cn5.ogg b/sound/instruments/bikehorn/Cn5.ogg index 328a6edf10..eb0b76dadc 100644 Binary files a/sound/instruments/bikehorn/Cn5.ogg and b/sound/instruments/bikehorn/Cn5.ogg differ diff --git a/sound/instruments/bikehorn/Db3.ogg b/sound/instruments/bikehorn/Db3.ogg index 3c3e8d1030..000c38fb67 100644 Binary files a/sound/instruments/bikehorn/Db3.ogg and b/sound/instruments/bikehorn/Db3.ogg differ diff --git a/sound/instruments/bikehorn/Db4.ogg b/sound/instruments/bikehorn/Db4.ogg index 35dd47df47..2f9423914a 100644 Binary files a/sound/instruments/bikehorn/Db4.ogg and b/sound/instruments/bikehorn/Db4.ogg differ diff --git a/sound/instruments/bikehorn/Db5.ogg b/sound/instruments/bikehorn/Db5.ogg index 54c10b54c5..e65b43a288 100644 Binary files a/sound/instruments/bikehorn/Db5.ogg and b/sound/instruments/bikehorn/Db5.ogg differ diff --git a/sound/instruments/bikehorn/Dn3.ogg b/sound/instruments/bikehorn/Dn3.ogg index 33a863c842..f132cd6ba5 100644 Binary files a/sound/instruments/bikehorn/Dn3.ogg and b/sound/instruments/bikehorn/Dn3.ogg differ diff --git a/sound/instruments/bikehorn/Dn4.ogg b/sound/instruments/bikehorn/Dn4.ogg index bd4c353e62..196100f483 100644 Binary files a/sound/instruments/bikehorn/Dn4.ogg and b/sound/instruments/bikehorn/Dn4.ogg differ diff --git a/sound/instruments/bikehorn/Dn5.ogg b/sound/instruments/bikehorn/Dn5.ogg index 11b355b11c..cca45f9473 100644 Binary files a/sound/instruments/bikehorn/Dn5.ogg and b/sound/instruments/bikehorn/Dn5.ogg differ diff --git a/sound/instruments/bikehorn/Eb3.ogg b/sound/instruments/bikehorn/Eb3.ogg index 367cc5456d..8fd4306ae3 100644 Binary files a/sound/instruments/bikehorn/Eb3.ogg and b/sound/instruments/bikehorn/Eb3.ogg differ diff --git a/sound/instruments/bikehorn/Eb4.ogg b/sound/instruments/bikehorn/Eb4.ogg index d7344da37c..72700fd0e3 100644 Binary files a/sound/instruments/bikehorn/Eb4.ogg and b/sound/instruments/bikehorn/Eb4.ogg differ diff --git a/sound/instruments/bikehorn/Eb5.ogg b/sound/instruments/bikehorn/Eb5.ogg index c94b994d19..d2c050ec09 100644 Binary files a/sound/instruments/bikehorn/Eb5.ogg and b/sound/instruments/bikehorn/Eb5.ogg differ diff --git a/sound/instruments/bikehorn/En2.ogg b/sound/instruments/bikehorn/En2.ogg index 6c2e4de57d..ab9bb7dd45 100644 Binary files a/sound/instruments/bikehorn/En2.ogg and b/sound/instruments/bikehorn/En2.ogg differ diff --git a/sound/instruments/bikehorn/En3.ogg b/sound/instruments/bikehorn/En3.ogg index 37b96d4851..cac18c0249 100644 Binary files a/sound/instruments/bikehorn/En3.ogg and b/sound/instruments/bikehorn/En3.ogg differ diff --git a/sound/instruments/bikehorn/En4.ogg b/sound/instruments/bikehorn/En4.ogg index 2a23deabf5..17c9fc4ea2 100644 Binary files a/sound/instruments/bikehorn/En4.ogg and b/sound/instruments/bikehorn/En4.ogg differ diff --git a/sound/instruments/bikehorn/Fn2.ogg b/sound/instruments/bikehorn/Fn2.ogg index 3ddbcb9033..9db5395083 100644 Binary files a/sound/instruments/bikehorn/Fn2.ogg and b/sound/instruments/bikehorn/Fn2.ogg differ diff --git a/sound/instruments/bikehorn/Fn3.ogg b/sound/instruments/bikehorn/Fn3.ogg index 47f8625ea9..1228fafc94 100644 Binary files a/sound/instruments/bikehorn/Fn3.ogg and b/sound/instruments/bikehorn/Fn3.ogg differ diff --git a/sound/instruments/bikehorn/Fn4.ogg b/sound/instruments/bikehorn/Fn4.ogg index ee33053566..3744a1a3bf 100644 Binary files a/sound/instruments/bikehorn/Fn4.ogg and b/sound/instruments/bikehorn/Fn4.ogg differ diff --git a/sound/instruments/bikehorn/Gb2.ogg b/sound/instruments/bikehorn/Gb2.ogg index e78f943010..6625b93d16 100644 Binary files a/sound/instruments/bikehorn/Gb2.ogg and b/sound/instruments/bikehorn/Gb2.ogg differ diff --git a/sound/instruments/bikehorn/Gb3.ogg b/sound/instruments/bikehorn/Gb3.ogg index be59509ee9..03154ab427 100644 Binary files a/sound/instruments/bikehorn/Gb3.ogg and b/sound/instruments/bikehorn/Gb3.ogg differ diff --git a/sound/instruments/bikehorn/Gb4.ogg b/sound/instruments/bikehorn/Gb4.ogg index fac913aaff..59958dbae4 100644 Binary files a/sound/instruments/bikehorn/Gb4.ogg and b/sound/instruments/bikehorn/Gb4.ogg differ diff --git a/sound/instruments/bikehorn/Gn2.ogg b/sound/instruments/bikehorn/Gn2.ogg index 8099773544..95faf3389d 100644 Binary files a/sound/instruments/bikehorn/Gn2.ogg and b/sound/instruments/bikehorn/Gn2.ogg differ diff --git a/sound/instruments/bikehorn/Gn3.ogg b/sound/instruments/bikehorn/Gn3.ogg index 1966dfd0e8..f903ae6615 100644 Binary files a/sound/instruments/bikehorn/Gn3.ogg and b/sound/instruments/bikehorn/Gn3.ogg differ diff --git a/sound/instruments/bikehorn/Gn4.ogg b/sound/instruments/bikehorn/Gn4.ogg index 86f81bc1cb..6631da09e6 100644 Binary files a/sound/instruments/bikehorn/Gn4.ogg and b/sound/instruments/bikehorn/Gn4.ogg differ diff --git a/sound/weapons/banjoslap.ogg b/sound/weapons/banjoslap.ogg new file mode 100644 index 0000000000..06a86a535d Binary files /dev/null and b/sound/weapons/banjoslap.ogg differ diff --git a/tools/travis/check_line_endings.py b/tools/travis/check_line_endings.py new file mode 100644 index 0000000000..3ee7baf7aa --- /dev/null +++ b/tools/travis/check_line_endings.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import os +import sys +import glob + +WINDOWS_NEWLINE = b'\r\n' + +FILES_TO_READ = [] +FILES_TO_READ.extend(glob.glob(r"**\*.dm", recursive=True)) +FILES_TO_READ.extend(glob.glob(r"**\*.dmm", recursive=True)) +FILES_TO_READ.extend(glob.glob(r"*.dme")) +#for i in FILES_TO_READ: +# if os.path.isdir(i): +# FILES_TO_READ.remove(i) + +def _reader(filepath): + data = open(filepath, "rb") + return data + +def main(): + filelist = [] + foundfiles = False + + for file in FILES_TO_READ: + data = _reader(file) + lines = data.readlines() + for line in lines: + if line.endswith(WINDOWS_NEWLINE): + filelist.append(file) + foundfiles = True + break + data.close() + + if not foundfiles: + print("No CRLF files found.") + sys.exit(0) + else: + print("Found files with suspected CRLF type.") + for i in filelist: + print(i) + sys.exit(1) + + + +if __name__ == "__main__": + main()