From 9689ef070dbc4defdceb1cf3ba1ebdabdf69d7be Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 7 Jun 2016 14:13:12 +0300 Subject: [PATCH 1/6] Vote kick settings --- Subsurface/Source/Networking/GameClient.cs | 2 +- .../Source/Networking/GameServerSettings.cs | 39 +++++++++++++++++-- Subsurface/Source/Screens/NetLobbyVoting.cs | 9 ++++- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 26166fe75..0cc704603 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -834,7 +834,7 @@ namespace Barotrauma.Networking Character character = obj as Character; if (character == null) return false; - if (character != myCharacter) + if (character != myCharacter && Voting.AllowVoteKick) { var client = GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == character); if (client != null) diff --git a/Subsurface/Source/Networking/GameServerSettings.cs b/Subsurface/Source/Networking/GameServerSettings.cs index 769e96a63..6f6f17926 100644 --- a/Subsurface/Source/Networking/GameServerSettings.cs +++ b/Subsurface/Source/Networking/GameServerSettings.cs @@ -93,6 +93,12 @@ namespace Barotrauma.Networking get { return allowSpectating; } } + public bool AllowVoteKick + { + get; + private set; + } + public float EndVoteRequiredRatio = 0.5f; public float KickVoteRequiredRatio = 0.5f; @@ -159,10 +165,9 @@ namespace Barotrauma.Networking private void CreateSettingsFrame() { - settingsFrame = new GUIFrame(new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.Black * 0.5f); - + settingsFrame = new GUIFrame(new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.Black * 0.5f); - GUIFrame innerFrame = new GUIFrame(new Rectangle(0, 0, 400, 400), null, Alignment.Center, GUI.Style, settingsFrame); + GUIFrame innerFrame = new GUIFrame(new Rectangle(0, 0, 400, 420), null, Alignment.Center, GUI.Style, settingsFrame); innerFrame.Padding = new Vector4(20.0f, 20.0f, 20.0f, 20.0f); new GUITextBlock(new Rectangle(0, -5, 0, 20), "Server settings", GUI.Style, innerFrame, GUI.LargeFont); @@ -175,6 +180,7 @@ namespace Barotrauma.Networking y += 30; + var endVoteBox = new GUITickBox(new Rectangle(0, y, 20, 20), "End round by voting", Alignment.Left, innerFrame); endVoteBox.Selected = Voting.AllowEndVoting; endVoteBox.OnSelected = (GUITickBox) => @@ -199,6 +205,33 @@ namespace Barotrauma.Networking return true; }; votesRequiredSlider.OnMoved(votesRequiredSlider, votesRequiredSlider.BarScroll); + + y += 40; + + var voteKickBox = new GUITickBox(new Rectangle(0, y, 20, 20), "Allow vote kicking", Alignment.Left, innerFrame); + voteKickBox.Selected = Voting.AllowVoteKick; + voteKickBox.OnSelected = (GUITickBox) => + { + Voting.AllowVoteKick = !Voting.AllowVoteKick; + GameMain.Server.UpdateVoteStatus(); + return true; + }; + + var kickVotesRequiredText = new GUITextBlock(new Rectangle(20, y + 20, 20, 20), "Votes required: 50 %", GUI.Style, innerFrame, GUI.SmallFont); + + var kickVoteSlider = new GUIScrollBar(new Rectangle(150, y + 22, 100, 10), GUI.Style, 0.1f, innerFrame); + kickVoteSlider.UserData = kickVotesRequiredText; + kickVoteSlider.Step = 0.2f; + kickVoteSlider.BarScroll = (KickVoteRequiredRatio - 0.5f) * 2.0f; + kickVoteSlider.OnMoved = (GUIScrollBar scrollBar, float barScroll) => + { + GUITextBlock voteText = scrollBar.UserData as GUITextBlock; + + KickVoteRequiredRatio = barScroll / 2.0f + 0.5f; + voteText.Text = "Votes required: " + (int)MathUtils.Round(KickVoteRequiredRatio * 100.0f, 10.0f) + " %"; + return true; + }; + kickVoteSlider.OnMoved(kickVoteSlider, kickVoteSlider.BarScroll); y += 40; diff --git a/Subsurface/Source/Screens/NetLobbyVoting.cs b/Subsurface/Source/Screens/NetLobbyVoting.cs index 714aeeadb..5f8d3daef 100644 --- a/Subsurface/Source/Screens/NetLobbyVoting.cs +++ b/Subsurface/Source/Screens/NetLobbyVoting.cs @@ -12,6 +12,8 @@ namespace Barotrauma { private bool allowSubVoting, allowModeVoting; + public bool AllowVoteKick = true; + public bool AllowEndVoting = true; public bool AllowSubVoting @@ -243,8 +245,9 @@ namespace Barotrauma { msg.Write((byte)voters.Count(v => v.GetVote(VoteType.EndRound))); msg.Write((byte)voters.Count); - } - + } + + msg.Write(AllowVoteKick); } public void ReadData(NetIncomingMessage msg) @@ -286,6 +289,8 @@ namespace Barotrauma GameMain.NetworkMember.EndVoteCount = msg.ReadByte(); GameMain.NetworkMember.EndVoteMax = msg.ReadByte(); } + + AllowVoteKick = msg.ReadBoolean(); } } } From 8f8f1ed7dcd96191e253dab6debdec1bf383990a Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 7 Jun 2016 16:57:58 +0300 Subject: [PATCH 2/6] - fixed submarine selection resetting when switching to netlobbyscreen - fixed EntityGrid IndexOutOfRangeException - fixed AssignJobs() ignoring the highest job preference --- Subsurface/Source/Map/EntityGrid.cs | 4 ++-- Subsurface/Source/Networking/GameServer.cs | 5 +++-- Subsurface/Source/Screens/NetLobbyScreen.cs | 8 ++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Subsurface/Source/Map/EntityGrid.cs b/Subsurface/Source/Map/EntityGrid.cs index c0aef6943..b5b5b9d90 100644 --- a/Subsurface/Source/Map/EntityGrid.cs +++ b/Subsurface/Source/Map/EntityGrid.cs @@ -40,9 +40,9 @@ namespace Barotrauma return; } - for (int x = Math.Max(indices.X, 0); x <= Math.Min(indices.Width, entities.GetLength(0)); x++) + for (int x = Math.Max(indices.X, 0); x <= Math.Min(indices.Width, entities.GetLength(0)-1); x++) { - for (int y = Math.Max(indices.Y,0); y <= Math.Min(indices.Height, entities.GetLength(1)); y++) + for (int y = Math.Max(indices.Y,0); y <= Math.Min(indices.Height, entities.GetLength(1)-1); y++) { entities[x, y].Add(entity); } diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index 429846431..f15001b48 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -1725,8 +1725,9 @@ namespace Barotrauma.Networking Client preferredClient = null; foreach (Client c in clients) { - int index = c.jobPreferences.FindIndex(jp => jp == job); - if (index == 0) index = 1000; + int index = c.jobPreferences.IndexOf(job); + if (index == -1) index = 1000; + if (preferredClient == null || index < bestPreference) { bestPreference = index; diff --git a/Subsurface/Source/Screens/NetLobbyScreen.cs b/Subsurface/Source/Screens/NetLobbyScreen.cs index a9d31afd8..dd5f3f382 100644 --- a/Subsurface/Source/Screens/NetLobbyScreen.cs +++ b/Subsurface/Source/Screens/NetLobbyScreen.cs @@ -354,6 +354,7 @@ namespace Barotrauma if (IsServer && GameMain.Server != null) { + int prevSelected = subList.SelectedIndex; UpdateSubList(Submarine.SavedSubmarines); modeList.OnSelected = VotableClicked; @@ -377,8 +378,11 @@ namespace Barotrauma var banListButton = new GUIButton(new Rectangle(0, 30, 100, 20), "Banned IPs", Alignment.BottomRight, GUI.Style, playerList.Parent); banListButton.OnClicked = GameMain.Server.BanList.ToggleBanFrame; banListButton.UserData = "banListButton"; - - if (subList.CountChildren > 0 && subList.Selected == null) subList.Select(0); + + if (subList.CountChildren > 0 && subList.Selected == null) + { + subList.Select(Math.Max(0, prevSelected)); + } if (GameModePreset.list.Count > 0 && modeList.Selected == null) modeList.Select(0); if (myPlayerFrame.children.Find(c => c.UserData as string == "playyourself") == null) From bd4292c3e59d389f68ec57905168efeedfff31fc Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 7 Jun 2016 18:24:14 +0300 Subject: [PATCH 3/6] - PowerContainer capacity is initialized before charge to allow setting the charge higher than default capacity - soundplayer doesn't crash the game if it can't stream a music clip - some new structure prefabs - more effective corrigodone (health med) --- Subsurface/Barotrauma.csproj | 3 +++ Subsurface/Content/Items/Medical/medical.xml | 2 +- Subsurface/Content/Map/StructurePrefabs.xml | 7 ++++++- Subsurface/Content/Map/structures2.png | Bin 0 -> 41590 bytes .../Items/Components/Power/PowerContainer.cs | 14 +++++++------- Subsurface/Source/Sounds/SoundPlayer.cs | 12 +++++++++++- 6 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 Subsurface/Content/Map/structures2.png diff --git a/Subsurface/Barotrauma.csproj b/Subsurface/Barotrauma.csproj index 0fb8587a2..68a2ac24e 100644 --- a/Subsurface/Barotrauma.csproj +++ b/Subsurface/Barotrauma.csproj @@ -769,6 +769,9 @@ PreserveNewest Designer + + PreserveNewest + PreserveNewest diff --git a/Subsurface/Content/Items/Medical/medical.xml b/Subsurface/Content/Items/Medical/medical.xml index 4ad18cc4c..44b7570a9 100644 --- a/Subsurface/Content/Items/Medical/medical.xml +++ b/Subsurface/Content/Items/Medical/medical.xml @@ -148,7 +148,7 @@ - + diff --git a/Subsurface/Content/Map/StructurePrefabs.xml b/Subsurface/Content/Map/StructurePrefabs.xml index edeb72c34..711353e8f 100644 --- a/Subsurface/Content/Map/StructurePrefabs.xml +++ b/Subsurface/Content/Map/StructurePrefabs.xml @@ -119,7 +119,12 @@ - + + + + diff --git a/Subsurface/Content/Map/structures2.png b/Subsurface/Content/Map/structures2.png new file mode 100644 index 0000000000000000000000000000000000000000..14866b4e6686351a01c2f83ae687a6054063445d GIT binary patch literal 41590 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 a84$-fS)-z`_6RUe&}my|o3c~B3I7GKp1=G6 literal 0 HcmV?d00001 diff --git a/Subsurface/Source/Items/Components/Power/PowerContainer.cs b/Subsurface/Source/Items/Components/Power/PowerContainer.cs index 003381b5e..f6400c72e 100644 --- a/Subsurface/Source/Items/Components/Power/PowerContainer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerContainer.cs @@ -36,6 +36,13 @@ namespace Barotrauma.Items.Components get { return maxOutput; } } + [HasDefaultValue(10.0f, true), Editable] + public float Capacity + { + get { return capacity; } + set { capacity = Math.Max(value, 1.0f); } + } + [Editable, HasDefaultValue(0.0f, true)] public float Charge { @@ -47,13 +54,6 @@ namespace Barotrauma.Items.Components } } - [HasDefaultValue(10.0f, true), Editable] - public float Capacity - { - get { return capacity; } - set { capacity = Math.Max(value, 1.0f); } - } - [HasDefaultValue(10.0f, true), Editable] public float RechargeSpeed { diff --git a/Subsurface/Source/Sounds/SoundPlayer.cs b/Subsurface/Source/Sounds/SoundPlayer.cs index 07f4da930..6663693a2 100644 --- a/Subsurface/Source/Sounds/SoundPlayer.cs +++ b/Subsurface/Source/Sounds/SoundPlayer.cs @@ -7,6 +7,7 @@ using FarseerPhysics.Dynamics; using Microsoft.Xna.Framework; using Barotrauma.Sounds; using System.Collections.Generic; +using System.IO; namespace Barotrauma { @@ -249,7 +250,16 @@ namespace Barotrauma if (currMusicVolume < 0.01f) { Sound.StopStream(); - if (targetMusic != null) Sound.StartStream(targetMusic.file, currMusicVolume); + + try + { + if (targetMusic != null) Sound.StartStream(targetMusic.file, currMusicVolume); + } + catch (FileNotFoundException e) + { + DebugConsole.ThrowError("Music clip " + targetMusic.file + " not found!"); + } + currentMusic = targetMusic; } } From 14c809b2f28749549d2990174b3a6e3711c31093 Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 7 Jun 2016 20:41:32 +0300 Subject: [PATCH 4/6] Debug text tweaking, guiframe for relay component, spears loaded into a harpoon gun don't float in the air, some new names --- .../Content/Characters/Human/ffirstnames.txt | 37 ++++++- .../Content/Characters/Human/firstnames.txt | 30 ++++- .../Content/Characters/Human/lastnames.txt | 103 +++++++++++++++++- .../Content/Items/Electricity/signalitems.xml | 4 +- Subsurface/Content/Items/Weapons/weapons.xml | 2 +- Subsurface/Source/GUI/GUI.cs | 26 ++--- Subsurface/Source/Items/Item.cs | 8 +- Subsurface/Source/Map/Hull.cs | 10 +- 8 files changed, 193 insertions(+), 27 deletions(-) diff --git a/Subsurface/Content/Characters/Human/ffirstnames.txt b/Subsurface/Content/Characters/Human/ffirstnames.txt index c8f23b820..b0168740d 100644 --- a/Subsurface/Content/Characters/Human/ffirstnames.txt +++ b/Subsurface/Content/Characters/Human/ffirstnames.txt @@ -1,19 +1,25 @@ Albertine +Alexia Alfredia +Alice Alita Alla Alta Althea Alyce Amee +Amira Annette Ara Arcelia Arie Armanda +Aryanna +Ashley Ashly Astrid Avril +Azul Barbra Beaulah Bell @@ -22,13 +28,17 @@ Bettyann Beverley Bridgett Candace +Cara Carie Carla +Carmen Cathleen +Cathy Cecille Christiana Christine Cinda +Claire Cleopatra Codi Corinne @@ -46,19 +56,26 @@ Doria Dorthy Eleanor Elinor +Eliza +Elliana Emerald +Emilee +Erica Erline Ethel Eugenia Fanny Fernanda +Fiona Glenda +Gloria Hortensia Ilene Ina Inga Iris Jacquline +Jaida Janee Janessa Janie @@ -75,30 +92,37 @@ Karyn Katerina Katherina Kathy +Katrina Kellie +Kenna Keri Kizzie Kristeen Kristie Larissa Larita +Lauren Laurie Laurinda Lavinia Leanne Leila Lelah +Lena Leola +Lily Lindy Liza Lola Lora Lorriane Lorrie +Macey Mafalda Maira Majorie Marcy +Margaret Margeret Mariela Marin @@ -110,19 +134,25 @@ Masako Maudie Maybell Mechelle +Megan Melany Melba Michele +Mikaela Mila Miranda Muoi Natalia Natashia +Nicole Nola Noriko Page +Pamela Paula Peggie +Phoenix +Priscilla Randi Reatha Renata @@ -146,9 +176,13 @@ Sherita Sherry Shin Shirlee +Siena Socorro +Sophie Stefany +Stella Stephane +Summer Susy Synthia Tania @@ -168,4 +202,5 @@ Vanessa Velma Yahaira Zandra -Zoe \ No newline at end of file +Zoe +Zoey \ No newline at end of file diff --git a/Subsurface/Content/Characters/Human/firstnames.txt b/Subsurface/Content/Characters/Human/firstnames.txt index ccb1d0f35..19534b715 100644 --- a/Subsurface/Content/Characters/Human/firstnames.txt +++ b/Subsurface/Content/Characters/Human/firstnames.txt @@ -1,17 +1,20 @@ Abe Adam Adan +Ahmed Alan Aldo Allan Alonso Alton Alvaro +Alvin Andres Anton Antony Arkadi Arron +Arthur Arturo Austin Avery @@ -22,6 +25,7 @@ Ben Bennie Bertram Bill +Bo Boyce Boyd Brady @@ -41,14 +45,15 @@ Christoper Chuck Claude Coleman +Cuck Dan Darius Darrin Darwin David Delbert -Devin Dewey +Devin Dewitt Dimitry Dominick @@ -61,6 +66,7 @@ Elmer Erich Erik Ernie +Esteban Everette Ezequiel Filiberto @@ -70,6 +76,8 @@ Freeman Fritz Garrett Gerard +Glenn +Gregor Hal Harlan Harris @@ -77,6 +85,7 @@ Harry Hector Herman Hobert +Igor Irwin Ivan Jackie @@ -94,12 +103,15 @@ Jerrell Jerrod Jess Joe +Joel John +Johny Jonathan Josef Joseph Joshua Jude +Julius Keith Kendall Keneth @@ -114,7 +126,9 @@ Lanny Lee Len Lenny +Leo Lionel +Lucas Lynn Lynwood Malcom @@ -131,6 +145,7 @@ Mauricio Mckinley Mechislav Merrill +Messiah Micheal Milton Minh @@ -143,11 +158,14 @@ Mose Murray Neal Neil +Nick Nolan Norman +Omari Orval Oscar Owen +Pedro Pete Peter Quincy @@ -165,6 +183,7 @@ Rob Roderick Roland Romeo +Ronnie Rosendo Roy Rupert @@ -176,14 +195,17 @@ Sergei Seth Shelby Sidney +Simon Son Sonny Steve Stevie Sylvester Tad +Tate Terrance Terrell +The Timur Tod Todd @@ -193,14 +215,16 @@ Travis Tyler Tyson Ulof -Virgil -Virgilio Waldo Walker Warner +Vasili Wilford Will Williams +Willie Willy Winston +Virgil +Virgilio Zachary \ No newline at end of file diff --git a/Subsurface/Content/Characters/Human/lastnames.txt b/Subsurface/Content/Characters/Human/lastnames.txt index 8e4e8874b..3ce9f6134 100644 --- a/Subsurface/Content/Characters/Human/lastnames.txt +++ b/Subsurface/Content/Characters/Human/lastnames.txt @@ -1,9 +1,15 @@ +Aguilar Aker Angles +Ashley Atterbury +Avery +Bailey +Banks Bartolomeo Basnett Baumgardner +Beltran Bergman Berlin Berner @@ -13,121 +19,207 @@ Boman Bonham Books Box +Bradley +Brady Breeki +Buckley +Burke Bushman Callahan -Callanan Carey +Carroll +Case +Castillo +Castro Celina Ryder Chandler Chaney +Chaney Chapman Chiu +Clements Clothier +Cluck Cobble +Collins Colpitts Combs Connors Cork Cortese +Craig +Cuevas Danko Day +Day Delange Deloney Deras Dews Dimauro Dollinger +Donovan Dorado Dudley Duplantier +Dyer Eastman +Elliott +Ellison +Escobar Feinberg Feinman Fesler Fleig Flowers Fonte +Freeman Frye Gadberry Gallagher Gallardo +Gay Gears Geist +Gomez Gonzales Goodin +Gordon +Gould +Graves +Graves +Green +Gregory Gumbs Hajek Hallett +Hampton Hardy Harp Hebert Hedrick Hefner +Hernandez Heuer +Higgins Hillard Hines +Hinton Hocker +Hoffman Holter House +Huber +Huber +Hurley +Hutchinson +Huynh Jack +James Jones Keller +Kidd Kinney Klein Knowles Krall +Kramer Lane +Larsen +Larsen Lavey +Lawrence +Lawson +Lee Leonard Lester Linares +Little Lowe +Lozano +Lucas +Lyons Malone Mansfield Marchi +Marquez Mason +Maxwell Maynard Maynes +Mcclure +Mcdowell McLeroy McNeal +Mcneil Mead Meals Meisner Mell Mendel +Mendez +Meza +Molina +Monroe +Mooney +Moran +Moses +Moses +Mosley Mulford Mungo Navarro Newton Nicolosi +Nunez Ordway Ouellette Palmieri Parchman Parker Parks +Patel +Pearson Petersen +Phillips Phoenix Pickett Planck +Pollard Pool Poole +Preston Price +Proctor +Quinn Radebaugh Radice Ram +Ramos +Rangel +Reeves +Reynolds Rhymer Riddle Riles +Rios +Rivera Robertson Rolfe +Roman Rosewood +Rowe Sacks Santillan Santistevan +Saunders Sawyer +Schmitt +Serrano Severance +Sexton +Shah +Simpson Smith Southworth Sparks @@ -135,6 +227,8 @@ Stalvey Stanley Stein Stogner +Suarez +Summers Summitt Sunderland Swanger @@ -142,16 +236,21 @@ Swanson Sykes Tamashiro Tate +Terry Thompkins Tootle Tseng Tyson Ulrich +Walls Vaughn +Vazquez Veach +Weaver Velazquez Welden Wheeling Whitely Wiley -Williams \ No newline at end of file +Williams +Zhang \ No newline at end of file diff --git a/Subsurface/Content/Items/Electricity/signalitems.xml b/Subsurface/Content/Items/Electricity/signalitems.xml index a559427d4..11880451e 100644 --- a/Subsurface/Content/Items/Electricity/signalitems.xml +++ b/Subsurface/Content/Items/Electricity/signalitems.xml @@ -220,7 +220,9 @@ - + + + diff --git a/Subsurface/Content/Items/Weapons/weapons.xml b/Subsurface/Content/Items/Weapons/weapons.xml index 0c47b7b24..72e39f49b 100644 --- a/Subsurface/Content/Items/Weapons/weapons.xml +++ b/Subsurface/Content/Items/Weapons/weapons.xml @@ -49,7 +49,7 @@ - + diff --git a/Subsurface/Source/GUI/GUI.cs b/Subsurface/Source/GUI/GUI.cs index 75ea8bcb7..64b67e19d 100644 --- a/Subsurface/Source/GUI/GUI.cs +++ b/Subsurface/Source/GUI/GUI.cs @@ -398,27 +398,27 @@ namespace Barotrauma if (GameMain.DebugDraw) { - spriteBatch.DrawString(Font, + spriteBatch.DrawString(SmallFont, "FPS: " + (int)GameMain.FrameCounter.AverageFramesPerSecond, new Vector2(10, 10), Color.White); - spriteBatch.DrawString(Font, + spriteBatch.DrawString(SmallFont, "Physics: " + GameMain.World.UpdateTime, + new Vector2(10, 20), Color.White); + + spriteBatch.DrawString(SmallFont, + "Bodies: " + GameMain.World.BodyList.Count + " (" + GameMain.World.BodyList.FindAll(b => b.Awake && b.Enabled).Count + " awake)", new Vector2(10, 30), Color.White); - spriteBatch.DrawString(Font, - "Bodies: " + GameMain.World.BodyList.Count + " (" + GameMain.World.BodyList.FindAll(b => b.Awake && b.Enabled).Count + " awake)", - new Vector2(10, 50), Color.White); + spriteBatch.DrawString(SmallFont, + "Camera pos: " + GameMain.GameScreen.Cam.Position.ToPoint(), + new Vector2(10, 40), Color.White); - spriteBatch.DrawString(Font, - "Camera pos: " + GameMain.GameScreen.Cam.Position, - new Vector2(10, 70), Color.White); - - if (Submarine.Loaded!=null) + if (Submarine.Loaded != null) { - spriteBatch.DrawString(Font, - "Sub pos: " + Submarine.Loaded.Position, - new Vector2(10, 90), Color.White); + spriteBatch.DrawString(SmallFont, + "Sub pos: " + Submarine.Loaded.Position.ToPoint(), + new Vector2(10, 50), Color.White); } } diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 4e9fb0134..6ba173892 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -813,6 +813,9 @@ namespace Barotrauma if (prefab.sprite != null) { + float depth = Sprite.Depth; + depth += (ID % 255) * 0.000001f; + if (body == null) { if (prefab.ResizeHorizontal || prefab.ResizeVertical) @@ -821,7 +824,7 @@ namespace Barotrauma } else { - prefab.sprite.Draw(spriteBatch, new Vector2(DrawPosition.X, -DrawPosition.Y), color); + prefab.sprite.Draw(spriteBatch, new Vector2(DrawPosition.X, -DrawPosition.Y), color, 0.0f, 1.0f, SpriteEffects.None, depth); } } @@ -830,7 +833,6 @@ namespace Barotrauma var holdable = GetComponent(); if (holdable!=null && holdable.Picker !=null) { - float depth = Sprite.Depth; if (holdable.Picker.SelectedItems[0]==this) { depth = holdable.Picker.AnimController.GetLimb(LimbType.RightHand).sprite.Depth + 0.000001f; @@ -844,7 +846,7 @@ namespace Barotrauma } else { - body.Draw(spriteBatch, prefab.sprite, color); + body.Draw(spriteBatch, prefab.sprite, color, depth); } } } diff --git a/Subsurface/Source/Map/Hull.cs b/Subsurface/Source/Map/Hull.cs index 6a92645a7..645edc985 100644 --- a/Subsurface/Source/Map/Hull.cs +++ b/Subsurface/Source/Map/Hull.cs @@ -522,9 +522,13 @@ namespace Barotrauma new Rectangle(drawRect.X, -drawRect.Y, rect.Width, rect.Height), Color.Red*((100.0f-OxygenPercentage)/400.0f), true); - spriteBatch.DrawString(GUI.Font, "Pressure: " + ((int)pressure - rect.Y).ToString() + - " - Oxygen: " + ((int)OxygenPercentage), new Vector2(drawRect.X + 10, -drawRect.Y + 10), Color.Black); - spriteBatch.DrawString(GUI.Font, volume + " / " + FullVolume, new Vector2(drawRect.X + 10, -drawRect.Y + 30), Color.Black); + if (GameMain.DebugDraw) + { + spriteBatch.DrawString(GUI.SmallFont, "Pressure: " + ((int)pressure - rect.Y).ToString() + + " - Oxygen: " + ((int)OxygenPercentage), new Vector2(drawRect.X + 5, -drawRect.Y + 5), Color.White); + spriteBatch.DrawString(GUI.SmallFont, volume + " / " + FullVolume, new Vector2(drawRect.X + 5, -drawRect.Y + 20), Color.White); + + } if ((isSelected || isHighlighted) && editing) { From 37336095bd0ffa9558361a788665039843d5e03f Mon Sep 17 00:00:00 2001 From: Regalis Date: Wed, 8 Jun 2016 17:46:36 +0300 Subject: [PATCH 5/6] v4.1.6 --- Subsurface/Properties/AssemblyInfo.cs | 4 +-- Subsurface/changelog.txt | 38 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Subsurface/Properties/AssemblyInfo.cs b/Subsurface/Properties/AssemblyInfo.cs index c5657d643..f99f140e4 100644 --- a/Subsurface/Properties/AssemblyInfo.cs +++ b/Subsurface/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.4.1.3")] -[assembly: AssemblyFileVersion("0.4.1.3")] +[assembly: AssemblyVersion("0.4.1.6")] +[assembly: AssemblyFileVersion("0.4.1.6")] diff --git a/Subsurface/changelog.txt b/Subsurface/changelog.txt index 3153e4582..ab3f17f0b 100644 --- a/Subsurface/changelog.txt +++ b/Subsurface/changelog.txt @@ -1,3 +1,41 @@ +--------------------------------------------------------------------------------------------------------- +v0.4.1.6 +--------------------------------------------------------------------------------------------------------- + +- vote kicking +- fixed reverting back to the first sub on the list after each round when using manual submarine selection +- fixed lights "bleeding" through walls +- fixed crashing if the submarine contains hulls far away from the rest of the submarine +- corricodone is slightly more effective +- battery charge can be set higher than the default capacity of 2000 (assuming the capacity is set higher) +- job assignment bugfixes +- head sprites can be given tags (e.g. customhead[tag].png) which will make the game select body sprites +with a matching tag (e.g. customtorso[tag].png) for the character +- some new head sprites +- pathfinding errors (which may be caused by missing or incorrectly placed waypoints in custom subs) +don't cause the debug console to pop up +- added missing music clips to the Linux build + +--------------------------------------------------------------------------------------------------------- +v0.4.1.5 +--------------------------------------------------------------------------------------------------------- + +- fixed oxygen distribution through vents not being calculated correctly +- fixed another bug that caused ''object reference not set to an instance of object'' error messages +when starting a new round +- fulgurium batteries can be put in flashlights and sonars +- more powerful oxygen generators in vanilla subs (small rooms aren't deathtraps anymore) + +Linux version: +- fixed ''unable to load coelanth.png'' error messages +- fixed non-matching content packages between the Linux and Windows versions + +--------------------------------------------------------------------------------------------------------- +v0.4.1.4 +--------------------------------------------------------------------------------------------------------- + +- fixed clients failing to select submarines in their "Submarines/Downloaded" folder + --------------------------------------------------------------------------------------------------------- v0.4.1.3 --------------------------------------------------------------------------------------------------------- From d520c00dc930486838e8dcff916b962ed1be8da0 Mon Sep 17 00:00:00 2001 From: Regalis Date: Thu, 9 Jun 2016 16:54:30 +0300 Subject: [PATCH 6/6] - stunned characters don't move their hands behind their back when cuffed (caused the characters to flail around when someone grabs them) - characters can run while grabbing/dragging someone - inventory and chatbox are hidden when stunned - turret rotation is reset between minRotation and maxRotation when changing the rotation limits - fixed explosion damage being applied to simPositions of the limbs instead of worldpositions --- .../Animation/HumanoidAnimController.cs | 24 ++++++++++++------- Subsurface/Source/Characters/Character.cs | 8 +++++-- Subsurface/Source/Characters/CharacterHUD.cs | 7 ++++-- Subsurface/Source/Items/Components/Turret.cs | 2 ++ Subsurface/Source/Map/Explosion.cs | 2 +- Subsurface/Source/Networking/NetworkMember.cs | 4 ++-- 6 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs index fecb7bacd..ca39e4aee 100644 --- a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs @@ -156,6 +156,13 @@ namespace Barotrauma } strongestImpact = 0.0f; + + if (stunTimer > 0) + { + stunTimer -= deltaTime; + return; + } + if (character.LockHands) { var leftHand = GetLimb(LimbType.LeftHand); @@ -185,15 +192,13 @@ namespace Barotrauma //rightHand.pullJoint.Enabled = true; //rightHand.pullJoint.WorldAnchorB = midPos; } - - if (stunTimer > 0) + else { - stunTimer -= deltaTime; - return; - } - - if (Anim != Animation.UsingConstruction) ResetPullJoints(); + if (Anim != Animation.UsingConstruction) ResetPullJoints(); + + } + if (SimplePhysicsEnabled) { UpdateStandingSimple(); @@ -287,7 +292,7 @@ namespace Barotrauma float slowdownFactor = (float)limbsInWater / (float)Limbs.Count(); float maxSpeed = Math.Max(TargetMovement.Length() - slowdownFactor, 1.0f); - if (character.SelectedCharacter!=null) maxSpeed = Math.Min(maxSpeed, 1.0f); + // if (character.SelectedCharacter!=null) maxSpeed = Math.Min(maxSpeed, 1.0f); TargetMovement = Vector2.Normalize(TargetMovement) * maxSpeed; } @@ -933,10 +938,11 @@ namespace Barotrauma { pullLimb.pullJoint.Enabled = true; pullLimb.pullJoint.WorldAnchorB = targetLimb.SimPosition; - pullLimb.pullJoint.MaxForce = 100.0f; + pullLimb.pullJoint.MaxForce = 10000.0f; targetLimb.pullJoint.Enabled = true; targetLimb.pullJoint.WorldAnchorB = pullLimb.SimPosition; + targetLimb.pullJoint.MaxForce = 10000.0f; } } diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 54d676f9b..ab9eab0ad 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -1030,6 +1030,12 @@ namespace Barotrauma PressureTimer = 0.0f; } } + + if (controlled == this) + { + Lights.LightManager.ViewTarget = this; + CharacterHUD.Update(deltaTime, this); + } if (IsUnconscious) { @@ -1039,8 +1045,6 @@ namespace Barotrauma if (controlled == this) { - Lights.LightManager.ViewTarget = this; - CharacterHUD.Update(deltaTime,this); ControlLocalPlayer(deltaTime, cam); } diff --git a/Subsurface/Source/Characters/CharacterHUD.cs b/Subsurface/Source/Characters/CharacterHUD.cs index 153a75154..2f4f5fe5b 100644 --- a/Subsurface/Source/Characters/CharacterHUD.cs +++ b/Subsurface/Source/Characters/CharacterHUD.cs @@ -82,7 +82,7 @@ namespace Barotrauma DrawStatusIcons(spriteBatch, character); - if (!character.IsUnconscious) + if (!character.IsUnconscious && character.Stun <= 0.0f) { if (character.Inventory != null && !character.LockHands && character.Stun >= -0.1f) character.Inventory.DrawOwn(spriteBatch, Vector2.Zero); @@ -193,7 +193,10 @@ namespace Barotrauma suicideButton.OnClicked = (button, userData) => { - character.Kill(character.CauseOfDeath); + if (Character.Controlled != null) + { + Character.Controlled.Kill(Character.Controlled.CauseOfDeath); + } return true; }; } diff --git a/Subsurface/Source/Items/Components/Turret.cs b/Subsurface/Source/Items/Components/Turret.cs index 9bab38897..e017c9b99 100644 --- a/Subsurface/Source/Items/Components/Turret.cs +++ b/Subsurface/Source/Items/Components/Turret.cs @@ -67,6 +67,8 @@ namespace Barotrauma.Items.Components Vector2 vector = ToolBox.ParseToVector2(value); minRotation = MathHelper.ToRadians(vector.X); maxRotation = MathHelper.ToRadians(vector.Y); + + rotation = (minRotation + maxRotation) / 2; } } diff --git a/Subsurface/Source/Map/Explosion.cs b/Subsurface/Source/Map/Explosion.cs index ddd913e3b..e252a6d5f 100644 --- a/Subsurface/Source/Map/Explosion.cs +++ b/Subsurface/Source/Map/Explosion.cs @@ -128,7 +128,7 @@ namespace Barotrauma if (limb.WorldPosition == worldPosition) continue; - c.AddDamage(limb.SimPosition, DamageType.None, + c.AddDamage(limb.WorldPosition, DamageType.None, damage / c.AnimController.Limbs.Length * distFactor, 0.0f, stun * distFactor, false); if (force > 0.0f) { diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index 4fb0b83f2..7a167d71f 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -306,8 +306,8 @@ namespace Barotrauma.Networking { if (gameStarted && Screen.Selected == GameMain.GameScreen) { - //chatBox.Visible = Character.Controlled == null || !Character.Controlled.IsUnconscious; - chatMsgBox.Visible = Character.Controlled == null || !Character.Controlled.IsUnconscious; + chatMsgBox.Visible = Character.Controlled == null || + (!Character.Controlled.IsUnconscious && Character.Controlled.Stun >= 0.0f); inGameHUD.Update(deltaTime);